X-Git-Url: https://granicus.if.org/sourcecode?a=blobdiff_plain;f=src%2Fexpiry.c;h=04513f3ba29ed77d5143659cf53197e7533f9708;hb=d3195c6b5f40c055d36b8df53ac297be6d80ae16;hp=d3d78cbf94bcb7b75bd49a28de8a7d240df06313;hpb=591830e43bae98cf9f32858b887496cc9dfcb4cd;p=shadow diff --git a/src/expiry.c b/src/expiry.c index d3d78cbf..04513f3b 100644 --- a/src/expiry.c +++ b/src/expiry.c @@ -1,5 +1,8 @@ /* - * Copyright 1994, Julianne Frances Haugh + * Copyright (c) 1994 , Julianne Frances Haugh + * Copyright (c) 1996 - 2000, Marek Michałkiewicz + * Copyright (c) 2001 - 2006, Tomasz Kłoczko + * Copyright (c) 2007 - 2011, Nicolas François * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -10,26 +13,26 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Julianne F. Haugh nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. + * 3. The name of the copyright holders or contributors may not be used to + * endorse or promote products derived from this software without + * specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include -#ident "$Id: expiry.c,v 1.19 2006/02/08 10:53:16 kloczek Exp $" +#ident "$Id$" #include #include @@ -37,6 +40,10 @@ #include #include "defines.h" #include "prototypes.h" + +/* Global variables */ +const char *Prog; + /* local function prototypes */ static RETSIGTYPE catch_signals (int); static void usage (void); @@ -44,7 +51,7 @@ static void usage (void); /* * catch_signals - signal catcher */ -static RETSIGTYPE catch_signals (int sig) +static RETSIGTYPE catch_signals (unused int sig) { exit (10); } @@ -54,54 +61,63 @@ static RETSIGTYPE catch_signals (int sig) */ static void usage (void) { - fprintf (stderr, _("Usage: expiry {-f|-c}\n")); + fputs (_("Usage: expiry {-f|-c}\n"), stderr); exit (10); } /* * expiry - check and enforce password expiration policy * - * expiry checks (-c) the current password expiraction and forces (-f) + * expiry checks (-c) the current password expiration and forces (-f) * changes when required. It is callable as a normal user command. */ int main (int argc, char **argv) { struct passwd *pwd; - struct spwd *spwd; - char *Prog = argv[0]; + + Prog = Basename (argv[0]); sanitize_env (); /* * Start by disabling all of the keyboard signals. */ - signal (SIGHUP, catch_signals); - signal (SIGINT, catch_signals); - signal (SIGQUIT, catch_signals); + (void) signal (SIGHUP, catch_signals); + (void) signal (SIGINT, catch_signals); + (void) signal (SIGQUIT, catch_signals); #ifdef SIGTSTP - signal (SIGTSTP, catch_signals); + (void) signal (SIGTSTP, catch_signals); #endif /* * expiry takes one of two arguments. The default action is to give * the usage message. */ - setlocale (LC_ALL, ""); - bindtextdomain (PACKAGE, LOCALEDIR); - textdomain (PACKAGE); + (void) setlocale (LC_ALL, ""); + (void) bindtextdomain (PACKAGE, LOCALEDIR); + (void) textdomain (PACKAGE); - if (argc != 2 || (strcmp (argv[1], "-f") && strcmp (argv[1], "-c"))) + OPENLOG ("expiry"); + + if ( (argc != 2) + || ( (strcmp (argv[1], "-f") != 0) + && (strcmp (argv[1], "-c") != 0))) { usage (); + } /* * Get user entries for /etc/passwd and /etc/shadow */ - if (!(pwd = get_my_pwent ())) { - fprintf (stderr, _("%s: unknown user\n"), Prog); + pwd = get_my_pwent (); + if (NULL == pwd) { + fprintf (stderr, _("%s: Cannot determine your user name.\n"), + Prog); + SYSLOG ((LOG_WARN, "Cannot determine the user name of the caller (UID %lu)", + (unsigned long) getuid ())); exit (10); } - spwd = getspnam (pwd->pw_name); + spwd = getspnam (pwd->pw_name); /* !USE_PAM, No need for xgetspnam */ /* * If checking accounts, use agecheck() function. @@ -111,7 +127,7 @@ int main (int argc, char **argv) /* * Print out number of days until expiration. */ - agecheck (pwd, spwd); + agecheck (spwd); /* * Exit with status indicating state of account. @@ -120,22 +136,13 @@ int main (int argc, char **argv) } /* - * If forcing password change, use expire() function. + * Otherwise, force a password change with the expire() function. + * It will force the change or give a message indicating what to + * do. + * It won't return unless the account is unexpired. */ - if (strcmp (argv[1], "-f") == 0) { + expire (pwd, spwd); - /* - * Just call expire(). It will force the change or give a - * message indicating what to do. And it doesn't return at - * all unless the account is unexpired. - */ - expire (pwd, spwd); - exit (0); - } - - /* - * Can't get here ... - */ - usage (); - exit (1); + exit (0); } +