xref: /original-bsd/usr.bin/passwd/passwd.c (revision 0958d343)
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.6 (Berkeley) 12/07/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[0], uname)) {
60 			(void)fprintf(stderr, "passwd: %s\n\t%s\n%s\n",
61 "to change another user's Kerberos password, do",
62 "\"kinit user; passwd; kdestroy\";",
63 "to change a user's local passwd, use \"passwd -l user\"");
64 			exit(1);
65 		}
66 #endif
67 		uname = argv[0];
68 		break;
69 	default:
70 		usage();
71 		exit(1);
72 	}
73 
74 #ifdef	KERBEROS
75 	if (use_kerberos)
76 		exit(krb_passwd());
77 #endif
78 	exit(local_passwd(uname));
79 }
80 
81 usage()
82 {
83 #ifdef	KERBEROS
84 	(void)fprintf(stderr, "usage: passwd [-l] user\n");
85 #else
86 	(void)fprintf(stderr, "usage: passwd user\n");
87 #endif
88 }
89