Blame SOURCES/krb5-master-keyring-kdcsync.patch

7d335d
commit e99c688913a7761c6adea9488ea9355f43539883
7d335d
Author: Greg Hudson <ghudson@mit.edu>
7d335d
Date:   Thu Jan 16 17:48:54 2014 -0500
7d335d
7d335d
    Get time offsets for all keyring ccaches
7d335d
    
7d335d
    Move the time offset lookup from krb5_krcc_resolve to make_cache, so
7d335d
    that we fetch time offsets for caches created by
7d335d
    krb5_krcc_ptcursor_next.
7d335d
    
7d335d
    ticket: 7820
7d335d
    target_version: 1.12.2
7d335d
    tags: pullup
7d335d
7d335d
diff --git a/src/lib/krb5/ccache/cc_keyring.c b/src/lib/krb5/ccache/cc_keyring.c
7d335d
index a0c8035..27bad9d 100644
7d335d
--- a/src/lib/krb5/ccache/cc_keyring.c
7d335d
+++ b/src/lib/krb5/ccache/cc_keyring.c
7d335d
@@ -1077,11 +1077,13 @@ krb5_krcc_destroy(krb5_context context, krb5_ccache id)
7d335d
 
7d335d
 /* Create a cache handle for a cache ID. */
7d335d
 static krb5_error_code
7d335d
-make_cache(key_serial_t collection_id, key_serial_t cache_id,
7d335d
-           const char *anchor_name, const char *collection_name,
7d335d
-           const char *subsidiary_name, krb5_ccache *cache_out)
7d335d
+make_cache(krb5_context context, key_serial_t collection_id,
7d335d
+           key_serial_t cache_id, const char *anchor_name,
7d335d
+           const char *collection_name, const char *subsidiary_name,
7d335d
+           krb5_ccache *cache_out)
7d335d
 {
7d335d
     krb5_error_code ret;
7d335d
+    krb5_os_context os_ctx = &context->os_context;
7d335d
     krb5_ccache ccache = NULL;
7d335d
     krb5_krcc_data *d;
7d335d
     key_serial_t pkey = 0;
7d335d
@@ -1108,6 +1110,18 @@ make_cache(key_serial_t collection_id, key_serial_t cache_id,
7d335d
     ccache->data = d;
7d335d
     ccache->magic = KV5M_CCACHE;
7d335d
     *cache_out = ccache;
7d335d
+
7d335d
+    /* Lookup time offsets if necessary. */
7d335d
+    if ((context->library_options & KRB5_LIBOPT_SYNC_KDCTIME) &&
7d335d
+        !(os_ctx->os_flags & KRB5_OS_TOFFSET_VALID)) {
7d335d
+        if (krb5_krcc_get_time_offsets(context, ccache,
7d335d
+                                       &os_ctx->time_offset,
7d335d
+                                       &os_ctx->usec_offset) == 0) {
7d335d
+            os_ctx->os_flags &= ~KRB5_OS_TOFFSET_TIME;
7d335d
+            os_ctx->os_flags |= KRB5_OS_TOFFSET_VALID;
7d335d
+        }
7d335d
+    }
7d335d
+
7d335d
     return 0;
7d335d
 }
7d335d
 
7d335d
@@ -1134,7 +1148,6 @@ make_cache(key_serial_t collection_id, key_serial_t cache_id,
7d335d
 static krb5_error_code KRB5_CALLCONV
7d335d
 krb5_krcc_resolve(krb5_context context, krb5_ccache *id, const char *residual)
7d335d
 {
7d335d
-    krb5_os_context os_ctx = &context->os_context;
7d335d
     krb5_error_code ret;
7d335d
     key_serial_t collection_id, cache_id;
7d335d
     char *anchor_name = NULL, *collection_name = NULL, *subsidiary_name = NULL;
7d335d
@@ -1161,22 +1174,11 @@ krb5_krcc_resolve(krb5_context context, krb5_ccache *id, const char *residual)
7d335d
     if (cache_id < 0)
7d335d
         cache_id = 0;
7d335d
 
7d335d
-    ret = make_cache(collection_id, cache_id, anchor_name, collection_name,
7d335d
-                     subsidiary_name, id);
7d335d
+    ret = make_cache(context, collection_id, cache_id, anchor_name,
7d335d
+                     collection_name, subsidiary_name, id);
7d335d
     if (ret)
7d335d
         goto cleanup;
7d335d
 
7d335d
-    /* Lookup time offsets if necessary. */
7d335d
-    if ((context->library_options & KRB5_LIBOPT_SYNC_KDCTIME) &&
7d335d
-        !(os_ctx->os_flags & KRB5_OS_TOFFSET_VALID)) {
7d335d
-        if (krb5_krcc_get_time_offsets(context, *id,
7d335d
-                                       &os_ctx->time_offset,
7d335d
-                                       &os_ctx->usec_offset) == 0) {
7d335d
-            os_ctx->os_flags &= ~KRB5_OS_TOFFSET_TIME;
7d335d
-            os_ctx->os_flags |= KRB5_OS_TOFFSET_VALID;
7d335d
-        }
7d335d
-    }
7d335d
-
7d335d
 cleanup:
7d335d
     free(anchor_name);
7d335d
     free(collection_name);
7d335d
@@ -1928,8 +1930,9 @@ krb5_krcc_ptcursor_next(krb5_context context, krb5_cc_ptcursor cursor,
7d335d
         cache_id = keyctl_search(data->collection_id, KRCC_KEY_TYPE_KEYRING,
7d335d
                                  first_name, 0);
7d335d
         if (cache_id != -1) {
7d335d
-            return make_cache(data->collection_id, cache_id, data->anchor_name,
7d335d
-                              data->collection_name, first_name, cache_out);
7d335d
+            return make_cache(context, data->collection_id, cache_id,
7d335d
+                              data->anchor_name, data->collection_name,
7d335d
+                              first_name, cache_out);
7d335d
         }
7d335d
     }
7d335d
 
7d335d
@@ -1967,7 +1970,7 @@ krb5_krcc_ptcursor_next(krb5_context context, krb5_cc_ptcursor cursor,
7d335d
 
7d335d
         /* We found a valid key */
7d335d
         data->next_key++;
7d335d
-        ret = make_cache(data->collection_id, key, data->anchor_name,
7d335d
+        ret = make_cache(context, data->collection_id, key, data->anchor_name,
7d335d
                          data->collection_name, subsidiary_name, cache_out);
7d335d
         free(description);
7d335d
         return ret;