Net2/usr/src/contrib/isode/quipu/sys_tai.c

/* sys_tai.c - System tailoring routines */

#ifndef lint
static char *rcsid = "$Header: /f/osi/quipu/RCS/sys_tai.c,v 7.3 91/02/22 09:39:53 mrose Interim $";
#endif

/*
 * $Header: /f/osi/quipu/RCS/sys_tai.c,v 7.3 91/02/22 09:39:53 mrose Interim $
 *
 *
 * $Log:	sys_tai.c,v $
 * Revision 7.3  91/02/22  09:39:53  mrose
 * Interim 6.8
 * 
 * Revision 7.2  90/10/17  11:54:46  mrose
 * sync
 * 
 * Revision 7.1  90/07/09  14:46:38  mrose
 * sync
 * 
 * Revision 7.0  89/11/23  22:18:08  mrose
 * Release 6.0
 * 
 */

/*
 *                                NOTICE
 *
 *    Acquisition, use, and distribution of this module and related
 *    materials are subject to the restrictions of a license agreement.
 *    Consult the Preface in the User's Manual for the full terms of
 *    this agreement.
 *
 */


#include "quipu/util.h"
#include "quipu/policy.h"
#include "cmd_srch.h"

extern char *isodelogpath,
	    *treedir,
	    *dsaoidtable,
	    *mydsaname;

extern char startup_update;
extern int  oidformat;
extern int no_dsp_chain;
extern int no_last_mod;
extern int search_level;
extern int read_only;
extern int admin_size;
extern int auth_bind;
extern time_t admin_time;
extern time_t cache_timeout;
extern time_t retry_timeout;
extern time_t slave_timeout;
extern time_t conn_timeout;
extern time_t nsap_timeout;
extern int bind_window;
extern unsigned watchdog_time;
extern unsigned watchdog_delta;
extern LLog * log_dsap;
#ifndef NO_STATS
extern LLog * log_stat;
#endif
#ifdef TURBO_INDEX
extern int optimized_only;
#endif

unsigned bind_policy = POLICY_ACCESS_ALL;
unsigned strong_policy = POLICY_ACCESS_ALL;
extern unsigned str2permission();

#define MLOGDIR          1
#define SYSLOG           2
#define OIDTAB           4
#define OIDFMT           5
#define ROOTDIR          8
#define MYDSANAME        11
#define PARENT           12
#define STATS		 13
#define START_UPDATE	 15
#define DSP_CHAIN	 16
#define SEARCH_LEVEL	 17
#define ISODE_TAILOR	 18
#define LAST_MOD	 19
#define	ADMIN_SIZE	 20
#define	ADMIN_TIME	 21
#define PREFER_DSA	 22
#define	CACHE_TIME	 23
#define	CONN_TIME	 24
#define	SLAVE_TIME	 25
#define	RETRY_TIME	 26
#define CA_INFO		 27
#define SECRET_KEY	 28
#define NSAP_TIME	 29
#define READ_ONLY	 30
#define BIND_WINDOW	 31
#define WATCHDOG_TIME	 34
#define WATCHDOG_DELTA	 35
#define BIND_POLICY	 36
#define STRONG_POLICY	 37
#define AUTH	 	 38
#define SHADOW		 39
#define OPTIMIZE_ATTR	 40
#define OPTIMIZED_ONLY	 41
#define INDEX_SUBTREE	 42
#define INDEX_SIBLINGS	 43

static  CMD_TABLE  cmdtab[] =
{
	"LOGDIR",       MLOGDIR,
	"DSAPLOG",      SYSLOG,
	"OIDTABLE",     OIDTAB,
	"OIDFORMAT",    OIDFMT,
	"TREEDIR",      ROOTDIR,
	"MYDSANAME",    MYDSANAME,
	"PARENT",       PARENT,
	"UPDATE",	START_UPDATE,
	"DSPCHAINING",	DSP_CHAIN,
	"LASTMODIFIED",	LAST_MOD,
	"SEARCHLEVEL",	SEARCH_LEVEL,
	"ISODE",	ISODE_TAILOR,
	"ADMINSIZE",	ADMIN_SIZE,
	"ADMINTIME",	ADMIN_TIME,
	"CACHETIME",	CACHE_TIME,
	"SLAVETIME",	SLAVE_TIME,
	"RETRYTIME",	RETRY_TIME,
	"CONNTIME",	CONN_TIME,
	"NSAPTIME",	NSAP_TIME,
	"CAINFO",	CA_INFO,
	"SECRETKEY",	SECRET_KEY,
	"PREFERDSA",	PREFER_DSA,
	"READONLY",	READ_ONLY,
	"BINDWINDOW",	BIND_WINDOW,
	"WATCHDOG_TIME",	WATCHDOG_TIME,
	"WATCHDOG_DELTA",	WATCHDOG_DELTA,
	"BIND_POLICY",		BIND_POLICY,
	"STRONG_POLICY",	STRONG_POLICY,
	"AUTHENTICATION",	AUTH,
	"SHADOW",		SHADOW,
#ifdef TURBO_INDEX
	"OPTIMIZE_ATTR",	OPTIMIZE_ATTR,
	"OPTIMIZED_ONLY",	OPTIMIZED_ONLY,
	"INDEX_SUBTREE",	INDEX_SUBTREE,
	"INDEX_SIBLINGS",	INDEX_SIBLINGS,
#endif
#ifndef NO_STATS
	"STATS",	STATS,
#endif
	0,              -1,
};

static  CMD_TABLE  authtab[] =
{
	"NONE",		0,
	"DN",		1,
	"SIMPLE",	2,
	"PROTECTED",	3,
	"STRONG",	4,
	0,              0,
};


/*
 * do system wide initialisations
 */

dsa_sys_tai (argc, argv)
char    **argv;
{
	char    *arg;

	if(argc < 2)
		return(NOTOK);
	arg = argv[1];

	switch(cmd_srch(argv[0], cmdtab))
	{
	case MLOGDIR:
		DLOG (log_dsap,LLOG_TRACE,( "Tailor LOGDIR %s", arg));
		isodelogpath = strdup (arg);
		break;
#ifndef NO_STATS
	case STATS:
		DLOG (log_dsap,LLOG_TRACE,( "Tailor STATS %s", arg));
		log_tai(log_stat, &argv[1], argc-1);
		break;
#endif
	case SYSLOG:
		DLOG (log_dsap,LLOG_TRACE,( "Tailor SYSLOG %s", arg));
		log_tai(log_dsap, &argv[1], argc-1);
		break;
	case OIDTAB:
		DLOG (log_dsap,LLOG_TRACE,( "Tailor OIDTable=%s", arg));
		dsaoidtable = strdup (arg);
		load_oid_table (dsaoidtable);
		break;
	case OIDFMT:
		DLOG (log_dsap,LLOG_TRACE,( "Tailor OIDFMT=%s", arg));
		oidformat = atoi (arg);
		break;
	case ROOTDIR:
		DLOG (log_dsap,LLOG_TRACE,( "Tailor Rootdir %s", arg));
		treedir = strdup(arg);
		break;
	case MYDSANAME:
		DLOG (log_dsap,LLOG_TRACE,( "Tailor Myname %s", arg));
		mydsaname = strdup(arg);
		break;
	case DSP_CHAIN:
		DLOG (log_dsap,LLOG_TRACE,( "Tailor DSPChaining %s", arg));
		if (lexequ (arg,"on") == 0)
			no_dsp_chain = FALSE;
		else
			no_dsp_chain = TRUE;
		break;
	case LAST_MOD:
		DLOG (log_dsap,LLOG_TRACE,( "Tailor last modified %s", arg));
		if (lexequ (arg,"on") == 0)
			no_last_mod = FALSE;
		else
			no_last_mod = TRUE;
		break;
	case START_UPDATE:
		DLOG (log_dsap,LLOG_TRACE,( "Tailor Update %s", arg));
		if (lexequ (arg,"on") == 0)
			startup_update = TRUE;
		else
			startup_update = FALSE;
		break;
	case READ_ONLY:
		DLOG (log_dsap,LLOG_TRACE,( "Tailor read only", arg));
		if (lexequ (arg,"on") == 0)
			read_only = TRUE;
		else
			read_only = FALSE;
		break;
	case SEARCH_LEVEL:
		search_level = atoi (arg);
		DLOG (log_dsap,LLOG_TRACE,(" Tailor search level %d", search_level));
		break;
	case ADMIN_SIZE:
		admin_size = atoi (arg);
		DLOG (log_dsap,LLOG_TRACE,(" Tailor admin size %d", admin_size));
		break;
	case ADMIN_TIME:
		(void) sscanf (arg, "%ld", &admin_time);
		DLOG (log_dsap,LLOG_TRACE,(" Tailor admin time %ld", admin_time));
		break;
	case CACHE_TIME:
		(void) sscanf (arg, "%ld", &cache_timeout);
		DLOG (log_dsap,LLOG_TRACE,(" Tailor cache time %ld", cache_timeout));
		break;
	case RETRY_TIME:
		(void) sscanf (arg, "%ld", &retry_timeout);
		DLOG (log_dsap,LLOG_TRACE,(" Tailor retry time %ld", retry_timeout));
		break;
	case SLAVE_TIME:
		(void) sscanf (arg, "%ld", &slave_timeout);
		DLOG (log_dsap,LLOG_TRACE,(" Tailor slave time %ld", slave_timeout));
		break;
	case CONN_TIME:
		(void) sscanf (arg, "%ld", &conn_timeout);
		DLOG (log_dsap,LLOG_TRACE,(" Tailor conn time %ld", conn_timeout));
		break;
	case NSAP_TIME:
		(void) sscanf (arg, "%ld", &nsap_timeout);
		DLOG (log_dsap,LLOG_TRACE,(" Tailor nsap time %ld", nsap_timeout));
		break;
	case WATCHDOG_TIME:
		(void) sscanf (arg, "%d", &watchdog_time);
		DLOG (log_dsap,LLOG_TRACE,(" Tailor watchdog time %d", watchdog_time));
		break;
	case WATCHDOG_DELTA:
		(void) sscanf (arg, "%d", &watchdog_delta);
		DLOG (log_dsap,LLOG_TRACE,(" Tailor watchdog delta %d", watchdog_delta));
		break;
	case BIND_POLICY:
		bind_policy = str2permission(arg);
		DLOG(log_dsap,LLOG_TRACE,("Bind policy %d", bind_policy));
		break;
	case STRONG_POLICY:
		strong_policy = str2permission(arg);
		DLOG(log_dsap,LLOG_TRACE,("Strong auth. policy %d", strong_policy));
		break;
	case CA_INFO:
		if (add_ca_key(arg) == OK)
			DLOG (log_dsap,LLOG_TRACE,("Certification Authority: %s", arg));
		else
			LLOG (log_dsap,LLOG_EXCEPTIONS,("CA FAILURE: Certification Authority: %s ", arg));
		break;
	case SECRET_KEY:
		if (set_secret_key(arg) == OK)
			DLOG (log_dsap,LLOG_TRACE,("Secret key read from %s", arg));
		else
			LLOG (log_dsap,LLOG_EXCEPTIONS,("Secret key NOT read from %s", arg));
		break;
	case BIND_WINDOW:
		bind_window = atoi(arg);
		if (bind_window <= 0)
			LLOG(log_dsap,LLOG_EXCEPTIONS,("Invalid bind window %s", arg));
		else
			DLOG (log_dsap, LLOG_TRACE,("Bind window %d", bind_window));
		break;
	case PREFER_DSA:
		DLOG (log_dsap,LLOG_TRACE,( "Tailor prefer dsa %s", arg));
		prefer_dsa (arg);
		break;
	case PARENT:
 		DLOG (log_dsap,LLOG_TRACE,( "Tailor parent name %s, address %s", arg,argv[2]));
 		add_str_parent (arg,argv[2]);
		break;
	case ISODE_TAILOR:
		DLOG (log_dsap,LLOG_TRACE,( "Tailor Isode %s%s",arg,argv[2]));
		(void) isodesetvar(arg,strdup(argv[2]),0);
		break;
	case AUTH:
		auth_bind = cmd_srch(arg, authtab);
		DLOG (log_dsap,LLOG_TRACE,( "Tailor authentication", arg));
		break;
	case SHADOW:
		DLOG (log_dsap,LLOG_TRACE,( "Tailor shadow %s", arg));
		shadow_attribute (arg);
		break;
#ifdef TURBO_INDEX
        case OPTIMIZED_ONLY:
                if (lexequ(arg, "on") == 0)
                        optimized_only = TRUE;
                else
                        optimized_only = FALSE;
                DLOG(log_dsap, LLOG_TRACE, ("Tailor optimized only %s", arg));
                break;
	case OPTIMIZE_ATTR:
		turbo_optimize(arg);
                DLOG(log_dsap, LLOG_TRACE, (" Tailor optimize (%s)", arg));
                break;
        case INDEX_SUBTREE:
                index_subtree(arg);
                DLOG(log_dsap, LLOG_TRACE, ("Tailor index subtree %s", arg));
                break;
        case INDEX_SIBLINGS:
		index_siblings(arg);
                DLOG(log_dsap, LLOG_TRACE, ("Tailor index siblings %s", arg));
                break;
#endif
	}
	return (OK);
}