]> git.cameronkatri.com Git - pw-darwin.git/blobdiff - pw/pw.c
Perform a major cleanup of the usr.sbin Makefiles.
[pw-darwin.git] / pw / pw.c
diff --git a/pw/pw.c b/pw/pw.c
index f71cdf70ab19cb9f590a728dad98fd579a6af875..01ba43a0d770e6c9397806bb7a8a7f67eb2f8f15 100644 (file)
--- a/pw/pw.c
+++ b/pw/pw.c
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: pw.c,v 1.14 1999/02/23 11:01:50 davidn Exp $";
+  "$FreeBSD$";
 #endif /* not lint */
 
 #include <err.h>
 #include <fcntl.h>
+#include <locale.h>
 #include <paths.h>
 #include <sys/wait.h>
 #include "pw.h"
 
-const char     *Modes[] = {"add", "del", "mod", "show", "next", NULL};
+#if !defined(_PATH_YP)
+#define        _PATH_YP        "/var/yp/"
+#endif
+const char     *Modes[] = {
+  "add", "del", "mod", "show", "next",
+  NULL};
 const char     *Which[] = {"user", "group", NULL};
 static const char *Combo1[] = {
   "useradd", "userdel", "usermod", "usershow", "usernext",
+  "lock", "unlock",
   "groupadd", "groupdel", "groupmod", "groupshow", "groupnext",
   NULL};
 static const char *Combo2[] = {
   "adduser", "deluser", "moduser", "showuser", "nextuser",
+  "lock", "unlock",
   "addgroup", "delgroup", "modgroup", "showgroup", "nextgroup",
-NULL};
+  NULL};
 
 struct pwf PWF =
 {
@@ -102,6 +110,8 @@ main(int argc, char *argv[])
                        "V:C:qn:u:rY",
                        "V:C:qn:u:c:d:e:p:g:G:ml:k:s:w:L:h:FNPY",
                        "V:C:qn:u:FPa7",
+                       "V:C:q",
+                       "V:C:q",
                        "V:C:q"
                },
                { /* grp  */
@@ -122,6 +132,8 @@ main(int argc, char *argv[])
        umask(0);               /* We wish to handle this manually */
        LIST_INIT(&arglist);
 
+       (void)setlocale(LC_ALL, "");
+
        /*
         * Break off the first couple of words to determine what exactly
         * we're being asked to do
@@ -144,14 +156,16 @@ main(int argc, char *argv[])
                        } else
                                break;
                }
-               else if ((tmp = getindex(Modes, argv[1])) != -1)
+               else if (mode == -1 && (tmp = getindex(Modes, argv[1])) != -1)
                        mode = tmp;
-               else if ((tmp = getindex(Which, argv[1])) != -1)
+               else if (which == -1 && (tmp = getindex(Which, argv[1])) != -1)
                        which = tmp;
-               else if ((tmp = getindex(Combo1, argv[1])) != -1 || (tmp = getindex(Combo2, argv[1])) != -1) {
+               else if ((mode == -1 && which == -1) &&
+                        ((tmp = getindex(Combo1, argv[1])) != -1 ||
+                         (tmp = getindex(Combo2, argv[1])) != -1)) {
                        which = tmp / M_NUM;
                        mode = tmp % M_NUM;
-               } else if (strcmp(argv[1], "help") == 0)
+               } else if (strcmp(argv[1], "help") == 0 && argv[2] == NULL)
                        cmdhelp(mode, which);
                else if (which != -1 && mode != -1)
                        addarg(&arglist, 'n', argv[1]);
@@ -175,7 +189,7 @@ main(int argc, char *argv[])
 
        while ((ch = getopt(argc, argv, opts[which][mode])) != -1) {
                if (ch == '?')
-                       errx(EX_USAGE, NULL);
+                       errx(EX_USAGE, "unknown switch");
                else
                        addarg(&arglist, ch, optarg);
                optarg = NULL;
@@ -192,7 +206,7 @@ main(int argc, char *argv[])
         * don't bother with extraneous errors
         */
        if (getarg(&arglist, 'q') != NULL)
-               freopen("/dev/null", "w", stderr);
+               freopen(_PATH_DEVNULL, "w", stderr);
 
        /*
         * Set our base working path if not overridden
@@ -234,7 +248,7 @@ main(int argc, char *argv[])
                        warn("fork()");
                else if (pid == 0) {
                        /* Is make anywhere else? */
-                       execlp("/usr/bin/make", "make", NULL);
+                       execlp("/usr/bin/make", "make", (char *)NULL);
                        _exit(1);
                } else {
                        int   i;
@@ -272,9 +286,9 @@ static void
 cmdhelp(int mode, int which)
 {
        if (which == -1)
-               fprintf(stderr, "usage: pw [user|group] [add|del|mod|show|next] [ help | switches/values ]\n");
+               fprintf(stderr, "usage:\n  pw [user|group|lock|unlock] [add|del|mod|show|next] [help|switches/values]\n");
        else if (mode == -1)
-               fprintf(stderr, "usage: pw %s [add|del|mod|show|next] [ help | switches/values ]\n", Which[which]);
+               fprintf(stderr, "usage:\n  pw %s [add|del|mod|show|next] [help|switches/values]\n", Which[which]);
        else {
 
                /*
@@ -356,6 +370,15 @@ cmdhelp(int mode, int which)
                                "usage: pw usernext [switches]\n"
                                "\t-V etcdir      alternate /etc location\n"
                                "\t-C config      configuration file\n"
+                               "\t-q             quiet operation\n",
+                               "usage pw: lock [switches]\n"
+                               "\t-V etcdir      alternate /etc locations\n"
+                               "\t-C config      configuration file\n"
+                               "\t-q             quiet operation\n",
+                               "usage pw: unlock [switches]\n"
+                               "\t-V etcdir      alternate /etc locations\n"
+                               "\t-C config      configuration file\n"
+                               "\t-q             quiet operation\n"
                        },
                        {
                                "usage: pw groupadd [group|gid] [switches]\n"
@@ -395,10 +418,11 @@ cmdhelp(int mode, int which)
                                "usage: pw groupnext [switches]\n"
                                "\t-V etcdir      alternate /etc location\n"
                                "\t-C config      configuration file\n"
+                               "\t-q             quiet operation\n"
                        }
                };
 
-               fprintf(stderr, help[which][mode]);
+               fprintf(stderr, "%s", help[which][mode]);
        }
        exit(EXIT_FAILURE);
 }
@@ -406,10 +430,10 @@ cmdhelp(int mode, int which)
 struct carg    *
 getarg(struct cargs * _args, int ch)
 {
-       struct carg    *c = _args->lh_first;
+       struct carg    *c = LIST_FIRST(_args);
 
        while (c != NULL && c->ch != ch)
-               c = c->list.le_next;
+               c = LIST_NEXT(c, list);
        return c;
 }