]> git.cameronkatri.com Git - pw-darwin.git/blobdiff - pw/pw.c
Add -M argument to usage() output.
[pw-darwin.git] / pw / pw.c
diff --git a/pw/pw.c b/pw/pw.c
index 2118854f777cbf878b592757afe7bc28b910bb9d..f13a94ff0c8c994f186b8ec177de44b9acf83fd5 100644 (file)
--- a/pw/pw.c
+++ b/pw/pw.c
@@ -31,10 +31,14 @@ static const char rcsid[] =
 
 #include <err.h>
 #include <fcntl.h>
+#include <locale.h>
 #include <paths.h>
 #include <sys/wait.h>
 #include "pw.h"
 
+#if !defined(_PATH_YP)
+#define        _PATH_YP        "/var/yp/"
+#endif
 const char     *Modes[] = {
   "add", "del", "mod", "show", "next",
   NULL};
@@ -102,18 +106,18 @@ main(int argc, char *argv[])
        static const char *opts[W_NUM][M_NUM] =
        {
                { /* user */
-                       "V:C:qn:u:c:d:e:p:g:G:mk:s:oL:i:w:h:Db:NPy:Y",
+                       "V:C:qn:u:c:d:e:p:g:G:mM:k:s:oL:i:w:h: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:c:d:e:p:g:G:mM:l:k:s:w:L:h:H:FNPY",
                        "V:C:qn:u:FPa7",
                        "V:C:q",
                        "V:C:q",
                        "V:C:q"
                },
                { /* grp  */
-                       "V:C:qn:g:h:M:pNPY",
+                       "V:C:qn:g:h:H:M:opNPY",
                        "V:C:qn:g:Y",
-                       "V:C:qn:g:l:h:FM:m:NPY",
+                       "V:C:qn:g:l:h:H:FM:m:NPY",
                        "V:C:qn:g:FPa",
                        "V:C:q"
                 }
@@ -125,9 +129,10 @@ main(int argc, char *argv[])
                pw_group
        };
 
-       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
@@ -150,14 +155,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]);
@@ -181,7 +188,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;
@@ -198,7 +205,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
@@ -240,7 +247,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;
@@ -303,10 +310,12 @@ cmdhelp(int mode, int which)
                                "\t-g grp         initial group\n"
                                "\t-G grp1,grp2   additional groups\n"
                                "\t-m [ -k dir ]  create and set up home\n"
+                               "\t-M mode        home directory permissions\n"
                                "\t-s shell       name of login shell\n"
                                "\t-o             duplicate uid ok\n"
                                "\t-L class       user class\n"
                                "\t-h fd          read password on fd\n"
+                               "\t-H fd          read encrypted password on fd\n"
                                "\t-Y             update NIS maps\n"
                                "\t-N             no update\n"
                                "  Setting defaults:\n"
@@ -346,9 +355,11 @@ cmdhelp(int mode, int which)
                                "\t-l name        new login name\n"
                                "\t-L class       user class\n"
                                "\t-m [ -k dir ]  create and set up home\n"
+                               "\t-M mode        home directory permissions\n"
                                "\t-s shell       name of login shell\n"
                                "\t-w method      set new password using method\n"
                                "\t-h fd          read password on fd\n"
+                               "\t-H fd          read encrypted password on fd\n"
                                "\t-Y             update NIS maps\n"
                                "\t-N             no update\n",
                                "usage: pw usershow [uid|name] [switches]\n"
@@ -362,6 +373,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"
@@ -401,10 +421,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);
 }
@@ -412,10 +433,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;
 }