diff options
author | Michael Adam <obnox@samba.org> | 2008-03-13 23:02:58 +0100 |
---|---|---|
committer | Michael Adam <obnox@samba.org> | 2008-03-13 23:08:25 +0100 |
commit | 21ea0edec8b70b87149a3e7a358d739f267b7c54 (patch) | |
tree | e4f389c621a23e6412fa84247d47076c17e26403 /source3 | |
parent | fd62e5688b4ced6568da1111f5a97bff0a54932e (diff) | |
download | samba-21ea0edec8b70b87149a3e7a358d739f267b7c54.tar.gz samba-21ea0edec8b70b87149a3e7a358d739f267b7c54.tar.bz2 samba-21ea0edec8b70b87149a3e7a358d739f267b7c54.zip |
Fix %I macro expansion for IPv4 mapped IPv6 addresses.
On some systems (linux e.g.), when listening on ipv6 and ipv4,
addresses of ipv4 clients are printed as mapped ipv4 addresses
by getnameinfo (e.g. ::ffff:127.0.0.1). This re-establishes
the original behaviour of %I to expand to the plain ipv4 address
for an ipv4 client.
Michael
(This used to be commit 0abc8863f87fe5d2473492797c010784cb086008)
Diffstat (limited to 'source3')
-rw-r--r-- | source3/lib/substitute.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/source3/lib/substitute.c b/source3/lib/substitute.c index 59b54c4dff..ce97a36188 100644 --- a/source3/lib/substitute.c +++ b/source3/lib/substitute.c @@ -597,10 +597,16 @@ char *alloc_sub_basic(const char *smb_name, const char *domain_name, } a_string = realloc_string_sub(a_string, "%D", r); break; - case 'I' : + case 'I' : { + int offset = 0; + client_addr(get_client_fd(), addr, sizeof(addr)); + if (strnequal(addr,"::ffff:",7)) { + offset = 7; + } a_string = realloc_string_sub(a_string, "%I", - client_addr(get_client_fd(),addr, sizeof(addr))); + addr + offset); break; + } case 'i': a_string = realloc_string_sub( a_string, "%i", client_socket_addr(get_client_fd(), addr, sizeof(addr)) ); |