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>
27 struct acl_accessList
*aclstore
[20];
28 char *externalstore
[20];
34 if (arights
& PRSFS_READ
)
36 if (arights
& PRSFS_LOOKUP
)
38 if (arights
& PRSFS_INSERT
)
40 if (arights
& PRSFS_DELETE
)
42 if (arights
& PRSFS_WRITE
)
44 if (arights
& PRSFS_LOCK
)
46 if (arights
& PRSFS_ADMINISTER
)
57 if (!strcmp(arights
, "read"))
58 return PRSFS_READ
| PRSFS_LOOKUP
;
59 if (!strcmp(arights
, "write"))
60 return PRSFS_READ
| PRSFS_LOOKUP
| PRSFS_INSERT
| PRSFS_DELETE
|
61 PRSFS_WRITE
| PRSFS_LOCK
;
62 if (!strcmp(arights
, "mail"))
63 return PRSFS_INSERT
| PRSFS_LOCK
| PRSFS_LOOKUP
;
64 if (!strcmp(arights
, "all"))
65 return PRSFS_READ
| PRSFS_LOOKUP
| PRSFS_INSERT
| PRSFS_DELETE
|
66 PRSFS_WRITE
| PRSFS_LOCK
| PRSFS_ADMINISTER
;
67 if (!strcmp(arights
, "none"))
69 len
= strlen(arights
);
71 for (i
= 0; i
< len
; i
++) {
86 mode
|= PRSFS_ADMINISTER
;
88 printf("Bogus rights character '%c'.\n", tc
);
115 struct acl_accessList
*alist
;
118 code
= pr_Initialize(0, "/usr/afs/etc", 0);
120 fprintf(stderr
, "Couldn't initialize wrt to protection server.\n");
123 for (i
= 0; i
< 20; i
++) {
124 externalstore
[i
] = NULL
;
131 if (!strcmp(op
, "q"))
133 else if (!strcmp(op
, "ex")) {
135 if (aclstore
[which
] == NULL
) {
136 printf("No internal acl in %d.\n", which
);
140 if (externalstore
[which
] != NULL
) {
141 code
= acl_FreeExternalACL(&externalstore
[which
]);
143 printf("Couldn't free current ACL.\n");
148 code
= acl_Externalize(aclstore
[which
], &externalstore
[which
]);
150 printf("Couldn't externalize -- code is %d.\n", code
);
151 } else if (!strcmp(op
, "in")) {
153 if (externalstore
[which
] == NULL
) {
154 printf("No external acl in %d.\n", which
);
158 if (aclstore
[which
] != NULL
) {
159 code
= acl_FreeACL(&aclstore
[which
]);
161 printf("Couldn't free current ACL.\n");
166 code
= acl_Internalize(externalstore
[which
], &aclstore
[which
]);
168 printf("Couldn't internalize. Code is %d\n", code
);
169 } else if (!strcmp(op
, "sa")) {
170 scanf("%d %s %s", &which
, name
, rights
);
171 realrights
= (long)Convert(rights
);
172 if (externalstore
[which
] != NULL
) {
173 /* we're adding to access list */
174 size
= strlen(externalstore
[which
]);
176 sscanf(externalstore
[which
], "%d\n%d\n", &p
, &n
);
177 strncpy(ptr
, externalstore
[which
], size
);
179 free(externalstore
[which
]);
180 code
= acl_NewExternalACL((p
+ n
), &externalstore
[which
]);
182 printf("Couldn't allocate external list.\n");
185 sprintf(externalstore
[which
], "%d", p
);
186 tptr
= externalstore
[which
] + 1;
188 sprintf(tptr
, "%s", ptr
);
189 ptr
= externalstore
[which
] + size
;
190 sprintf(ptr
, "%s\t%d\n", name
, realrights
);
192 /* new external list */
193 code
= acl_NewExternalACL(1, &externalstore
[which
]);
195 printf("Couldn't allocate external list.\n");
200 sprintf(externalstore
[which
], "%d\n%d\n%s\t%d\n", p
, n
, name
,
203 } else if (!strcmp(op
, "la")) {
205 if (externalstore
[which
] == NULL
) {
206 printf("No acl in %d.\n", which
);
210 ptr
= externalstore
[which
];
211 sscanf(ptr
, "%d\n%d\n", &p
, &n
);
214 for (i
= 0; i
< p
; i
++) {
215 sscanf(ptr
, "%s\t%d\n", name
, &realrights
);
216 printf("%s\t", name
);
222 printf("Negative rights: \n");
223 for (i
= 0; i
< n
; i
++) {
224 scanf(ptr
, "%s\t%d\n", name
, &realrights
);
225 printf("%s\t", name
);
230 } else if (!strcmp(op
, "cr")) {
231 scanf("%s %d", name
, &which
);
232 if (aclstore
[which
] == NULL
) {
233 printf("No acl in %d.\n", which
);
237 names
.namelist_len
= 1;
238 names
.namelist_val
= malloc(strlen(name
) + 1);
239 strncpy(names
.namelist_val
, name
, PR_MAXNAMELEN
);
240 code
= pr_NameToId(&names
, &ids
);
242 printf("Couldn't translate %s\n", name
);
246 code
= pr_GetCPS(*ids
.idlist_val
, &cps
);
248 printf("Couldn't get cps\n");
252 code
= acl_CheckRights(aclstore
[which
], &cps
, &realrights
);
254 printf("Couldn't check rights\n");
258 printf("Rights for %s on %d are:\n", name
, which
);
262 printf("Unknown op!\n");
270 while (**s
!= '\n' && **s
!= '\0')