|
|
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.