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

📄 krb_lib.c

📁 早期freebsd实现
💻 C
字号:
/* * $Source: /usr/src/kerberosIV/kdb/RCS/krb_lib.c,v $ * $Author: bostic $  * * Copyright 1988 by the Massachusetts Institute of Technology.  * * For copying and distribution information, please see the file * <mit-copyright.h>.  */#ifndef	lintstatic char rcsid_krb_lib_c[] ="$Id: krb_lib.c,v 4.8 91/02/25 15:18:22 bostic Exp $";#endif	lint#include <mit-copyright.h>#include <stdio.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/uio.h>#include <sys/time.h>#include <sys/resource.h>#include <strings.h>#include <des.h>#include <krb.h>#include <krb_db.h>#ifdef DEBUGextern int debug;extern char *progname;long    kerb_debug;#endifextern char *strncpy();extern char *ctime();extern char *getenv();static  init = 0;/* * initialization routine for data base  */intkerb_init(){#ifdef DEBUG    if (!init) {	char *dbg = getenv("KERB_DBG");	if (dbg)	    sscanf(dbg, "%d", &kerb_debug);	init = 1;    }#endif    kerb_db_init();#ifdef CACHE    kerb_cache_init();#endif    /* successful init, return 0, else errcode */    return (0);}/* * finalization routine for database -- NOTE: MUST be called by any * program using kerb_init.  ALSO will have to be modified to finalize * caches, if they're ever really implemented.  */intkerb_fini(){    kerb_db_fini();}/* * look up a principal in the cache or data base returns number of * principals found  */intkerb_get_principal(name, inst, principal, max, more)    char   *name;		/* could have wild card */    char   *inst;		/* could have wild card */    Principal *principal;    unsigned int max;		/* max number of name structs to return */    int    *more;		/* more tuples than room for */{    int     found = 0;#ifdef CACHE    static int wild = 0;#endif    if (!init)	kerb_init();#ifdef DEBUG    if (kerb_debug & 1)	fprintf(stderr, "\n%s: kerb_get_principal for %s %s max = %d\n",	    progname, name, inst, max);#endif        /*     * if this is a request including a wild card, have to go to db     * since the cache may not be exhaustive.      */    /* clear the principal area */    bzero((char *) principal, max * sizeof(Principal));#ifdef CACHE    /*     * so check to see if the name contains a wildcard "*" or "?", not     * preceeded by a backslash.      */    wild = 0;    if (index(name, '*') || index(name, '?') ||	index(inst, '*') || index(inst, '?'))	wild = 1;    if (!wild) {	/* try the cache first */	found = kerb_cache_get_principal(name, inst, principal, max, more);	if (found)	    return (found);    }#endif    /* If we didn't try cache, or it wasn't there, try db */    found = kerb_db_get_principal(name, inst, principal, max, more);    /* try to insert principal(s) into cache if it was found */#ifdef CACHE    if (found) {	kerb_cache_put_principal(principal, found);    }#endif    return (found);}/* principals */kerb_put_principal(principal, n)    Principal *principal;    unsigned int n;		/* number of principal structs to write */{    long time();    struct tm *tp, *localtime();    /* set mod date */    principal->mod_date = time((long *)0);    /* and mod date string */    tp = localtime((time_t *)&principal->mod_date);    (void) sprintf(principal->mod_date_txt, "%4d-%2d-%2d",		   tp->tm_year > 1900 ? tp->tm_year : tp->tm_year + 1900,		   tp->tm_mon + 1, tp->tm_mday); /* January is 0, not 1 */#ifdef DEBUG    if (kerb_debug & 1) {	int i;	fprintf(stderr, "\nkerb_put_principal...");	for (i = 0; i < n; i++) {	    krb_print_principal(&principal[i]);	}    }#endif    /* write database */    if (kerb_db_put_principal(principal, n) < 0) {#ifdef DEBUG	if (kerb_debug & 1)	    fprintf(stderr, "\n%s: kerb_db_put_principal err", progname);	/* watch out for cache */#endif	return -1;    }#ifdef CACHE    /* write cache */    if (!kerb_cache_put_principal(principal, n)) {#ifdef DEBUG	if (kerb_debug & 1)	    fprintf(stderr, "\n%s: kerb_cache_put_principal err", progname);#endif	return -1;    }#endif    return 0;}intkerb_get_dba(name, inst, dba, max, more)    char   *name;		/* could have wild card */    char   *inst;		/* could have wild card */    Dba    *dba;    unsigned int max;		/* max number of name structs to return */    int    *more;		/* more tuples than room for */{    int     found = 0;#ifdef CACHE    static int wild = 0;#endif    if (!init)	kerb_init();#ifdef DEBUG    if (kerb_debug & 1)	fprintf(stderr, "\n%s: kerb_get_dba for %s %s max = %d\n",	    progname, name, inst, max);#endif    /*     * if this is a request including a wild card, have to go to db     * since the cache may not be exhaustive.      */    /* clear the dba area */    bzero((char *) dba, max * sizeof(Dba));#ifdef CACHE    /*     * so check to see if the name contains a wildcard "*" or "?", not     * preceeded by a backslash.      */    wild = 0;    if (index(name, '*') || index(name, '?') ||	index(inst, '*') || index(inst, '?'))	wild = 1;    if (!wild) {	/* try the cache first */	found = kerb_cache_get_dba(name, inst, dba, max, more);	if (found)	    return (found);    }#endif    /* If we didn't try cache, or it wasn't there, try db */    found = kerb_db_get_dba(name, inst, dba, max, more);#ifdef CACHE    /* try to insert dba(s) into cache if it was found */    if (found) {	kerb_cache_put_dba(dba, found);    }#endif    return (found);}

⌨️ 快捷键说明

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