summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2008-06-17 16:06:42 +0200
committerKarolin Seeger <kseeger@samba.org>2008-06-17 16:16:32 +0200
commit2dc66cb5813ef138ccea70fd7b9c9599a893e33a (patch)
tree3e44d39bd54baa60b4bee8d2aba6ab2313e0194a
parente41d7aa1d5bacf4ed95fb4a6be801db0aa1b15dd (diff)
downloadsamba-2dc66cb5813ef138ccea70fd7b9c9599a893e33a.tar.gz
Fix a memleak in svcctl_init_keys()
(cherry picked from commit 675bb53398ba29c53d2dcf3c7122cf4770c2f938)
-rw-r--r--source/services/services_db.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/source/services/services_db.c b/source/services/services_db.c
index 620b0369326..ae9fe1aeb7c 100644
--- a/source/services/services_db.c
+++ b/source/services/services_db.c
@@ -447,15 +447,22 @@ void svcctl_init_keys( void )
REGSUBKEY_CTR *subkeys;
REGISTRY_KEY *key = NULL;
WERROR wresult;
+ struct nt_user_token *token = get_root_nt_token();
+
+ if (token == NULL) {
+ DEBUG(0, ("svcctl_init_keys: get_root_nt_token failed\n"));
+ return;
+ }
/* bad mojo here if the lookup failed. Should not happen */
wresult = regkey_open_internal( NULL, &key, KEY_SERVICES,
- get_root_nt_token(), REG_KEY_ALL );
+ token, REG_KEY_ALL );
if ( !W_ERROR_IS_OK(wresult) ) {
DEBUG(0,("svcctl_init_keys: key lookup failed! (%s)\n",
dos_errstr(wresult)));
+ TALLOC_FREE(token);
return;
}
@@ -464,6 +471,7 @@ void svcctl_init_keys( void )
if ( !(subkeys = TALLOC_ZERO_P( key, REGSUBKEY_CTR )) ) {
DEBUG(0,("svcctl_init_keys: talloc() failed!\n"));
TALLOC_FREE( key );
+ TALLOC_FREE(token);
return;
}
@@ -486,6 +494,7 @@ void svcctl_init_keys( void )
}
TALLOC_FREE( key );
+ TALLOC_FREE(token);
/* initialize the control hooks */