From nobody@FreeBSD.org  Tue Feb  4 04:47:02 2014
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115])
	(using TLSv1 with cipher ADH-AES256-SHA (256/256 bits))
	(No client certificate requested)
	by hub.freebsd.org (Postfix) with ESMTPS id 8AFD2657
	for <freebsd-gnats-submit@FreeBSD.org>; Tue,  4 Feb 2014 04:47:02 +0000 (UTC)
Received: from oldred.freebsd.org (oldred.freebsd.org [IPv6:2001:1900:2254:206a::50:4])
	(using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
	(No client certificate requested)
	by mx1.freebsd.org (Postfix) with ESMTPS id 65BFB1101
	for <freebsd-gnats-submit@FreeBSD.org>; Tue,  4 Feb 2014 04:47:02 +0000 (UTC)
Received: from oldred.freebsd.org ([127.0.1.6])
	by oldred.freebsd.org (8.14.5/8.14.7) with ESMTP id s144l1ic092212
	for <freebsd-gnats-submit@FreeBSD.org>; Tue, 4 Feb 2014 04:47:01 GMT
	(envelope-from nobody@oldred.freebsd.org)
Received: (from nobody@localhost)
	by oldred.freebsd.org (8.14.5/8.14.5/Submit) id s144l1dB092211;
	Tue, 4 Feb 2014 04:47:01 GMT
	(envelope-from nobody)
Message-Id: <201402040447.s144l1dB092211@oldred.freebsd.org>
Date: Tue, 4 Feb 2014 04:47:01 GMT
From: UEMURA Tetsuya <t_uemura@macome.co.jp>
To: freebsd-gnats-submit@FreeBSD.org
Subject: libexec/ftpd missing initialization in ftpd.c:sgetpwnam() .
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         186439
>Category:       bin
>Synopsis:       libexec/ftpd missing initialization in ftpd.c:sgetpwnam() .
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    brueffer
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Feb 04 04:50:00 UTC 2014
>Closed-Date:    Fri Feb 21 10:29:09 CET 2014
>Last-Modified:  Fri Feb 21 09:30:03 UTC 2014
>Originator:     UEMURA Tetsuya
>Release:        8.4-STABLE and 9.2-RELEASE
>Organization:
MACOME, Corp.
>Environment:
FreeBSD alix-depot.tesla.local 8.4-STABLE FreeBSD 8.4-STABLE #0 r257474: Fri Nov  1 12:33:06 JST 2013     root@alix-depot.tesla.local:/usr/obj/usr/src/sys/ALIX-DEPOT  i386
FreeBSD alix-depot 9.2-RELEASE FreeBSD 9.2-RELEASE #0 r255898: Fri Sep 27 03:52:52 UTC 2013     root@bake.isc.freebsd.org:/usr/obj/usr/src/sys/GENERIC  i386
>Description:
In libexec/ftpd/ftpd.c:sgetpwnam(), char members of struct passwd are remembered individually, except for pw_class.

Which triggers login_getclass: unknown class 'XXX' syslog message be printed occasionally on console, in my case.
>How-To-Repeat:
Syslog message is printed only once just after (re-)start of nscd.

1. Specify my GECOS in master.passwd relatively long. Ie., "UEMURA Tetsuya" , and I'd get unknown class 'uya' .
2. Enable ftpd via inetd.
3. Add "passwd: cache files" to nsswitch.conf and (re-)start nscd.
4. ftp localhost and login by myself. At this point, I should have a syslog message in console. Note that there's no more log until I restart nscd.
>Fix:
Save pw_class as well.

Patch attached with submission follows:

t_uemura@macome.co.jp
UEMURA Tetsuya
MACOME, Corp.
libexec/ftpd missing initialization in ftpd.c:sgetpwnam() ,
bin
sw-bug
8.4-STABLE
FreeBSD alix-depot.tesla.local 8.4-STABLE FreeBSD 8.4-STABLE #0 r257474: Fri Nov  1 12:33:06 JST 2013     root@alix-depot.tesla.local:/usr/obj/usr/src/sys/ALIX-DEPOT  i386
In libexec/ftpd/ftpd.c, char members of struct passwd are handled individually, except for pw_class.

Which triggers login_getclass: unknown class 'XXX' syslog message be printed occasionally on console, in my case. Note that the condition to get these messages is a bit complex though.
1. Specify my GECOS in master.passwd relatively long.
2. Add "passwd: cache files" to nsswitch.conf and (re-)start nscd.
3. Enable ftpd via inetd.
4. ftp to the host and login by myself.
5. Then I should have a syslog message in console. Note that there's no more log until restarting nscd.
root@alix-depot:/usr/src# diff -u3 libexec/ftpd/ftpd.c.orig libexec/ftpd/ftpd.c
--- libexec/ftpd/ftpd.c.orig    2012-10-31 09:52:33.000000000 +0900
+++ libexec/ftpd/ftpd.c 2014-02-04 11:36:02.000000000 +0900
@@ -967,6 +967,7 @@
        if (save.pw_name) {
                free(save.pw_name);
                free(save.pw_passwd);
+               free(save.pw_class);
                free(save.pw_gecos);
                free(save.pw_dir);
                free(save.pw_shell);
@@ -974,6 +975,7 @@
        save = *p;
        save.pw_name = sgetsave(p->pw_name);
        save.pw_passwd = sgetsave(p->pw_passwd);
+       save.pw_class = sgetsave(p->pw_class);
        save.pw_gecos = sgetsave(p->pw_gecos);
        save.pw_dir = sgetsave(p->pw_dir);
        save.pw_shell = sgetsave(p->pw_shell);


>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->patched 
State-Changed-By: brueffer 
State-Changed-When: Fri Feb 14 13:02:19 CET 2014 
State-Changed-Why:  
Nice analysis, patch committed.  Thanks! 


Responsible-Changed-From-To: freebsd-bugs->brueffer 
Responsible-Changed-By: brueffer 
Responsible-Changed-When: Fri Feb 14 13:02:19 CET 2014 
Responsible-Changed-Why:  
MFC reminder. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=186439 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/186439: commit references a PR
Date: Fri, 14 Feb 2014 12:01:59 +0000 (UTC)

 Author: brueffer
 Date: Fri Feb 14 12:01:52 2014
 New Revision: 261885
 URL: http://svnweb.freebsd.org/changeset/base/261885
 
 Log:
   In sgetpwnam(), save and free pw_class like all other char members
   of struct passwd.  This fixes spurious "login_getclass: unknown class"
   errors.
   
   PR:		186439
   Submitted by:	UEMURA Tetsuya <t_uemura at macome.co.jp>
   MFC after:	1 week
 
 Modified:
   head/libexec/ftpd/ftpd.c
 
 Modified: head/libexec/ftpd/ftpd.c
 ==============================================================================
 --- head/libexec/ftpd/ftpd.c	Fri Feb 14 11:18:15 2014	(r261884)
 +++ head/libexec/ftpd/ftpd.c	Fri Feb 14 12:01:52 2014	(r261885)
 @@ -965,6 +965,7 @@ sgetpwnam(char *name)
  	if (save.pw_name) {
  		free(save.pw_name);
  		free(save.pw_passwd);
 +		free(save.pw_class);
  		free(save.pw_gecos);
  		free(save.pw_dir);
  		free(save.pw_shell);
 @@ -972,6 +973,7 @@ sgetpwnam(char *name)
  	save = *p;
  	save.pw_name = sgetsave(p->pw_name);
  	save.pw_passwd = sgetsave(p->pw_passwd);
 +	save.pw_class = sgetsave(p->pw_class);
  	save.pw_gecos = sgetsave(p->pw_gecos);
  	save.pw_dir = sgetsave(p->pw_dir);
  	save.pw_shell = sgetsave(p->pw_shell);
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/186439: commit references a PR
Date: Fri, 21 Feb 2014 09:19:24 +0000 (UTC)

 Author: brueffer
 Date: Fri Feb 21 09:19:16 2014
 New Revision: 262284
 URL: http://svnweb.freebsd.org/changeset/base/262284
 
 Log:
   MFC: r261885
   
   In sgetpwnam(), save and free pw_class like all other char members
   of struct passwd.  This fixes spurious "login_getclass: unknown class"
   errors.
   
   PR:		186439
   Submitted by:	UEMURA Tetsuya <t_uemura at macome.co.jp>
 
 Modified:
   stable/10/libexec/ftpd/ftpd.c
 Directory Properties:
   stable/10/   (props changed)
 
 Modified: stable/10/libexec/ftpd/ftpd.c
 ==============================================================================
 --- stable/10/libexec/ftpd/ftpd.c	Fri Feb 21 07:31:24 2014	(r262283)
 +++ stable/10/libexec/ftpd/ftpd.c	Fri Feb 21 09:19:16 2014	(r262284)
 @@ -965,6 +965,7 @@ sgetpwnam(char *name)
  	if (save.pw_name) {
  		free(save.pw_name);
  		free(save.pw_passwd);
 +		free(save.pw_class);
  		free(save.pw_gecos);
  		free(save.pw_dir);
  		free(save.pw_shell);
 @@ -972,6 +973,7 @@ sgetpwnam(char *name)
  	save = *p;
  	save.pw_name = sgetsave(p->pw_name);
  	save.pw_passwd = sgetsave(p->pw_passwd);
 +	save.pw_class = sgetsave(p->pw_class);
  	save.pw_gecos = sgetsave(p->pw_gecos);
  	save.pw_dir = sgetsave(p->pw_dir);
  	save.pw_shell = sgetsave(p->pw_shell);
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: patched->closed 
State-Changed-By: brueffer 
State-Changed-When: Fri Feb 21 10:28:39 CET 2014 
State-Changed-Why:  
Merge to stable branches done.  Thanks! 

http://www.freebsd.org/cgi/query-pr.cgi?pr=186439 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/186439: commit references a PR
Date: Fri, 21 Feb 2014 09:22:50 +0000 (UTC)

 Author: brueffer
 Date: Fri Feb 21 09:22:37 2014
 New Revision: 262286
 URL: http://svnweb.freebsd.org/changeset/base/262286
 
 Log:
   MFC: r261885
   
   In sgetpwnam(), save and free pw_class like all other char members
   of struct passwd.  This fixes spurious "login_getclass: unknown class"
   errors.
   
   PR:		186439
   Submitted by:	UEMURA Tetsuya <t_uemura at macome.co.jp>
 
 Modified:
   stable/8/libexec/ftpd/ftpd.c
 Directory Properties:
   stable/8/libexec/ftpd/   (props changed)
 
 Modified: stable/8/libexec/ftpd/ftpd.c
 ==============================================================================
 --- stable/8/libexec/ftpd/ftpd.c	Fri Feb 21 09:21:02 2014	(r262285)
 +++ stable/8/libexec/ftpd/ftpd.c	Fri Feb 21 09:22:37 2014	(r262286)
 @@ -967,6 +967,7 @@ sgetpwnam(char *name)
  	if (save.pw_name) {
  		free(save.pw_name);
  		free(save.pw_passwd);
 +		free(save.pw_class);
  		free(save.pw_gecos);
  		free(save.pw_dir);
  		free(save.pw_shell);
 @@ -974,6 +975,7 @@ sgetpwnam(char *name)
  	save = *p;
  	save.pw_name = sgetsave(p->pw_name);
  	save.pw_passwd = sgetsave(p->pw_passwd);
 +	save.pw_class = sgetsave(p->pw_class);
  	save.pw_gecos = sgetsave(p->pw_gecos);
  	save.pw_dir = sgetsave(p->pw_dir);
  	save.pw_shell = sgetsave(p->pw_shell);
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/186439: commit references a PR
Date: Fri, 21 Feb 2014 09:21:10 +0000 (UTC)

 Author: brueffer
 Date: Fri Feb 21 09:21:02 2014
 New Revision: 262285
 URL: http://svnweb.freebsd.org/changeset/base/262285
 
 Log:
   MFC: r261885
   
   In sgetpwnam(), save and free pw_class like all other char members
   of struct passwd.  This fixes spurious "login_getclass: unknown class"
   errors.
   
   PR:		186439
   Submitted by:	UEMURA Tetsuya <t_uemura at macome.co.jp>
 
 Modified:
   stable/9/libexec/ftpd/ftpd.c
 Directory Properties:
   stable/9/libexec/ftpd/   (props changed)
 
 Modified: stable/9/libexec/ftpd/ftpd.c
 ==============================================================================
 --- stable/9/libexec/ftpd/ftpd.c	Fri Feb 21 09:19:16 2014	(r262284)
 +++ stable/9/libexec/ftpd/ftpd.c	Fri Feb 21 09:21:02 2014	(r262285)
 @@ -965,6 +965,7 @@ sgetpwnam(char *name)
  	if (save.pw_name) {
  		free(save.pw_name);
  		free(save.pw_passwd);
 +		free(save.pw_class);
  		free(save.pw_gecos);
  		free(save.pw_dir);
  		free(save.pw_shell);
 @@ -972,6 +973,7 @@ sgetpwnam(char *name)
  	save = *p;
  	save.pw_name = sgetsave(p->pw_name);
  	save.pw_passwd = sgetsave(p->pw_passwd);
 +	save.pw_class = sgetsave(p->pw_class);
  	save.pw_gecos = sgetsave(p->pw_gecos);
  	save.pw_dir = sgetsave(p->pw_dir);
  	save.pw_shell = sgetsave(p->pw_shell);
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
>Unformatted:
