Bug#317012: [Pkg-shadow-devel] Bug#317012: fixed in shadow 1:4.0.3-37

Christian Perrier bubulle at debian.org
Wed Sep 14 18:56:40 UTC 2005


> > > On Sun, Jul 10, 2005 at 03:49:26PM -0400, Christian Perrier wrote:
> > > >    * Upstream bugs not fixed in upstream releases or CVS:
> > > >      - 443_chage_exit_values
> > > >        chage: change the exit value to 3 when chage fails because the system is
> > > >        not shadow enabled.
> > > >        Closes: #317012
> > > 
> > > That doesn't seem to work reliably, see #328090.
> > 
> > root at mykerinos:~# shadowconfig off
> > Shadow passwords are now off.
> > root at mykerinos:~# chage spongebob
> > chage: the shadow password file is not present
> > root at mykerinos:~# echo $?
> > 3
> > 
> > What else could be done?
> 
> Maybe it would be an idea to debug with the bug reporter of #328090
> why his chage is returning 1 after saying "can't open shadow password
> file", which is a differently worded error message from the one you
> have cited. Maybe there is another code path in chage which still
> returns 1?


Well, Petter, could you give us details about the environment where
you got the failure ?

In passwd 4.0.3-39, chage exist with an errorlevel of 3 as soon as
/etc/shadow does not exist.

What you reported comes from a chunk of code which comes *AFTER* the
check of existence for /etc/shadow

-----------------------------------------------------
#define E_SUCCESS	0
#define E_NOPERM	1	/* permission denied */
#define E_NOT_SHADOWED 	3	/* no shadow password file */

.../...

#ifdef	SHADOWPWD
	if (!spw_file_present()) {
		fprintf (stderr,
			 _("%s: the shadow password file is not present\n"),
			 Prog);
		SYSLOG ((LOG_ERR, "can't find the shadow password file"));
		closelog ();
M 		exit (E_NOT_SHADOWED);
	}
	/*
	 * For shadow password files we have to lock the file and read in
	 * the entries as was done for the password file. The user entries
	 * does not have to exist in this case; a new entry will be created
	 * for this user if one does not exist already.
	 */
	if (locks && !spw_lock ()) {
		fprintf (stderr,
			 _("%s: can't lock shadow password file"), Prog);
		cleanup (1);
		SYSLOG ((LOG_ERR, "failed locking %s", SHADOW_FILE));
		closelog ();
		exit (E_NOPERM);
	}
	if (!spw_open (locks ? O_RDWR : O_RDONLY)) {
		fprintf (stderr,
			 _("%s: can't open shadow password file"), Prog);
		cleanup (2);
		SYSLOG ((LOG_ERR, "failed opening %s", SHADOW_FILE));
		closelog ();
		exit (E_NOPERM);
	}

-----------------------------------------------------

So, if I read the code properly, when /etc/shadow does not
exist....chage really exits with the errorcode 3 (E_NOT_SHADOWED).

The reported behaviour seems to indicate that the file is here, but it
could not be opened...

Any idea of what in your setup could have lead to this ?






More information about the Pkg-shadow-devel mailing list