extern char *optarg;
extern int optind;
+extern int pr_noAuth;
+
int restricted = 0;
static int display_entry(int);
if (tparm[0].items) {
wflag++;
+ /* so we are treated as admin and can create "mis"owned
+ groups */
+ pr_noAuth = 1;
}
if (tparm[1].items) {
flags |= DO_USR;
if (wflag) {
struct usr_list *u;
+ int seenGroup = 0, id = 0, flags = 0;
while (fgets(buffer, sizeof(buffer), dfp)) {
- int id, oid, cid, flags, quota, uid;
+ int oid, cid, quota, uid;
char name[PR_MAXNAMELEN], mem[PR_MAXNAMELEN];
if (isspace(*buffer)) {
- sscanf(buffer, "%s %d", mem, &uid);
+ code = sscanf(buffer, "%s %d", mem, &uid);
+ if (code != 2) {
+ fprintf(stderr,
+ "Insuffient data provided for group membership\n");
+ exit(1);
+ }
+
+ if (!seenGroup) {
+ fprintf(stderr,
+ "Group member %s listed outside of group\n",
+ mem);
+ exit(1);
+ }
for (u = usr_head; u; u = u->next)
if (u->uid && u->uid == uid)
fprintf(stderr, "Error while adding %s to %s: %s\n", mem,
name, afs_error_message(code));
} else {
- sscanf(buffer, "%s %d/%d %d %d %d", name, &flags, "a, &id,
- &oid, &cid);
+ code = sscanf(buffer, "%s %d/%d %d %d %d", name, &flags, "a, &id,
+ &oid, &cid);
+ if (code != 6) {
+ fprintf(stderr,
+ "Insufficient data provided for user/group\n");
+ exit(1);
+ }
+
+ seenGroup = 1;
if (FindByID(0, id))
code = PRIDEXIST;
code = CreateEntry(0, name, &id, 1 /*idflag */ ,
flags & PRGRP, oid, cid);
if (code == PRBADNAM) {
- u = (struct usr_list *)malloc(sizeof(struct usr_list));
+ u = malloc(sizeof(struct usr_list));
u->next = usr_head;
u->uid = id;
strcpy(u->name, name);
i = grp_count++ % 1024;
if (i == 0) {
- g = (struct grp_list *)malloc(sizeof(struct grp_list));
+ g = malloc(sizeof(struct grp_list));
g->next = grp_head;
grp_head = g;
}
last = he;
he = he->next;
}
- he = (struct hash_entry *)malloc(sizeof(struct hash_entry));
+ he = malloc(sizeof(struct hash_entry));
if (he == 0) {
fprintf(stderr, "pt_util: No Memory for internal hash table.\n");
exit(1);