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>
17 #include <WINNT/afsevent.h>
23 #include <afs/cellconfig.h>
24 #include <afs/afsutil.h>
25 #include <afs/com_err.h>
30 #include "ptprototypes.h"
33 static void skip(char **);
36 report_error(afs_int32 code
, char *name
, char *gname
)
40 printf(" added %s to %s.\n", name
, gname
);
41 } else if (code
== PRIDEXIST
) {
43 printf(" user %s already on group %s\n", name
, gname
);
45 fprintf(stderr
, "Couldn't add %s to %s!\n", name
, gname
);
46 fprintf(stderr
, "%s (%d).\n", pr_ErrorMsg(code
), code
);
53 /* OK, this REALLY sucks bigtime, but I can't tell who is calling
54 * afsconf_CheckAuth easily, and only *SERVERS* should be calling osi_audit
55 * anyway. It's gonna give somebody fits to debug, I know, I know.
60 #include "AFS_component_version_number.c"
63 main(int argc
, char **argv
)
66 char name
[PR_MAXNAMELEN
];
67 char gname
[PR_MAXNAMELEN
];
68 char owner
[PR_MAXNAMELEN
];
82 fprintf(stderr
, "Usage: readgroup [-v] [-c cellname] groupfile.\n");
86 for (i
= 1; i
< argc
; i
++) {
87 if (!strcmp(argv
[i
], "-v"))
90 if (!strcmp(argv
[i
], "-c")) {
91 cellname
= malloc(100);
92 strncpy(cellname
, argv
[++i
], 100);
94 strncpy(buf
, argv
[i
], 150);
98 /* Catch missing filename */
100 fprintf(stderr
, "Usage: readgroup [-v] [-c cellname] groupfile.\n");
104 code
= pr_Initialize(2, AFSDIR_CLIENT_ETC_DIRPATH
, cellname
);
107 fprintf(stderr
, "pr_Initialize failed .. exiting.\n");
108 fprintf(stderr
, "%s (%d).\n", pr_ErrorMsg(code
), code
);
112 if ((fp
= fopen(buf
, "r")) == NULL
) {
113 fprintf(stderr
, "Couldn't open %s.\n", argv
[1]);
117 while ((tmp
= fgets(buf
, 3000, fp
)) != NULL
) {
118 /* group file lines must either have the name of a group or a tab or blank space at beginning */
121 if (buf
[0] != ' ' && buf
[0] != '\t') {
122 /* grab the group name */
123 memset(gname
, 0, PR_MAXNAMELEN
);
124 memset(owner
, 0, PR_MAXNAMELEN
);
125 sscanf(buf
, "%63s %d", gname
, &id
);
130 ptr
= strchr(gname
, ':');
131 strncpy(owner
, gname
, ptr
- gname
);
132 if (strcmp(owner
, "system") == 0)
133 strncpy(owner
, "system:administrators", PR_MAXNAMELEN
);
136 printf("Group is %s, owner is %s, id is %d.\n", gname
, owner
,
138 code
= pr_CreateGroup(gname
, owner
, &id
);
140 if (code
!= PRIDEXIST
) { /* already exists */
141 fprintf(stderr
, "Failed to create group %s with id %d!\n",
143 fprintf(stderr
, "%s (%d).\n", pr_ErrorMsg(code
), code
);
145 if (code
!= PREXIST
&& code
!= PRIDEXIST
) { /* we won't add users if it's not there */
150 /* read members out of buf and add to the group */
151 memset(name
, 0, PR_MAXNAMELEN
);
152 while (sscanf(tmp
, "%63s", name
) != EOF
) {
153 if (strchr(name
, ':') == NULL
) {
154 /* then it's not a group */
155 code
= pr_AddToGroup(name
, gname
);
156 report_error(code
, name
, gname
);
158 /* add the members of a group to the group */
160 printf("Adding %s to %s.\n", name
, gname
);
161 code
= pr_ListMembers(name
, &lnames
);
164 "Couldn't get the members for %s to add to %s.\n",
166 fprintf(stderr
, "%s (%d).\n", pr_ErrorMsg(code
),
169 for (i
= 0; i
< lnames
.namelist_len
; i
++) {
171 pr_AddToGroup(lnames
.namelist_val
[i
], gname
);
172 report_error(code
, lnames
.namelist_val
[i
], gname
);
174 if (lnames
.namelist_val
)
175 free(lnames
.namelist_val
);
178 memset(name
, 0, PR_MAXNAMELEN
);
182 } else { /* must have more names to add */
183 /* if we couldn't create the group, and it wasn't already there, don't try to add more users */
186 /* read members out of buf and add to the group */
187 memset(name
, 0, PR_MAXNAMELEN
);
190 while (sscanf(tmp
, "%63s", name
) != EOF
) {
191 if (strchr(name
, ':') == NULL
) {
192 /* then it's not a group */
193 code
= pr_AddToGroup(name
, gname
);
194 report_error(code
, name
, gname
);
196 /* add the members of a group to the group */
197 code
= pr_ListMembers(name
, &lnames
);
200 "Couldn't get the members for %s to add to %s.\n",
202 fprintf(stderr
, "%s (%d).\n", pr_ErrorMsg(code
),
205 for (i
= 0; i
< lnames
.namelist_len
; i
++) {
207 printf("Adding %s to %s.\n",
208 lnames
.namelist_val
[i
], gname
);
209 code
= pr_AddToGroup(lnames
.namelist_val
[i
], gname
);
210 report_error(code
, lnames
.namelist_val
[i
], gname
);
212 if (lnames
.namelist_val
)
213 free(lnames
.namelist_val
);
216 memset(name
, 0, PR_MAXNAMELEN
);
227 while (**s
!= ' ' && **s
!= '\t' && **s
!= '\0')
229 while (**s
== ' ' || **s
== '\t')