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