From: Mitchell Berger Date: Wed, 20 Jun 2001 08:19:17 +0000 (+0000) Subject: * kdb_xdr.c: Added new functions X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1c008587d44c887fdd85bff43e712f1ed3a48227;p=thirdparty%2Fkrb5.git * kdb_xdr.c: Added new functions krb5_dbe_update_generation_number_general and krb5_dbe_lookup_generation_number_general git-svn-id: svn://anonsvn.mit.edu/krb5/branches/incremental-propagation-branch@13410 dc483132-0cff-0310-8789-dd5450dbe970 --- diff --git a/src/lib/kdb/ChangeLog b/src/lib/kdb/ChangeLog index b862b23cee..90a0a9a385 100644 --- a/src/lib/kdb/ChangeLog +++ b/src/lib/kdb/ChangeLog @@ -1,3 +1,9 @@ +2001-06-20 Mitchell Berger + + * kdb_xdr.c: Added new functions + krb5_dbe_update_generation_number_general and + krb5_dbe_lookup_generation_number_general + 2001-04-25 Ezra Peisach * kdb_dbm.c (destroy_file_suffix): Declare as static. diff --git a/src/lib/kdb/kdb_xdr.c b/src/lib/kdb/kdb_xdr.c index 5573431c6d..83141b058c 100644 --- a/src/lib/kdb/kdb_xdr.c +++ b/src/lib/kdb/kdb_xdr.c @@ -1,7 +1,7 @@ /* * lib/kdb/kdb_xdr.c * - * Copyright 1995 by the Massachusetts Institute of Technology. + * Copyright 1995,2001 by the Massachusetts Institute of Technology. * All Rights Reserved. * * Export of this software from the United States of America may @@ -122,6 +122,58 @@ krb5_dbe_lookup_tl_data(context, entry, ret_tl_data) return(0); } +/* You can force the generation number to a particular value by filling in + newval. By default, if newval is zero, the generation number will simply + be incremented by 1. */ + +krb5_error_code +krb5_dbe_update_generation_number_general(context, entry, newval) + krb5_context context; + krb5_db_entry * entry; + krb5_int32 newval; +{ + krb5_error_code ret; + krb5_tl_data tl_data; + krb5_int32 generation_number; + krb5_octet buf[4]; /* this is the encoded size of an int32 */ + + if ((ret = krb5_dbe_lookup_generation_number_general(context, entry, + &generation_number))) + generation_number = 0; /* Didn't exist before. */ + generation_number = newval ? newval : (generation_number + 1); + tl_data.tl_data_type = KRB5_TL_GENERATION_NUMBER; + tl_data.tl_data_length = sizeof(generation_number); + krb5_kdb_encode_int32(generation_number, buf); + tl_data.tl_data_contents = buf; + + return(krb5_dbe_update_tl_data(context, entry, &tl_data)); +} + +krb5_error_code +krb5_dbe_lookup_generation_number_general(context, entry, generation_number) + krb5_context context; + krb5_db_entry * entry; + krb5_int32 * generation_number; +{ + krb5_tl_data tl_data; + krb5_error_code code; + krb5_int32 tmp; + + tl_data.tl_data_type = KRB5_TL_GENERATION_NUMBER; + + if ((code = krb5_dbe_lookup_tl_data(context, entry, &tl_data))) + return(code); + + if (tl_data.tl_data_length == 0) /* Generation number not found */ + return(KRB5KRB_ERR_GENERIC); + + krb5_kdb_decode_int32(tl_data.tl_data_contents, tmp); + + *generation_number = tmp; + + return(0); +} + krb5_error_code krb5_dbe_update_last_pwd_change(context, entry, stamp) krb5_context context;