Fix a memleak in svcctl_init_keys()
authorVolker Lendecke <vl@samba.org>
Tue, 17 Jun 2008 14:06:42 +0000 (16:06 +0200)
committerVolker Lendecke <vl@samba.org>
Tue, 17 Jun 2008 14:09:22 +0000 (16:09 +0200)
source/services/services_db.c

index 620b03693263c6eba297a5e2ecf72e0b32af94f7..ae9fe1aeb7ca335ead917799d0dafef0da096dcd 100644 (file)
@@ -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 */