xref: /illumos-gate/usr/src/lib/krb5/kdb/kdb_log.h (revision 7c478bd9)
1*7c478bd9Sstevel@tonic-gate /*
2*7c478bd9Sstevel@tonic-gate  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
3*7c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
4*7c478bd9Sstevel@tonic-gate  */
5*7c478bd9Sstevel@tonic-gate 
6*7c478bd9Sstevel@tonic-gate #ifndef	_KDB_LOG_H
7*7c478bd9Sstevel@tonic-gate #define	_KDB_LOG_H
8*7c478bd9Sstevel@tonic-gate 
9*7c478bd9Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"
10*7c478bd9Sstevel@tonic-gate 
11*7c478bd9Sstevel@tonic-gate #include <k5-int.h>
12*7c478bd9Sstevel@tonic-gate #include <iprop_hdr.h>
13*7c478bd9Sstevel@tonic-gate #include <iprop.h>
14*7c478bd9Sstevel@tonic-gate #include <limits.h>
15*7c478bd9Sstevel@tonic-gate #include <kadm5/admin.h>
16*7c478bd9Sstevel@tonic-gate 
17*7c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
18*7c478bd9Sstevel@tonic-gate extern "C" {
19*7c478bd9Sstevel@tonic-gate #endif
20*7c478bd9Sstevel@tonic-gate 
21*7c478bd9Sstevel@tonic-gate /*
22*7c478bd9Sstevel@tonic-gate  * DB macros
23*7c478bd9Sstevel@tonic-gate  */
24*7c478bd9Sstevel@tonic-gate #define	INDEX(ulogaddr, i) ((ulong_t) ulogaddr + sizeof (kdb_hlog_t) + \
25*7c478bd9Sstevel@tonic-gate 	(i*ulog->kdb_block))
26*7c478bd9Sstevel@tonic-gate 
27*7c478bd9Sstevel@tonic-gate /*
28*7c478bd9Sstevel@tonic-gate  * Current DB version #
29*7c478bd9Sstevel@tonic-gate  */
30*7c478bd9Sstevel@tonic-gate #define	KDB_VERSION	1
31*7c478bd9Sstevel@tonic-gate 
32*7c478bd9Sstevel@tonic-gate /*
33*7c478bd9Sstevel@tonic-gate  * DB log states
34*7c478bd9Sstevel@tonic-gate  */
35*7c478bd9Sstevel@tonic-gate #define	KDB_STABLE	1
36*7c478bd9Sstevel@tonic-gate #define	KDB_UNSTABLE	2
37*7c478bd9Sstevel@tonic-gate #define	KDB_CORRUPT	3
38*7c478bd9Sstevel@tonic-gate 
39*7c478bd9Sstevel@tonic-gate /*
40*7c478bd9Sstevel@tonic-gate  * DB log constants
41*7c478bd9Sstevel@tonic-gate  */
42*7c478bd9Sstevel@tonic-gate #define	KDB_UMAGIC	0x6661212
43*7c478bd9Sstevel@tonic-gate #define	KDB_HMAGIC	0x6662323
44*7c478bd9Sstevel@tonic-gate 
45*7c478bd9Sstevel@tonic-gate /*
46*7c478bd9Sstevel@tonic-gate  * DB Flags
47*7c478bd9Sstevel@tonic-gate  */
48*7c478bd9Sstevel@tonic-gate #define	FKADMIND	1
49*7c478bd9Sstevel@tonic-gate #define	FKPROPLOG	2
50*7c478bd9Sstevel@tonic-gate #define	FKPROPD		3
51*7c478bd9Sstevel@tonic-gate #define	FKCOMMAND	4	/* Includes kadmin.local and kdb5_util */
52*7c478bd9Sstevel@tonic-gate 
53*7c478bd9Sstevel@tonic-gate /*
54*7c478bd9Sstevel@tonic-gate  * Default ulog file attributes
55*7c478bd9Sstevel@tonic-gate  */
56*7c478bd9Sstevel@tonic-gate #define	ULOG_FILE	"/var/krb5/principal.ulog"
57*7c478bd9Sstevel@tonic-gate #define	MAX_FILENAME	(PATH_MAX + 1)
58*7c478bd9Sstevel@tonic-gate #define	MAX_ULOGENTRIES	2500
59*7c478bd9Sstevel@tonic-gate #define	DEF_ULOGENTRIES	1000
60*7c478bd9Sstevel@tonic-gate #define	ULOG_IDLE_TIME	10		/* in seconds */
61*7c478bd9Sstevel@tonic-gate /*
62*7c478bd9Sstevel@tonic-gate  * Max size of update entry + update header
63*7c478bd9Sstevel@tonic-gate  * We make this large since resizing can be costly.
64*7c478bd9Sstevel@tonic-gate  */
65*7c478bd9Sstevel@tonic-gate #define	ULOG_BLOCK	2048		/* Default size of principal record */
66*7c478bd9Sstevel@tonic-gate 
67*7c478bd9Sstevel@tonic-gate #define	MAXLOGLEN	0x10000000	/* 256 MB log file */
68*7c478bd9Sstevel@tonic-gate 
69*7c478bd9Sstevel@tonic-gate /*
70*7c478bd9Sstevel@tonic-gate  * Prototype declarations
71*7c478bd9Sstevel@tonic-gate  */
72*7c478bd9Sstevel@tonic-gate extern krb5_error_code ulog_map(krb5_context context,
73*7c478bd9Sstevel@tonic-gate 	kadm5_config_params *params, int caller);
74*7c478bd9Sstevel@tonic-gate extern krb5_error_code ulog_add_update(krb5_context context,
75*7c478bd9Sstevel@tonic-gate 	kdb_incr_update_t *upd);
76*7c478bd9Sstevel@tonic-gate extern krb5_error_code ulog_delete_update(krb5_context context,
77*7c478bd9Sstevel@tonic-gate 	kdb_incr_update_t *upd);
78*7c478bd9Sstevel@tonic-gate extern krb5_error_code ulog_finish_update(krb5_context context,
79*7c478bd9Sstevel@tonic-gate 	kdb_incr_update_t *upd);
80*7c478bd9Sstevel@tonic-gate extern krb5_error_code ulog_get_entries(krb5_context context, kdb_last_t last,
81*7c478bd9Sstevel@tonic-gate 	kdb_incr_result_t *ulog_handle);
82*7c478bd9Sstevel@tonic-gate extern krb5_error_code ulog_replay(krb5_context context,
83*7c478bd9Sstevel@tonic-gate 	kdb_incr_result_t *incr_ret);
84*7c478bd9Sstevel@tonic-gate extern krb5_error_code ulog_conv_2logentry(krb5_context context,
85*7c478bd9Sstevel@tonic-gate 	krb5_db_entry *entries, kdb_incr_update_t *updates, int nentries);
86*7c478bd9Sstevel@tonic-gate extern krb5_error_code ulog_conv_2dbentry(krb5_context context,
87*7c478bd9Sstevel@tonic-gate 	krb5_db_entry *entries, kdb_incr_update_t *updates, int nentries);
88*7c478bd9Sstevel@tonic-gate extern void ulog_free_entries(kdb_incr_update_t *updates, int no_of_updates);
89*7c478bd9Sstevel@tonic-gate extern krb5_error_code ulog_set_role(krb5_context ctx, iprop_role role);
90*7c478bd9Sstevel@tonic-gate 
91*7c478bd9Sstevel@tonic-gate typedef struct kdb_hlog {
92*7c478bd9Sstevel@tonic-gate 	uint32_t	kdb_hmagic;	/* Log header magic # */
93*7c478bd9Sstevel@tonic-gate 	uint16_t	db_version_num;	/* Kerberos database version no. */
94*7c478bd9Sstevel@tonic-gate 	uint32_t	kdb_num;	/* # of updates in log */
95*7c478bd9Sstevel@tonic-gate 	kdbe_time_t	kdb_first_time;	/* Timestamp of first update */
96*7c478bd9Sstevel@tonic-gate 	kdbe_time_t	kdb_last_time;	/* Timestamp of last update */
97*7c478bd9Sstevel@tonic-gate 	kdb_sno_t	kdb_first_sno;	/* First serial # in the update log */
98*7c478bd9Sstevel@tonic-gate 	kdb_sno_t	kdb_last_sno;	/* Last serial # in the update log */
99*7c478bd9Sstevel@tonic-gate 	uint16_t	kdb_state;	/* State of update log */
100*7c478bd9Sstevel@tonic-gate 	uint16_t	kdb_block;	/* Block size of each element */
101*7c478bd9Sstevel@tonic-gate } kdb_hlog_t;
102*7c478bd9Sstevel@tonic-gate 
103*7c478bd9Sstevel@tonic-gate typedef struct kdb_ent_header {
104*7c478bd9Sstevel@tonic-gate 	uint32_t	kdb_umagic;	/* Update entry magic # */
105*7c478bd9Sstevel@tonic-gate 	kdb_sno_t	kdb_entry_sno;	/* Serial # of entry */
106*7c478bd9Sstevel@tonic-gate 	kdbe_time_t	kdb_time;	/* Timestamp of update */
107*7c478bd9Sstevel@tonic-gate 	bool_t		kdb_commit;	/* Is the entry committed or not */
108*7c478bd9Sstevel@tonic-gate 	uint32_t	kdb_entry_size;	/* Size of update entry */
109*7c478bd9Sstevel@tonic-gate 	uchar_t		entry_data[4];	/* Address of kdb_incr_update_t */
110*7c478bd9Sstevel@tonic-gate } kdb_ent_header_t;
111*7c478bd9Sstevel@tonic-gate 
112*7c478bd9Sstevel@tonic-gate typedef struct _kdb_log_context {
113*7c478bd9Sstevel@tonic-gate 	iprop_role	iproprole;
114*7c478bd9Sstevel@tonic-gate 	kdb_hlog_t	*ulog;
115*7c478bd9Sstevel@tonic-gate 	uint32_t	ulogentries;
116*7c478bd9Sstevel@tonic-gate 	int		ulogfd;
117*7c478bd9Sstevel@tonic-gate } kdb_log_context;
118*7c478bd9Sstevel@tonic-gate 
119*7c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
120*7c478bd9Sstevel@tonic-gate }
121*7c478bd9Sstevel@tonic-gate #endif
122*7c478bd9Sstevel@tonic-gate 
123*7c478bd9Sstevel@tonic-gate #endif	/* !_KDB_LOG_H */
124