<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2652.35">
<TITLE>RE: locked account accessable via pubkey auth</TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2>HP-UX 11.00</FONT>
<BR><FONT SIZE=2>from: man passwd</FONT>
<BR><FONT SIZE=2>-l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Lock user account.</FONT>
</P>

<P><FONT SIZE=2>from: man getspent</FONT>
<BR><FONT SIZE=2>getspent(3C)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getspent(3C)</FONT>
<BR><FONT SIZE=2>&nbsp;</FONT>
<BR><FONT SIZE=2>&nbsp;NAME</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getspent, getspnam, setspent, endspent - access secure password</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; entries, for trusted systems only.</FONT>
<BR><FONT SIZE=2>&nbsp;</FONT>
<BR><FONT SIZE=2>&nbsp;SYNOPSIS</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include &lt;shadow.h&gt;</FONT>
<BR><FONT SIZE=2>&nbsp;</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct spwd * getspent (void);</FONT>
<BR><FONT SIZE=2>&nbsp;</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct spwd * getspnam (const char *name);</FONT>
<BR><FONT SIZE=2>&nbsp;</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void setspent (void);</FONT>
<BR><FONT SIZE=2>&nbsp;</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void endspent (void);</FONT>
<BR><FONT SIZE=2>&nbsp;</FONT>
<BR><FONT SIZE=2>&nbsp;DESCRIPTION</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The routines getspent() and getspnam() return a pointer to the next</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; secured password entry. Each entry is a spwd structure, declared in</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the shadow.h header file with the following members:</FONT>
<BR><FONT SIZE=2>&nbsp;</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char&nbsp; *sp_namp;&nbsp; /* the user's login name */</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char&nbsp; *sp_pwdp;&nbsp; /* the encrypted password for the user */</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long&nbsp; sp_lstchg; /* # of days from 1/1/70 when passwd was last modified */</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long&nbsp; sp_min;&nbsp;&nbsp;&nbsp; /* min # of days allowed between password changes */</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long&nbsp; sp_max;&nbsp;&nbsp;&nbsp; /* max # of days allowed between password changes */</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long&nbsp; sp_warn;&nbsp;&nbsp; /* # of days before password expires and warning issued*/</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long&nbsp; sp_inact;&nbsp; /* # of days between account inactive and disabled */</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long&nbsp; sp_expire; /* # of days from 1/1/70 when account is locked */</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned long&nbsp;&nbsp; sp_flag;/* currently unused */</FONT>
<BR><FONT SIZE=2>&nbsp;</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The getspent() routine returns a pointer to the first spwd structure</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when first called. Subsequent calls return pointers to successive spwd</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; structures. Repeated calls to getspent() can be used to search all</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; entries in the protected password database. The getspnam () routine</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; searches password entries from beginning to end until a login name</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; matching name is found, and returns a pointer to that entry.</FONT>
<BR><FONT SIZE=2>&nbsp;</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If the fields corresponding to sp_min, sp_max, sp_lstchg, sp_warn,</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sp_inact, sp_expire, or sp_flag are not specified in the entry, they</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default to -1. If an end-of-file or an error is encountered in reading</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; or a format error is detected, these functions return a null pointer</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and; for an error, errno is set to EINVAL.</FONT>
<BR><FONT SIZE=2>&nbsp;</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The setspent() routine is used to reset access to the secured password</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; entries. After setspent() is called, the subsequent call to getspent()</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; returns the first secured password entry. This mechanism is used to</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; allow repeated searches of the secured password entries. The</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; endspent() routine is used to indicate that processing of secured</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password entries is complete.</FONT>
<BR><FONT SIZE=2>&nbsp;</FONT>
<BR><FONT SIZE=2>&nbsp;Hewlett-Packard Company&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - 1 -&nbsp; HP-UX Release 11.00: October 1997</FONT>
<BR><FONT SIZE=2>&nbsp;</FONT>
<BR><FONT SIZE=2>&nbsp;getspent(3C)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getspent(3C)</FONT>
<BR><FONT SIZE=2>&nbsp;</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getspent() is only supported on trusted systems.</FONT>
<BR><FONT SIZE=2>&nbsp;</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The secured password facility is implemented without the use of the</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /etc/shadow file.&nbsp; getspent(), getspnam(), setspent(), and endspent()</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; read from the trusted system's protected password database</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (/tcb/files/auth/*/*) and not /etc/shadow.&nbsp; The file /etc/shadow is</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; not used in any way by the HP-UX login facility.</FONT>
<BR><FONT SIZE=2>&nbsp;</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; These routines return a null pointer and sets ERRNO to ENOENT if the</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; system has not been converted to trusted system.&nbsp; In all other cases,</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the return value is set similarly to getprpwent().&nbsp; See getprpwent(3)</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for more information.</FONT>
<BR><FONT SIZE=2>&nbsp;</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Programs using these routines must be compiled with -lsec.</FONT>
<BR><FONT SIZE=2>&nbsp;</FONT>
<BR><FONT SIZE=2>&nbsp;FILES</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /etc/passwd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System Password file.</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /tcb/files/auth/*/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Protected password database, for trusted</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; systems.</FONT>
<BR><FONT SIZE=2>&nbsp;</FONT>
<BR><FONT SIZE=2>&nbsp;SEE ALSO</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getpwent(3C), getprpwent(3), passwd(4).</FONT>
<BR><FONT SIZE=2>&nbsp;</FONT>
<BR><FONT SIZE=2>&nbsp;DIAGNOSTICS</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getspent(), getspnam(), and fgetspent() return a null pointer on EOF</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; or error.</FONT>
<BR><FONT SIZE=2>&nbsp;</FONT>
<BR><FONT SIZE=2>&nbsp;STANDARDS CONFORMANCE</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getspent : SVID3</FONT>
</P>

<P><FONT SIZE=2>Thanks,</FONT>
<BR><FONT SIZE=2>--Jason Lacoss-Arnold, Systems Technical Specialist</FONT>
<BR><FONT SIZE=2>Technical Services - Unix Arch.</FONT>
<BR><FONT SIZE=2>314-955-8501</FONT>
</P>
<BR>

<P><FONT SIZE=2>-----Original Message-----</FONT>
<BR><FONT SIZE=2>From: Frank Cusack [<A HREF="mailto:fcusack@fcusack.com">mailto:fcusack@fcusack.com</A>]</FONT>
<BR><FONT SIZE=2>Sent: Wednesday, January 30, 2002 18:01</FONT>
<BR><FONT SIZE=2>To: Damien Miller</FONT>
<BR><FONT SIZE=2>Cc: openssh-unix-dev@mindrot.org; Dost, Alexander</FONT>
<BR><FONT SIZE=2>Subject: Re: locked account accessable via pubkey auth</FONT>
</P>
<BR>

<P><FONT SIZE=2>On Wed, Jan 30, 2002 at 03:39:38PM +1100, Damien Miller wrote:</FONT>
<BR><FONT SIZE=2>&gt; On Tue, 29 Jan 2002, Frank Cusack wrote:</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; &gt; On Tue, Jan 29, 2002 at 08:48:51AM -0600, Albert Chin wrote:</FONT>
<BR><FONT SIZE=2>&gt; &gt; &gt; On Tue, Jan 29, 2002 at 12:56:55PM +0100, Dost, Alexander wrote:</FONT>
<BR><FONT SIZE=2>&gt; &gt; &gt; &gt; maybe this is a silly question ;-) But why is it possible to login on a</FONT>
<BR><FONT SIZE=2>&gt; &gt; &gt; &gt; machine with a locked account (passwd -l ) via pubkey-authentication</FONT>
<BR><FONT SIZE=2>&gt; &gt; &gt; &gt; (authorized_keys) ?</FONT>
<BR><FONT SIZE=2>&gt; &gt; </FONT>
<BR><FONT SIZE=2>&gt; &gt; huh..&nbsp; This is definitely a bug; probably in the Solaris PAM libs.&nbsp; I can</FONT>
<BR><FONT SIZE=2>&gt; &gt; look into this, unfortunately not within a day or so.</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; I don't think it is a bug even. Having accounts with locked passwords, but</FONT>
<BR><FONT SIZE=2>&gt; still accessible via pubkey auth is a very useful thing.</FONT>
</P>

<P><FONT SIZE=2>I agree, that is useful, but whether or not it's a bug depends on the meaning</FONT>
<BR><FONT SIZE=2>of 'passwd -l'.&nbsp; SUSv2 does not define the passwd command, so I guess this</FONT>
<BR><FONT SIZE=2>is implementation-dependent.</FONT>
</P>

<P><FONT SIZE=2>On Solaris 8, passwd(8) says -l &quot;Locks password entry for _name_&quot;.&nbsp; It does</FONT>
<BR><FONT SIZE=2>not say that it locks the *account*.&nbsp; So this would seem to be consistent</FONT>
<BR><FONT SIZE=2>with pubkey auth still being allowed.&nbsp; Even so, I would tend to think it</FONT>
<BR><FONT SIZE=2>should lock the &quot;account&quot;.&nbsp; I don't know if this list is a good place for</FONT>
<BR><FONT SIZE=2>it, but personally I would be interested in hearing arguments for either.</FONT>
</P>

<P><FONT SIZE=2>Can someone report on what the HP-UX man page says?&nbsp; I'd also be interested</FONT>
<BR><FONT SIZE=2>to see the man page for HP-UX getspent().&nbsp; (Another email in this thread</FONT>
<BR><FONT SIZE=2>says HP-UX prevents pubkey auth after 'passwd -l'.)</FONT>
</P>

<P><FONT SIZE=2>/fc</FONT>
</P>

<P><FONT SIZE=2>_______________________________________________</FONT>
<BR><FONT SIZE=2>openssh-unix-dev@mindrot.org mailing list</FONT>
<BR><FONT SIZE=2><A HREF="http://www.mindrot.org/mailman/listinfo/openssh-unix-dev" TARGET="_blank">http://www.mindrot.org/mailman/listinfo/openssh-unix-dev</A></FONT>
</P>

<CODE><FONT SIZE=3><BR>
<BR>
***************************************************************************************<BR>
WARNING:  All e-mail sent to and from this address will be received or<BR>
otherwise recorded by the A.G. Edwards corporate e-mail system and is<BR>
subject to archival, monitoring or review by, and/or disclosure to,<BR>
someone other than the recipient.<BR>
***************************************************************************************<BR>
</FONT></CODE></BODY>
</HTML>