libcli/security Provide a common, top level libcli/security/security.h
[amitay/samba.git] / source3 / libnet / libnet_join.c
index e2b917966ba9c1fa73eb48f59cdc893087c528bc..424945146b7192fb7fbeee3d8aaf4d30417cd521 100644 (file)
@@ -19,6 +19,7 @@
  */
 
 #include "includes.h"
+#include "ads.h"
 #include "librpc/gen_ndr/ndr_libnet_join.h"
 #include "libnet/libnet_join.h"
 #include "libcli/auth/libcli_auth.h"
 #include "lib/smbconf/smbconf.h"
 #include "lib/smbconf/smbconf_reg.h"
 #include "../libds/common/flags.h"
-
+#include "secrets.h"
+#include "rpc_client/init_lsa.h"
+#include "krb5_env.h"
+#include "../libcli/security/security.h"
 
 /****************************************************************
 ****************************************************************/
@@ -112,6 +116,7 @@ static ADS_STATUS libnet_connect_ads(const char *dns_domain_name,
 {
        ADS_STATUS status;
        ADS_STRUCT *my_ads = NULL;
+       char *cp;
 
        my_ads = ads_init(dns_domain_name,
                          netbios_domain_name,
@@ -123,6 +128,12 @@ static ADS_STATUS libnet_connect_ads(const char *dns_domain_name,
        if (user_name) {
                SAFE_FREE(my_ads->auth.user_name);
                my_ads->auth.user_name = SMB_STRDUP(user_name);
+               if ((cp = strchr_m(my_ads->auth.user_name, '@'))!=0) {
+                       *cp++ = '\0';
+                       SAFE_FREE(my_ads->auth.realm);
+                       my_ads->auth.realm = smb_xstrdup(cp);
+                       strupper_m(my_ads->auth.realm);
+               }
        }
 
        if (password) {
@@ -734,7 +745,7 @@ static NTSTATUS libnet_join_lookup_dc_rpc(TALLOC_CTX *mem_ctx,
                r->out.netbios_domain_name = info->dns.name.string;
                r->out.dns_domain_name = info->dns.dns_domain.string;
                r->out.forest_name = info->dns.dns_forest.string;
-               r->out.domain_sid = sid_dup_talloc(mem_ctx, info->dns.sid);
+               r->out.domain_sid = dom_sid_dup(mem_ctx, info->dns.sid);
                NT_STATUS_HAVE_NO_MEMORY(r->out.domain_sid);
        }
 
@@ -748,7 +759,7 @@ static NTSTATUS libnet_join_lookup_dc_rpc(TALLOC_CTX *mem_ctx,
                }
 
                r->out.netbios_domain_name = info->account_domain.name.string;
-               r->out.domain_sid = sid_dup_talloc(mem_ctx, info->account_domain.sid);
+               r->out.domain_sid = dom_sid_dup(mem_ctx, info->account_domain.sid);
                NT_STATUS_HAVE_NO_MEMORY(r->out.domain_sid);
        }
 
@@ -974,12 +985,6 @@ static NTSTATUS libnet_join_joindomain_rpc(TALLOC_CTX *mem_ctx,
        /* Fill in the additional account flags now */
 
        acct_flags |= ACB_PWNOEXP;
-       if (r->out.domain_is_ad) {
-#if !defined(ENCTYPE_ARCFOUR_HMAC)
-               acct_flags |= ACB_USE_DES_KEY_ONLY;
-#endif
-               ;;
-       }
 
        /* Set account flags on machine account */
        ZERO_STRUCT(user_info.info16);
@@ -2004,7 +2009,7 @@ static WERROR libnet_DomainUnjoin(TALLOC_CTX *mem_ctx,
                                "Unable to fetch domain sid: are we joined?");
                        return WERR_SETUP_NOT_JOINED;
                }
-               r->in.domain_sid = sid_dup_talloc(mem_ctx, &sid);
+               r->in.domain_sid = dom_sid_dup(mem_ctx, &sid);
                W_ERROR_HAVE_NO_MEMORY(r->in.domain_sid);
        }