ptserver-flags-default-switch-20040623
authorMarcus Watts <mdw@umich.edu>
Wed, 23 Jun 2004 14:45:09 +0000 (14:45 +0000)
committerDerrick Brashear <shadow@dementia.org>
Wed, 23 Jun 2004 14:45:09 +0000 (14:45 +0000)
FIXES 5418

allow ptserver flags to be defaulted different per switch

src/ptserver/ptprocs.c
src/ptserver/ptserver.c
src/ptserver/ptutils.c

index 4cf7369..c080935 100644 (file)
@@ -103,6 +103,9 @@ afs_int32 listSuperGroups();
 static stolower();
 extern int IDCmp();
 
+extern int prp_group_default;
+extern int prp_user_default;
+
 /* When abort, reset initd so that the header is read in on next call.
  * Abort the transaction and return the code.
  */
@@ -1513,9 +1516,9 @@ listEntry(call, aid, aentry)
     aentry->flags = tentry.flags >> PRIVATE_SHIFT;
     if (aentry->flags == 0) {
        if (tentry.flags & PRGRP)
-           aentry->flags = PRP_GROUP_DEFAULT >> PRIVATE_SHIFT;
+           aentry->flags = prp_group_default >> PRIVATE_SHIFT;
        else
-           aentry->flags = PRP_USER_DEFAULT >> PRIVATE_SHIFT;
+           aentry->flags = prp_user_default >> PRIVATE_SHIFT;
     }
     aentry->owner = tentry.owner;
     aentry->id = tentry.id;
@@ -1659,7 +1662,7 @@ put_prentries(tentry, bulkentries)
     if (entry->flags == 0) {
        entry->flags =
            ((tentry->
-             flags & PRGRP) ? PRP_GROUP_DEFAULT : PRP_USER_DEFAULT) >>
+             flags & PRGRP) ? prp_group_default : prp_user_default) >>
            PRIVATE_SHIFT;
     }
     entry->owner = tentry->owner;
index 274265c..8d39d10 100644 (file)
@@ -165,8 +165,34 @@ char *pr_realmName;
 
 static struct afsconf_cell info;
 
+extern int prp_group_default;
+extern int prp_user_default;
+
 #include "AFS_component_version_number.c"
 
+int
+prp_access_mask(s)
+    char *s;
+{
+    int r;
+    if (*s >= '0' && *s <= '9') {
+       return strtol(s, NULL, 0);
+    }
+    r = 0;
+    while (*s) switch(*s++)
+    {
+    case 'S':  r |= PRP_STATUS_ANY; break;
+    case 's':  r |= PRP_STATUS_MEM; break;
+    case 'O':  r |= PRP_OWNED_ANY; break;
+    case 'M':  r |= PRP_MEMBER_ANY; break;
+    case 'm':  r |= PRP_MEMBER_MEM; break;
+    case 'A':  r |= PRP_ADD_ANY; break;
+    case 'a':  r |= PRP_ADD_MEM; break;
+    case 'r':  r |= PRP_REMOVE_MEM; break;
+    }
+    return r;
+}
+
 /* check whether caller is authorized to manage RX statistics */
 int
 pr_rxstat_userok(call)
@@ -267,6 +293,10 @@ main(int argc, char **argv)
            depthsg = atoi(argv[++a]);  /* Max search depth for supergroups */
        }
 #endif
+       else if (strncmp(arg, "-default_access", alen) == 0) {
+           prp_user_default = prp_access_mask(argv[++a]);
+           prp_group_default = prp_access_mask(argv[++a]);
+       }
        else if (strncmp(arg, "-enable_peer_stats", alen) == 0) {
            rx_enablePeerRPCStats();
        } else if (strncmp(arg, "-enable_process_stats", alen) == 0) {
@@ -291,10 +321,12 @@ main(int argc, char **argv)
                   "[-p <number of processes>] [-rebuild] "
                   "[-groupdepth <depth>] "
                   "[-enable_peer_stats] [-enable_process_stats] "
+                  "[-default_access default_user_access default_group_access] "
                   "[-help]\n");
 #else /* AFS_NT40_ENV */
            printf("Usage: ptserver [-database <db path>] "
                   "[-p <number of processes>] [-rebuild] "
+                  "[-default_access default_user_access default_group_access] "
                   "[-groupdepth <depth>] " "[-help]\n");
 #endif
 #else
@@ -303,9 +335,11 @@ main(int argc, char **argv)
                   "[-syslog[=FACILITY]] "
                   "[-p <number of processes>] [-rebuild] "
                   "[-enable_peer_stats] [-enable_process_stats] "
+                  "[-default_access default_user_access default_group_access] "
                   "[-help]\n");
 #else /* AFS_NT40_ENV */
            printf("Usage: ptserver [-database <db path>] "
+                  "[-default_access default_user_access default_group_access] "
                   "[-p <number of processes>] [-rebuild] " "[-help]\n");
 #endif
 #endif
index ce71577..acce83a 100644 (file)
@@ -62,6 +62,7 @@ extern int IDCmp();
 extern afs_int32 AddToEntry();
 static char *whoami = "ptserver";
 
+
 #if defined(SUPERGROUPS)
 
 #include "map.h"
@@ -74,6 +75,8 @@ afs_int32 allocNextId(struct ubik_trans *, struct prentry *);
 
 struct map *sg_flagged;
 struct map *sg_found;
+int prp_user_default = PRP_USER_DEFAULT;
+int prp_group_default = PRP_GROUP_DEFAULT;
 
 #define NIL_MAP ((struct map *) 0)
 
@@ -332,9 +335,9 @@ AccessOK(ut, cid, tentry, mem, any)
     }
     if (!(flags & PRACCESS)) { /* provide default access */
        if (flags & PRGRP)
-           flags |= PRP_GROUP_DEFAULT;
+           flags |= prp_group_default;
        else
-           flags |= PRP_USER_DEFAULT;
+           flags |= prp_user_default;
     }
 
     if (flags & any)