|
|
1.1 ! root 1: /* ! 2: * $Source: /mit/kerberos/src/kuser/RCS/kinit.c,v $ ! 3: * $Author: jtkohl $ ! 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: kinit.c,v 4.11 89/01/23 09:34:49 jtkohl Exp $"; ! 25: #endif lint ! 26: ! 27: #include <kerberos/mit-copyright.h> ! 28: #include <stdio.h> ! 29: #include <pwd.h> ! 30: #include <kerberos/krb.h> ! 31: ! 32: #include <strings.h> ! 33: #include <sys/param.h> ! 34: ! 35: #define LEN MAXHOSTNAMELEN ! 36: #define LIFE 96 /* tick lifetime in 5-min units<8hrs> */ ! 37: #define MAX_LIFE 255 /* maximum life in 5-min units */ ! 38: ! 39: char *progname; ! 40: ! 41: main(argc, argv) ! 42: char *argv[]; ! 43: { ! 44: char aname[ANAME_SZ]; ! 45: char inst[INST_SZ]; ! 46: char realm[REALM_SZ]; ! 47: char buf[LEN]; ! 48: char *username = NULL; ! 49: int iflag, rflag, vflag, lflag, lifetime, k_errno; ! 50: register char *cp; ! 51: register i; ! 52: extern int krb_debug; ! 53: krb_debug = 1; ! 54: ! 55: *inst = *realm = '\0'; ! 56: iflag = rflag = vflag = lflag = 0; ! 57: lifetime = LIFE; ! 58: progname = (cp = rindex(*argv, '/')) ? cp + 1 : *argv; ! 59: ! 60: while (--argc) { ! 61: if ((*++argv)[0] != '-') { ! 62: if (username) ! 63: usage(); ! 64: username = *argv; ! 65: continue; ! 66: } ! 67: for (i = 1; (*argv)[i] != '\0'; i++) ! 68: switch ((*argv)[i]) { ! 69: case 'i': /* Instance */ ! 70: ++iflag; ! 71: continue; ! 72: case 'r': /* Realm */ ! 73: ++rflag; ! 74: continue; ! 75: case 'v': /* Verbose */ ! 76: ++vflag; ! 77: continue; ! 78: case 'l': ! 79: ++lflag; ! 80: continue; ! 81: default: ! 82: usage(); ! 83: exit(1); ! 84: } ! 85: } ! 86: if (username && ! 87: (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: printf("MIT Project Athena/UC Berkeley (%s)\n", buf); ! 98: if (username) { ! 99: printf("Kerberos Initialization for \"%s", aname); ! 100: if (*inst) ! 101: printf(".%s", inst); ! 102: if (*realm) ! 103: printf("@%s", realm); ! 104: printf("\"\n"); ! 105: } else { ! 106: printf("Kerberos Initialization\n"); ! 107: printf("Kerberos name: "); ! 108: getstr(aname, ANAME_SZ); ! 109: if (!*aname) ! 110: exit(0); ! 111: if (!k_isname(aname)) { ! 112: fprintf(stderr, "%s: bad Kerberos name format\n", ! 113: progname); ! 114: exit(1); ! 115: } ! 116: } ! 117: /* optional instance */ ! 118: if (iflag) { ! 119: printf("Kerberos instance: "); ! 120: getstr(inst, INST_SZ); ! 121: if (!k_isinst(inst)) { ! 122: fprintf(stderr, "%s: bad Kerberos instance format\n", ! 123: progname); ! 124: exit(1); ! 125: } ! 126: } ! 127: if (rflag) { ! 128: printf("Kerberos realm: "); ! 129: getstr(realm, REALM_SZ); ! 130: if (!k_isrealm(realm)) { ! 131: fprintf(stderr, "%s: bad Kerberos realm format\n", ! 132: progname); ! 133: exit(1); ! 134: } ! 135: } ! 136: if (lflag) { ! 137: printf("Kerberos ticket lifetime (minutes): "); ! 138: getstr(buf, LEN); ! 139: lifetime = atoi(buf); ! 140: if (lifetime < 5) ! 141: lifetime = 1; ! 142: else ! 143: lifetime /= 5; ! 144: /* This should be changed if the maximum ticket lifetime */ ! 145: /* changes */ ! 146: if (lifetime > MAX_LIFE) ! 147: lifetime = MAX_LIFE; ! 148: } ! 149: if (!*realm && krb_get_lrealm(realm, 1)) { ! 150: fprintf(stderr, "%s: krb_get_lrealm failed\n", progname); ! 151: exit(1); ! 152: } ! 153: printf("Getting initial ticket for %s.%s@%s\n", ! 154: aname, inst, realm); ! 155: k_errno = krb_get_pw_in_tkt(aname, inst, realm, "krbtgt", realm, ! 156: lifetime, 0); ! 157: if (vflag) { ! 158: printf("Kerberos realm %s:\n", realm); ! 159: printf("%s\n", krb_err_txt[k_errno]); ! 160: } else if (k_errno) { ! 161: fprintf(stderr, "%s: %s\n", progname, krb_err_txt[k_errno]); ! 162: exit(1); ! 163: } ! 164: } ! 165: ! 166: usage() ! 167: { ! 168: fprintf(stderr, "Usage: %s [-irvl] [name]\n", progname); ! 169: exit(1); ! 170: } ! 171: ! 172: getstr(p, len) ! 173: register char *p; ! 174: int len; ! 175: { ! 176: while(((*p++ = getchar()) != '\n') && --len) ! 177: ; ! 178: *--p = '\0'; ! 179: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.