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>
This commit is contained in:
Denys Vlasenko
2010-04-06 17:43:29 +02:00
parent fcad7681f8
commit f6916dbed4
4 changed files with 30 additions and 24 deletions

View File

@@ -47,25 +47,35 @@ int FAST_FUNC setsockopt_bindtodevice(int fd UNUSED_PARAM,
}
#endif
len_and_sockaddr* FAST_FUNC get_sock_lsa(int fd)
static len_and_sockaddr* get_lsa(int fd, int (*get_name)(int fd, struct sockaddr *addr, socklen_t *addrlen))
{
len_and_sockaddr lsa;
len_and_sockaddr *lsa_ptr;
lsa.len = LSA_SIZEOF_SA;
if (getsockname(fd, &lsa.u.sa, &lsa.len) != 0)
if (get_name(fd, &lsa.u.sa, &lsa.len) != 0)
return NULL;
lsa_ptr = xzalloc(LSA_LEN_SIZE + lsa.len);
if (lsa.len > LSA_SIZEOF_SA) { /* rarely (if ever) happens */
lsa_ptr->len = lsa.len;
getsockname(fd, &lsa_ptr->u.sa, &lsa_ptr->len);
get_name(fd, &lsa_ptr->u.sa, &lsa_ptr->len);
} else {
memcpy(lsa_ptr, &lsa, LSA_LEN_SIZE + lsa.len);
}
return lsa_ptr;
}
len_and_sockaddr* FAST_FUNC get_sock_lsa(int fd)
{
return get_lsa(fd, getsockname);
}
len_and_sockaddr* FAST_FUNC get_peer_lsa(int fd)
{
return get_lsa(fd, getpeername);
}
void FAST_FUNC xconnect(int s, const struct sockaddr *s_addr, socklen_t addrlen)
{
if (connect(s, s_addr, addrlen) < 0) {