]> 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 32246f92b109f3074ae55b2dbc4a8dee9df5c68d..01ba43a0d770e6c9397806bb7a8a7f67eb2f8f15 100644 (file)
--- a/pw/pw.c
+++ b/pw/pw.c
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: pw.c,v 1.11 1999/01/08 10:52:38 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 =
 {
@@ -98,18 +106,20 @@ main(int argc, char *argv[])
        static const char *opts[W_NUM][M_NUM] =
        {
                { /* user */
-                       "VC:qn:u:c:d:e:p:g:G:mk:s:oL:i:w:h:Db:NPy:Y",
-                       "VC:qn:u:rY",
-                       "VC:qn:u:c:d:e:p:g:G:ml:k:s:w:L:h:FNPY",
-                       "VC:qn:u:FPa",
-                       "VC:q"
+                       "V:C:qn:u:c:d:e:p:g:G:mk:s:oL:i:w:h:Db:NPy:Y",
+                       "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  */
-                       "VC:qn:g:h:M:pNPY",
-                       "VC:qn:g:Y",
-                       "VC:qn:g:l:h:FM:m:NPY",
-                       "VC:qn:g:FPa",
-                       "VC:q"
+                       "V:C:qn:g:h:M:pNPY",
+                       "V:C:qn:g:Y",
+                       "V:C:qn:g:l:h:FM:m:NPY",
+                       "V:C:qn:g:FPa",
+                       "V:C:q"
                 }
        };
 
@@ -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
@@ -141,19 +153,21 @@ main(int argc, char *argv[])
                                        --argc;
                                }
                                addarg(&arglist, 'V', optarg);
-                       }
-                       break;
+                       } 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 && arglist.lh_first == NULL)
+               else if (which != -1 && mode != -1)
                        addarg(&arglist, 'n', argv[1]);
                else
                        errx(EX_USAGE, "unknown keyword `%s'", 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 {
 
                /*
@@ -351,10 +365,20 @@ cmdhelp(int mode, int which)
                                "\t-u uid         user id\n"
                                "\t-F             force print\n"
                                "\t-P             prettier format\n"
-                               "\t-a             print all users\n",
+                               "\t-a             print all users\n"
+                               "\t-7             print in v7 format\n",
                                "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"
@@ -394,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);
 }
@@ -405,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;
 }