]> granicus.if.org Git - shadow/blobdiff - src/expiry.c
* src/newusers.c: Fix typo.
[shadow] / src / expiry.c
index d3d78cbf94bcb7b75bd49a28de8a7d240df06313..04513f3ba29ed77d5143659cf53197e7533f9708 100644 (file)
@@ -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
  * 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 <config.h>
 
-#ident "$Id: expiry.c,v 1.19 2006/02/08 10:53:16 kloczek Exp $"
+#ident "$Id$"
 
 #include <pwd.h>
 #include <signal.h>
 #include <sys/types.h>
 #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);
 }
+