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
10 #include <afsconfig.h>
11 #include <afs/param.h>
18 #include <WINNT/afsevent.h>
30 #include <afs/cellconfig.h>
31 #include <afs/afsutil.h>
32 #include <afs/com_err.h>
40 report_error(afs_int32 code, char *name, char *gname)
44 printf(" added %s to %s.\n", name, gname);
45 } else if (code == PRIDEXIST) {
47 printf(" user %s already on group %s\n", name, gname);
49 fprintf(stderr, "Couldn't add %s to %s!\n", name, gname);
50 fprintf(stderr, "%s (%d).\n", pr_ErrorMsg(code), code);
57 /* OK, this REALLY sucks bigtime, but I can't tell who is calling
58 * afsconf_CheckAuth easily, and only *SERVERS* should be calling osi_audit
59 * anyway. It's gonna give somebody fits to debug, I know, I know.
64 #include "AFS_component_version_number.c"
67 main(int argc, char **argv)
69 register afs_int32 code;
70 char name[PR_MAXNAMELEN];
71 char gname[PR_MAXNAMELEN];
72 char owner[PR_MAXNAMELEN];
84 fprintf(stderr, "Usage: readgroup [-v] [-c cellname] groupfile.\n");
88 for (i = 1; i < argc; i++) {
89 if (!strcmp(argv[i], "-v"))
92 if (!strcmp(argv[i], "-c")) {
93 cellname = (char *)malloc(100);
94 strncpy(cellname, argv[++i], 100);
96 strncpy(buf, argv[i], 150);
99 code = pr_Initialize(2, AFSDIR_CLIENT_ETC_DIRPATH, cellname);
102 fprintf(stderr, "pr_Initialize failed .. exiting.\n");
103 fprintf(stderr, "%s (%d).\n", pr_ErrorMsg(code), code);
107 if ((fp = fopen(buf, "r")) == NULL) {
108 fprintf(stderr, "Couldn't open %s.\n", argv[1]);
112 while ((tmp = fgets(buf, 3000, fp)) != NULL) {
113 /* group file lines must either have the name of a group or a tab or blank space at beginning */
116 if (buf[0] != ' ' && buf[0] != '\t') {
117 /* grab the group name */
118 memset(gname, 0, PR_MAXNAMELEN);
119 memset(owner, 0, PR_MAXNAMELEN);
120 sscanf(buf, "%s %d", gname, &id);
125 ptr = strchr(gname, ':');
126 strncpy(owner, gname, ptr - gname);
127 if (strcmp(owner, "system") == 0)
128 strncpy(owner, "system:administrators", PR_MAXNAMELEN);
131 printf("Group is %s, owner is %s, id is %d.\n", gname, owner,
133 code = pr_CreateGroup(gname, owner, &id);
135 if (code != PRIDEXIST) { /* already exists */
136 fprintf(stderr, "Failed to create group %s with id %d!\n",
138 fprintf(stderr, "%s (%d).\n", pr_ErrorMsg(code), code);
140 if (code != PREXIST && code != PRIDEXIST) { /* we won't add users if it's not there */
145 /* read members out of buf and add to the group */
146 memset(name, 0, PR_MAXNAMELEN);
147 while (sscanf(tmp, "%s", name) != EOF) {
148 if (strchr(name, ':') == NULL) {
149 /* then it's not a group */
150 code = pr_AddToGroup(name, gname);
151 report_error(code, name, gname);
153 /* add the members of a group to the group */
155 printf("Adding %s to %s.\n",
156 lnames.namelist_val[i], gname);
157 code = pr_ListMembers(name, &lnames);
160 "Couldn't get the members for %s to add to %s.\n",
162 fprintf(stderr, "%s (%d).\n", pr_ErrorMsg(code),
165 for (i = 0; i < lnames.namelist_len; i++) {
167 pr_AddToGroup(lnames.namelist_val[i], gname);
168 report_error(code, lnames.namelist_val[i], gname);
170 if (lnames.namelist_val)
171 free(lnames.namelist_val);
173 memset(name, 0, PR_MAXNAMELEN);
177 } else { /* must have more names to add */
178 /* if we couldn't create the group, and it wasn't already there, don't try to add more users */
181 /* read members out of buf and add to the group */
182 memset(name, 0, PR_MAXNAMELEN);
185 while (sscanf(tmp, "%s", name) != EOF) {
186 if (strchr(name, ':') == NULL) {
187 /* then it's not a group */
188 code = pr_AddToGroup(name, gname);
189 report_error(code, name, gname);
191 /* add the members of a group to the group */
192 code = pr_ListMembers(name, &lnames);
195 "Couldn't get the members for %s to add to %s.\n",
197 fprintf(stderr, "%s (%d).\n", pr_ErrorMsg(code),
200 for (i = 0; i < lnames.namelist_len; i++) {
202 printf("Adding %s to %s.\n",
203 lnames.namelist_val[i], gname);
204 code = pr_AddToGroup(lnames.namelist_val[i], gname);
205 report_error(code, lnames.namelist_val[i], gname);
207 if (lnames.namelist_val)
208 free(lnames.namelist_val);
210 memset(name, 0, PR_MAXNAMELEN);
220 while (**s != ' ' && **s != '\t' && **s != '\0')
222 while (**s == ' ' || **s == '\t')