source3/libsmb/clidgram.h: fix licence/copyright
[samba.git] / source4 / libnet / libnet_site.c
index 8a002b24a4b1e03346f8964743e65cdd8b196fa4..f49108b28a96dcf7ac6571cbef254e6bda06bea1 100644 (file)
 #include "includes.h"
 #include "libnet/libnet.h"
 #include "libcli/cldap/cldap.h"
-#include "lib/ldb/include/ldb.h"
-#include "lib/ldb/include/ldb_errors.h"
-#include "librpc/rpc/dcerpc.h"
+#include <ldb.h>
+#include <ldb_errors.h>
 #include "libcli/resolve/resolve.h"
 #include "param/param.h"
+#include "lib/tsocket/tsocket.h"
 
 /**
  * 1. Setup a CLDAP socket.
@@ -41,6 +41,8 @@ NTSTATUS libnet_FindSite(TALLOC_CTX *ctx, struct libnet_context *lctx, struct li
 
        struct cldap_socket *cldap = NULL;
        struct cldap_netlogon search;
+       int ret;
+       struct tsocket_address *dest_address;
 
        tmp_ctx = talloc_named(ctx, 0, "libnet_FindSite temp context");
        if (!tmp_ctx) {
@@ -50,20 +52,30 @@ NTSTATUS libnet_FindSite(TALLOC_CTX *ctx, struct libnet_context *lctx, struct li
 
        /* Resolve the site name. */
        ZERO_STRUCT(search);
-       search.in.dest_address = r->in.dest_address;
-       search.in.dest_port = r->in.cldap_port;
+       search.in.dest_address = NULL;
+       search.in.dest_port = 0;
        search.in.acct_control = -1;
        search.in.version = NETLOGON_NT_VERSION_5 | NETLOGON_NT_VERSION_5EX;
        search.in.map_response = true;
 
+       ret = tsocket_address_inet_from_strings(tmp_ctx, "ip",
+                                               r->in.dest_address,
+                                               r->in.cldap_port,
+                                               &dest_address);
+       if (ret != 0) {
+               r->out.error_string = NULL;
+               status = map_nt_error_from_unix(errno);
+               return status;
+       }
+
        /* we want to use non async calls, so we're not passing an event context */
-       status = cldap_socket_init(tmp_ctx, NULL, NULL, NULL, &cldap);//TODO
+       status = cldap_socket_init(tmp_ctx, NULL, NULL, dest_address, &cldap);
        if (!NT_STATUS_IS_OK(status)) {
                talloc_free(tmp_ctx);
                r->out.error_string = NULL;
                return status;
        }
-       status = cldap_netlogon(cldap, lp_iconv_convenience(lctx->lp_ctx), tmp_ctx, &search);
+       status = cldap_netlogon(cldap, tmp_ctx, &search);
        if (!NT_STATUS_IS_OK(status)
            || !search.out.netlogon.data.nt5_ex.client_site) {
                /*
@@ -156,7 +168,9 @@ NTSTATUS libnet_JoinSite(struct libnet_context *ctx,
        }
 
        make_nbt_name_client(&name, libnet_r->out.samr_binding->host);
-       status = resolve_name(lp_resolve_context(ctx->lp_ctx), &name, r, &dest_addr, ctx->event_ctx);
+       status = resolve_name_ex(lpcfg_resolve_context(ctx->lp_ctx),
+                                0, 0,
+                                &name, r, &dest_addr, ctx->event_ctx);
        if (!NT_STATUS_IS_OK(status)) {
                libnet_r->out.error_string = NULL;
                talloc_free(tmp_ctx);
@@ -167,7 +181,7 @@ NTSTATUS libnet_JoinSite(struct libnet_context *ctx,
        r->in.dest_address = dest_addr;
        r->in.netbios_name = libnet_r->in.netbios_name;
        r->in.domain_dn_str = libnet_r->out.domain_dn_str;
-       r->in.cldap_port = lp_cldap_port(ctx->lp_ctx);
+       r->in.cldap_port = lpcfg_cldap_port(ctx->lp_ctx);
 
        status = libnet_FindSite(tmp_ctx, ctx, r);
        if (!NT_STATUS_IS_OK(status)) {
@@ -191,19 +205,19 @@ NTSTATUS libnet_JoinSite(struct libnet_context *ctx,
        }
 
        rtn = ldb_msg_add_string(msg, "objectClass", "server");
-       if (rtn != 0) {
+       if (rtn != LDB_SUCCESS) {
                libnet_r->out.error_string = NULL;
                talloc_free(tmp_ctx);
                return NT_STATUS_NO_MEMORY;
        }
        rtn = ldb_msg_add_string(msg, "systemFlags", "50000000");
-       if (rtn != 0) {
+       if (rtn != LDB_SUCCESS) {
                libnet_r->out.error_string = NULL;
                talloc_free(tmp_ctx);
                return NT_STATUS_NO_MEMORY;
        }
        rtn = ldb_msg_add_string(msg, "serverReference", libnet_r->out.account_dn_str);
-       if (rtn != 0) {
+       if (rtn != LDB_SUCCESS) {
                libnet_r->out.error_string = NULL;
                talloc_free(tmp_ctx);
                return NT_STATUS_NO_MEMORY;
@@ -222,7 +236,7 @@ NTSTATUS libnet_JoinSite(struct libnet_context *ctx,
 
        rtn = ldb_add(remote_ldb, msg);
        if (rtn == LDB_ERR_ENTRY_ALREADY_EXISTS) {
-               int i;
+               unsigned int i;
 
                /* make a 'modify' msg, and only for serverReference */
                msg = ldb_msg_new(tmp_ctx);
@@ -234,7 +248,7 @@ NTSTATUS libnet_JoinSite(struct libnet_context *ctx,
                msg->dn = server_dn;
 
                rtn = ldb_msg_add_string(msg, "serverReference",libnet_r->out.account_dn_str);
-               if (rtn != 0) {
+               if (rtn != LDB_SUCCESS) {
                        libnet_r->out.error_string = NULL;
                        talloc_free(tmp_ctx);
                        return NT_STATUS_NO_MEMORY;
@@ -247,7 +261,7 @@ NTSTATUS libnet_JoinSite(struct libnet_context *ctx,
                }
 
                rtn = ldb_modify(remote_ldb, msg);
-               if (rtn != 0) {
+               if (rtn != LDB_SUCCESS) {
                        libnet_r->out.error_string
                                = talloc_asprintf(libnet_r,
                                                  "Failed to modify server entry %s: %s: %d",
@@ -256,7 +270,7 @@ NTSTATUS libnet_JoinSite(struct libnet_context *ctx,
                        talloc_free(tmp_ctx);
                        return NT_STATUS_INTERNAL_DB_CORRUPTION;
                }
-       } else if (rtn != 0) {
+       } else if (rtn != LDB_SUCCESS) {
                libnet_r->out.error_string
                        = talloc_asprintf(libnet_r,
                                "Failed to add server entry %s: %s: %d",