* schpw.c (process_chpw_request): Free memory of allocated for
authorEzra Peisach <epeisach@mit.edu>
Wed, 25 Feb 1998 20:25:15 +0000 (20:25 +0000)
committerEzra Peisach <epeisach@mit.edu>
Wed, 25 Feb 1998 20:25:15 +0000 (20:25 +0000)
                local address.

        * ovsec_kadmd.c (do_schpw): Call krb5_kt_close to free memory
                allocated in keytab routines.

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

src/kadmin/server/ChangeLog
src/kadmin/server/ovsec_kadmd.c
src/kadmin/server/schpw.c

index d37f5ce1ece6225d312689314b16ae8bbca673ac..77cf0df94ecc0f6ebbfff1a98e2b138bb1d5d8a9 100644 (file)
@@ -1,3 +1,11 @@
+Wed Feb 25 14:00:32 1998  Ezra Peisach  <epeisach@mit.edu>
+
+       * schpw.c (process_chpw_request): Free memory of allocated for
+               local address.
+
+       * ovsec_kadmd.c (do_schpw): Call krb5_kt_close to free memory
+               allocated.
+
 Wed Feb 18 15:58:30 1998  Tom Yu  <tlyu@mit.edu>
 
        * Makefile.in: Remove trailing slash from thisconfigdir.  Fix up
index bccdf9427014d9d78743e37489e316b9e3a94f64..5a1c6b44c26b8d679dfe9ed723916c0e20409ac2 100644 (file)
@@ -907,7 +907,7 @@ void do_schpw(int s1, kadm5_config_params *params)
     if (connect(s2, (struct sockaddr *) &from, sizeof(from)) < 0) {
        krb5_klog_syslog(LOG_ERR, "chpw: Couldn't connect to client: %s",
                         error_message(errno));
-       return;
+       goto cleanup;
     }
 
     if (ret = process_chpw_request(context, global_server_handle,
@@ -919,9 +919,10 @@ void do_schpw(int s1, kadm5_config_params *params)
 
     close(s2);
 
-    if (repdata.length == 0)
+    if (repdata.length == 0) {
        /* just qreturn.  This means something really bad happened */
-       return;
+        goto cleanup;
+    }
 
     len = sendto(s1, repdata.data, repdata.length, 0,
                 (struct sockaddr *) &from, sizeof(from));
@@ -931,10 +932,13 @@ void do_schpw(int s1, kadm5_config_params *params)
 
        krb5_klog_syslog(LOG_ERR, "chpw: Error sending reply: %s", 
                         error_message(errno));
-       return;
+       goto cleanup;
     }
 
     krb5_xfree(repdata.data);
 
+cleanup:
+    krb5_kt_close(context, kt);
+
     return;
 }
index cb4a5de0d593d4865760e43db7b3bf266b42bf1f..c3901be92604216023a116ddf660b85f5fa8f049 100644 (file)
@@ -20,6 +20,7 @@ process_chpw_request(context, server_handle, realm, s, keytab, sin, req, rep)
     char *ptr;
     int plen, vno;
     krb5_address local_kaddr, remote_kaddr;
+    int allocated_mem = 0;  
     krb5_data ap_req, ap_rep;
     krb5_auth_context auth_context;
     krb5_principal changepw;
@@ -149,6 +150,7 @@ process_chpw_request(context, server_handle, realm, s, keytab, sin, req, rep)
        local_kaddr.length = addrs[0]->length;
        local_kaddr.contents = malloc(addrs[0]->length);
        memcpy(local_kaddr.contents, addrs[0]->contents, addrs[0]->length);
+       allocated_mem++;
 
        krb5_free_addresses(context, addrs);
     }
@@ -367,6 +369,8 @@ bailout:
        krb5_xfree(clear.data);
     if (cipher.length)
        krb5_xfree(cipher.data);
+    if (allocated_mem) 
+        krb5_xfree(local_kaddr.contents);
 
     return(ret);
 }