r23801: The FSF has moved around a lot. This fixes their Mass Ave address.
[samba.git] / source3 / services / services_db.c
index 5b4f58d766dd1771eb9aaff600a738684cef85c3..075081b20236e8382dcbc992eedff43cb4a04586 100644 (file)
@@ -8,7 +8,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
+ *  the Free Software Foundation; either version 3 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -17,8 +17,7 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "includes.h"
@@ -322,8 +321,8 @@ static void add_new_svc_name( REGISTRY_KEY *key_parent, REGSUBKEY_CTR *subkeys,
        /* open the new service key */
 
        pstr_sprintf( path, "%s\\%s", KEY_SERVICES, name );
-       wresult = regkey_open_internal( &key_service, path, get_root_nt_token(), 
-               REG_KEY_ALL );
+       wresult = regkey_open_internal( NULL, &key_service, path,
+                                       get_root_nt_token(), REG_KEY_ALL );
        if ( !W_ERROR_IS_OK(wresult) ) {
                DEBUG(0,("add_new_svc_name: key lookup failed! [%s] (%s)\n", 
                        path, dos_errstr(wresult)));
@@ -334,7 +333,7 @@ static void add_new_svc_name( REGISTRY_KEY *key_parent, REGSUBKEY_CTR *subkeys,
 
        if ( !(svc_subkeys = TALLOC_ZERO_P( key_service, REGSUBKEY_CTR )) ) {
                DEBUG(0,("add_new_svc_name: talloc() failed!\n"));
-               regkey_close_internal( key_service );
+               TALLOC_FREE( key_service );
                return;
        }
        
@@ -346,7 +345,7 @@ static void add_new_svc_name( REGISTRY_KEY *key_parent, REGSUBKEY_CTR *subkeys,
        
        if ( !(values = TALLOC_ZERO_P( key_service, REGVAL_CTR )) ) {
                DEBUG(0,("add_new_svc_name: talloc() failed!\n"));
-               regkey_close_internal( key_service );
+               TALLOC_FREE( key_service );
                return;
        }
 
@@ -355,29 +354,29 @@ static void add_new_svc_name( REGISTRY_KEY *key_parent, REGSUBKEY_CTR *subkeys,
 
        /* cleanup the service key*/
 
-       regkey_close_internal( key_service );
+       TALLOC_FREE( key_service );
 
        /* now add the security descriptor */
 
        pstr_sprintf( path, "%s\\%s\\%s", KEY_SERVICES, name, "Security" );
-       wresult = regkey_open_internal( &key_secdesc, path, get_root_nt_token(), 
-               REG_KEY_ALL );
+       wresult = regkey_open_internal( NULL, &key_secdesc, path,
+                                       get_root_nt_token(), REG_KEY_ALL );
        if ( !W_ERROR_IS_OK(wresult) ) {
                DEBUG(0,("add_new_svc_name: key lookup failed! [%s] (%s)\n", 
                        path, dos_errstr(wresult)));
-               regkey_close_internal( key_secdesc );
+               TALLOC_FREE( key_secdesc );
                return;
        }
 
        if ( !(values = TALLOC_ZERO_P( key_secdesc, REGVAL_CTR )) ) {
                DEBUG(0,("add_new_svc_name: talloc() failed!\n"));
-               regkey_close_internal( key_secdesc );
+               TALLOC_FREE( key_secdesc );
                return;
        }
 
        if ( !(sd = construct_service_sd(key_secdesc)) ) {
                DEBUG(0,("add_new_svc_name: Failed to create default sec_desc!\n"));
-               regkey_close_internal( key_secdesc );
+               TALLOC_FREE( key_secdesc );
                return;
        }
        
@@ -394,7 +393,7 @@ static void add_new_svc_name( REGISTRY_KEY *key_parent, REGSUBKEY_CTR *subkeys,
        /* finally cleanup the Security key */
        
        prs_mem_free( &ps );
-       regkey_close_internal( key_secdesc );
+       TALLOC_FREE( key_secdesc );
 
        return;
 }
@@ -412,8 +411,8 @@ void svcctl_init_keys( void )
        
        /* bad mojo here if the lookup failed.  Should not happen */
        
-       wresult = regkey_open_internal( &key, KEY_SERVICES, get_root_nt_token(), 
-               REG_KEY_ALL );
+       wresult = regkey_open_internal( NULL, &key, KEY_SERVICES,
+                                       get_root_nt_token(), REG_KEY_ALL );
 
        if ( !W_ERROR_IS_OK(wresult) ) {
                DEBUG(0,("init_services_keys: key lookup failed! (%s)\n", 
@@ -425,7 +424,7 @@ void svcctl_init_keys( void )
        
        if ( !(subkeys = TALLOC_ZERO_P( key, REGSUBKEY_CTR )) ) {
                DEBUG(0,("init_services_keys: talloc() failed!\n"));
-               regkey_close_internal( key );
+               TALLOC_FREE( key );
                return;
        }
        
@@ -447,7 +446,7 @@ void svcctl_init_keys( void )
                add_new_svc_name( key, subkeys, service_list[i] );
        }
 
-       regkey_close_internal( key );
+       TALLOC_FREE( key );
 
        /* initialize the control hooks */
 
@@ -476,7 +475,8 @@ SEC_DESC* svcctl_get_secdesc( TALLOC_CTX *ctx, const char *name, NT_USER_TOKEN *
        /* now add the security descriptor */
 
        pstr_sprintf( path, "%s\\%s\\%s", KEY_SERVICES, name, "Security" );
-       wresult = regkey_open_internal( &key, path, token, REG_KEY_ALL );
+       wresult = regkey_open_internal( NULL, &key, path, token,
+                                       REG_KEY_ALL );
        if ( !W_ERROR_IS_OK(wresult) ) {
                DEBUG(0,("svcctl_get_secdesc: key lookup failed! [%s] (%s)\n", 
                        path, dos_errstr(wresult)));
@@ -485,7 +485,7 @@ SEC_DESC* svcctl_get_secdesc( TALLOC_CTX *ctx, const char *name, NT_USER_TOKEN *
 
        if ( !(values = TALLOC_ZERO_P( key, REGVAL_CTR )) ) {
                DEBUG(0,("add_new_svc_name: talloc() failed!\n"));
-               regkey_close_internal( key );
+               TALLOC_FREE( key );
                return NULL;
        }
 
@@ -494,7 +494,7 @@ SEC_DESC* svcctl_get_secdesc( TALLOC_CTX *ctx, const char *name, NT_USER_TOKEN *
        if ( !(val = regval_ctr_getvalue( values, "Security" )) ) {
                DEBUG(6,("svcctl_get_secdesc: constructing default secdesc for service [%s]\n", 
                        name));
-               regkey_close_internal( key );
+               TALLOC_FREE( key );
                return construct_service_sd( ctx );
        }
        
@@ -505,7 +505,7 @@ SEC_DESC* svcctl_get_secdesc( TALLOC_CTX *ctx, const char *name, NT_USER_TOKEN *
        prs_give_memory( &ps, (char *)regval_data_p(val), regval_size(val), False );
        
        if ( !sec_io_desc("sec_desc", &sd, &ps, 0 ) ) {
-               regkey_close_internal( key );
+               TALLOC_FREE( key );
                return construct_service_sd( ctx );
        }
        
@@ -514,7 +514,7 @@ SEC_DESC* svcctl_get_secdesc( TALLOC_CTX *ctx, const char *name, NT_USER_TOKEN *
        /* finally cleanup the Security key */
        
        prs_mem_free( &ps );
-       regkey_close_internal( key );
+       TALLOC_FREE( key );
 
        return ret_sd;
 }
@@ -535,7 +535,8 @@ BOOL svcctl_set_secdesc( TALLOC_CTX *ctx, const char *name, SEC_DESC *sec_desc,
        /* now add the security descriptor */
 
        pstr_sprintf( path, "%s\\%s\\%s", KEY_SERVICES, name, "Security" );
-       wresult = regkey_open_internal( &key, path, token, REG_KEY_ALL );
+       wresult = regkey_open_internal( NULL, &key, path, token,
+                                       REG_KEY_ALL );
        if ( !W_ERROR_IS_OK(wresult) ) {
                DEBUG(0,("svcctl_get_secdesc: key lookup failed! [%s] (%s)\n", 
                        path, dos_errstr(wresult)));
@@ -544,7 +545,7 @@ BOOL svcctl_set_secdesc( TALLOC_CTX *ctx, const char *name, SEC_DESC *sec_desc,
 
        if ( !(values = TALLOC_ZERO_P( key, REGVAL_CTR )) ) {
                DEBUG(0,("add_new_svc_name: talloc() failed!\n"));
-               regkey_close_internal( key );
+               TALLOC_FREE( key );
                return False;
        }
        
@@ -561,7 +562,7 @@ BOOL svcctl_set_secdesc( TALLOC_CTX *ctx, const char *name, SEC_DESC *sec_desc,
        /* cleanup */
        
        prs_mem_free( &ps );
-       regkey_close_internal( key);
+       TALLOC_FREE( key);
 
        return ret;
 }
@@ -581,7 +582,8 @@ char* svcctl_lookup_dispname( const char *name, NT_USER_TOKEN *token )
        /* now add the security descriptor */
 
        pstr_sprintf( path, "%s\\%s", KEY_SERVICES, name );
-       wresult = regkey_open_internal( &key, path, token, REG_KEY_READ );
+       wresult = regkey_open_internal( NULL, &key, path, token,
+                                       REG_KEY_READ );
        if ( !W_ERROR_IS_OK(wresult) ) {
                DEBUG(0,("svcctl_lookup_dispname: key lookup failed! [%s] (%s)\n", 
                        path, dos_errstr(wresult)));
@@ -590,7 +592,7 @@ char* svcctl_lookup_dispname( const char *name, NT_USER_TOKEN *token )
 
        if ( !(values = TALLOC_ZERO_P( key, REGVAL_CTR )) ) {
                DEBUG(0,("svcctl_lookup_dispname: talloc() failed!\n"));
-               regkey_close_internal( key );
+               TALLOC_FREE( key );
                goto fail;
        }
 
@@ -601,13 +603,13 @@ char* svcctl_lookup_dispname( const char *name, NT_USER_TOKEN *token )
 
        rpcstr_pull( display_name, regval_data_p(val), sizeof(display_name), regval_size(val), 0 );
 
-       regkey_close_internal( key );
+       TALLOC_FREE( key );
        
        return display_name;
 
 fail:
        /* default to returning the service name */
-       regkey_close_internal( key );
+       TALLOC_FREE( key );
        fstrcpy( display_name, name );
        return display_name;
 }
@@ -627,7 +629,8 @@ char* svcctl_lookup_description( const char *name, NT_USER_TOKEN *token )
        /* now add the security descriptor */
 
        pstr_sprintf( path, "%s\\%s", KEY_SERVICES, name );
-       wresult = regkey_open_internal( &key, path, token, REG_KEY_READ );
+       wresult = regkey_open_internal( NULL, &key, path, token,
+                                       REG_KEY_READ );
        if ( !W_ERROR_IS_OK(wresult) ) {
                DEBUG(0,("svcctl_lookup_dispname: key lookup failed! [%s] (%s)\n", 
                        path, dos_errstr(wresult)));
@@ -636,7 +639,7 @@ char* svcctl_lookup_description( const char *name, NT_USER_TOKEN *token )
 
        if ( !(values = TALLOC_ZERO_P( key, REGVAL_CTR )) ) {
                DEBUG(0,("svcctl_lookup_dispname: talloc() failed!\n"));
-               regkey_close_internal( key );
+               TALLOC_FREE( key );
                return NULL;
        }
 
@@ -647,7 +650,7 @@ char* svcctl_lookup_description( const char *name, NT_USER_TOKEN *token )
        else
                rpcstr_pull( description, regval_data_p(val), sizeof(description), regval_size(val), 0 );
 
-       regkey_close_internal( key );
+       TALLOC_FREE( key );
        
        return description;
 }
@@ -666,7 +669,8 @@ REGVAL_CTR* svcctl_fetch_regvalues( const char *name, NT_USER_TOKEN *token )
        /* now add the security descriptor */
 
        pstr_sprintf( path, "%s\\%s", KEY_SERVICES, name );
-       wresult = regkey_open_internal( &key, path, token, REG_KEY_READ );
+       wresult = regkey_open_internal( NULL, &key, path, token,
+                                       REG_KEY_READ );
        if ( !W_ERROR_IS_OK(wresult) ) {
                DEBUG(0,("svcctl_fetch_regvalues: key lookup failed! [%s] (%s)\n", 
                        path, dos_errstr(wresult)));
@@ -675,13 +679,13 @@ REGVAL_CTR* svcctl_fetch_regvalues( const char *name, NT_USER_TOKEN *token )
 
        if ( !(values = TALLOC_ZERO_P( NULL, REGVAL_CTR )) ) {
                DEBUG(0,("svcctl_fetch_regvalues: talloc() failed!\n"));
-               regkey_close_internal( key );
+               TALLOC_FREE( key );
                return NULL;
        }
        
        fetch_reg_values( key, values );
 
-       regkey_close_internal( key );
+       TALLOC_FREE( key );
        
        return values;
 }