2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
11 Information Technology Center
12 Carnegie-Mellon University
15 #include <afsconfig.h>
16 #include <afs/param.h>
19 #include <sys/types.h>
23 #include <netinet/in.h>
33 struct acl_accessList *aclstore[20];
34 char *externalstore[20];
38 register long arights;
40 if (arights & PRSFS_READ)
42 if (arights & PRSFS_LOOKUP)
44 if (arights & PRSFS_INSERT)
46 if (arights & PRSFS_DELETE)
48 if (arights & PRSFS_WRITE)
50 if (arights & PRSFS_LOCK)
52 if (arights & PRSFS_ADMINISTER)
58 register char *arights;
63 if (!strcmp(arights, "read"))
64 return PRSFS_READ | PRSFS_LOOKUP;
65 if (!strcmp(arights, "write"))
66 return PRSFS_READ | PRSFS_LOOKUP | PRSFS_INSERT | PRSFS_DELETE |
67 PRSFS_WRITE | PRSFS_LOCK;
68 if (!strcmp(arights, "mail"))
69 return PRSFS_INSERT | PRSFS_LOCK | PRSFS_LOOKUP;
70 if (!strcmp(arights, "all"))
71 return PRSFS_READ | PRSFS_LOOKUP | PRSFS_INSERT | PRSFS_DELETE |
72 PRSFS_WRITE | PRSFS_LOCK | PRSFS_ADMINISTER;
73 if (!strcmp(arights, "none"))
75 len = strlen(arights);
77 for (i = 0; i < len; i++) {
92 mode |= PRSFS_ADMINISTER;
94 printf("Bogus rights character '%c'.\n", tc);
121 struct acl_accessList *alist;
124 code = pr_Initialize(0, "/usr/afs/etc", 0);
126 fprintf(stderr, "Couldn't initialize wrt to protection server.\n");
129 for (i = 0; i < 20; i++) {
130 externalstore[i] = NULL;
137 if (!strcmp(op, "q"))
139 else if (!strcmp(op, "ex")) {
141 if (aclstore[which] == NULL) {
142 printf("No internal acl in %d.\n", which);
146 if (externalstore[which] != NULL) {
147 code = acl_FreeExternalACL(&externalstore[which]);
149 printf("Couldn't free current ACL.\n");
154 code = acl_Externalize(aclstore[which], &externalstore[which]);
156 printf("Couldn't externalize -- code is %d.\n", code);
157 } else if (!strcmp(op, "in")) {
159 if (externalstore[which] == NULL) {
160 printf("No external acl in %d.\n", which);
164 if (aclstore[which] != NULL) {
165 code = acl_FreeACL(&aclstore[which]);
167 printf("Couldn't free current ACL.\n");
172 code = acl_Internalize(externalstore[which], &aclstore[which]);
174 printf("Couldn't internalize. Code is %d\n", code);
175 } else if (!strcmp(op, "sa")) {
176 scanf("%d %s %s", &which, name, rights);
177 realrights = (long)Convert(rights);
178 if (externalstore[which] != NULL) {
179 /* we're adding to access list */
180 size = strlen(externalstore[which]);
181 ptr = (char *)malloc(size);
182 sscanf(externalstore[which], "%d\n%d\n", &p, &n);
183 strncpy(ptr, externalstore[which], size);
185 free(externalstore[which]);
186 code = acl_NewExternalACL((p + n), &externalstore[which]);
188 printf("Couldn't allocate external list.\n");
191 sprintf(externalstore[which], "%d", p);
192 tptr = externalstore[which] + 1;
194 sprintf(tptr, "%s", ptr);
195 ptr = externalstore[which] + size;
196 sprintf(ptr, "%s\t%d\n", name, realrights);
198 /* new external list */
199 code = acl_NewExternalACL(1, &externalstore[which]);
201 printf("Couldn't allocate external list.\n");
206 sprintf(externalstore[which], "%d\n%d\n%s\t%d\n", p, n, name,
209 } else if (!strcmp(op, "la")) {
211 if (externalstore[which] == NULL) {
212 printf("No acl in %d.\n", which);
216 ptr = externalstore[which];
217 sscanf(ptr, "%d\n%d\n", &p, &n);
220 for (i = 0; i < p; i++) {
221 sscanf(ptr, "%s\t%d\n", name, &realrights);
222 printf("%s\t", name);
228 printf("Negative rights: \n");
229 for (i = 0; i < n; i++) {
230 scanf(ptr, "%s\t%d\n", name, &realrights);
231 printf("%s\t", name);
236 } else if (!strcmp(op, "cr")) {
237 scanf("%s %d", name, &which);
238 if (aclstore[which] == NULL) {
239 printf("No acl in %d.\n", which);
243 names.namelist_len = 1;
244 names.namelist_val = (prname *) malloc(strlen(name) + 1);
245 strncpy(names.namelist_val, name, PR_MAXNAMELEN);
246 code = pr_NameToId(&names, &ids);
248 printf("Couldn't translate %s\n", name);
252 code = pr_GetCPS(*ids.idlist_val, &cps);
254 printf("Couldn't get cps\n");
258 code = acl_CheckRights(aclstore[which], &cps, &realrights);
260 printf("Couldn't check rights\n");
264 printf("Rights for %s on %d are:\n", name, which);
268 printf("Unknown op!\n");
276 while (**s != '\n' && **s != '\0')