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>
21 #include <sys/types.h>
25 #include <netinet/in.h>
35 struct acl_accessList *aclstore[20];
36 char *externalstore[20];
40 register long arights;
42 if (arights & PRSFS_READ)
44 if (arights & PRSFS_LOOKUP)
46 if (arights & PRSFS_INSERT)
48 if (arights & PRSFS_DELETE)
50 if (arights & PRSFS_WRITE)
52 if (arights & PRSFS_LOCK)
54 if (arights & PRSFS_ADMINISTER)
60 register char *arights;
65 if (!strcmp(arights, "read"))
66 return PRSFS_READ | PRSFS_LOOKUP;
67 if (!strcmp(arights, "write"))
68 return PRSFS_READ | PRSFS_LOOKUP | PRSFS_INSERT | PRSFS_DELETE |
69 PRSFS_WRITE | PRSFS_LOCK;
70 if (!strcmp(arights, "mail"))
71 return PRSFS_INSERT | PRSFS_LOCK | PRSFS_LOOKUP;
72 if (!strcmp(arights, "all"))
73 return PRSFS_READ | PRSFS_LOOKUP | PRSFS_INSERT | PRSFS_DELETE |
74 PRSFS_WRITE | PRSFS_LOCK | PRSFS_ADMINISTER;
75 if (!strcmp(arights, "none"))
77 len = strlen(arights);
79 for (i = 0; i < len; i++) {
94 mode |= PRSFS_ADMINISTER;
96 printf("Bogus rights character '%c'.\n", tc);
123 struct acl_accessList *alist;
126 code = pr_Initialize(0, "/usr/afs/etc", 0);
128 fprintf(stderr, "Couldn't initialize wrt to protection server.\n");
131 for (i = 0; i < 20; i++) {
132 externalstore[i] = NULL;
139 if (!strcmp(op, "q"))
141 else if (!strcmp(op, "ex")) {
143 if (aclstore[which] == NULL) {
144 printf("No internal acl in %d.\n", which);
148 if (externalstore[which] != NULL) {
149 code = acl_FreeExternalACL(&externalstore[which]);
151 printf("Couldn't free current ACL.\n");
156 code = acl_Externalize(aclstore[which], &externalstore[which]);
158 printf("Couldn't externalize -- code is %d.\n", code);
159 } else if (!strcmp(op, "in")) {
161 if (externalstore[which] == NULL) {
162 printf("No external acl in %d.\n", which);
166 if (aclstore[which] != NULL) {
167 code = acl_FreeACL(&aclstore[which]);
169 printf("Couldn't free current ACL.\n");
174 code = acl_Internalize(externalstore[which], &aclstore[which]);
176 printf("Couldn't internalize. Code is %d\n", code);
177 } else if (!strcmp(op, "sa")) {
178 scanf("%d %s %s", &which, name, rights);
179 realrights = (long)Convert(rights);
180 if (externalstore[which] != NULL) {
181 /* we're adding to access list */
182 size = strlen(externalstore[which]);
183 ptr = (char *)malloc(size);
184 sscanf(externalstore[which], "%d\n%d\n", &p, &n);
185 strncpy(ptr, externalstore[which], size);
187 free(externalstore[which]);
188 code = acl_NewExternalACL((p + n), &externalstore[which]);
190 printf("Couldn't allocate external list.\n");
193 sprintf(externalstore[which], "%d", p);
194 tptr = externalstore[which] + 1;
196 sprintf(tptr, "%s", ptr);
197 ptr = externalstore[which] + size;
198 sprintf(ptr, "%s\t%d\n", name, realrights);
200 /* new external list */
201 code = acl_NewExternalACL(1, &externalstore[which]);
203 printf("Couldn't allocate external list.\n");
208 sprintf(externalstore[which], "%d\n%d\n%s\t%d\n", p, n, name,
211 } else if (!strcmp(op, "la")) {
213 if (externalstore[which] == NULL) {
214 printf("No acl in %d.\n", which);
218 ptr = externalstore[which];
219 sscanf(ptr, "%d\n%d\n", &p, &n);
222 for (i = 0; i < p; i++) {
223 sscanf(ptr, "%s\t%d\n", name, &realrights);
224 printf("%s\t", name);
230 printf("Negative rights: \n");
231 for (i = 0; i < n; i++) {
232 scanf(ptr, "%s\t%d\n", name, &realrights);
233 printf("%s\t", name);
238 } else if (!strcmp(op, "cr")) {
239 scanf("%s %d", name, &which);
240 if (aclstore[which] == NULL) {
241 printf("No acl in %d.\n", which);
245 names.namelist_len = 1;
246 names.namelist_val = (prname *) malloc(strlen(name) + 1);
247 strncpy(names.namelist_val, name, PR_MAXNAMELEN);
248 code = pr_NameToId(&names, &ids);
250 printf("Couldn't translate %s\n", name);
254 code = pr_GetCPS(*ids.idlist_val, &cps);
256 printf("Couldn't get cps\n");
260 code = acl_CheckRights(aclstore[which], &cps, &realrights);
262 printf("Couldn't check rights\n");
266 printf("Rights for %s on %d are:\n", name, which);
270 printf("Unknown op!\n");
278 while (**s != '\n' && **s != '\0')