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