Author: abartlet
Date: 2005-09-07 22:04:11 +0000 (Wed, 07 Sep 2005)
New Revision: 455

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=lorikeet&rev=455

Log:
Don't modify the returned keyblock unless we succeed.

Andrew Bartlett

Modified:
   trunk/heimdal/lib/krb5/rd_req.c


Changeset:
Modified: trunk/heimdal/lib/krb5/rd_req.c
===================================================================
--- trunk/heimdal/lib/krb5/rd_req.c     2005-09-05 10:50:15 UTC (rev 454)
+++ trunk/heimdal/lib/krb5/rd_req.c     2005-09-07 22:04:11 UTC (rev 455)
@@ -565,6 +565,7 @@
     krb5_error_code ret;
     krb5_ap_req ap_req;
     krb5_principal service = NULL;
+    krb5_keyblock *local_keyblock;
 
     if (*auth_context == NULL) {
        ret = krb5_auth_con_init(context, auth_context);
@@ -596,13 +597,13 @@
                                  &ap_req,
                                  server,
                                  keytab,
-                                 keyblock);
+                                 &local_keyblock);
        if(ret)
            goto out;
     } else {
        ret = krb5_copy_keyblock(context,
                                 (*auth_context)->keyblock,
-                                keyblock);
+                                &local_keyblock);
        if (ret)
            goto out;
     }
@@ -611,17 +612,20 @@
                             auth_context,
                             &ap_req,
                             server,
-                            *keyblock,
+                            local_keyblock,
                             0,
                             ap_req_options,
                             ticket);
+    if (ret) {
+        krb5_free_keyblock(context, local_keyblock);
+    } else {
+       *keyblock = local_keyblock;
+    }
 
 out:
     free_AP_REQ(&ap_req);
     if(service)
        krb5_free_principal(context, service);
-    if (ret) 
-        krb5_free_keyblock(context, *keyblock);
            
     return ret;
 }

Reply via email to