xref: /original-bsd/usr.bin/passwd/passwd.c (revision 95a66346)
1 /*
2  * Copyright (c) 1988 The Regents of the University of California.
3  * All rights reserved.
4  *
5  * %sccs.include.redist.c%
6  */
7 
8 #ifndef lint
9 char copyright[] =
10 "@(#) Copyright (c) 1988 The Regents of the University of California.\n\
11  All rights reserved.\n";
12 #endif /* not lint */
13 
14 #ifndef lint
15 static char sccsid[] = "@(#)passwd.c	5.4 (Berkeley) 03/14/91";
16 #endif /* not lint */
17 
18 #include <stdio.h>
19 #include <unistd.h>
20 
21 #ifdef KERBEROS
22 int use_kerberos = 1;
23 #endif
24 
25 main(argc, argv)
26 	int argc;
27 	char **argv;
28 {
29 	extern int optind;
30 	register int ch;
31 	char *uname;
32 
33 #ifdef KERBEROS
34 	while ((ch = getopt(argc, argv, "l")) != EOF)
35 		switch (ch) {
36 		case 'l':		/* change local password file */
37 			use_kerberos = 0;
38 			break;
39 #else
40 	while ((ch = getopt(argc, argv, "")) != EOF)
41 		switch (ch) {
42 #endif
43 		default:
44 		case '?':
45 			usage();
46 			exit(1);
47 		}
48 
49 	argc -= optind;
50 	argv += optind;
51 
52 	uname = getlogin();
53 
54 	switch(argc) {
55 	case 0:
56 		break;
57 	case 1:
58 #ifdef	KERBEROS
59 		if (use_kerberos && strcmp(argv[1], uname)) {
60 			(void)fprintf(stderr,
61 			   "passwd: must kinit to change another's password\n");
62 			exit(1);
63 		}
64 #endif
65 		uname = argv[0];
66 		break;
67 	default:
68 		usage();
69 		exit(1);
70 	}
71 
72 #ifdef	KERBEROS
73 	if (use_kerberos)
74 		exit(krb_passwd());
75 #endif
76 	exit(local_passwd(uname));
77 }
78 
79 usage()
80 {
81 #ifdef	KERBEROS
82 	(void)fprintf(stderr, "usage: passwd [-l] user\n");
83 #else
84 	(void)fprintf(stderr, "usage: passwd user\n");
85 #endif
86 }
87