aboutsummaryrefslogtreecommitdiff
path: root/libbb
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2010-04-06 17:43:29 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2010-04-06 17:43:29 +0200
commitf6916dbed4233ef0e202d1b299cb5a2e9287a696 (patch)
treea761598c5f3d6e935239d8631e7f984c4cd490d6 /libbb
parentfcad7681f8a835f5c7b2093da505f46865a89d25 (diff)
downloadbusybox-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.c16
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
50len_and_sockaddr* FAST_FUNC get_sock_lsa(int fd) 50static 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
69len_and_sockaddr* FAST_FUNC get_sock_lsa(int fd)
70{
71 return get_lsa(fd, getsockname);
72}
73
74len_and_sockaddr* FAST_FUNC get_peer_lsa(int fd)
75{
76 return get_lsa(fd, getpeername);
77}
78
69void FAST_FUNC xconnect(int s, const struct sockaddr *s_addr, socklen_t addrlen) 79void 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) {