pull up r25384 from trunk
authorTom Yu <tlyu@mit.edu>
Thu, 20 Oct 2011 19:27:43 +0000 (19:27 +0000)
committerTom Yu <tlyu@mit.edu>
Thu, 20 Oct 2011 19:27:43 +0000 (19:27 +0000)
 ------------------------------------------------------------------------
 r25384 | ghudson | 2011-10-19 23:45:12 -0400 (Wed, 19 Oct 2011) | 12 lines

 ticket: 6987
 subject: Fix krb5_cc_set_config
 target_version: 1.10
 tags: pullup

 krb5_cc_set_config has been non-functional since r24753 on cache types
 which don't support removal of credential entries.  Fix it by only
 calling krb5_cc_remove_cred if data is NULL, since krb5_cc_store_cred
 will do it anyway in the positive case.

 Also fix an old memory leak in an uncommon error case.

ticket: 6987
version_fixed: 1.10
status: resolved

git-svn-id: svn://anonsvn.mit.edu/krb5/branches/krb5-1-10@25388 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/ccache/ccfns.c

index 70c607dfb4569a5c41d2f41d92ba485a1284d66e..b5a878fc6e03203dfecb4c4b466b7fd440e13a9b 100644 (file)
@@ -281,16 +281,14 @@ krb5_cc_set_config(krb5_context context, krb5_ccache id,
     if (ret)
         goto out;
 
-    /* Remove old configuration */
-    ret = krb5_cc_remove_cred(context, id, 0, &cred);
-    if (ret && ret != KRB5_CC_NOTFOUND)
-        goto out;
-
-    if (data) {
+    if (data == NULL) {
+        ret = krb5_cc_remove_cred(context, id, 0, &cred);
+    } else {
         cred.ticket.data = malloc(data->length);
         if (cred.ticket.data == NULL) {
-            krb5_set_error_message(context, ENOMEM, "malloc: out of memory");
-            return ENOMEM;
+            ret = ENOMEM;
+            krb5_set_error_message(context, ret, "malloc: out of memory");
+            goto out;
         }
         cred.ticket.length = data->length;
         memcpy(cred.ticket.data, data->data, data->length);