svn rev #21709: trunk/src/kadmin/server/

ghudson@MIT.EDU ghudson at MIT.EDU
Tue Jan 6 15:44:01 EST 2009


http://src.mit.edu/fisheye/changelog/krb5/?cs=21709
Commit By: ghudson
Log Message:
Clean up many error-condition leaks of the server handle in the
kadmind server stubs.



Changed Files:
U   trunk/src/kadmin/server/server_stubs.c
Modified: trunk/src/kadmin/server/server_stubs.c
===================================================================
--- trunk/src/kadmin/server/server_stubs.c	2009-01-06 20:24:09 UTC (rev 21708)
+++ trunk/src/kadmin/server/server_stubs.c	2009-01-06 20:44:01 UTC (rev 21709)
@@ -110,6 +110,8 @@
 {
      kadm5_server_handle_t handle;
 
+     *out_handle = NULL;
+
      if (! (handle = (kadm5_server_handle_t)
 	    malloc(sizeof(*handle))))
 	  return ENOMEM;
@@ -137,6 +139,8 @@
  */
 static void free_server_handle(kadm5_server_handle_t handle)
 {
+     if (!handle)
+	  return;
      krb5_free_principal(handle->context, handle->current_caller);
      free(handle);
 }
@@ -310,10 +314,8 @@
     if ((ret.code = new_server_handle(arg->api_version, rqstp, &handle)))
 	goto exit_func;
 
-    if ((ret.code = check_handle((void *)handle))) {
-	 free_server_handle(handle);
+    if ((ret.code = check_handle((void *)handle)))
 	 goto exit_func;
-    }
 
     ret.api_version = handle->api_version;
 
@@ -349,12 +351,12 @@
 	if (errmsg != NULL)
 		krb5_free_error_message(handle->context, errmsg);
     }
-    free_server_handle(handle);
     free(prime_arg);
     gss_release_buffer(&minor_stat, &client_name);
     gss_release_buffer(&minor_stat, &service_name);
 
  exit_func:
+    free_server_handle(handle);
     return &ret;
 }
 
@@ -374,10 +376,8 @@
     if ((ret.code = new_server_handle(arg->api_version, rqstp, &handle)))
 	 goto exit_func;
 
-    if ((ret.code = check_handle((void *)handle))) {
-	 free_server_handle(handle);
+    if ((ret.code = check_handle((void *)handle)))
 	 goto exit_func;
-    }
 
     ret.api_version = handle->api_version;
 
@@ -414,11 +414,12 @@
 	if (errmsg != NULL)
 		krb5_free_error_message(handle->context, errmsg);
     }
-    free_server_handle(handle);
     free(prime_arg);
     gss_release_buffer(&minor_stat, &client_name);
     gss_release_buffer(&minor_stat, &service_name);
+
 exit_func:
+    free_server_handle(handle);
     return &ret;
 }
 
@@ -438,10 +439,8 @@
     if ((ret.code = new_server_handle(arg->api_version, rqstp, &handle)))
 	 goto exit_func;
 
-    if ((ret.code = check_handle((void *)handle))) {
-	 free_server_handle(handle);
+    if ((ret.code = check_handle((void *)handle)))
 	 goto exit_func;
-    }
 
     ret.api_version = handle->api_version;
 
@@ -474,11 +473,11 @@
 
     }
     free(prime_arg);
-    free_server_handle(handle);
     gss_release_buffer(&minor_stat, &client_name);
     gss_release_buffer(&minor_stat, &service_name);
- exit_func:
 
+exit_func:
+    free_server_handle(handle);
     return &ret;
 }
 
@@ -499,10 +498,8 @@
     if ((ret.code = new_server_handle(arg->api_version, rqstp, &handle)))
 	 goto exit_func;
 
-    if ((ret.code = check_handle((void *)handle))) {
-	 free_server_handle(handle);
+    if ((ret.code = check_handle((void *)handle)))
 	 goto exit_func;
-    }
 
     if (setup_gss_names(rqstp, &client_name, &service_name) < 0) {
 	 ret.code = KADM5_FAILURE;
@@ -534,11 +531,11 @@
 	  if (errmsg != NULL)
 		krb5_free_error_message(handle->context, errmsg);
     }
-    free_server_handle(handle);
     free(prime_arg);
     gss_release_buffer(&minor_stat, &client_name);
     gss_release_buffer(&minor_stat, &service_name);
 exit_func:
+    free_server_handle(handle);
     return &ret;
 }
 
@@ -562,10 +559,8 @@
     if ((ret.code = new_server_handle(arg->api_version, rqstp, &handle)))
 	 goto exit_func;
 
-    if ((ret.code = check_handle((void *)handle))) {
-	 free_server_handle(handle);
+    if ((ret.code = check_handle((void *)handle)))
 	 goto exit_func;
-    }
 
     if (setup_gss_names(rqstp, &client_name, &service_name) < 0) {
 	 ret.code = KADM5_FAILURE;
@@ -633,12 +628,12 @@
 	     krb5_free_error_message(handle->context, errmsg);
 
     }
-    free_server_handle(handle);
     free(prime_arg1);
     free(prime_arg2);    
     gss_release_buffer(&minor_stat, &client_name);
     gss_release_buffer(&minor_stat, &service_name);
 exit_func:
+    free_server_handle(handle);
     return &ret;
 }
 
@@ -659,10 +654,8 @@
     if ((ret.code = new_server_handle(arg->api_version, rqstp, &handle)))
 	 goto exit_func;
 
-    if ((ret.code = check_handle((void *)handle))) {
-	 free_server_handle(handle);
+    if ((ret.code = check_handle((void *)handle)))
 	 goto exit_func;
-    }
 
     ret.api_version = handle->api_version;
 
@@ -710,11 +703,11 @@
 	  if (errmsg != NULL)
 		krb5_free_error_message(handle->context, errmsg);
     }
-    free_server_handle(handle);
     free(prime_arg);
     gss_release_buffer(&minor_stat, &client_name);
     gss_release_buffer(&minor_stat, &service_name);
 exit_func:
+    free_server_handle(handle);
     return &ret;
 }
 
@@ -734,10 +727,8 @@
     if ((ret.code = new_server_handle(arg->api_version, rqstp, &handle)))
 	 goto exit_func;
 
-    if ((ret.code = check_handle((void *)handle))) {
-	 free_server_handle(handle);
+    if ((ret.code = check_handle((void *)handle)))
 	 goto exit_func;
-    }
 
     ret.api_version = handle->api_version;
 
@@ -772,10 +763,10 @@
 		krb5_free_error_message(handle->context, errmsg);
 
     }
-    free_server_handle(handle);
     gss_release_buffer(&minor_stat, &client_name);
     gss_release_buffer(&minor_stat, &service_name);
 exit_func:
+    free_server_handle(handle);
     return &ret;
 }
 
@@ -795,10 +786,8 @@
     if ((ret.code = new_server_handle(arg->api_version, rqstp, &handle)))
 	 goto exit_func;
 
-    if ((ret.code = check_handle((void *)handle))) {
-	 free_server_handle(handle);
+    if ((ret.code = check_handle((void *)handle)))
 	 goto exit_func;
-    }
 
     ret.api_version = handle->api_version;
 
@@ -837,11 +826,11 @@
 		krb5_free_error_message(handle->context, errmsg);
     }
 
-    free_server_handle(handle);
     free(prime_arg);
     gss_release_buffer(&minor_stat, &client_name);
     gss_release_buffer(&minor_stat, &service_name);
 exit_func:
+    free_server_handle(handle);
     return &ret;
 }
 
@@ -861,10 +850,8 @@
     if ((ret.code = new_server_handle(arg->api_version, rqstp, &handle)))
 	 goto exit_func;
 
-    if ((ret.code = check_handle((void *)handle))) {
-	 free_server_handle(handle);
+    if ((ret.code = check_handle((void *)handle)))
 	 goto exit_func;
-    }
 
     ret.api_version = handle->api_version;
 
@@ -909,11 +896,11 @@
 		krb5_free_error_message(handle->context, errmsg);
     }
 
-    free_server_handle(handle);
     free(prime_arg);
     gss_release_buffer(&minor_stat, &client_name);
     gss_release_buffer(&minor_stat, &service_name);
 exit_func:
+    free_server_handle(handle);
     return &ret;
 }
 
@@ -933,10 +920,8 @@
     if ((ret.code = new_server_handle(arg->api_version, rqstp, &handle)))
 	 goto exit_func;
 
-    if ((ret.code = check_handle((void *)handle))) {
-	 free_server_handle(handle);
+    if ((ret.code = check_handle((void *)handle)))
 	 goto exit_func;
-    }
 
     ret.api_version = handle->api_version;
 
@@ -972,11 +957,11 @@
 		krb5_free_error_message(handle->context, errmsg);
     }
 
-    free_server_handle(handle);
     free(prime_arg);
     gss_release_buffer(&minor_stat, &client_name);
     gss_release_buffer(&minor_stat, &service_name);
 exit_func:
+    free_server_handle(handle);
     return &ret;
 }
 
@@ -996,10 +981,8 @@
     if ((ret.code = new_server_handle(arg->api_version, rqstp, &handle)))
 	 goto exit_func;
 
-    if ((ret.code = check_handle((void *)handle))) {
-	 free_server_handle(handle);
+    if ((ret.code = check_handle((void *)handle)))
 	 goto exit_func;
-    }
 
     ret.api_version = handle->api_version;
 
@@ -1035,11 +1018,11 @@
 		krb5_free_error_message(handle->context, errmsg);
     }
 
-    free_server_handle(handle);
     free(prime_arg);
     gss_release_buffer(&minor_stat, &client_name);
     gss_release_buffer(&minor_stat, &service_name);
 exit_func:
+    free_server_handle(handle);
     return &ret;
 }
 
@@ -1059,10 +1042,8 @@
     if ((ret.code = new_server_handle(arg->api_version, rqstp, &handle)))
 	 goto exit_func;
 
-    if ((ret.code = check_handle((void *)handle))) {
-	 free_server_handle(handle);
+    if ((ret.code = check_handle((void *)handle)))
 	 goto exit_func;
-    }
 
     ret.api_version = handle->api_version;
 
@@ -1101,11 +1082,11 @@
 		krb5_free_error_message(handle->context, errmsg);
     }
 
-    free_server_handle(handle);
     free(prime_arg);
     gss_release_buffer(&minor_stat, &client_name);
     gss_release_buffer(&minor_stat, &service_name);
 exit_func:
+    free_server_handle(handle);
     return &ret;
 }
 
@@ -1128,10 +1109,8 @@
 	 goto exit_func;
 
 
-    if ((ret.code = check_handle((void *)handle))) {
-	 free_server_handle(handle);
+    if ((ret.code = check_handle((void *)handle)))
 	 goto exit_func;
-    }
 
     ret.api_version = handle->api_version;
 
@@ -1140,7 +1119,6 @@
 
     if (setup_gss_names(rqstp, &client_name, &service_name) < 0) {
 	 ret.code = KADM5_FAILURE;
-	 free_server_handle(handle);
 	 goto exit_func;
     }
     if (krb5_unparse_name(handle->context, arg->princ, &prime_arg)) {
@@ -1182,11 +1160,11 @@
 	if (errmsg != NULL)
 		krb5_free_error_message(handle->context, errmsg);
     }
-    free_server_handle(handle);
     free(prime_arg);
     gss_release_buffer(&minor_stat, &client_name);
     gss_release_buffer(&minor_stat, &service_name);
 exit_func:
+    free_server_handle(handle);
     return &ret;
 }
 
@@ -1208,10 +1186,8 @@
     if ((ret.code = new_server_handle(arg->api_version, rqstp, &handle)))
 	 goto exit_func;
 
-    if ((ret.code = check_handle((void *)handle))) {
-	 free_server_handle(handle);
+    if ((ret.code = check_handle((void *)handle)))
 	 goto exit_func;
-    }
 
     ret.api_version = handle->api_version;
 
@@ -1220,7 +1196,6 @@
 
     if (setup_gss_names(rqstp, &client_name, &service_name) < 0) {
 	 ret.code = KADM5_FAILURE;
-	 free_server_handle(handle);
 	 goto exit_func;
     }
     if (krb5_unparse_name(handle->context, arg->princ, &prime_arg)) {
@@ -1268,11 +1243,11 @@
 	if (errmsg != NULL)
 		krb5_free_error_message(handle->context, errmsg);
     }
-    free_server_handle(handle);
     free(prime_arg);
     gss_release_buffer(&minor_stat, &client_name);
     gss_release_buffer(&minor_stat, &service_name);
 exit_func:
+    free_server_handle(handle);
     return &ret;
 }
 
@@ -1292,10 +1267,8 @@
     if ((ret.code = new_server_handle(arg->api_version, rqstp, &handle)))
 	 goto exit_func;
 
-    if ((ret.code = check_handle((void *)handle))) {
-	 free_server_handle(handle);
+    if ((ret.code = check_handle((void *)handle)))
 	 goto exit_func;
-    }
 
     ret.api_version = handle->api_version;
 
@@ -1326,10 +1299,10 @@
 	if (errmsg != NULL)
 		krb5_free_error_message(handle->context, errmsg);
     }
-    free_server_handle(handle);
     gss_release_buffer(&minor_stat, &client_name);
     gss_release_buffer(&minor_stat, &service_name);
 exit_func:
+    free_server_handle(handle);
     return &ret;
 }
 
@@ -1349,10 +1322,8 @@
     if ((ret.code = new_server_handle(arg->api_version, rqstp, &handle)))
 	 goto exit_func;
 
-    if ((ret.code = check_handle((void *)handle))) {
-	 free_server_handle(handle);
+    if ((ret.code = check_handle((void *)handle)))
 	 goto exit_func;
-    }
 
     ret.api_version = handle->api_version;
 
@@ -1381,10 +1352,10 @@
 	if (errmsg != NULL)
 		krb5_free_error_message(handle->context, errmsg);
     }
-    free_server_handle(handle);
     gss_release_buffer(&minor_stat, &client_name);
     gss_release_buffer(&minor_stat, &service_name);
 exit_func:
+    free_server_handle(handle);
     return &ret;
 }
 
@@ -1404,10 +1375,8 @@
     if ((ret.code = new_server_handle(arg->api_version, rqstp, &handle)))
 	 goto exit_func;
 
-    if ((ret.code = check_handle((void *)handle))) {
-	 free_server_handle(handle);
+    if ((ret.code = check_handle((void *)handle)))
 	 goto exit_func;
-    }
 
     ret.api_version = handle->api_version;
 
@@ -1437,10 +1406,10 @@
 	if (errmsg != NULL)
 		krb5_free_error_message(handle->context, errmsg);
     }
-    free_server_handle(handle);
     gss_release_buffer(&minor_stat, &client_name);
     gss_release_buffer(&minor_stat, &service_name);
 exit_func:
+    free_server_handle(handle);
     return &ret;
 }
 
@@ -1463,10 +1432,8 @@
     if ((ret.code = new_server_handle(arg->api_version, rqstp, &handle)))
 	 goto exit_func;
 
-    if ((ret.code = check_handle((void *)handle))) {
-	 free_server_handle(handle);
+    if ((ret.code = check_handle((void *)handle)))
 	 goto exit_func;
-    }
 
     ret.api_version = handle->api_version;
 
@@ -1526,10 +1493,10 @@
 	 log_unauth(funcname, prime_arg,
 		    &client_name, &service_name, rqstp);
     }
-    free_server_handle(handle);
     gss_release_buffer(&minor_stat, &client_name);
     gss_release_buffer(&minor_stat, &service_name);
 exit_func:
+    free_server_handle(handle);
     return &ret;
 
 }
@@ -1550,10 +1517,8 @@
     if ((ret.code = new_server_handle(arg->api_version, rqstp, &handle)))
 	 goto exit_func;
 
-    if ((ret.code = check_handle((void *)handle))) {
-	 free_server_handle(handle);
+    if ((ret.code = check_handle((void *)handle)))
 	 goto exit_func;
-    }
 
     ret.api_version = handle->api_version;
 
@@ -1585,10 +1550,10 @@
 	if (errmsg != NULL)
 		krb5_free_error_message(handle->context, errmsg);
     }
-    free_server_handle(handle);
     gss_release_buffer(&minor_stat, &client_name);
     gss_release_buffer(&minor_stat, &service_name);
 exit_func:
+    free_server_handle(handle);
     return &ret;
 }
 
@@ -1605,10 +1570,8 @@
      if ((ret.code = new_server_handle(*arg, rqstp, &handle)))
 	  goto exit_func;
 
-     if ((ret.code = check_handle((void *)handle))) {
-	  free_server_handle(handle);
+     if ((ret.code = check_handle((void *)handle)))
 	  goto exit_func;
-     }
 
      ret.api_version = handle->api_version;
 
@@ -1628,10 +1591,10 @@
      if (errmsg != NULL)
 		krb5_free_error_message(handle->context, errmsg);
 
-     free_server_handle(handle);
      gss_release_buffer(&minor_stat, &client_name);
      gss_release_buffer(&minor_stat, &service_name);
 exit_func:
+     free_server_handle(handle);
      return &ret;
 }
 




More information about the cvs-krb5 mailing list