New iprop.x
  1 /*
  2  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
  3  * Use is subject to license terms.
  4  */
  5 
  6 %#pragma ident  "@(#)iprop.x    1.2     04/02/20 SMI"
  7 
  8 #ifdef RPC_XDR
  9 %#include "iprop.h"
 10 #endif /* RPC_XDR */
 11 
 12 /*
 13  * Initial declarations
 14  */
 15 
 16 #ifndef RPC_HDR
 17 typedef short int16_t;
 18 typedef unsigned short uint16_t;
 19 typedef int int32_t;
 20 typedef unsigned int uint32_t;
 21 typedef hyper int64_t;
 22 typedef unsigned hyper uint64_t;
 23 #endif  /* !RPC_HDR */
 24 
 25 typedef opaque   utf8str_t<>;
 26 
 27 /*
 28  * Transaction log serial no.
 29  */
 30 typedef uint32_t        kdb_sno_t;
 31 
 32 /* Timestamp */
 33 struct kdbe_time_t {
 34         uint32_t        seconds;
 35         uint32_t        useconds;
 36 };
 37 
 38 /* Key Data */
 39 struct kdbe_key_t {
 40         int32_t         k_ver;  /* Version */
 41         int32_t         k_kvno; /* Key version no. */
 42         int32_t         k_enctype<>;
 43         utf8str_t       k_contents<>;
 44 };
 45 
 46 /* Content data */
 47 struct kdbe_data_t {
 48         int32_t         k_magic;
 49         utf8str_t       k_data;
 50 };
 51 
 52 /* Principal Data */
 53 struct kdbe_princ_t {
 54         utf8str_t       k_realm;
 55         kdbe_data_t     k_components<>;
 56         int32_t         k_nametype;
 57 };
 58 
 59 /* TL data (pre-auth specific data) */
 60 struct kdbe_tl_t {
 61         int16_t         tl_type;
 62         opaque          tl_data<>;
 63 };
 64 
 65 /* Structure to store pwd history */
 66 typedef kdbe_key_t kdbe_pw_hist_t<>;
 67 
 68 /* Basic KDB entry attributes */
 69 enum kdbe_attr_type_t {
 70         AT_ATTRFLAGS = 0,
 71         AT_MAX_LIFE = 1,
 72         AT_MAX_RENEW_LIFE = 2,
 73         AT_EXP = 3,
 74         AT_PW_EXP = 4,
 75         AT_LAST_SUCCESS = 5,
 76         AT_LAST_FAILED = 6,
 77         AT_FAIL_AUTH_COUNT = 7,
 78         AT_PRINC = 8,
 79         AT_KEYDATA = 9,
 80         AT_TL_DATA = 10,
 81         AT_LEN = 11,
 82         AT_MOD_PRINC = 12,
 83         AT_MOD_TIME = 13,
 84         AT_MOD_WHERE = 14,
 85         AT_PW_LAST_CHANGE = 15,
 86         AT_PW_POLICY = 16,
 87         AT_PW_POLICY_SWITCH = 17,
 88         AT_PW_HIST_KVNO = 18,
 89         AT_PW_HIST = 19
 90 };
 91 
 92 /* KDB entry, Attribute=value */
 93 union kdbe_val_t switch (kdbe_attr_type_t av_type) {
 94 case AT_ATTRFLAGS:
 95         uint32_t        av_attrflags;
 96 case AT_MAX_LIFE:
 97         uint32_t        av_max_life;
 98 case AT_MAX_RENEW_LIFE:
 99         uint32_t        av_max_renew_life;
100 case AT_EXP:
101         uint32_t        av_exp;
102 case AT_PW_EXP:
103         uint32_t        av_pw_exp;
104 case AT_LAST_SUCCESS:
105         uint32_t        av_last_success;
106 case AT_LAST_FAILED:
107         uint32_t        av_last_failed;
108 case AT_FAIL_AUTH_COUNT:
109         uint32_t        av_fail_auth_count;
110 case AT_PRINC:
111         kdbe_princ_t    av_princ;
112 case AT_KEYDATA:
113         kdbe_key_t      av_keydata<>;     /* array of keys */
114 case AT_TL_DATA:
115         kdbe_tl_t       av_tldata<>;      /* array of TL data */
116 case AT_LEN:
117         int16_t         av_len;
118 case AT_PW_LAST_CHANGE:
119         uint32_t        av_pw_last_change;
120 case AT_MOD_PRINC:
121         kdbe_princ_t    av_mod_princ;
122 case AT_MOD_TIME:
123         uint32_t        av_mod_time;
124 case AT_MOD_WHERE:
125         utf8str_t       av_mod_where;
126 case AT_PW_POLICY:
127         utf8str_t       av_pw_policy;
128 case AT_PW_POLICY_SWITCH:
129         bool            av_pw_policy_switch;
130 case AT_PW_HIST_KVNO:
131         uint32_t        av_pw_hist_kvno;
132 case AT_PW_HIST:
133         kdbe_pw_hist_t  av_pw_hist<>;     /* array of pw history */
134 default:
135         opaque          av_extension<>;   /* futures */
136 };
137 
138 typedef kdbe_val_t kdbe_t<>;          /* Array of attr/val makes a KDB entry */
139 
140 /*
141  * Incremental update
142  */
143 struct kdb_incr_update_t {
144         utf8str_t       kdb_princ_name; /* Principal name */
145         kdb_sno_t       kdb_entry_sno;  /* Serial # of entry */
146         kdbe_time_t     kdb_time;       /* Timestamp of update */
147         kdbe_t          kdb_update;     /* Attributes modified */
148         bool            kdb_deleted;    /* Is this update a DELETION ? */
149         bool            kdb_commit;     /* Is the entry committed or not ? */
150         utf8str_t       kdb_kdcs_seen_by<>; /* Names of slaves that have */
151                                             /* seen this update - for */
152                                             /* future use */
153         opaque          kdb_futures<>;    /* futures */
154 };
155 
156 /*
157  * Update log body
158  */
159 typedef kdb_incr_update_t kdb_ulog_t<>;
160 
161 enum update_status_t {
162         UPDATE_OK = 0,
163         UPDATE_ERROR = 1,
164         UPDATE_FULL_RESYNC_NEEDED = 2,
165         UPDATE_BUSY = 3,
166         UPDATE_NIL = 4,
167         UPDATE_PERM_DENIED = 5
168 };
169 
170 struct kdb_last_t {
171         kdb_sno_t       last_sno;
172         kdbe_time_t     last_time;
173 };
174 
175 struct kdb_incr_result_t {
176         kdb_last_t              lastentry;
177         kdb_ulog_t              updates;
178         update_status_t         ret;
179 };
180 
181 struct kdb_fullresync_result_t {
182         kdb_last_t              lastentry;
183         update_status_t         ret;
184 };
185 
186 program KRB5_IPROP_PROG {
187         version KRB5_IPROP_VERS {
188                 /*
189                  * NULL procedure
190                  */
191                 void
192                 IPROP_NULL(void) = 0;
193 
194                 /*
195                  * Keep waiting for and get next incremental update(s)
196                  *
197                  * Will return latest kdb_vers on the master (if different),
198                  * alongwith return value and affected db entries.
199                  */
200                 kdb_incr_result_t
201                 IPROP_GET_UPDATES(kdb_last_t) = 1;
202 
203                 /*
204                  * We need to do the full-resync of the db, since the
205                  * serial nos./timestamps are way out-of-whack
206                  */
207                 kdb_fullresync_result_t
208                 IPROP_FULL_RESYNC(void) = 2;
209         } = 1;
210 } = 100423;