diff options
author | Denys Vlasenko | 2010-04-06 17:43:29 +0200 |
---|---|---|
committer | Denys Vlasenko | 2010-04-06 17:43:29 +0200 |
commit | f6916dbed4233ef0e202d1b299cb5a2e9287a696 (patch) | |
tree | a761598c5f3d6e935239d8631e7f984c4cd490d6 /networking | |
parent | fcad7681f8a835f5c7b2093da505f46865a89d25 (diff) | |
download | busybox-f6916dbed4233ef0e202d1b299cb5a2e9287a696.zip busybox-f6916dbed4233ef0e202d1b299cb5a2e9287a696.tar.gz |
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 'networking')
-rw-r--r-- | networking/ftpd.c | 15 | ||||
-rw-r--r-- | networking/telnetd.c | 21 |
2 files changed, 15 insertions, 21 deletions
diff --git a/networking/ftpd.c b/networking/ftpd.c index 375cc0c..9d43ea3 100644 --- a/networking/ftpd.c +++ b/networking/ftpd.c @@ -461,21 +461,6 @@ handle_epsv(void) free(response); } -/* libbb candidate */ -static -len_and_sockaddr* get_peer_lsa(int fd) -{ - len_and_sockaddr *lsa; - socklen_t len = 0; - - if (getpeername(fd, NULL, &len) != 0) - return NULL; - lsa = xzalloc(LSA_LEN_SIZE + len); - lsa->len = len; - getpeername(fd, &lsa->u.sa, &lsa->len); - return lsa; -} - static void handle_port(void) { diff --git a/networking/telnetd.c b/networking/telnetd.c index b3e66eb..a8c86b6 100644 --- a/networking/telnetd.c +++ b/networking/telnetd.c @@ -226,6 +226,9 @@ make_new_session( IF_FEATURE_TELNETD_STANDALONE(int sock) IF_NOT_FEATURE_TELNETD_STANDALONE(void) ) { +#if !ENABLE_FEATURE_TELNETD_STANDALONE + enum { sock = 0 ); +#endif const char *login_argv[2]; struct termios termbuf; int fd, pid; @@ -243,9 +246,9 @@ make_new_session( ndelay_on(fd); close_on_exec_on(fd); -#if ENABLE_FEATURE_TELNETD_STANDALONE /* SO_KEEPALIVE by popular demand */ setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &const_int_1, sizeof(const_int_1)); +#if ENABLE_FEATURE_TELNETD_STANDALONE ts->sockfd_read = sock; ndelay_on(sock); if (sock == 0) { /* We are called with fd 0 - we are in inetd mode */ @@ -256,8 +259,6 @@ make_new_session( if (sock > G.maxfd) G.maxfd = sock; #else - /* SO_KEEPALIVE by popular demand */ - setsockopt(0, SOL_SOCKET, SO_KEEPALIVE, &const_int_1, sizeof(const_int_1)); /* ts->sockfd_read = 0; - done by xzalloc */ ts->sockfd_write = 1; ndelay_on(0); @@ -313,6 +314,17 @@ make_new_session( /* Restore default signal handling ASAP */ bb_signals((1 << SIGCHLD) + (1 << SIGPIPE), SIG_DFL); + if (ENABLE_FEATURE_UTMP) { + len_and_sockaddr *lsa = get_peer_lsa(sock); + char *hostname = NULL; + if (lsa) { + hostname = xmalloc_sockaddr2dotted(&lsa->u.sa); + free(lsa); + } + write_new_utmp(pid, LOGIN_PROCESS, tty_name, /*username:*/ "LOGIN", hostname); + free(hostname); + } + /* Make new session and process group */ setsid(); @@ -326,9 +338,6 @@ make_new_session( pid = getpid(); tcsetpgrp(0, pid); /* switch this tty's process group to us */ -//TODO: fetch remote addr via getpeername (see ftpd.c) - write_new_utmp(pid, LOGIN_PROCESS, tty_name, /*username:*/ "LOGIN", /*hostname:*/ NULL); - /* The pseudo-terminal allocated to the client is configured to operate * in cooked mode, and with XTABS CRMOD enabled (see tty(4)) */ tcgetattr(0, &termbuf); |