readgroup: Make sure user supplies a groupfile
[openafs.git] / src / ptserver / readgroup.c
index c48d135..d4a7aaf 100644 (file)
@@ -11,6 +11,7 @@
 #include <afs/param.h>
 
 #include <roken.h>
+#include <afs/opr.h>
 
 #ifdef AFS_NT40_ENV
 #include <WINNT/afsevent.h>
@@ -75,6 +76,8 @@ main(int argc, char **argv)
     afs_int32 i;
     afs_int32 fail = 0;
 
+    buf[0] = '\0';
+
     if (argc < 2) {
        fprintf(stderr, "Usage: readgroup [-v] [-c cellname] groupfile.\n");
        exit(0);
@@ -85,12 +88,19 @@ main(int argc, char **argv)
            verbose = 1;
        else {
            if (!strcmp(argv[i], "-c")) {
-               cellname = (char *)malloc(100);
+               cellname = malloc(100);
                strncpy(cellname, argv[++i], 100);
            } else
                strncpy(buf, argv[i], 150);
        }
     }
+
+    /* Catch missing filename */
+    if (buf[0] == '\0') {
+       fprintf(stderr, "Usage: readgroup [-v] [-c cellname] groupfile.\n");
+       exit(0);
+    }
+
     code = pr_Initialize(2, AFSDIR_CLIENT_ETC_DIRPATH, cellname);
     free(cellname);
     if (code) {
@@ -155,14 +165,15 @@ main(int argc, char **argv)
                                    name, gname);
                            fprintf(stderr, "%s (%d).\n", pr_ErrorMsg(code),
                                    code);
+                       } else {
+                           for (i = 0; i < lnames.namelist_len; i++) {
+                               code =
+                                   pr_AddToGroup(lnames.namelist_val[i], gname);
+                               report_error(code, lnames.namelist_val[i], gname);
+                           }
+                           if (lnames.namelist_val)
+                               free(lnames.namelist_val);
                        }
-                       for (i = 0; i < lnames.namelist_len; i++) {
-                           code =
-                               pr_AddToGroup(lnames.namelist_val[i], gname);
-                           report_error(code, lnames.namelist_val[i], gname);
-                       }
-                       if (lnames.namelist_val)
-                           free(lnames.namelist_val);
                    }
                    memset(name, 0, PR_MAXNAMELEN);
                    skip(&tmp);
@@ -190,16 +201,17 @@ main(int argc, char **argv)
                                name, gname);
                        fprintf(stderr, "%s (%d).\n", pr_ErrorMsg(code),
                                code);
+                   } else {
+                       for (i = 0; i < lnames.namelist_len; i++) {
+                           if (verbose)
+                               printf("Adding %s to %s.\n",
+                                      lnames.namelist_val[i], gname);
+                           code = pr_AddToGroup(lnames.namelist_val[i], gname);
+                           report_error(code, lnames.namelist_val[i], gname);
+                       }
+                       if (lnames.namelist_val)
+                           free(lnames.namelist_val);
                    }
-                   for (i = 0; i < lnames.namelist_len; i++) {
-                       if (verbose)
-                           printf("Adding %s to %s.\n",
-                                  lnames.namelist_val[i], gname);
-                       code = pr_AddToGroup(lnames.namelist_val[i], gname);
-                       report_error(code, lnames.namelist_val[i], gname);
-                   }
-                   if (lnames.namelist_val)
-                       free(lnames.namelist_val);
                }
                memset(name, 0, PR_MAXNAMELEN);
                skip(&tmp);