Robustified copy_authenticator so that the passed in authenticator
authorTheodore Tso <tytso@mit.edu>
Wed, 9 Jan 1991 00:35:04 +0000 (00:35 +0000)
committerTheodore Tso <tytso@mit.edu>
Wed, 9 Jan 1991 00:35:04 +0000 (00:35 +0000)
can have a NULL subkey or checksum.

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@1625 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/krb/copy_athctr.c

index 5f30ac4af460995294db44498fd6997e7e5cc9fd..5756a991ca4f8c66222711cc4503b234a71c1799 100644 (file)
@@ -37,26 +37,29 @@ krb5_authenticator **authto;
        return retval;
     }
     
-    if (retval = krb5_copy_checksum(authfrom->checksum, &tempto->checksum)) {
-       krb5_free_principal(tempto->client);    
-       xfree(tempto);
-       return retval;
+    if (authfrom->checksum &&
+       (retval = krb5_copy_checksum(authfrom->checksum, &tempto->checksum))) {
+           krb5_free_principal(tempto->client);    
+           xfree(tempto);
+           return retval;
     }
     
-    if (!(tempto->subkey =
-         (krb5_keyblock *)malloc(sizeof(*tempto->subkey)))) {
-       krb5_free_checksum(tempto->checksum);
-       krb5_free_principal(tempto->client);    
-       xfree(tempto);
-       return ENOMEM;
-    }
-    if (retval = krb5_copy_keyblock(authfrom->subkey,
-                                   tempto->subkey)) {
-       xfree(tempto->subkey);
-       krb5_free_checksum(tempto->checksum);
-       krb5_free_principal(tempto->client);    
-       xfree(tempto);
-       return retval;
+    if (authfrom->subkey) {
+           if (!(tempto->subkey =
+                 (krb5_keyblock *)malloc(sizeof(*tempto->subkey)))) {
+                   krb5_free_checksum(tempto->checksum);
+                   krb5_free_principal(tempto->client);    
+                   xfree(tempto);
+                   return ENOMEM;
+           }
+           if (retval = krb5_copy_keyblock(authfrom->subkey,
+                                           tempto->subkey)) {
+                   xfree(tempto->subkey);
+                   krb5_free_checksum(tempto->checksum);
+                   krb5_free_principal(tempto->client);    
+                   xfree(tempto);
+                   return retval;
+           }
     }
     
     *authto = tempto;