* Don't just free it, forget it too.
*/
-#define _pam_drop(X) \
-do { \
- if (X) { \
- free(X); \
- X=NULL; \
- } \
-} while (0)
+#define _pam_drop(X) SAFE_FREE(X)
#define x_strdup(s) ( (s) ? strdup(s):NULL )
#endif
/* Free response data if necessary */
done:
- safe_free(groups);
+ SAFE_FREE(groups);
return result;
}
}
done:
- safe_free(groups);
+ SAFE_FREE(groups);
return result;
}
*/
void winbind_exclude_domain(const char *domain)
{
- if (excluded_domain) free(excluded_domain);
+ SAFE_FREE(excluded_domain);
excluded_domain = strdup(domain);
}
{
/* Free any allocated extra_data */
- if (response && response->extra_data) {
- free(response->extra_data);
- response->extra_data = NULL;
- }
+ if (response)
+ SAFE_FREE(response->extra_data);
}
/* Handle simple types of requests */
static NSS_STATUS _nss_winbind_passwd_destr (nss_backend_t * be, void *args)
{
- free(be);
+ SAFE_FREE(be);
NSS_DEBUG("_nss_winbind_passwd_destr");
return NSS_STATUS_SUCCESS;
}
static NSS_STATUS
_nss_winbind_group_destr (nss_backend_t* be, void* args)
{
- free(be);
+ SAFE_FREE(be);
NSS_DEBUG("_nss_winbind_group_destr");
return NSS_STATUS_SUCCESS;
}
/* Free response data - we may be interrupted and receive another
command before being able to send this data off. */
- safe_free(state->response.extra_data);
+ SAFE_FREE(state->response.extra_data);
ZERO_STRUCT(state->response);
/* We may have some extra data that was not freed if the
client was killed unexpectedly */
- safe_free(state->response.extra_data);
+ SAFE_FREE(state->response.extra_data);
/* Remove from list and free */
DLIST_REMOVE(client_list, state);
- free(state);
+ SAFE_FREE(state);
num_clients--;
}
}
state->finished = True;
- safe_free(state->response.extra_data);
- state->response.extra_data = NULL;
+ SAFE_FREE(state->response.extra_data);
return;
}
if (state->write_extra_data) {
- safe_free(state->response.extra_data);
- state->response.extra_data = NULL;
+ SAFE_FREE(state->response.extra_data);
state->write_extra_data = False;
goto refetch;
}
memcpy(&rec, dbuf.dptr, sizeof(rec));
- free(dbuf.dptr);
+ SAFE_FREE(dbuf.dptr);
if (t < (rec.mod_time + lp_winbind_cache_time())) {
DEBUG(3,("cached sequence number for %s is %u\n",
/* Copy found entry into buffer */
memcpy((char *)buf, data.dptr, len < data.dsize ? len : data.dsize);
- free(data.dptr);
+ SAFE_FREE(data.dptr);
return True;
}
if (!NT_STATUS_IS_OK(result) && pol->cli) {
if (pol->cli->initialised)
cli_shutdown(pol->cli);
- free(pol->cli);
+ SAFE_FREE(pol->cli);
}
return NT_STATUS_IS_OK(result);
if (!NT_STATUS_IS_OK(result) && pol->cli) {
if (pol->cli->initialised)
cli_shutdown(pol->cli);
- free(pol->cli);
+ SAFE_FREE(pol->cli);
}
return NT_STATUS_IS_OK(result);
/* Free memory allocated in winbindd_lookup_groupmem() */
- safe_free(name_types);
- safe_free(rid_mem);
+ SAFE_FREE(name_types);
+ SAFE_FREE(rid_mem);
free_char_array(num_names, names);
/* Free any existing group info */
- if (ent->sam_entries) {
- free(ent->sam_entries);
- ent->sam_entries = NULL;
- ent->num_sam_entries = 0;
- }
+ SAFE_FREE(ent->sam_entries);
+ ent->num_sam_entries = 0;
/* Enumerate domain groups */
sam_grp_entries,
num_entries * sizeof(struct acct_info));
- safe_free(sam_grp_entries);
+ SAFE_FREE(sam_grp_entries);
}
ent->num_sam_entries += num_entries;
/* Free state information for this domain */
- safe_free(ent->sam_entries);
+ SAFE_FREE(ent->sam_entries);
ent->sam_entries = NULL;
next_ent = ent->next;
DLIST_REMOVE(state->getgrent_state, ent);
- free(ent);
+ SAFE_FREE(ent);
ent = next_ent;
}
if (!new_gr_mem_list && (group_list[group_list_ndx].num_gr_mem != 0)) {
DEBUG(0, ("getgrent(): out of memory\n"));
- free(gr_mem_list);
+ SAFE_FREE(gr_mem_list);
gr_mem_list_len = 0;
break;
}
memcpy(&gr_mem_list[gr_mem_list_len], gr_mem,
gr_mem_len);
- safe_free(gr_mem);
+ SAFE_FREE(gr_mem);
group_list[group_list_ndx].gr_mem_ofs =
gr_mem_list_len;
if (!new_extra_data) {
DEBUG(0, ("out of memory\n"));
group_list_ndx = 0;
- safe_free(state->response.extra_data);
- state->response.extra_data = NULL;
- safe_free(gr_mem_list);
+ SAFE_FREE(state->response.extra_data);
+ SAFE_FREE(gr_mem_list);
return WINBINDD_ERROR;
}
[group_list_ndx * sizeof(struct winbindd_gr)],
gr_mem_list, gr_mem_list_len);
- safe_free(gr_mem_list);
+ SAFE_FREE(gr_mem_list);
state->response.length += gr_mem_list_len;
if (!ted) {
DEBUG(0,("winbindd_list_groups: failed to enlarge buffer!\n"));
- if (extra_data)
- free(extra_data);
+ SAFE_FREE(extra_data);
return WINBINDD_ERROR;
} else
extra_data = ted;
result = WINBINDD_OK;
done:
- safe_free(user_groups);
+ SAFE_FREE(user_groups);
return result;
}
result = True;
}
- free(data.dptr);
+ SAFE_FREE(data.dptr);
} else {
result = True;
}
done:
- free(data.dptr);
+ SAFE_FREE(data.dptr);
}
return result;
if (pass_last_set_time) *pass_last_set_time = pass->mod_time;
memcpy(ret_pwd, pass->hash, 16);
- free(pass);
+ SAFE_FREE(pass);
return True;
}
if (!ted) {
DEBUG(0,("winbindd_list_trusted_domains: failed to enlarge buffer!\n"));
- if (extra_data) free(extra_data);
+ SAFE_FREE(extra_data);
return WINBINDD_ERROR;
}
else extra_data = ted;
Boston, MA 02111-1307, USA.
*/
+#ifndef SAFE_FREE
+#define SAFE_FREE(x) do { if(x) {free(x); x=NULL;} } while(0)
+#endif
+
#ifndef _WINBINDD_NTDOM_H
#define _WINBINDD_NTDOM_H
/* Free any existing user info */
- if (ent->sam_entries) {
- free(ent->sam_entries);
- ent->sam_entries = NULL;
- ent->num_sam_entries = 0;
- }
-
+ SAFE_FREE(ent->sam_entries);
+ ent->num_sam_entries = 0;
+
/* Call query_dispinfo to get a list of usernames and user rids */
do {
if (!tnl) {
DEBUG(0,("get_sam_user_entries: Realloc failed.\n"));
- if (name_list)
- free(name_list);
+ SAFE_FREE(name_list);
return WINBINDD_ERROR;
} else
name_list = tnl;
/* Free state information for this domain */
- safe_free(ent->sam_entries);
- ent->sam_entries = NULL;
+ SAFE_FREE(ent->sam_entries);
next_ent = ent->next;
DLIST_REMOVE(state->getpwent_state, ent);
- free(ent);
+ SAFE_FREE(ent);
ent = next_ent;
}
if (!ted) {
DEBUG(0,("winbindd_list_users: failed to enlarge buffer!\n"));
- if (extra_data) free(extra_data);
+ SAFE_FREE(extra_data);
return WINBINDD_ERROR;
}
else extra_data = ted;
next = domain->next;
DLIST_REMOVE(domain_list, domain);
- free(domain);
+ SAFE_FREE(domain);
domain = next;
}
got_ip:
dc_ip = ip_list[i];
- free(ip_list);
+ SAFE_FREE(ip_list);
if (!lookup_pdc_name(global_myname, domain, &dc_ip, srv_name))
return False;
/* Free sam entries then list entry */
- safe_free(state->sam_entries);
+ SAFE_FREE(state->sam_entries);
DLIST_REMOVE(state, state);
next = temp->next;
- free(temp);
+ SAFE_FREE(temp);
temp = next;
}
}
host_addresses++;
}
- if (ip_list)
- free(ip_list);
+ SAFE_FREE(ip_list);
memcpy(buffer, name, namelen);
he->h_name = buffer;