const char *field,
int reverse,
char **_path);
-ADS_STATUS ads_build_dn(const char *realm, char **_dn);
+ADS_STATUS ads_build_dn(const char *realm, TALLOC_CTX *mem_ctx, char **_dn);
char *ads_build_domain(const char *dn);
ADS_STRUCT *ads_init(TALLOC_CTX *mem_ctx,
const char *realm,
realm of the form AA.BB.CC
caller must free
*/
-ADS_STATUS ads_build_dn(const char *realm, char **_dn)
+ADS_STATUS ads_build_dn(const char *realm, TALLOC_CTX *mem_ctx, char **_dn)
{
ADS_STATUS status;
char *dn = NULL;
return status;
}
- *_dn = dn;
+ *_dn = talloc_strdup(mem_ctx, dn);
+ SAFE_FREE(dn);
+ if (*_dn == NULL) {
+ return ADS_ERROR_NT(NT_STATUS_NO_MEMORY);
+ }
return ADS_ERROR_NT(NT_STATUS_OK);
}
#ifdef HAVE_LDAP
ads_disconnect(*ads);
#endif
- SAFE_FREE((*ads)->config.bind_path);
SAFE_FREE((*ads)->config.ldap_server_name);
SAFE_FREE((*ads)->config.server_site_name);
SAFE_FREE((*ads)->config.client_site_name);
/* Fill in the ads->config values */
TALLOC_FREE(ads->config.realm);
- SAFE_FREE(ads->config.bind_path);
+ TALLOC_FREE(ads->config.bind_path);
SAFE_FREE(ads->config.ldap_server_name);
SAFE_FREE(ads->config.server_site_name);
SAFE_FREE(ads->config.client_site_name);
goto out;
}
- status = ads_build_dn(ads->config.realm, &ads->config.bind_path);
+ status = ads_build_dn(ads->config.realm, ads, &ads->config.bind_path);
if (!ADS_ERR_OK(status)) {
DBG_DEBUG("Failed to build bind path: %s\n",
ads_errstr(status));