/* oid.h - object identifier stuff */

/*
 * $Header: /var/lib/cvsd/repos/CSRG/43BSDReno/contrib/isode-beta/h/quipu/oid.h,v 1.1.1.1 2018/04/24 16:12:56 root Exp $
 *
 *
 * $Log: oid.h,v $
 * Revision 1.1.1.1  2018/04/24 16:12:56  root
 * BSD 4.3reno
 *
 * Revision 7.1  90/07/09  14:38:37  mrose
 * sync
 * 
 * Revision 7.0  89/11/23  21:56:41  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.
 *
 */


#ifndef QUIPUOID
#define QUIPUOID

#include "psap.h"

/* Definitions of OID's the DSA needs to know */
	/* X500 defined attributes */
#define OBJECTCLASS_OID "2.5.4.0"
#define ALIAS_OID	"2.5.4.1"
#define CN_OID		"2.5.4.3"
#define DSAADDRESS_OID	"2.5.4.29"
#define APPLCTX_OID 	"2.5.4.30"
#define PASSWORD_OID 	"2.5.4.35"
#define CERTIFICATE_OID	"2.5.4.36"
	/* QUIPU defined attributes */
#define SCHEMA_OID	"0.9.2342.19200300.99.1.1"	
#define ACL_OID		"0.9.2342.19200300.99.1.2"
#define EDBINFO_OID	"0.9.2342.19200300.99.1.3"
#define MASTERDSA_OID	"0.9.2342.19200300.99.1.4"
#define SLAVEDSA_OID	"0.9.2342.19200300.99.1.5"
#define CONTROL_OID 	"0.9.2342.19200300.99.1.15"
#define VERSION_OID 	"0.9.2342.19200300.99.1.16"
#define PROTECTED_OID	"0.9.2342.19200300.99.1.17"
	/* THORN defined attribute */
#define MANAGER_OID	"0.9.2342.19200300.100.1.10"
#define LAST_MOD_OID	"0.9.2342.19200300.100.1.23"
#define MOD_BY_OID	"0.9.2342.19200300.100.1.24"
	/* NON leaf object class */
#define QUIPU_DSA	"0.9.2342.19200300.99.3.1"
#define NONLEAFOBJECT	"0.9.2342.19200300.99.3.6"
	/* alias objectclass */
#define ALIAS_OC	"2.5.6.1"
#define TOP_OC		"2.5.6.0"

	/* X500 defined protocol oids */
#ifdef USE_BUILTIN_OIDS
#define DIR_ACCESS_AC	str2oid("2.5.3.1")
#define DIR_SYSTEM_AC	str2oid("2.5.3.2")
#define DIR_QUIPU_AC	str2oid("0.9.2342.19200300.99.4")
#define DIR_ACCESS_AS	str2oid("2.5.9.1")
#define DIR_SYSTEM_AS	str2oid("2.5.9.2")
#define DIR_QUIPU_AS	str2oid("0.9.2342.19200300.99.5")
#define DIR_ACSE	str2oid("2.2.1.0.1")
#else 	/* use isobjects */
#define DIR_ACCESS_AC	ode2oid("directory directoryAccessAC")
#define DIR_SYSTEM_AC	ode2oid("directory directorySystemAC")
#define DIR_QUIPU_AC	str2oid("0.9.2342.19200300.99.4")
#define DIR_ACCESS_AS	ode2oid("directory directoryAccessAS")
#define DIR_SYSTEM_AS	ode2oid("directory directorySystemAS")
#define DIR_QUIPU_AS	str2oid("0.9.2342.19200300.99.5")
#define DIR_ACSE	ode2oid("acse pci version 1")
#endif

/* Wrong file for the following, but they are connected to the above so... */
#define DIR_ACCESS_PC_ID	1
#define DIR_SYSTEM_PC_ID	1
#define DIR_QUIPU_PC_ID		1
#define DIR_ACSE_PC_ID		3

/* oid table lookup definitions */
#define SEPERATOR ':'
#define DOT '.'
#define COMMA ','
#define COMMENT '#'

#define BUFSIZE 40
#define TABLESIZE 300

#define OIDPART         1
#define OIDFULL         2
#define OIDNUM          3

typedef struct {
	char            ot_name [BUFSIZE];
	char            ot_stroid [BUFSIZE];
	OID             ot_oid;
} oid_table;
#define NULLTABLE ((oid_table * )0)

typedef struct {
	oid_table       oa_ot;
	short		oa_syntax;
} oid_table_attr;
#define NULLTABLE_ATTR ((oid_table_attr *)0)


typedef struct seq_tab {
	oid_table_attr * ts_oa;
	struct seq_tab * ts_next;
} * table_seq;
#define NULLTABLE_SEQ ((table_seq)0)

typedef struct {
	oid_table        oc_ot;
	struct oid_seq * oc_hierachy;
	table_seq        oc_must;
	table_seq        oc_may;
} objectclass;
#define NULLOBJECTCLASS ((objectclass * )0)

oid_table_attr * oid2attr();
oid_table_attr * name2attr();
char * attr2name();

objectclass * oid2oc();
objectclass * name2oc();
char * oc2name();

char * oid2name();      /* find oid wherever it is hiding !!! */
OID    name2oid();

char * SkipSpace ();
void   StripSpace ();

#endif
