|
|
1.1 ! root 1: /* ! 2: * $Source: /usr/src/kerberosIV/kinit/RCS/kinit.c,v $ ! 3: * $Author: kfall $ ! 4: * ! 5: * Copyright 1987, 1988 by the Massachusetts Institute of Technology. ! 6: * ! 7: * For copying and distribution information, please see the file ! 8: * <mit-copyright.h>. ! 9: * ! 10: * Routine to initialize user to Kerberos. Prompts optionally for ! 11: * user, instance and realm. Authenticates user and gets a ticket ! 12: * for the Kerberos ticket-granting service for future use. ! 13: * ! 14: * Options are: ! 15: * ! 16: * -i[instance] ! 17: * -r[realm] ! 18: * -v[erbose] ! 19: * -l[ifetime] ! 20: */ ! 21: ! 22: #ifndef lint ! 23: static char rcsid_kinit_c[] = ! 24: "$Header: /usr/src/kerberosIV/kinit/RCS/kinit.c,v 4.15 90/06/25 21:01:06 kfall Exp $"; ! 25: #endif lint ! 26: ! 27: #include <sys/types.h> ! 28: #include <sys/param.h> ! 29: #include <mit-copyright.h> ! 30: #include <string.h> ! 31: #include <stdio.h> ! 32: #include <des.h> ! 33: #include <krb.h> ! 34: #include <pwd.h> ! 35: #include <paths.h> ! 36: ! 37: #define LEN MAXHOSTNAMELEN ! 38: #define LIFE DEFAULT_TKT_LIFE /* in 5-minute units */ ! 39: #define INITIAL_TICKET "krbtgt" ! 40: ! 41: char *progname; ! 42: ! 43: char aname[ANAME_SZ]; ! 44: char inst[INST_SZ]; ! 45: char realm[REALM_SZ]; ! 46: ! 47: main(argc, argv) ! 48: char *argv[]; ! 49: { ! 50: char buf[LEN]; ! 51: char *username = NULL; ! 52: int iflag, rflag, vflag, lflag, lifetime, k_errno; ! 53: register char *cp; ! 54: register i; ! 55: ! 56: *inst = *realm = '\0'; ! 57: iflag = rflag = vflag = lflag = 0; ! 58: lifetime = LIFE; ! 59: progname = (cp = rindex(*argv, '/')) ? cp + 1 : *argv; ! 60: ! 61: while (--argc) { ! 62: if ((*++argv)[0] != '-') { ! 63: if (username) ! 64: usage(); ! 65: username = *argv; ! 66: continue; ! 67: } ! 68: for (i = 1; (*argv)[i] != '\0'; i++) ! 69: switch ((*argv)[i]) { ! 70: case 'i': /* Instance */ ! 71: ++iflag; ! 72: continue; ! 73: case 'r': /* Realm */ ! 74: ++rflag; ! 75: continue; ! 76: case 'v': /* Verbose */ ! 77: ++vflag; ! 78: continue; ! 79: case 'l': ! 80: ++lflag; ! 81: continue; ! 82: default: ! 83: usage(); ! 84: exit(1); ! 85: } ! 86: } ! 87: if (username && (k_errno = kname_parse(aname, inst, realm, username)) != ! 88: KSUCCESS) { ! 89: fprintf(stderr, "%s: %s\n", progname, krb_err_txt[k_errno]); ! 90: iflag = rflag = 1; ! 91: username = NULL; ! 92: } ! 93: if (k_gethostname(buf, LEN)) { ! 94: fprintf(stderr, "%s: k_gethostname failed\n", progname); ! 95: exit(1); ! 96: } ! 97: if (vflag) ! 98: printf("4.4 BSD/MIT Project Athena (%s)\n", buf); ! 99: ! 100: if (username) { ! 101: printf("Kerberos Initialization for \"%s", aname); ! 102: if (*inst) ! 103: printf(".%s", inst); ! 104: if (*realm) ! 105: printf("@%s", realm); ! 106: printf("\"\n"); ! 107: } else { ! 108: if (iflag) { ! 109: printf("Kerberos Initialization\n"); ! 110: printf("Kerberos name: "); ! 111: gets(aname); ! 112: } else { ! 113: /* default to current user name */ ! 114: struct passwd *pwd = getpwuid(geteuid()); ! 115: ! 116: if (pwd == (struct passwd *) NULL) { ! 117: fprintf(stderr, "Unknown Kerberos name for your uid\n"); ! 118: printf("Kerberos name: "); ! 119: gets(aname); ! 120: } else ! 121: strncpy(aname, pwd->pw_name, sizeof(aname)); ! 122: } ! 123: ! 124: if (!*aname) ! 125: exit(0); ! 126: if (!k_isname(aname)) { ! 127: fprintf(stderr, "%s: bad Kerberos name format\n", ! 128: progname); ! 129: exit(1); ! 130: } ! 131: } ! 132: /* optional instance */ ! 133: if (iflag) { ! 134: printf("Kerberos instance: "); ! 135: gets(inst); ! 136: if (!k_isinst(inst)) { ! 137: fprintf(stderr, "%s: bad Kerberos instance format\n", ! 138: progname); ! 139: exit(1); ! 140: } ! 141: } ! 142: if (rflag) { ! 143: printf("Kerberos realm: "); ! 144: gets(realm); ! 145: if (!k_isrealm(realm)) { ! 146: fprintf(stderr, "%s: bad Kerberos realm format\n", ! 147: progname); ! 148: exit(1); ! 149: } ! 150: } ! 151: if (lflag) { ! 152: printf("Kerberos ticket lifetime (minutes): "); ! 153: gets(buf); ! 154: lifetime = atoi(buf); ! 155: if (lifetime < 5) ! 156: lifetime = 1; ! 157: else ! 158: lifetime /= 5; ! 159: /* This should be changed if the maximum ticket lifetime */ ! 160: /* changes */ ! 161: if (lifetime > 255) ! 162: lifetime = 255; ! 163: } ! 164: if (!*realm && krb_get_lrealm(realm, 1)) { ! 165: fprintf(stderr, "%s: krb_get_lrealm failed\n", progname); ! 166: exit(1); ! 167: } ! 168: ! 169: k_errno = krb_get_pw_in_tkt(aname, inst, realm, INITIAL_TICKET, ! 170: realm, lifetime, 0); ! 171: ! 172: if (vflag) { ! 173: printf("Kerberos realm %s:\n", realm); ! 174: printf("%s\n", krb_err_txt[k_errno]); ! 175: } else if (k_errno) { ! 176: fprintf(stderr, "%s: %s\n", progname, krb_err_txt[k_errno]); ! 177: exit(1); ! 178: } ! 179: } ! 180: ! 181: usage() ! 182: { ! 183: fprintf(stderr, "Usage: %s [-irvl] [name]\n", progname); ! 184: exit(1); ! 185: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.