From d344a584239383a4d51b450f41e654d70fc3fc0a Mon Sep 17 00:00:00 2001 From: Marcus Watts Date: Wed, 23 Jun 2004 14:45:09 +0000 Subject: [PATCH] ptserver-flags-default-switch-20040623 FIXES 5418 allow ptserver flags to be defaulted different per switch --- src/ptserver/ptprocs.c | 9 ++++++--- src/ptserver/ptserver.c | 34 ++++++++++++++++++++++++++++++++++ src/ptserver/ptutils.c | 7 +++++-- 3 files changed, 45 insertions(+), 5 deletions(-) diff --git a/src/ptserver/ptprocs.c b/src/ptserver/ptprocs.c index 4cf7369..c080935 100644 --- a/src/ptserver/ptprocs.c +++ b/src/ptserver/ptprocs.c @@ -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; diff --git a/src/ptserver/ptserver.c b/src/ptserver/ptserver.c index 274265c..8d39d10 100644 --- a/src/ptserver/ptserver.c +++ b/src/ptserver/ptserver.c @@ -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 ] [-rebuild] " "[-groupdepth ] " "[-enable_peer_stats] [-enable_process_stats] " + "[-default_access default_user_access default_group_access] " "[-help]\n"); #else /* AFS_NT40_ENV */ printf("Usage: ptserver [-database ] " "[-p ] [-rebuild] " + "[-default_access default_user_access default_group_access] " "[-groupdepth ] " "[-help]\n"); #endif #else @@ -303,9 +335,11 @@ main(int argc, char **argv) "[-syslog[=FACILITY]] " "[-p ] [-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 ] " + "[-default_access default_user_access default_group_access] " "[-p ] [-rebuild] " "[-help]\n"); #endif #endif diff --git a/src/ptserver/ptutils.c b/src/ptserver/ptutils.c index ce71577..acce83a 100644 --- a/src/ptserver/ptutils.c +++ b/src/ptserver/ptutils.c @@ -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) -- 1.9.4