Date: Thu, 01 Aug 2002 16:39:45 +0900 From: Hajimu UMEMOTO <ume@mahoroba.org> To: des@FreeBSD.org Cc: current@FreeBSD.org, stable@FreeBSD.org Subject: sshd doesn't log hostname into utmp correctly Message-ID: <yge3ctzjada.wl@lyrics.mahoroba.org>
next in thread | raw e-mail | index | archive | help
--Multipart_Thu_Aug__1_16:39:45_2002-1 Content-Type: text/plain; charset=US-ASCII Hi, Current sshd doesn't handle actual size of struct sockaddr correctly, and does copy it as long as just size of struct sockaddr. So, sshd deesn't log hostname into utmp correctly. Here is a proposed patch to fix this problem. Please review it. Sincerely, --Multipart_Thu_Aug__1_16:39:45_2002-1 Content-Type: text/x-patch; type=patch; charset=US-ASCII Content-Disposition: attachment; filename="sshd-loghost.diff" Content-Transfer-Encoding: 7bit Index: crypto/openssh/monitor.c diff -u crypto/openssh/monitor.c.orig crypto/openssh/monitor.c --- crypto/openssh/monitor.c.orig Thu Jul 11 08:04:07 2002 +++ crypto/openssh/monitor.c Thu Aug 1 15:21:58 2002 @@ -1113,8 +1113,8 @@ * the address be 0.0.0.0. */ memset(&from, 0, sizeof(from)); + fromlen = sizeof(from); if (packet_connection_is_on_socket()) { - fromlen = sizeof(from); if (getpeername(packet_get_connection_in(), (struct sockaddr *) & from, &fromlen) < 0) { debug("getpeername: %.100s", strerror(errno)); @@ -1124,7 +1124,7 @@ /* Record that there was a login on that tty from the remote host. */ record_login(s->pid, s->tty, pw->pw_name, pw->pw_uid, get_remote_name_or_ip(utmp_len, options.verify_reverse_mapping), - (struct sockaddr *)&from); + (struct sockaddr *)&from, fromlen); } static void Index: crypto/openssh/session.c diff -u crypto/openssh/session.c.orig crypto/openssh/session.c --- crypto/openssh/session.c.orig Sun Jul 28 00:43:29 2002 +++ crypto/openssh/session.c Thu Aug 1 15:22:21 2002 @@ -721,8 +721,8 @@ * the address be 0.0.0.0. */ memset(&from, 0, sizeof(from)); + fromlen = sizeof(from); if (packet_connection_is_on_socket()) { - fromlen = sizeof(from); if (getpeername(packet_get_connection_in(), (struct sockaddr *) & from, &fromlen) < 0) { debug("getpeername: %.100s", strerror(errno)); @@ -735,7 +735,7 @@ record_login(pid, s->tty, pw->pw_name, pw->pw_uid, get_remote_name_or_ip(utmp_len, options.verify_reverse_mapping), - (struct sockaddr *)&from); + (struct sockaddr *)&from, fromlen); #ifdef USE_PAM /* Index: crypto/openssh/sshlogin.c diff -u crypto/openssh/sshlogin.c.orig crypto/openssh/sshlogin.c --- crypto/openssh/sshlogin.c.orig Sat Jul 13 12:53:57 2002 +++ crypto/openssh/sshlogin.c Thu Aug 1 15:24:36 2002 @@ -66,12 +66,12 @@ */ void record_login(pid_t pid, const char *ttyname, const char *user, uid_t uid, - const char *host, struct sockaddr * addr) + const char *host, struct sockaddr * addr, socklen_t addrlen) { struct logininfo *li; li = login_alloc_entry(pid, user, host, ttyname); - login_set_addr(li, addr, sizeof(struct sockaddr)); + login_set_addr(li, addr, addrlen); login_login(li); login_free_entry(li); } Index: crypto/openssh/sshlogin.h diff -u crypto/openssh/sshlogin.h.orig crypto/openssh/sshlogin.h --- crypto/openssh/sshlogin.h.orig Sat Jul 13 12:53:57 2002 +++ crypto/openssh/sshlogin.h Thu Aug 1 15:26:40 2002 @@ -16,7 +16,7 @@ void record_login(pid_t, const char *, const char *, uid_t, - const char *, struct sockaddr *); + const char *, struct sockaddr *, socklen_t); void record_logout(pid_t, const char *, const char *); u_long get_last_login_time(uid_t, const char *, char *, u_int); --Multipart_Thu_Aug__1_16:39:45_2002-1 Content-Type: text/plain; charset=US-ASCII -- Hajimu UMEMOTO @ Internet Mutual Aid Society Yokohama, Japan ume@mahoroba.org ume@bisd.hitachi.co.jp ume@{,jp.}FreeBSD.org http://www.imasy.org/~ume/ --Multipart_Thu_Aug__1_16:39:45_2002-1-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?yge3ctzjada.wl>