svn rev #25379: branches/krb5-1-9/src/lib/kadm5/clnt/ 
    tlyu@MIT.EDU 
    tlyu at MIT.EDU
       
    Tue Oct 18 16:42:53 EDT 2011
    
    
  
http://src.mit.edu/fisheye/changelog/krb5/?cs=25379
Commit By: tlyu
Log Message:
ticket: 6949
version_fixed: 1.9.2
status: resolved
pull up r25115 from trunk
 ------------------------------------------------------------------------
 r25115 | ghudson | 2011-08-26 13:56:44 -0400 (Fri, 26 Aug 2011) | 9 lines
 ticket: 6949
 Remember and close the kadmin socket we opened.
 Prior to ticket #6746, the RPC library opened the kadmin socket and
 took responsibility for closing.  When we added IPv6 support, the
 calling code became the owner of the socket but wasn't closing it,
 resulting in a file descriptor leak.
Changed Files:
U   branches/krb5-1-9/src/lib/kadm5/clnt/client_init.c
U   branches/krb5-1-9/src/lib/kadm5/clnt/client_internal.h
Modified: branches/krb5-1-9/src/lib/kadm5/clnt/client_init.c
===================================================================
--- branches/krb5-1-9/src/lib/kadm5/clnt/client_init.c	2011-10-18 20:42:45 UTC (rev 25378)
+++ branches/krb5-1-9/src/lib/kadm5/clnt/client_init.c	2011-10-18 20:42:52 UTC (rev 25379)
@@ -155,7 +155,7 @@
          kadm5_config_params *params_in, krb5_ui_4 struct_version,
          krb5_ui_4 api_version, char **db_args, void **server_handle)
 {
-    int fd;
+    int fd = -1;
 
     krb5_boolean iprop_enable;
     int port;
@@ -192,6 +192,7 @@
     handle->struct_version = struct_version;
     handle->api_version = api_version;
     handle->clnt = 0;
+    handle->client_socket = -1;
     handle->cache_name = 0;
     handle->destroy_cache = 0;
     handle->context = 0;
@@ -301,7 +302,9 @@
 #endif
         goto error;
     }
+    handle->client_socket = fd;
     handle->lhandle->clnt = handle->clnt;
+    handle->lhandle->client_socket = fd;
 
     /* now that handle->clnt is set, we can check the handle */
     if ((code = _kadm5_check_handle((void *) handle)))
@@ -372,6 +375,8 @@
         AUTH_DESTROY(handle->clnt->cl_auth);
     if(handle->clnt)
         clnt_destroy(handle->clnt);
+    if (fd != -1)
+        close(fd);
 
     kadm5_free_config_params(handle->context, &handle->params);
 
@@ -795,6 +800,8 @@
         AUTH_DESTROY(handle->clnt->cl_auth);
     if (handle->clnt)
         clnt_destroy(handle->clnt);
+    if (handle->client_socket != -1)
+        close(handle->client_socket);
     if (handle->lhandle)
         free (handle->lhandle);
 
Modified: branches/krb5-1-9/src/lib/kadm5/clnt/client_internal.h
===================================================================
--- branches/krb5-1-9/src/lib/kadm5/clnt/client_internal.h	2011-10-18 20:42:45 UTC (rev 25378)
+++ branches/krb5-1-9/src/lib/kadm5/clnt/client_internal.h	2011-10-18 20:42:52 UTC (rev 25379)
@@ -72,6 +72,7 @@
     char *          cache_name;
     int             destroy_cache;
     CLIENT *        clnt;
+    int             client_socket;
     krb5_context    context;
     kadm5_config_params params;
     struct _kadm5_server_handle_t *lhandle;
    
    
More information about the cvs-krb5
mailing list