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