2 * Copyright 1987, 1988 by the Massachusetts Institute of Technology.
4 * For copying and distribution information, please see the file
7 * Routine to initialize user to Kerberos. Prompts optionally for
8 * user, instance and realm. Authenticates user and gets a ticket
9 * for the Kerberos ticket-granting service for future use.
19 * $FreeBSD: src/crypto/kerberosIV/kuser/kinit.c,v 1.5 1999/09/19 21:56:05 markm Exp $
22 #include "kuser_locl.h"
24 RCSID("$Id: kinit.c,v 1.17 1997/12/12 04:48:44 assar Exp $");
26 #define LIFE DEFAULT_TKT_LIFE /* lifetime of ticket in 5-minute units */
30 get_input(char *s, int size, FILE *stream)
34 if (fgets(s, size, stream) == NULL)
36 if ( (p = strchr(s, '\n')) != NULL)
44 fprintf(stderr, "Usage: %s [-irvlp] [name]\n", __progname);
49 main(int argc, char **argv)
54 char buf[MaxHostNameLen];
55 char name[MAX_K_NAME_SZ];
56 char *username = NULL;
57 int iflag, rflag, vflag, lflag, pflag, lifetime, k_errno;
60 set_progname (argv[0]);
62 *inst = *realm = '\0';
63 iflag = rflag = vflag = lflag = pflag = 0;
67 if ((*++argv)[0] != '-') {
73 for (i = 1; (*argv)[i] != '\0'; i++)
75 case 'i': /* Instance */
81 case 'v': /* Verbose */
88 ++pflag; /* chpass-tickets */
89 lifetime = CHPASSLIFE;
96 (k_errno = kname_parse(aname, inst, realm, username)) != KSUCCESS) {
97 warnx("%s", krb_get_err_text(k_errno));
101 if (gethostname(buf, MaxHostNameLen))
102 err(1, "gethostname failed");
103 printf("%s (%s)\n", ORGANIZATION, buf);
105 printf("Kerberos Initialization for \"%s", aname);
109 printf("@%s", realm);
112 printf("Kerberos Initialization\n");
113 printf("Kerberos name: ");
114 get_input(name, sizeof(name), stdin);
117 if ((k_errno = kname_parse(aname, inst, realm, name)) != KSUCCESS )
118 errx(1, "%s", krb_get_err_text(k_errno));
120 /* optional instance */
122 printf("Kerberos instance: ");
123 get_input(inst, sizeof(inst), stdin);
125 errx(1, "bad Kerberos instance format");
128 printf("Kerberos realm: ");
129 get_input(realm, sizeof(realm), stdin);
130 if (!k_isrealm(realm))
131 errx(1, "bad Kerberos realm format");
134 printf("Kerberos ticket lifetime (minutes): ");
135 get_input(buf, sizeof(buf), stdin);
136 lifetime = atoi(buf);
140 lifetime = krb_time_to_life(0, lifetime*60);
141 /* This should be changed if the maximum ticket lifetime */
146 if (!*realm && krb_get_lrealm(realm, 1))
147 errx(1, "krb_get_lrealm failed");
148 k_errno = krb_get_pw_in_tkt(aname, inst, realm,
149 pflag ? PWSERV_NAME :
150 KRB_TICKET_GRANTING_TICKET,
151 pflag ? KADM_SINST : realm,
154 printf("Kerberos realm %s:\n", realm);
155 printf("%s\n", krb_get_err_text(k_errno));
157 errx(1, "%s", krb_get_err_text(k_errno));