summaryrefslogtreecommitdiff
path: root/source4/libnet/libnet_site.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/libnet/libnet_site.c')
-rw-r--r--source4/libnet/libnet_site.c44
1 files changed, 28 insertions, 16 deletions
diff --git a/source4/libnet/libnet_site.c b/source4/libnet/libnet_site.c
index 8a002b24a4..9bfca74a36 100644
--- a/source4/libnet/libnet_site.c
+++ b/source4/libnet/libnet_site.c
@@ -20,11 +20,11 @@
#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,7 @@ 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(lpcfg_resolve_context(ctx->lp_ctx), &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 +179,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 +203,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 +234,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 +246,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 +259,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 +268,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",