⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kinit.c

📁 早期freebsd实现
💻 C
字号:
/* * $Source: /usr/src/kerberosIV/kinit/RCS/kinit.c,v $ * $Author: kfall $  * * Copyright 1987, 1988 by the Massachusetts Institute of Technology.  * * For copying and distribution information, please see the file * <mit-copyright.h>.  * * Routine to initialize user to Kerberos.  Prompts optionally for * user, instance and realm.  Authenticates user and gets a ticket * for the Kerberos ticket-granting service for future use.  * * Options are:  * *   -i[instance] *   -r[realm] *   -v[erbose] *   -l[ifetime] */#ifndef	lintstatic char rcsid_kinit_c[] ="$Header: /usr/src/kerberosIV/kinit/RCS/kinit.c,v 4.15 90/06/25 21:01:06 kfall Exp $";#endif	lint#include <sys/types.h>#include <sys/param.h>#include <mit-copyright.h>#include <string.h>#include <stdio.h>#include <des.h>#include <krb.h>#include <pwd.h>#include <paths.h>#define	LEN		MAXHOSTNAMELEN#define	LIFE		DEFAULT_TKT_LIFE /* in 5-minute units */#define	INITIAL_TICKET	"krbtgt"char	*progname;char    aname[ANAME_SZ];char    inst[INST_SZ];char    realm[REALM_SZ];#define	gets(buf) _gets(buf, sizeof(buf))	/* hack */char *_gets(p, n)	char *p;	int n;{	char *rv, *fgets();		if ((rv = fgets(p, n, stdin)) == NULL)		return (rv);	if (p = index(p, '\n'))		*p = '\0';	return (rv);}main(argc, argv)    char   *argv[];{    char    buf[LEN];    char   *username = NULL;    int     iflag, rflag, vflag, lflag, lifetime, k_errno;    register char *cp;    register i;    *inst = *realm = '\0';    iflag = rflag = vflag = lflag = 0;    lifetime = LIFE;    progname = (cp = rindex(*argv, '/')) ? cp + 1 : *argv;    while (--argc) {	if ((*++argv)[0] != '-') {	    if (username)		usage();	    username = *argv;	    continue;	}	for (i = 1; (*argv)[i] != '\0'; i++)	    switch ((*argv)[i]) {	    case 'i':		/* Instance */		++iflag;		continue;	    case 'r':		/* Realm */		++rflag;		continue;	    case 'v':		/* Verbose */		++vflag;		continue;	    case 'l':		++lflag;		continue;	    default:		usage();		exit(1);	    }    }    if (username && (k_errno = kname_parse(aname, inst, realm, username)) !=	KSUCCESS) {	fprintf(stderr, "%s: %s\n", progname, krb_err_txt[k_errno]);	iflag = rflag = 1;	username = NULL;    }    if (k_gethostname(buf, LEN)) {	fprintf(stderr, "%s: k_gethostname failed\n", progname);	exit(1);    }    if (username) {	printf("Kerberos Initialization for \"%s", aname);	if (*inst)	    printf(".%s", inst);	if (*realm)	    printf("@%s", realm);	printf("\"\n");    } else {	if (iflag) {		printf("Kerberos Initialization\n");		printf("Kerberos name: ");		gets(aname);	} else {		int uid = getuid();		char *getenv();		struct passwd *pwd;		/* default to current user name unless running as root */		if (uid == 0 && (username = getenv("USER")) &&		    strcmp(username, "root") != 0) {			strncpy(aname, username, sizeof(aname));			strncpy(inst, "root", sizeof(inst));		} else {			pwd = getpwuid(uid);			if (pwd == (struct passwd *) NULL) {				fprintf(stderr, "Unknown name for your uid\n");				printf("Kerberos name: ");				gets(aname);			} else				strncpy(aname, pwd->pw_name, sizeof(aname));		}	}			if (!*aname)	    exit(0);	if (!k_isname(aname)) {	    fprintf(stderr, "%s: bad Kerberos name format\n",		    progname);	    exit(1);	}    }    /* optional instance */    if (iflag) {	printf("Kerberos instance: ");	gets(inst);	if (!k_isinst(inst)) {	    fprintf(stderr, "%s: bad Kerberos instance format\n",		    progname);	    exit(1);	}    }    if (rflag) {	printf("Kerberos realm: ");	gets(realm);	if (!k_isrealm(realm)) {	    fprintf(stderr, "%s: bad Kerberos realm format\n",		    progname);	    exit(1);	}    }    if (lflag) {	 printf("Kerberos ticket lifetime (minutes): ");	 gets(buf);	 lifetime = atoi(buf);	 if (lifetime < 5)	      lifetime = 1;	 else	      lifetime /= 5;	 /* This should be changed if the maximum ticket lifetime */	 /* changes */	 if (lifetime > 255)	      lifetime = 255;    }    if (!*realm && krb_get_lrealm(realm, 1)) {	fprintf(stderr, "%s: krb_get_lrealm failed\n", progname);	exit(1);    }    k_errno = krb_get_pw_in_tkt(aname, inst, realm, INITIAL_TICKET,		realm, lifetime, 0);    if (vflag) {	printf("Kerberos realm %s:\n", realm);	printf("%s\n", krb_err_txt[k_errno]);    } else if (k_errno) {	fprintf(stderr, "%s: %s\n", progname, krb_err_txt[k_errno]);	exit(1);    }    exit(0);}usage(){    fprintf(stderr, "Usage: %s [-irvl] [name]\n", progname);    exit(1);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -