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 <afs/param.h>
16 #include <afsconfig.h>
20 #include <sys/types.h>
24 #include <netinet/in.h>
34 struct acl_accessList *aclstore[20];
35 char *externalstore[20];
38 register long arights; {
39 if (arights & PRSFS_READ) printf("r");
40 if (arights & PRSFS_LOOKUP) printf("l");
41 if (arights & PRSFS_INSERT) printf("i");
42 if (arights & PRSFS_DELETE) printf("d");
43 if (arights & PRSFS_WRITE) printf("w");
44 if (arights & PRSFS_LOCK) printf("k");
45 if (arights & PRSFS_ADMINISTER) printf("a");
49 register char *arights; {
53 if (!strcmp(arights,"read")) return PRSFS_READ | PRSFS_LOOKUP;
54 if (!strcmp(arights, "write")) return PRSFS_READ | PRSFS_LOOKUP | PRSFS_INSERT | PRSFS_DELETE | PRSFS_WRITE | PRSFS_LOCK;
55 if (!strcmp(arights, "mail")) return PRSFS_INSERT | PRSFS_LOCK | PRSFS_LOOKUP;
56 if (!strcmp(arights, "all")) return PRSFS_READ | PRSFS_LOOKUP | PRSFS_INSERT | PRSFS_DELETE | PRSFS_WRITE | PRSFS_LOCK | PRSFS_ADMINISTER;
57 if (!strcmp(arights, "none")) return 0;
58 len = strlen(arights);
62 if (tc == 'r') mode |= PRSFS_READ;
63 else if (tc == 'l') mode |= PRSFS_LOOKUP;
64 else if (tc == 'i') mode |= PRSFS_INSERT;
65 else if (tc == 'd') mode |= PRSFS_DELETE;
66 else if (tc == 'w') mode |= PRSFS_WRITE;
67 else if (tc == 'k') mode |= PRSFS_LOCK;
68 else if (tc == 'a') mode |= PRSFS_ADMINISTER;
70 printf("Bogus rights character '%c'.\n",tc);
97 struct acl_accessList *alist;
100 code = pr_Initialize(0,"/usr/afs/etc",0);
102 fprintf(stderr,"Couldn't initialize wrt to protection server.\n");
106 externalstore[i] = NULL;
113 if (!strcmp(op,"q")) exit(2);
114 else if (!strcmp(op,"ex")) {
116 if (aclstore[which] == NULL) {
117 printf("No internal acl in %d.\n",which);
121 if (externalstore[which] != NULL) {
122 code = acl_FreeExternalACL(&externalstore[which]);
124 printf("Couldn't free current ACL.\n");
129 code = acl_Externalize(aclstore[which], &externalstore[which]);
131 printf("Couldn't externalize -- code is %d.\n",code);
133 else if (!strcmp(op,"in")) {
135 if (externalstore[which] == NULL) {
136 printf("No external acl in %d.\n",which);
140 if (aclstore[which] != NULL) {
141 code = acl_FreeACL(&aclstore[which]);
143 printf("Couldn't free current ACL.\n");
148 code = acl_Internalize(externalstore[which],&aclstore[which]);
150 printf("Couldn't internalize. Code is %d\n",code);
152 else if (!strcmp(op,"sa")) {
153 scanf("%d %s %s",&which,name,rights);
154 realrights = (long) Convert(rights);
155 if (externalstore[which] != NULL) {
156 /* we're adding to access list */
157 size = strlen(externalstore[which]);
158 ptr = (char *)malloc(size);
159 sscanf(externalstore[which],"%d\n%d\n",&p,&n);
160 strncpy(ptr,externalstore[which],size);
162 free(externalstore[which]);
163 code = acl_NewExternalACL((p+n),&externalstore[which]);
165 printf("Couldn't allocate external list.\n");
168 sprintf(externalstore[which],"%d",p);
169 tptr = externalstore[which] + 1;
171 sprintf(tptr,"%s",ptr);
172 ptr = externalstore[which] + size;
173 sprintf(ptr,"%s\t%d\n",name,realrights);
176 /* new external list */
177 code = acl_NewExternalACL(1,&externalstore[which]);
179 printf("Couldn't allocate external list.\n");
184 sprintf(externalstore[which],"%d\n%d\n%s\t%d\n",p,n,name,realrights);
187 else if (!strcmp(op,"la")) {
189 if (externalstore[which] == NULL) {
190 printf("No acl in %d.\n",which);
194 ptr = externalstore[which];
195 sscanf(ptr,"%d\n%d\n",&p,&n);
198 for (i = 0;i<p;i++) {
199 sscanf(ptr,"%s\t%d\n",name,&realrights);
206 printf("Negative rights: \n");
208 scanf(ptr,"%s\t%d\n",name,&realrights);
215 else if (!strcmp(op,"cr")) {
216 scanf("%s %d",name,&which);
217 if (aclstore[which] == NULL) {
218 printf("No acl in %d.\n",which);
222 names.namelist_len = 1;
223 names.namelist_val = (prname *)malloc(strlen(name) + 1);
224 strncpy(names.namelist_val,name,PR_MAXNAMELEN);
225 code = pr_NameToId(&names,&ids);
227 printf("Couldn't translate %s\n",name);
231 code = pr_GetCPS(*ids.idlist_val,&cps);
233 printf("Couldn't get cps\n");
237 code = acl_CheckRights(aclstore[which],&cps,&realrights);
239 printf("Couldn't check rights\n");
243 printf("Rights for %s on %d are:\n",name,which);
247 else printf("Unknown op!\n");
255 while (**s != '\n' && **s != '\0') (*s)++;
256 if (**s == '\n') (*s)++;