Annotation of 43BSDReno/kerberosIV/kinit/kinit.c, revision 1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.