ptserver: Tidy malloc handling in readpwd
[openafs.git] / src / ptserver / readpwd.c
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  *
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
8  */
9
10 #include <afsconfig.h>
11 #include <afs/param.h>
12
13 #include <roken.h>
14
15 #ifdef AFS_NT40_ENV
16 #include <WINNT/afsevent.h>
17 #endif
18
19 #include <rx/rx.h>
20 #include <rx/xdr.h>
21 #include <afs/cellconfig.h>
22 #include <afs/afsutil.h>
23 #include <afs/com_err.h>
24
25 #include "ptclient.h"
26 #include "ptuser.h"
27 #include "ptprototypes.h"
28
29 int
30 osi_audit(void)
31 {
32 /* OK, this REALLY sucks bigtime, but I can't tell who is calling
33  * afsconf_CheckAuth easily, and only *SERVERS* should be calling osi_audit
34  * anyway.  It's gonna give somebody fits to debug, I know, I know.
35  */
36     return 0;
37 }
38
39 #include "AFS_component_version_number.c"
40
41 int
42 main(afs_int32 argc, char **argv)
43 {
44
45     afs_int32 code;
46     char name[PR_MAXNAMELEN];
47     afs_int32 id;
48     char buf[150];
49     FILE *fp;
50     char *ptr;
51     char *aptr;
52     char *tmp;
53     char uid[8];
54     afs_int32 i;
55     afs_int32 verbose = 0;
56     char *cellname = NULL;
57
58     if (argc < 2) {
59         fprintf(stderr, "Usage: readpwd [-v] [-c cellname] passwdfile.\n");
60         exit(1);
61     }
62     for (i = 1; i < argc; i++) {
63         if (!strcmp(argv[i], "-v"))
64             verbose = 1;
65         else {
66             if (!strcmp(argv[i], "-c")) {
67                 if (!cellname)
68                     cellname = malloc(100);
69                 strncpy(cellname, argv[++i], 100);
70             } else
71                 strncpy(buf, argv[i], 150);
72         }
73     }
74     code = pr_Initialize(2, AFSDIR_CLIENT_ETC_DIRPATH, cellname);
75     if (cellname)
76         free(cellname);
77     if (code) {
78         fprintf(stderr, "pr_Initialize failed, code %d.\n", code);
79         exit(1);
80     }
81
82
83     if ((fp = fopen(buf, "r")) == NULL) {
84         fprintf(stderr, "Couldn't open %s.\n", argv[1]);
85         exit(2);
86     }
87     while ((tmp = fgets(buf, 150, fp)) != NULL) {
88         memset(name, 0, PR_MAXNAMELEN);
89         memset(uid, 0, 8);
90         ptr = strchr(buf, ':');
91         strncpy(name, buf, ptr - buf);
92         aptr = strchr(++ptr, ':');
93         ptr = strchr(++aptr, ':');
94         strncpy(uid, aptr, ptr - aptr);
95         id = atoi(uid);
96         if (verbose)
97             printf("Adding %s with id %d.\n", name, id);
98         code = pr_CreateUser(name, &id);
99         if (code) {
100             fprintf(stderr, "Failed to add user %s with id %d!\n", name, id);
101             fprintf(stderr, "%s (%d).\n", pr_ErrorMsg(code), code);
102         }
103     }
104     return 0;
105 }