2 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
3 * Use is subject to license terms.
9 #pragma ident "%Z%%M% %I% %E% SMI"
12 #include <iprop_hdr.h>
15 #include <kadm5/admin.h>
24 #define INDEX(ulogaddr, i) ((ulong_t) ulogaddr + sizeof (kdb_hlog_t) + \
28 * Current DB version #
36 #define KDB_UNSTABLE 2
42 #define KDB_UMAGIC 0x6661212
43 #define KDB_HMAGIC 0x6662323
51 #define FKCOMMAND 4 /* Includes kadmin.local and kdb5_util */
54 * Default ulog file attributes
56 #define ULOG_FILE "/var/krb5/principal.ulog"
57 #define MAX_FILENAME (PATH_MAX + 1)
58 #define MAX_ULOGENTRIES 2500
59 #define DEF_ULOGENTRIES 1000
60 #define ULOG_IDLE_TIME 10 /* in seconds */
62 * Max size of update entry + update header
63 * We make this large since resizing can be costly.
65 #define ULOG_BLOCK 2048 /* Default size of principal record */
67 #define MAXLOGLEN 0x10000000 /* 256 MB log file */
70 * Prototype declarations
72 extern krb5_error_code
ulog_map(krb5_context context
,
73 kadm5_config_params
*params
, int caller
);
74 extern krb5_error_code
ulog_add_update(krb5_context context
,
75 kdb_incr_update_t
*upd
);
76 extern krb5_error_code
ulog_delete_update(krb5_context context
,
77 kdb_incr_update_t
*upd
);
78 extern krb5_error_code
ulog_finish_update(krb5_context context
,
79 kdb_incr_update_t
*upd
);
80 extern krb5_error_code
ulog_get_entries(krb5_context context
, kdb_last_t last
,
81 kdb_incr_result_t
*ulog_handle
);
82 extern krb5_error_code
ulog_replay(krb5_context context
,
83 kdb_incr_result_t
*incr_ret
);
84 extern krb5_error_code
ulog_conv_2logentry(krb5_context context
,
85 krb5_db_entry
*entries
, kdb_incr_update_t
*updates
, int nentries
);
86 extern krb5_error_code
ulog_conv_2dbentry(krb5_context context
,
87 krb5_db_entry
*entries
, kdb_incr_update_t
*updates
, int nentries
);
88 extern void ulog_free_entries(kdb_incr_update_t
*updates
, int no_of_updates
);
89 extern krb5_error_code
ulog_set_role(krb5_context ctx
, iprop_role role
);
91 typedef struct kdb_hlog
{
92 uint32_t kdb_hmagic
; /* Log header magic # */
93 uint16_t db_version_num
; /* Kerberos database version no. */
94 uint32_t kdb_num
; /* # of updates in log */
95 kdbe_time_t kdb_first_time
; /* Timestamp of first update */
96 kdbe_time_t kdb_last_time
; /* Timestamp of last update */
97 kdb_sno_t kdb_first_sno
; /* First serial # in the update log */
98 kdb_sno_t kdb_last_sno
; /* Last serial # in the update log */
99 uint16_t kdb_state
; /* State of update log */
100 uint16_t kdb_block
; /* Block size of each element */
103 typedef struct kdb_ent_header
{
104 uint32_t kdb_umagic
; /* Update entry magic # */
105 kdb_sno_t kdb_entry_sno
; /* Serial # of entry */
106 kdbe_time_t kdb_time
; /* Timestamp of update */
107 bool_t kdb_commit
; /* Is the entry committed or not */
108 uint32_t kdb_entry_size
; /* Size of update entry */
109 uchar_t entry_data
[4]; /* Address of kdb_incr_update_t */
112 typedef struct _kdb_log_context
{
113 iprop_role iproprole
;
115 uint32_t ulogentries
;
123 #endif /* !_KDB_LOG_H */