Now that all policy_handle free_fn's are just TALLOC_FREE, dump free_fn
authorVolker Lendecke <vl@samba.org>
Wed, 7 Jan 2009 17:44:52 +0000 (18:44 +0100)
committerVolker Lendecke <vl@samba.org>
Thu, 8 Jan 2009 21:29:54 +0000 (22:29 +0100)
source3/include/ntdomain.h
source3/include/proto.h
source3/rpc_server/srv_eventlog_nt.c
source3/rpc_server/srv_lsa_hnd.c
source3/rpc_server/srv_lsa_nt.c
source3/rpc_server/srv_samr_nt.c
source3/rpc_server/srv_spoolss_nt.c
source3/rpc_server/srv_svcctl_nt.c
source3/rpc_server/srv_winreg_nt.c

index bffa158feaa88dd46b7a3c5d507b0d93ca90a774..3f501550da7543a37489c2dcc3e31005b0ac32d5 100644 (file)
@@ -123,7 +123,6 @@ struct policy {
        POLICY_HND pol_hnd;
 
        void *data_ptr;
-       void (*free_fn)(void *);
 };
 
 struct handle_list {
index afc207b6f6057a204310bec285cb603da52007d1..96b2e26d30b3bb8019a68dc063d7156838ce24d8 100644 (file)
@@ -6188,7 +6188,7 @@ NTSTATUS _eventlog_read_eventlog( pipes_struct * p,
 /* The following definitions come from rpc_server/srv_lsa_hnd.c  */
 
 bool init_pipe_handle_list(pipes_struct *p, const char *pipe_name);
-bool create_policy_hnd(pipes_struct *p, POLICY_HND *hnd, void (*free_fn)(void *), void *data_ptr);
+bool create_policy_hnd(pipes_struct *p, POLICY_HND *hnd, void *data_ptr);
 bool find_policy_by_hnd(pipes_struct *p, POLICY_HND *hnd, void **data_p);
 bool close_policy_hnd(pipes_struct *p, POLICY_HND *hnd);
 void close_policy_by_pipe(pipes_struct *p);
index 7b7f381d91be81f248eb7d68fe02dbe449afc032..145b4600f94422c969565dd4ab2176129645ed19 100644 (file)
@@ -45,11 +45,6 @@ static int eventlog_info_destructor(EVENTLOG_INFO *elog)
        return 0;
 }
 
-static void free_eventlog_info( void *ptr )
-{
-       TALLOC_FREE(ptr);
-}
-
 /********************************************************************
  ********************************************************************/
 
@@ -238,9 +233,8 @@ static NTSTATUS elog_open( pipes_struct * p, const char *logname, POLICY_HND *hn
 
        /* create the policy handle */
 
-       if ( !create_policy_hnd
-            ( p, hnd, free_eventlog_info, ( void * ) elog ) ) {
-               free_eventlog_info( elog );
+       if ( !create_policy_hnd( p, hnd, elog ) ) {
+               TALLOC_FREE(elog);
                return NT_STATUS_NO_MEMORY;
        }
 
index a00e097596ebacb5a450f311373a93bd39162e11..5f7c8d9f1a4eb6fd3f4388bb261e1d7a0300bb82 100644 (file)
@@ -103,9 +103,13 @@ bool init_pipe_handle_list(pipes_struct *p, const char *pipe_name)
 
 /****************************************************************************
   find first available policy slot.  creates a policy handle for you.
+
+  If "data_ptr" is given, this must be a talloc'ed object, create_policy_hnd
+  talloc_moves this into the handle. If the policy_hnd is closed,
+  data_ptr is TALLOC_FREE()'ed
 ****************************************************************************/
 
-bool create_policy_hnd(pipes_struct *p, POLICY_HND *hnd, void (*free_fn)(void *), void *data_ptr)
+bool create_policy_hnd(pipes_struct *p, POLICY_HND *hnd, void *data_ptr)
 {
        static uint32 pol_hnd_low  = 0;
        static uint32 pol_hnd_high = 0;
@@ -119,16 +123,15 @@ bool create_policy_hnd(pipes_struct *p, POLICY_HND *hnd, void (*free_fn)(void *)
                return False;
        }
 
-       pol = SMB_MALLOC_P(struct policy);
+       pol = TALLOC_ZERO_P(NULL, struct policy);
        if (!pol) {
                DEBUG(0,("create_policy_hnd: ERROR: out of memory!\n"));
                return False;
        }
 
-       ZERO_STRUCTP(pol);
-
-       pol->data_ptr = data_ptr;
-       pol->free_fn = free_fn;
+       if (data_ptr != NULL) {
+               pol->data_ptr = talloc_move(pol, &data_ptr);
+       }
 
        pol_hnd_low++;
        if (pol_hnd_low == 0)
@@ -211,16 +214,11 @@ bool close_policy_hnd(pipes_struct *p, POLICY_HND *hnd)
 
        DEBUG(3,("Closed policy\n"));
 
-       if (pol->free_fn && pol->data_ptr)
-               (*pol->free_fn)(pol->data_ptr);
-
        p->pipe_handles->count--;
 
        DLIST_REMOVE(p->pipe_handles->Policy, pol);
 
-       ZERO_STRUCTP(pol);
-
-       SAFE_FREE(pol);
+       TALLOC_FREE(pol);
 
        return True;
 }
index 0db739dff27a3451db8072efb3ac8806af0dc255..ed54c3a86e9ffaa6dee96f43158995672f7a70de 100644 (file)
@@ -96,15 +96,6 @@ static int init_lsa_ref_domain_list(TALLOC_CTX *mem_ctx,
 }
 
 
-/*******************************************************************
- Function to free the per handle data.
- ********************************************************************/
-
-static void free_lsa_info(void *ptr)
-{
-       TALLOC_FREE(ptr);
-}
-
 /***************************************************************************
  initialize a lsa_DomainInfo structure.
  ***************************************************************************/
@@ -398,7 +389,7 @@ NTSTATUS _lsa_OpenPolicy2(pipes_struct *p,
                acc_granted = LSA_POLICY_ALL_ACCESS;
 
        /* associate the domain SID with the (unique) handle. */
-       info = TALLOC_ZERO_P(NULL, struct lsa_info);
+       info = TALLOC_ZERO_P(p->mem_ctx, struct lsa_info);
        if (info == NULL) {
                return NT_STATUS_NO_MEMORY;
        }
@@ -407,7 +398,7 @@ NTSTATUS _lsa_OpenPolicy2(pipes_struct *p,
        info->access = acc_granted;
 
        /* set up the LSA QUERY INFO response */
-       if (!create_policy_hnd(p, r->out.handle, free_lsa_info, (void *)info))
+       if (!create_policy_hnd(p, r->out.handle, info))
                return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
        return NT_STATUS_OK;
@@ -447,7 +438,7 @@ NTSTATUS _lsa_OpenPolicy(pipes_struct *p,
        }
 
        /* associate the domain SID with the (unique) handle. */
-       info = TALLOC_ZERO_P(NULL, struct lsa_info);
+       info = TALLOC_ZERO_P(p->mem_ctx, struct lsa_info);
        if (info == NULL) {
                return NT_STATUS_NO_MEMORY;
        }
@@ -456,7 +447,7 @@ NTSTATUS _lsa_OpenPolicy(pipes_struct *p,
        info->access = acc_granted;
 
        /* set up the LSA QUERY INFO response */
-       if (!create_policy_hnd(p, r->out.handle, free_lsa_info, (void *)info))
+       if (!create_policy_hnd(p, r->out.handle, info))
                return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
        return NT_STATUS_OK;
@@ -1555,7 +1546,7 @@ NTSTATUS _lsa_CreateAccount(pipes_struct *p,
 
        /* associate the user/group SID with the (unique) handle. */
 
-       info = TALLOC_ZERO_P(NULL, struct lsa_info);
+       info = TALLOC_ZERO_P(p->mem_ctx, struct lsa_info);
        if (info == NULL) {
                return NT_STATUS_NO_MEMORY;
        }
@@ -1564,7 +1555,7 @@ NTSTATUS _lsa_CreateAccount(pipes_struct *p,
        info->access = r->in.access_mask;
 
        /* get a (unique) handle.  open a policy on it. */
-       if (!create_policy_hnd(p, r->out.acct_handle, free_lsa_info, (void *)info))
+       if (!create_policy_hnd(p, r->out.acct_handle, info))
                return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
        return privilege_create_account( &info->sid );
@@ -1600,7 +1591,7 @@ NTSTATUS _lsa_OpenAccount(pipes_struct *p,
                return NT_STATUS_ACCESS_DENIED;
        #endif
        /* associate the user/group SID with the (unique) handle. */
-       info = TALLOC_ZERO_P(NULL, struct lsa_info);
+       info = TALLOC_ZERO_P(p->mem_ctx, struct lsa_info);
        if (info == NULL) {
                return NT_STATUS_NO_MEMORY;
        }
@@ -1609,7 +1600,7 @@ NTSTATUS _lsa_OpenAccount(pipes_struct *p,
        info->access = r->in.access_mask;
 
        /* get a (unique) handle.  open a policy on it. */
-       if (!create_policy_hnd(p, r->out.acct_handle, free_lsa_info, (void *)info))
+       if (!create_policy_hnd(p, r->out.acct_handle, info))
                return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
        return NT_STATUS_OK;
index 8ab4715a518a0edb18af0b1f78623d3ba4b71a6c..9984bf0cfcd4bc4064a4f45d0cc07e768a43d12e 100644 (file)
@@ -358,7 +358,8 @@ static DISP_INFO *get_samr_dispinfo_by_sid(DOM_SID *psid)
 
 static int samr_info_destructor(struct samr_info *info);
 
-static struct samr_info *get_samr_info_by_sid(DOM_SID *psid)
+static struct samr_info *get_samr_info_by_sid(TALLOC_CTX *mem_ctx,
+                                             DOM_SID *psid)
 {
        struct samr_info *info;
        fstring sid_str;
@@ -369,7 +370,7 @@ static struct samr_info *get_samr_info_by_sid(DOM_SID *psid)
                fstrcpy(sid_str,"(NULL)");
        }
 
-       if ((info = TALLOC_ZERO_P(NULL, struct samr_info)) == NULL) {
+       if ((info = TALLOC_ZERO_P(mem_ctx, struct samr_info)) == NULL) {
                return NULL;
        }
        talloc_set_destructor(info, samr_info_destructor);
@@ -443,15 +444,6 @@ static int samr_info_destructor(struct samr_info *info)
        return 0;
 }
 
-/*******************************************************************
- Function to free the per handle data.
- ********************************************************************/
-
-static void free_samr_info(void *ptr)
-{
-       TALLOC_FREE(ptr);
-}
-
 /*******************************************************************
  Idle event handler. Throw away the disp info cache.
  ********************************************************************/
@@ -653,12 +645,12 @@ NTSTATUS _samr_OpenDomain(pipes_struct *p,
        }
 
        /* associate the domain SID with the (unique) handle. */
-       if ((info = get_samr_info_by_sid(r->in.sid))==NULL)
+       if ((info = get_samr_info_by_sid(p->mem_ctx, r->in.sid))==NULL)
                return NT_STATUS_NO_MEMORY;
        info->acc_granted = acc_granted;
 
        /* get a (unique) handle.  open a policy on it. */
-       if (!create_policy_hnd(p, r->out.domain_handle, free_samr_info, (void *)info))
+       if (!create_policy_hnd(p, r->out.domain_handle, info))
                return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
        DEBUG(5,("_samr_OpenDomain: %d\n", __LINE__));
@@ -2196,12 +2188,12 @@ NTSTATUS _samr_OpenUser(pipes_struct *p,
        TALLOC_FREE(sampass);
 
        /* associate the user's SID and access bits with the new handle. */
-       if ((info = get_samr_info_by_sid(&sid)) == NULL)
+       if ((info = get_samr_info_by_sid(p->mem_ctx, &sid)) == NULL)
                return NT_STATUS_NO_MEMORY;
        info->acc_granted = acc_granted;
 
        /* get a (unique) handle.  open a policy on it. */
-       if (!create_policy_hnd(p, user_pol, free_samr_info, (void *)info))
+       if (!create_policy_hnd(p, user_pol, info))
                return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
        return NT_STATUS_OK;
@@ -3161,7 +3153,7 @@ NTSTATUS _samr_CreateUser2(pipes_struct *p,
        }
 
        /* associate the user's SID with the new handle. */
-       if ((info = get_samr_info_by_sid(&sid)) == NULL) {
+       if ((info = get_samr_info_by_sid(p->mem_ctx, &sid)) == NULL) {
                return NT_STATUS_NO_MEMORY;
        }
 
@@ -3170,7 +3162,7 @@ NTSTATUS _samr_CreateUser2(pipes_struct *p,
        info->acc_granted = acc_granted;
 
        /* get a (unique) handle.  open a policy on it. */
-       if (!create_policy_hnd(p, user_pol, free_samr_info, (void *)info)) {
+       if (!create_policy_hnd(p, user_pol, info)) {
                return NT_STATUS_OBJECT_NAME_NOT_FOUND;
        }
 
@@ -3222,7 +3214,7 @@ NTSTATUS _samr_Connect(pipes_struct *p,
        /* set up the SAMR connect_anon response */
 
        /* associate the user's SID with the new handle. */
-       if ((info = get_samr_info_by_sid(NULL)) == NULL)
+       if ((info = get_samr_info_by_sid(p->mem_ctx, NULL)) == NULL)
                return NT_STATUS_NO_MEMORY;
 
        /* don't give away the farm but this is probably ok.  The SAMR_ACCESS_ENUM_DOMAINS
@@ -3235,7 +3227,7 @@ NTSTATUS _samr_Connect(pipes_struct *p,
        info->acc_granted = des_access & (SAMR_ACCESS_ENUM_DOMAINS|SAMR_ACCESS_OPEN_DOMAIN);
 
        /* get a (unique) handle.  open a policy on it. */
-       if (!create_policy_hnd(p, r->out.connect_handle, free_samr_info, (void *)info))
+       if (!create_policy_hnd(p, r->out.connect_handle, info))
                return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
        return NT_STATUS_OK;
@@ -3289,14 +3281,14 @@ NTSTATUS _samr_Connect2(pipes_struct *p,
                return nt_status;
 
        /* associate the user's SID and access granted with the new handle. */
-       if ((info = get_samr_info_by_sid(NULL)) == NULL)
+       if ((info = get_samr_info_by_sid(p->mem_ctx, NULL)) == NULL)
                return NT_STATUS_NO_MEMORY;
 
        info->acc_granted = acc_granted;
        info->status = r->in.access_mask; /* this looks so wrong... - gd */
 
        /* get a (unique) handle.  open a policy on it. */
-       if (!create_policy_hnd(p, r->out.connect_handle, free_samr_info, (void *)info))
+       if (!create_policy_hnd(p, r->out.connect_handle, info))
                return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
        DEBUG(5,("%s: %d\n", fn, __LINE__));
@@ -3526,13 +3518,13 @@ NTSTATUS _samr_OpenAlias(pipes_struct *p,
        }
 
        /* associate the alias SID with the new handle. */
-       if ((info = get_samr_info_by_sid(&sid)) == NULL)
+       if ((info = get_samr_info_by_sid(p->mem_ctx, &sid)) == NULL)
                return NT_STATUS_NO_MEMORY;
 
        info->acc_granted = acc_granted;
 
        /* get a (unique) handle.  open a policy on it. */
-       if (!create_policy_hnd(p, alias_pol, free_samr_info, (void *)info))
+       if (!create_policy_hnd(p, alias_pol, info))
                return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
        return NT_STATUS_OK;
@@ -4947,7 +4939,7 @@ NTSTATUS _samr_CreateDomainGroup(pipes_struct *p,
 
        sid_compose(&info_sid, get_global_sam_sid(), *r->out.rid);
 
-       if ((info = get_samr_info_by_sid(&info_sid)) == NULL)
+       if ((info = get_samr_info_by_sid(p->mem_ctx, &info_sid)) == NULL)
                return NT_STATUS_NO_MEMORY;
 
        /* they created it; let the user do what he wants with it */
@@ -4955,7 +4947,7 @@ NTSTATUS _samr_CreateDomainGroup(pipes_struct *p,
        info->acc_granted = GENERIC_RIGHTS_GROUP_ALL_ACCESS;
 
        /* get a (unique) handle.  open a policy on it. */
-       if (!create_policy_hnd(p, r->out.group_handle, free_samr_info, (void *)info))
+       if (!create_policy_hnd(p, r->out.group_handle, info))
                return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
        force_flush_samr_cache(disp_info);
@@ -5039,7 +5031,7 @@ NTSTATUS _samr_CreateDomAlias(pipes_struct *p,
                return NT_STATUS_ACCESS_DENIED;
        }
 
-       if ((info = get_samr_info_by_sid(&info_sid)) == NULL)
+       if ((info = get_samr_info_by_sid(p->mem_ctx, &info_sid)) == NULL)
                return NT_STATUS_NO_MEMORY;
 
        /* they created it; let the user do what he wants with it */
@@ -5047,7 +5039,7 @@ NTSTATUS _samr_CreateDomAlias(pipes_struct *p,
        info->acc_granted = GENERIC_RIGHTS_ALIAS_ALL_ACCESS;
 
        /* get a (unique) handle.  open a policy on it. */
-       if (!create_policy_hnd(p, r->out.alias_handle, free_samr_info, (void *)info))
+       if (!create_policy_hnd(p, r->out.alias_handle, info))
                return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
        force_flush_samr_cache(disp_info);
@@ -5418,7 +5410,7 @@ NTSTATUS _samr_OpenGroup(pipes_struct *p,
        sid_append_rid(&info_sid, r->in.rid);
        sid_to_fstring(sid_string, &info_sid);
 
-       if ((info = get_samr_info_by_sid(&info_sid)) == NULL)
+       if ((info = get_samr_info_by_sid(p->mem_ctx, &info_sid)) == NULL)
                return NT_STATUS_NO_MEMORY;
 
        info->acc_granted = acc_granted;
@@ -5433,7 +5425,7 @@ NTSTATUS _samr_OpenGroup(pipes_struct *p,
                return NT_STATUS_NO_SUCH_GROUP;
 
        /* get a (unique) handle.  open a policy on it. */
-       if (!create_policy_hnd(p, r->out.group_handle, free_samr_info, (void *)info))
+       if (!create_policy_hnd(p, r->out.group_handle, info))
                return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
        return NT_STATUS_OK;
index 5e2cc0505686eefc5e78a06cc9042508743e12db..123cbf933524484ac68308403bb2c77f30743287 100644 (file)
@@ -227,11 +227,6 @@ static int printer_entry_destructor(Printer_entry *Printer)
        return 0;
 }
 
-static void free_printer_entry(void *Printer)
-{
-       TALLOC_FREE(Printer);
-}
-
 /****************************************************************************
  Functions to duplicate a SPOOL_NOTIFY_OPTION struct stored in Printer_entry.
 ****************************************************************************/
@@ -597,8 +592,8 @@ static bool open_printer_hnd(pipes_struct *p, POLICY_HND *hnd, char *name, uint3
        }
        talloc_set_destructor(new_printer, printer_entry_destructor);
 
-       if (!create_policy_hnd(p, hnd, free_printer_entry, new_printer)) {
-               SAFE_FREE(new_printer);
+       if (!create_policy_hnd(p, hnd, new_printer)) {
+               TALLOC_FREE(new_printer);
                return False;
        }
 
index 56cbc815a3392c1d3ea3d5adaad24c3e98d050df..16d409db7411ceccd2855fc8cf3783123bcc2a31 100644 (file)
@@ -166,15 +166,6 @@ static SEC_DESC* construct_scm_sd( TALLOC_CTX *ctx )
        return sd;
 }
 
-/******************************************************************
- free() function for REGISTRY_KEY
- *****************************************************************/
-
-static void free_service_handle_info(void *ptr)
-{
-       TALLOC_FREE( ptr );
-}
-
 /******************************************************************
  Find a registry key handle and return a SERVICE_INFO
  *****************************************************************/
@@ -244,14 +235,14 @@ static WERROR create_open_service_handle( pipes_struct *p, POLICY_HND *handle, u
 
        /* store the SERVICE_INFO and create an open handle */
 
-       if ( !create_policy_hnd( p, handle, free_service_handle_info, info ) ) {
+       if ( !create_policy_hnd( p, handle, info ) ) {
                result = WERR_ACCESS_DENIED;
                goto done;
        }
 
 done:
        if ( !W_ERROR_IS_OK(result) )
-               free_service_handle_info( info );
+               TALLOC_FREE(info);
 
        return result;
 }
index 1131033b0495c6eb6690ba313c2fbb3ab726364f..809260120253865245595bf90c3d243df53ad1de 100644 (file)
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV
 
-/******************************************************************
- free() function for struct registry_key
- *****************************************************************/
-static void free_regkey(void *ptr)
-{
-       struct registry_key *key = (struct registry_key *)ptr;
-       TALLOC_FREE(key);
-}
-
 /******************************************************************
  Find a registry key handle and return a struct registry_key *
  *****************************************************************/
@@ -69,19 +59,19 @@ static WERROR open_registry_key( pipes_struct *p, POLICY_HND *hnd,
        struct registry_key *key;
 
        if (parent == NULL) {
-               result = reg_openhive(NULL, subkeyname, access_desired,
+               result = reg_openhive(p->mem_ctx, subkeyname, access_desired,
                                      p->server_info->ptok, &key);
        }
        else {
-               result = reg_openkey(NULL, parent, subkeyname, access_desired,
-                                    &key);
+               result = reg_openkey(p->mem_ctx, parent, subkeyname,
+                                    access_desired, &key);
        }
 
        if ( !W_ERROR_IS_OK(result) ) {
                return result;
        }
        
-       if ( !create_policy_hnd( p, hnd, free_regkey, key ) ) {
+       if ( !create_policy_hnd( p, hnd, key ) ) {
                return WERR_BADFILE; 
        }
        
@@ -755,7 +745,7 @@ WERROR _winreg_CreateKey( pipes_struct *p, struct winreg_CreateKey *r)
                return result;
        }
 
-       if (!create_policy_hnd(p, r->out.new_handle, free_regkey, new_key)) {
+       if (!create_policy_hnd(p, r->out.new_handle, new_key)) {
                TALLOC_FREE(new_key);
                return WERR_BADFILE;
        }