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

📄 ext_srvtab.c

📁 早期freebsd实现
💻 C
字号:
/* * $Source: /mit/kerberos/src/admin/RCS/ext_srvtab.c,v $ * $Header: ext_srvtab.c,v 4.1 89/07/18 16:49:30 jtkohl Exp $ * * Copyright 1987, 1988 by the Massachusetts Institute of Technology.  * * For copying and distribution information, please see the file * <mit-copyright.h>.  * * Description  */#ifndef	lintstatic char rcsid_ext_srvtab_c[] =    "$Header: ext_srvtab.c,v 4.1 89/07/18 16:49:30 jtkohl Exp $";#endif	lint#include <mit-copyright.h>#include <stdio.h>#include <sys/file.h>#include <sys/types.h>#include <sys/time.h>#include <sys/stat.h>#include <sys/wait.h>#include <signal.h>#include <des.h>#include <krb.h>#include <krb_db.h>#define TRUE 1#define FALSE 0static C_Block master_key;static C_Block session_key;static Key_schedule master_key_schedule;char progname[] = "ext_srvtab";char realm[REALM_SZ];main(argc, argv)  int argc;  char *argv[];{    FILE *fout;    char fname[1024];    int fopen_errs = 0;    int arg;    Principal princs[40];    int more;     int prompt = TRUE;    register int n, i;        bzero(realm, sizeof(realm));        /* Parse commandline arguments */    if (argc < 2)	usage();    else {	for (i = 1; i < argc; i++) {	    if (strcmp(argv[i], "-n") == 0)		prompt = FALSE;	    else if (strcmp(argv[i], "-r") == 0) {		if (++i >= argc)		    usage();		else {		    strcpy(realm, argv[i]);		    /* 		     * This is to humor the broken way commandline		     * argument parsing is done.  Later, this		     * program ignores everything that starts with -.		     */		    argv[i][0] = '-';		}	    }	    else if (argv[i][0] == '-')		usage();	    else		if (!k_isinst(argv[i])) {		fprintf(stderr, "%s: bad instance name: %s\n",			progname, argv[i]);		usage();	    }	}    }    if (kdb_get_master_key (prompt, master_key, master_key_schedule) != 0) {      fprintf (stderr, "Couldn't read master key.\n");      fflush (stderr);      exit(1);    }    if (kdb_verify_master_key (master_key, master_key_schedule, stderr) < 0) {      exit(1);    }    /* For each arg, search for instances of arg, and produce */    /* srvtab file */    if (!realm[0])	if (krb_get_lrealm(realm, 1) != KSUCCESS) {	    fprintf(stderr, "%s: couldn't get local realm\n", progname);	    exit(1);	}    (void) umask(077);    for (arg = 1; arg < argc; arg++) {	if (argv[arg][0] == '-')	    continue;	sprintf(fname, "%s-new-srvtab", argv[arg]);	if ((fout = fopen(fname, "w")) == NULL) {	    fprintf(stderr, "Couldn't create file '%s'.\n", fname);	    fopen_errs++;	    continue;	}	printf("Generating '%s'....\n", fname);	n = kerb_get_principal("*", argv[arg], &princs[0], 40, &more);	if (more)	    fprintf(stderr, "More than 40 found...\n");	for (i = 0; i < n; i++) {	    FWrite(princs[i].name, strlen(princs[i].name) + 1, 1, fout);	    FWrite(princs[i].instance, strlen(princs[i].instance) + 1,		   1, fout);	    FWrite(realm, strlen(realm) + 1, 1, fout);	    FWrite(&princs[i].key_version,		sizeof(princs[i].key_version), 1, fout);	    bcopy(&princs[i].key_low, session_key, sizeof(long));	    bcopy(&princs[i].key_high, session_key + sizeof(long),		  sizeof(long));	    kdb_encrypt_key (session_key, session_key, 			     master_key, master_key_schedule, DES_DECRYPT);	    FWrite(session_key, sizeof session_key, 1, fout);	}	fclose(fout);    }    StampOutSecrets();    exit(fopen_errs);		/* 0 errors if successful */}Die(){    StampOutSecrets();    exit(1);}FWrite(p, size, n, f)  char   *p;  int     size;  int     n;  FILE   *f;{    if (fwrite(p, size, n, f) != n) {	printf("Error writing output file.  Terminating.\n");	Die();    }}StampOutSecrets(){    bzero(master_key, sizeof master_key);    bzero(session_key, sizeof session_key);    bzero(master_key_schedule, sizeof master_key_schedule);}usage(){    fprintf(stderr, 	    "Usage: %s [-n] [-r realm] instance [instance ...]\n", progname);    exit(1);}

⌨️ 快捷键说明

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