s3-talloc Change TALLOC_ZERO_P() to talloc_zero()
[nivanova/samba-autobuild/.git] / source3 / winbindd / idmap_adex / gc_util.c
index 87dd3c058d336cd2006866fbef3f319edd31c4a1..461a2e679b7a2aadba202d84a4aa965dbcfe6b3e 100644 (file)
  */
 
 #include "includes.h"
+#include "ads.h"
+#include "idmap.h"
 #include "idmap_adex.h"
+#include "libads/cldap.h"
+#include "../libcli/ldap/ldap_ndr.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_IDMAP
@@ -101,8 +105,9 @@ done:
        ADS_STRUCT *ads = NULL;
        ADS_STATUS ads_status;
        NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
-       struct nbt_cldap_netlogon_5 cldap_reply;
+       struct NETLOGON_SAM_LOGON_RESPONSE_EX cldap_reply;
        TALLOC_CTX *frame = talloc_stackframe();
+       struct sockaddr_storage ss;
 
        if (!gc || !domain) {
                return NT_STATUS_INVALID_PARAMETER;
@@ -122,8 +127,17 @@ done:
        nt_status = ads_ntstatus(ads_status);
        BAIL_ON_NTSTATUS_ERROR(nt_status);
 
+       if (!resolve_name(ads->config.ldap_server_name, &ss, 0x20, true)) {
+               DEBUG(5,("gc_find_forest_root: unable to resolve name %s\n",
+                        ads->config.ldap_server_name));
+               nt_status = NT_STATUS_IO_TIMEOUT;
+               /* This matches the old code which did the resolve in
+                * ads_cldap_netlogon_5 */
+               BAIL_ON_NTSTATUS_ERROR(nt_status);
+       }
+
        if (!ads_cldap_netlogon_5(frame,
-                                 ads->config.ldap_server_name,
+                                 &ss,
                                  ads->config.realm,
                                  &cldap_reply))
        {
@@ -177,7 +191,7 @@ static NTSTATUS gc_add_forest(const char *domain)
                return NT_STATUS_OK;
        }
 
-       if ((gc = TALLOC_ZERO_P(NULL, struct gc_info)) == NULL) {
+       if ((gc = talloc_zero(NULL, struct gc_info)) == NULL) {
                nt_status = NT_STATUS_NO_MEMORY;
                BAIL_ON_NTSTATUS_ERROR(nt_status);
        }
@@ -545,7 +559,7 @@ done:
 
  NTSTATUS gc_name_to_sid(const char *domain,
                         const char *name,
-                        DOM_SID *sid,
+                        struct dom_sid *sid,
                         enum lsa_SidType *sid_type)
 {
        TALLOC_CTX *frame = talloc_stackframe();
@@ -592,11 +606,11 @@ done:
                while (e) {
                        struct winbindd_tdc_domain *domain_rec;
 
-                       dn = ads_get_dn(ads, e);
+                       dn = ads_get_dn(ads, frame, e);
                        BAIL_ON_PTR_ERROR(dn, nt_status);
 
                        dns_domain = cell_dn_to_dns(dn);
-                       SAFE_FREE(dn);
+                       TALLOC_FREE(dn);
                        BAIL_ON_PTR_ERROR(dns_domain, nt_status);
 
                        domain_rec = wcache_tdc_fetch_domain(frame, dns_domain);
@@ -666,13 +680,13 @@ static NTSTATUS get_object_account_name(ADS_STRUCT *ads,
 
        /* get the name and domain */
 
-       dn = ads_get_dn(ads, msg);
+       dn = ads_get_dn(ads, frame, msg);
        BAIL_ON_PTR_ERROR(dn, nt_status);
 
        DEBUG(10,("get_object_account_name: dn = \"%s\"\n", dn));
 
        dns_domain = cell_dn_to_dns(dn);
-       SAFE_FREE(dn);
+       TALLOC_FREE(dn);
        BAIL_ON_PTR_ERROR(dns_domain, nt_status);
 
        domain_rec = wcache_tdc_fetch_domain(frame, dns_domain);
@@ -703,7 +717,7 @@ done:
 /*********************************************************************
  ********************************************************************/
 
- NTSTATUS gc_sid_to_name(const DOM_SID *sid,
+ NTSTATUS gc_sid_to_name(const struct dom_sid *sid,
                         char **name,
                         enum lsa_SidType *sid_type)
 {
@@ -716,11 +730,11 @@ done:
 
        *name = NULL;
 
-       sid_string = sid_binstring(sid);
+       sid_string = ldap_encode_ndr_dom_sid(frame, sid);
        BAIL_ON_PTR_ERROR(sid_string, nt_status);
 
        filter = talloc_asprintf(frame, "(objectSid=%s)", sid_string);
-       SAFE_FREE(sid_string);
+       TALLOC_FREE(sid_string);
        BAIL_ON_PTR_ERROR(filter, nt_status);
 
        nt_status = gc_search_all_forests_unique(filter, &ads, &msg);
@@ -767,17 +781,17 @@ done:
 #endif
 
        if (count == 0) {
-               ads_tmp = TALLOC_ARRAY(NULL, ADS_STRUCT*, 1);
+               ads_tmp = talloc_array(NULL, ADS_STRUCT*, 1);
                BAIL_ON_PTR_ERROR(ads_tmp, nt_status);
 
-               msg_tmp = TALLOC_ARRAY(NULL, LDAPMessage*, 1);
+               msg_tmp = talloc_array(NULL, LDAPMessage*, 1);
                BAIL_ON_PTR_ERROR(msg_tmp, nt_status);
        } else {
-               ads_tmp = TALLOC_REALLOC_ARRAY(*ads_list, *ads_list, ADS_STRUCT*,
+               ads_tmp = talloc_realloc(*ads_list, *ads_list, ADS_STRUCT*,
                                               count+1);
                BAIL_ON_PTR_ERROR(ads_tmp, nt_status);
 
-               msg_tmp = TALLOC_REALLOC_ARRAY(*msg_list, *msg_list, LDAPMessage*,
+               msg_tmp = talloc_realloc(*msg_list, *msg_list, LDAPMessage*,
                                               count+1);
                BAIL_ON_PTR_ERROR(msg_tmp, nt_status);
        }