summaryrefslogtreecommitdiffstats
path: root/src/kadmin/server/server_stubs.c
diff options
context:
space:
mode:
authorEzra Peisach <epeisach@mit.edu>1997-10-15 01:19:09 +0000
committerEzra Peisach <epeisach@mit.edu>1997-10-15 01:19:09 +0000
commitee735952aa05a83f92d09a67c15ca93cee1892d4 (patch)
tree83d8b6ffe1fcfeed9842103308dac922d5fcb052 /src/kadmin/server/server_stubs.c
parent551ad509be294e963550d9e0f23149c76060cb7f (diff)
downloadkrb5-ee735952aa05a83f92d09a67c15ca93cee1892d4.tar.gz
krb5-ee735952aa05a83f92d09a67c15ca93cee1892d4.tar.xz
krb5-ee735952aa05a83f92d09a67c15ca93cee1892d4.zip
* server_stubs.c (CHANGEPW_SERVICE): Modify to free allocated
memory in request. (setup_gss_names): Free memory in case of failure. (chrand_principal_1): Call free_server_handle for failure cleanup. * ovsec_kadmd.c (main): Cleanup memory by calling acl_finish, gss_release_name, and krb5_free_context Some of these fixes are to make accounting easier with Purify upon shutdown while the server_stubs.c fixes take care of a per-request memory leak present for many requests. automatically CVS: CVS: Committing in . CVS: CVS: Modified Files: ---------------------------------------------------------------------- git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@10233 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/kadmin/server/server_stubs.c')
-rw-r--r--src/kadmin/server/server_stubs.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/kadmin/server/server_stubs.c b/src/kadmin/server/server_stubs.c
index a4015b5c0..7b8b573cb 100644
--- a/src/kadmin/server/server_stubs.c
+++ b/src/kadmin/server/server_stubs.c
@@ -26,9 +26,9 @@ extern gss_name_t gss_oldchangepw_name;
extern void * global_server_handle;
#define CHANGEPW_SERVICE(rqstp) \
- (cmp_gss_names(acceptor_name(rqstp->rq_svccred), gss_changepw_name) |\
+ (cmp_gss_names_rel_1(acceptor_name(rqstp->rq_svccred), gss_changepw_name) |\
(gss_oldchangepw_name && \
- cmp_gss_names(acceptor_name(rqstp->rq_svccred), \
+ cmp_gss_names_rel_1(acceptor_name(rqstp->rq_svccred), \
gss_oldchangepw_name)))
int cmp_gss_names(gss_name_t n1, gss_name_t n2)
@@ -42,6 +42,18 @@ int cmp_gss_names(gss_name_t n1, gss_name_t n2)
return(equal);
}
+/* Does a comparison of the names and then releases the first entity */
+/* For use above in CHANGEPW_SERVICE */
+int cmp_gss_names_rel_1(gss_name_t n1, gss_name_t n2)
+{
+ OM_uint32 min_stat;
+ int ret;
+
+ ret = cmp_gss_names(n1, n2);
+ if (n1) (void) gss_release_name(&min_stat, &n1);
+ return ret;
+}
+
/*
* Function check_handle
*
@@ -152,12 +164,15 @@ int setup_gss_names(struct svc_req *rqstp,
NULL, NULL);
if (maj_stat != GSS_S_COMPLETE) {
gss_release_buffer(&min_stat, client_name);
+ gss_release_name(&min_stat, &server_gss_name);
return -1;
}
if (gss_name_to_string(server_gss_name, server_name) != 0) {
gss_release_buffer(&min_stat, client_name);
+ gss_release_name(&min_stat, &server_gss_name);
return -1;
}
+ gss_release_name(&min_stat, &server_gss_name);
return 0;
}
@@ -750,6 +765,7 @@ chrand_principal_1(chrand_arg *arg, struct svc_req *rqstp)
if (setup_gss_names(rqstp, &client_name, &service_name) < 0) {
ret.code = KADM5_FAILURE;
+ free_server_handle(handle);
return &ret;
}
krb5_unparse_name(handle->context, arg->princ, &prime_arg);