diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2010-04-06 17:43:29 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2010-04-06 17:43:29 +0200 |
commit | f6916dbed4233ef0e202d1b299cb5a2e9287a696 (patch) | |
tree | a761598c5f3d6e935239d8631e7f984c4cd490d6 /libbb | |
parent | fcad7681f8a835f5c7b2093da505f46865a89d25 (diff) | |
download | busybox-w32-f6916dbed4233ef0e202d1b299cb5a2e9287a696.tar.gz busybox-w32-f6916dbed4233ef0e202d1b299cb5a2e9287a696.tar.bz2 busybox-w32-f6916dbed4233ef0e202d1b299cb5a2e9287a696.zip |
telnetd: fill hostname field in utmp/wtmp records
function old new delta
get_lsa - 109 +109
make_new_session 438 504 +66
get_peer_lsa - 10 +10
ftpd_main 2340 2267 -73
get_sock_lsa 101 10 -91
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 1/2 up/down: 185/-164) Total: 21 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'libbb')
-rw-r--r-- | libbb/xconnect.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/libbb/xconnect.c b/libbb/xconnect.c index d8c8d02d5..c3ee633e4 100644 --- a/libbb/xconnect.c +++ b/libbb/xconnect.c | |||
@@ -47,25 +47,35 @@ int FAST_FUNC setsockopt_bindtodevice(int fd UNUSED_PARAM, | |||
47 | } | 47 | } |
48 | #endif | 48 | #endif |
49 | 49 | ||
50 | len_and_sockaddr* FAST_FUNC get_sock_lsa(int fd) | 50 | static len_and_sockaddr* get_lsa(int fd, int (*get_name)(int fd, struct sockaddr *addr, socklen_t *addrlen)) |
51 | { | 51 | { |
52 | len_and_sockaddr lsa; | 52 | len_and_sockaddr lsa; |
53 | len_and_sockaddr *lsa_ptr; | 53 | len_and_sockaddr *lsa_ptr; |
54 | 54 | ||
55 | lsa.len = LSA_SIZEOF_SA; | 55 | lsa.len = LSA_SIZEOF_SA; |
56 | if (getsockname(fd, &lsa.u.sa, &lsa.len) != 0) | 56 | if (get_name(fd, &lsa.u.sa, &lsa.len) != 0) |
57 | return NULL; | 57 | return NULL; |
58 | 58 | ||
59 | lsa_ptr = xzalloc(LSA_LEN_SIZE + lsa.len); | 59 | lsa_ptr = xzalloc(LSA_LEN_SIZE + lsa.len); |
60 | if (lsa.len > LSA_SIZEOF_SA) { /* rarely (if ever) happens */ | 60 | if (lsa.len > LSA_SIZEOF_SA) { /* rarely (if ever) happens */ |
61 | lsa_ptr->len = lsa.len; | 61 | lsa_ptr->len = lsa.len; |
62 | getsockname(fd, &lsa_ptr->u.sa, &lsa_ptr->len); | 62 | get_name(fd, &lsa_ptr->u.sa, &lsa_ptr->len); |
63 | } else { | 63 | } else { |
64 | memcpy(lsa_ptr, &lsa, LSA_LEN_SIZE + lsa.len); | 64 | memcpy(lsa_ptr, &lsa, LSA_LEN_SIZE + lsa.len); |
65 | } | 65 | } |
66 | return lsa_ptr; | 66 | return lsa_ptr; |
67 | } | 67 | } |
68 | 68 | ||
69 | len_and_sockaddr* FAST_FUNC get_sock_lsa(int fd) | ||
70 | { | ||
71 | return get_lsa(fd, getsockname); | ||
72 | } | ||
73 | |||
74 | len_and_sockaddr* FAST_FUNC get_peer_lsa(int fd) | ||
75 | { | ||
76 | return get_lsa(fd, getpeername); | ||
77 | } | ||
78 | |||
69 | void FAST_FUNC xconnect(int s, const struct sockaddr *s_addr, socklen_t addrlen) | 79 | void FAST_FUNC xconnect(int s, const struct sockaddr *s_addr, socklen_t addrlen) |
70 | { | 80 | { |
71 | if (connect(s, s_addr, addrlen) < 0) { | 81 | if (connect(s, s_addr, addrlen) < 0) { |