From owner-freebsd-stable Thu Aug 1 0:40:41 2002 Delivered-To: freebsd-stable@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 0827137B408; Thu, 1 Aug 2002 00:40:20 -0700 (PDT) Received: from cheer.mahoroba.org (flets19-007.kamome.or.jp [218.45.19.7]) by mx1.FreeBSD.org (Postfix) with ESMTP id B9AFE43E77; Thu, 1 Aug 2002 00:40:17 -0700 (PDT) (envelope-from ume@mahoroba.org) Received: from lyrics.mahoroba.org (IDENT:/An4sy1GhCoqu6RqkmbRmKIZVXa49NyWTkm2SccswYZnmBANNZnzGOnYKjr6QugK@[IPv6:2002:d37e:18cd::1]) (user=ume mech=CRAM-MD5 bits=0) by cheer.mahoroba.org (8.12.5/8.12.5) with ESMTP/inet6 id g717duB4033804 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Thu, 1 Aug 2002 16:40:08 +0900 (JST) (envelope-from ume@mahoroba.org) Date: Thu, 01 Aug 2002 16:39:45 +0900 Message-ID: From: Hajimu UMEMOTO To: des@FreeBSD.org Cc: current@FreeBSD.org, stable@FreeBSD.org Subject: sshd doesn't log hostname into utmp correctly User-Agent: Wanderlust/2.9.14 (Unchained Melody) SEMI/1.14.4 (Hosorogi) FLIM/1.14.3 (=?ISO-8859-4?Q?Unebigory=F2mae?=) APEL/10.3 Emacs/21.2 (i386--freebsd) MULE/5.0 (=?ISO-2022-JP?B?GyRCOC1MWhsoQg==?=) X-Operating-System: FreeBSD 5.0-CURRENT MIME-Version: 1.0 (generated by SEMI 1.14.4 - "Hosorogi") Content-Type: multipart/mixed; boundary="Multipart_Thu_Aug__1_16:39:45_2002-1" X-Virus-Scanned: by AMaViS-perl11-milter (http://amavis.org/) Sender: owner-freebsd-stable@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG --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