Add rxgk client options to vl and pt utilities
[openafs.git] / src / ptserver / pts.c
index bd264e2..aa1f415 100644 (file)
 #include <afs/cmd.h>
 #include <rx/rx.h>
 #include <rx/xdr.h>
+#include <rx/rxgk_int.h>
 
 #include "ptclient.h"
 #include "ptuser.h"
 #include "pterror.h"
 #include "ptprototypes.h"
 
-#undef FOREIGN
-
 char *whoami;
 int force = 0;
 
@@ -169,6 +168,7 @@ GetGlobals(struct cmd_syndesc *as, void *arock)
     afs_int32 sec;
     int changed = 0;
     const char* confdir;
+    RXGK_Level rxgk_level = RXGK_LEVEL_BOGUS;
 
     whoami = as->a0name;
 
@@ -223,9 +223,26 @@ GetGlobals(struct cmd_syndesc *as, void *arock)
        confdir = as->parms[23].items->data;
     }
 
+    if (as->parms[24].items) { /* -rxgk */
+       char *rxgk_seclevel_str = as->parms[24].items->data;
+       changed = 1;
+
+       if (strcmp(rxgk_seclevel_str, "clear") == 0)
+           rxgk_level = RXGK_LEVEL_CLEAR;
+       else if (strcmp(rxgk_seclevel_str, "auth") == 0)
+           rxgk_level = RXGK_LEVEL_AUTH;
+       else if (strcmp(rxgk_seclevel_str, "crypt") == 0)
+           rxgk_level = RXGK_LEVEL_CRYPT;
+       else {
+           fprintf(stderr, "Invalid argument to -rxgk: %s\n", rxgk_seclevel_str);
+           return 1;
+       }
+
+    }
+
     if (changed) {
        CleanUp(as, arock);
-       code = pr_Initialize(sec, confdir, cell);
+       code = pr_Initialize2(sec, confdir, cell, rxgk_level);
     } else {
        code = 0;
     }
@@ -283,7 +300,7 @@ CreateGroup(struct cmd_syndesc *as, void *arock)
                return code;
            }
            if (id == 0) {
-               printf("0 isn't a valid group id; aborting\n");
+               fprintf(stderr, "0 isn't a valid group id; aborting\n");
                return EINVAL;
            }
            if (id > 0) {
@@ -336,7 +353,7 @@ CreateUser(struct cmd_syndesc *as, void *arock)
                return code;
            }
            if (id == 0) {
-               printf("0 isn't a valid user id; aborting\n");
+               fprintf(stderr, "0 isn't a valid user id; aborting\n");
                return EINVAL;
            }
            if (id < 0) {
@@ -793,9 +810,6 @@ CheckEntry(struct cmd_syndesc *as, void *arock)
            printf(", group quota: unlimited");
        else
            printf(", group quota: %d", aentry.ngroups);
-#if FOREIGN
-       printf(", foreign user quota=%d", aentry.nusers);
-#endif
        printf(".\n");
     }
 
@@ -934,7 +948,7 @@ SetMaxCommand(struct cmd_syndesc *as, void *arock)
     }
     if (!as->parms[0].items && !as->parms[1].items) {
        code = PRBADARG;
-       printf("Must specify at least one of group or user.\n");
+       fprintf(stderr, "Must specify at least one of group or user.\n");
     }
     return code;
 }
@@ -964,7 +978,7 @@ SetFields(struct cmd_syndesc *as, void *arock)
        } else {                /* interpret flag bit names */
            if (strlen(access) != 5) {
              form_error:
-               printf("Access bits must be of the form 'somar', not %s\n",
+               fprintf(stderr, "Access bits must be of the form 'somar', not %s\n",
                       access);
                return PRBADARG;
            }
@@ -979,8 +993,8 @@ SetFields(struct cmd_syndesc *as, void *arock)
                else if (access[i] == '-')
                    new = 0;
                else {
-                   printf
-                       ("Access bits out of order or illegal:\n  must be a combination of letters from '%s' or '%s' or hyphen, not %s\n",
+                   fprintf(stderr,
+                       "Access bits out of order or illegal:\n  must be a combination of letters from '%s' or '%s' or hyphen, not %s\n",
                         flags_upcase, flags_dncase, access);
                    return PRBADARG;
                }
@@ -1003,17 +1017,6 @@ SetFields(struct cmd_syndesc *as, void *arock)
        }
        mask |= PR_SF_NGROUPS;
     }
-#if FOREIGN
-    if (as->parms[3].items) {  /* limitgroups */
-       code = util_GetInt32(as->parms[3].items->data, &nusers);
-       if (code) {
-           afs_com_err(whoami, code, "because nusers was: '%s'",
-                   as->parms[3].items->data);
-           return code;
-       }
-       mask |= PR_SF_NUSERS;
-    }
-#endif
 
     for (i = 0; i < ids.idlist_len; i++) {
        afs_int32 id = ids.idlist_val[i];
@@ -1087,9 +1090,12 @@ ListOwned(struct cmd_syndesc *as, void *arock)
 static void
 add_std_args(struct cmd_syndesc *ts)
 {
-    char test_help[AFSDIR_PATH_MAX];
+    char *test_help;
 
-    sprintf(test_help, "use config file in %s", AFSDIR_SERVER_ETC_DIRPATH);
+    if (asprintf(&test_help, "use config file in %s",
+                AFSDIR_SERVER_ETC_DIRPATH) < 0) {
+       test_help = strdup("use server config file");
+    }
 
     cmd_Seek(ts, 16);
     cmd_AddParm(ts, "-cell", CMD_SINGLE, CMD_OPTIONAL, "cell name");
@@ -1104,6 +1110,8 @@ add_std_args(struct cmd_syndesc *ts)
     cmd_AddParm(ts, "-encrypt", CMD_FLAG, CMD_OPTIONAL,
                "encrypt commands");
     cmd_AddParm(ts, "-config", CMD_SINGLE, CMD_OPTIONAL, "config location");
+    cmd_AddParm(ts, "-rxgk", CMD_SINGLE, CMD_OPTIONAL, "rxgk security level to use");
+    free(test_help);
 }
 
 /*
@@ -1156,7 +1164,7 @@ main(int argc, char **argv)
     memset(&state, 0, sizeof(state));
     state.sec = 1; /* default is auth */
 
-    ts = cmd_CreateSyntax("creategroup", CreateGroup, NULL,
+    ts = cmd_CreateSyntax("creategroup", CreateGroup, NULL, 0,
                          "create a new group");
     cmd_AddParm(ts, "-name", CMD_LIST, 0, "group name");
     cmd_AddParm(ts, "-owner", CMD_SINGLE, CMD_OPTIONAL, "owner of the group");
@@ -1165,24 +1173,24 @@ main(int argc, char **argv)
     add_std_args(ts);
     cmd_CreateAlias(ts, "cg");
 
-    ts = cmd_CreateSyntax("createuser", CreateUser, NULL, "create a new user");
+    ts = cmd_CreateSyntax("createuser", CreateUser, NULL, 0, "create a new user");
     cmd_AddParm(ts, "-name", CMD_LIST, 0, "user name");
     cmd_AddParm(ts, "-id", CMD_LIST, CMD_OPTIONAL, "user id");
     add_std_args(ts);
     cmd_CreateAlias(ts, "cu");
 
-    ts = cmd_CreateSyntax("adduser", AddToGroup, NULL, "add a user to a group");
+    ts = cmd_CreateSyntax("adduser", AddToGroup, NULL, 0, "add a user to a group");
     cmd_AddParm(ts, "-user", CMD_LIST, 0, "user name");
     cmd_AddParm(ts, "-group", CMD_LIST, 0, "group name");
     add_std_args(ts);
 
-    ts = cmd_CreateSyntax("removeuser", RemoveFromGroup, NULL,
+    ts = cmd_CreateSyntax("removeuser", RemoveFromGroup, NULL, 0,
                          "remove a user from a group");
     cmd_AddParm(ts, "-user", CMD_LIST, 0, "user name");
     cmd_AddParm(ts, "-group", CMD_LIST, 0, "group name");
     add_std_args(ts);
 
-    ts = cmd_CreateSyntax("membership", ListMembership, NULL,
+    ts = cmd_CreateSyntax("membership", ListMembership, NULL, 0,
                          "list membership of a user or group");
     cmd_AddParm(ts, "-nameorid", CMD_LIST, 0, "user or group name or id");
     cmd_AddParm(ts, "-supergroups", CMD_FLAG, CMD_OPTIONAL, "show supergroups");
@@ -1190,72 +1198,68 @@ main(int argc, char **argv)
     add_std_args(ts);
     cmd_CreateAlias(ts, "groups");
 
-    ts = cmd_CreateSyntax("delete", Delete, NULL,
+    ts = cmd_CreateSyntax("delete", Delete, NULL, 0,
                          "delete a user or group from database");
     cmd_AddParm(ts, "-nameorid", CMD_LIST, 0, "user or group name or id");
     add_std_args(ts);
 
-    ts = cmd_CreateSyntax("examine", CheckEntry, NULL, "examine an entry");
+    ts = cmd_CreateSyntax("examine", CheckEntry, NULL, 0, "examine an entry");
     cmd_AddParm(ts, "-nameorid", CMD_LIST, 0, "user or group name or id");
     add_std_args(ts);
     cmd_CreateAlias(ts, "check");
 
-    ts = cmd_CreateSyntax("chown", ChownGroup, NULL,
+    ts = cmd_CreateSyntax("chown", ChownGroup, NULL, 0,
                          "change ownership of a group");
     cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "group name");
     cmd_AddParm(ts, "-owner", CMD_SINGLE, 0, "new owner");
     add_std_args(ts);
 
-    ts = cmd_CreateSyntax("rename", ChangeName, NULL, "rename user or group");
+    ts = cmd_CreateSyntax("rename", ChangeName, NULL, 0, "rename user or group");
     cmd_AddParm(ts, "-oldname", CMD_SINGLE, 0, "old name");
     cmd_AddParm(ts, "-newname", CMD_SINGLE, 0, "new name");
     add_std_args(ts);
     cmd_CreateAlias(ts, "chname");
 
-    ts = cmd_CreateSyntax("listmax", ListMax, NULL, "list max id");
+    ts = cmd_CreateSyntax("listmax", ListMax, NULL, 0, "list max id");
     add_std_args(ts);
 
-    ts = cmd_CreateSyntax("setmax", SetMaxCommand, NULL, "set max id");
+    ts = cmd_CreateSyntax("setmax", SetMaxCommand, NULL, 0, "set max id");
     cmd_AddParm(ts, "-group", CMD_SINGLE, CMD_OPTIONAL, "group max");
     cmd_AddParm(ts, "-user", CMD_SINGLE, CMD_OPTIONAL, "user max");
     add_std_args(ts);
 
-    ts = cmd_CreateSyntax("setfields", SetFields, NULL,
+    ts = cmd_CreateSyntax("setfields", SetFields, NULL, 0,
                          "set fields for an entry");
     cmd_AddParm(ts, "-nameorid", CMD_LIST, 0, "user or group name or id");
     cmd_AddParm(ts, "-access", CMD_SINGLE, CMD_OPTIONAL, "set privacy flags");
     cmd_AddParm(ts, "-groupquota", CMD_SINGLE, CMD_OPTIONAL,
                "set limit on group creation");
-#if FOREIGN
-    cmd_AddParm(ts, "-userquota", CMD_SINGLE, CMD_OPTIONAL,
-               "set limit on foreign user creation");
-#endif
     add_std_args(ts);
 
-    ts = cmd_CreateSyntax("listowned", ListOwned, NULL,
+    ts = cmd_CreateSyntax("listowned", ListOwned, NULL, 0,
                          "list groups owned by an entry or zero id gets orphaned groups");
     cmd_AddParm(ts, "-nameorid", CMD_LIST, 0, "user or group name or id");
     add_std_args(ts);
 
-    ts = cmd_CreateSyntax("listentries", ListEntries, NULL,
+    ts = cmd_CreateSyntax("listentries", ListEntries, NULL, 0,
                          "list users/groups in the protection database");
     cmd_AddParm(ts, "-users", CMD_FLAG, CMD_OPTIONAL, "list user entries");
     cmd_AddParm(ts, "-groups", CMD_FLAG, CMD_OPTIONAL, "list group entries");
     add_std_args(ts);
 
-    ts = cmd_CreateSyntax("interactive", pts_Interactive, NULL,
+    ts = cmd_CreateSyntax("interactive", pts_Interactive, NULL, 0,
                          "enter interactive mode");
     add_std_args(ts);
     cmd_CreateAlias(ts, "in");
 
-    ts = cmd_CreateSyntax("quit", pts_Quit, NULL, "exit program");
+    ts = cmd_CreateSyntax("quit", pts_Quit, NULL, 0, "exit program");
     add_std_args(ts);
 
-    ts = cmd_CreateSyntax("source", pts_Source, NULL, "read commands from file");
+    ts = cmd_CreateSyntax("source", pts_Source, NULL, 0, "read commands from file");
     cmd_AddParm(ts, "-file", CMD_SINGLE, 0, "filename");
     add_std_args(ts);
 
-    ts = cmd_CreateSyntax("sleep", pts_Sleep, NULL, "pause for a bit");
+    ts = cmd_CreateSyntax("sleep", pts_Sleep, NULL, 0, "pause for a bit");
     cmd_AddParm(ts, "-delay", CMD_SINGLE, 0, "seconds");
     add_std_args(ts);