]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
* kdb_xdr.c: Added new functions
authorMitchell Berger <mitchb@mit.edu>
Wed, 20 Jun 2001 08:19:17 +0000 (08:19 +0000)
committerMitchell Berger <mitchb@mit.edu>
Wed, 20 Jun 2001 08:19:17 +0000 (08:19 +0000)
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

src/lib/kdb/ChangeLog
src/lib/kdb/kdb_xdr.c

index b862b23ceea54c00e865046a6d2aa3bbd5410896..90a0a9a38556b653784c74f2affc2b860c4423d1 100644 (file)
@@ -1,3 +1,9 @@
+2001-06-20  Mitchell Berger  <mitchb@mit.edu>
+
+       * kdb_xdr.c: Added new functions
+       krb5_dbe_update_generation_number_general and
+       krb5_dbe_lookup_generation_number_general
+
 2001-04-25  Ezra Peisach  <epeisach@mit.edu>
 
        * kdb_dbm.c (destroy_file_suffix): Declare as static.
index 5573431c6d93d34f1ea3c117b5c9b9e600c6408b..83141b058ca7175d12baba5b4aadf3a75fc83df2 100644 (file)
@@ -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;