summaryrefslogtreecommitdiffstats
path: root/crypto/kerberosIV/lib/kdb/krb_db.h
blob: 1a08b836aabde9f123e96cf63facfca474bf4b59 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*
 * $Id: krb_db.h,v 1.15 1996/12/17 20:34:32 assar Exp $ 
 *
 * Copyright 1987, 1988 by the Massachusetts Institute of Technology. 
 *
 * For copying and distribution information, please see the file
 * <mit-copyright.h>. 
 *
 * spm		Project Athena  8/85 
 *
 * This file defines data structures for the kerberos
 * authentication/authorization database. 
 *
 * They MUST correspond to those defined in *.rel 
 */

#ifndef KRB_DB_DEFS
#define KRB_DB_DEFS

#include <stdio.h>

#define KERB_M_NAME		"K"	/* Kerberos */
#define KERB_M_INST		"M"	/* Master */
#define KERB_DEFAULT_NAME	"default"
#define KERB_DEFAULT_INST	""
#ifndef DB_DIR
#define DB_DIR			"/var/kerberos"
#endif
#ifndef DBM_FILE
#define	DBM_FILE		DB_DIR "/principal"
#endif

/* this also defines the number of queue headers */
#define KERB_DB_HASH_MODULO 64


/* Arguments to kerb_dbl_lock() */

#define KERB_DBL_EXCLUSIVE 1
#define KERB_DBL_SHARED 0

/* arguments to kerb_db_set_lockmode() */

#define KERB_DBL_BLOCKING 0
#define KERB_DBL_NONBLOCKING 1

/* arguments to kdb_get_master_key */

#define KDB_GET_PROMPT 1
#define KDB_GET_TWICE  2

/* Principal defines the structure of a principal's name */

typedef struct {
    char    name[ANAME_SZ];
    char    instance[INST_SZ];

    u_int32_t key_low;
    u_int32_t key_high;
    u_int32_t exp_date;
    char    exp_date_txt[DATE_SZ];
    u_int32_t mod_date;
    char    mod_date_txt[DATE_SZ];
    u_int16_t attributes;
    u_int8_t max_life;
    u_int8_t kdc_key_ver;
    u_int8_t key_version;

    char    mod_name[ANAME_SZ];
    char    mod_instance[INST_SZ];
    char   *old;		/* cast to (Principal *); not in db,
				 * ptr to old vals */
} Principal;

typedef struct {
    int32_t    cpu;
    int32_t    elapsed;
    int32_t    dio;
    int32_t    pfault;
    int32_t    t_stamp;
    int32_t    n_retrieve;
    int32_t    n_replace;
    int32_t    n_append;
    int32_t    n_get_stat;
    int32_t    n_put_stat;
} DB_stat;

/* Dba defines the structure of a database administrator */

typedef struct {
    char    name[ANAME_SZ];
    char    instance[INST_SZ];
    u_int16_t attributes;
    u_int32_t exp_date;
    char    exp_date_txt[DATE_SZ];
    char   *old;	/*
			 * cast to (Dba *); not in db, ptr to
			 * old vals
			 */
} Dba;

typedef int (*k_iter_proc_t)(void*, Principal*);

void copy_from_key __P((des_cblock in, u_int32_t *lo, u_int32_t *hi));
void copy_to_key __P((u_int32_t *lo, u_int32_t *hi, des_cblock out));

void kdb_encrypt_key __P((des_cblock *, des_cblock *, des_cblock *,
			  des_key_schedule, int));
int kdb_get_master_key __P((int prompt, des_cblock *master_key,
			    des_key_schedule master_key_sched));
int kdb_get_new_master_key __P((des_cblock *, des_key_schedule, int));
int kdb_kstash __P((des_cblock *, char *));
int kdb_new_get_master_key __P((des_cblock *, des_key_schedule));
int kdb_new_get_new_master_key __P((des_cblock *key, des_key_schedule schedule, int verify));
long kdb_verify_master_key __P((des_cblock *, des_key_schedule, FILE *));
long *kerb_db_begin_update __P((void));
int kerb_db_create __P((char *db_name));
int kerb_db_delete_principal (char *name, char *inst);
void kerb_db_end_update __P((long *db));
int kerb_db_get_dba __P((char *, char *, Dba *, unsigned, int *));
void kerb_db_get_stat __P((DB_stat *));
int kerb_db_iterate __P((k_iter_proc_t, void*));
int kerb_db_put_principal __P((Principal *, unsigned int));
void kerb_db_put_stat __P((DB_stat *));
int kerb_db_rename __P((char *, char *));
int kerb_db_set_lockmode __P((int));
int kerb_db_set_name __P((char *));
int kerb_db_update __P((long *db, Principal *principal, unsigned int max));
int kerb_delete_principal __P((char *name, char *inst));
void kerb_fini __P((void));
int kerb_get_dba __P((char *, char *, Dba *, unsigned int, int *));
time_t kerb_get_db_age __P((void));
int kerb_get_principal __P((char *, char *, Principal *, unsigned int, int *));
int kerb_init __P((void));
int kerb_put_principal __P((Principal *, unsigned int));

#endif /* KRB_DB_DEFS */
OpenPOWER on IntegriCloud