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