summaryrefslogtreecommitdiff
path: root/source3/lib/netapi
diff options
context:
space:
mode:
Diffstat (limited to 'source3/lib/netapi')
-rw-r--r--source3/lib/netapi/examples/netlogon/nltest.c22
-rw-r--r--source3/lib/netapi/group.c5
-rw-r--r--source3/lib/netapi/localgroup.c5
-rw-r--r--source3/lib/netapi/netlogon.c4
-rw-r--r--source3/lib/netapi/user.c15
5 files changed, 39 insertions, 12 deletions
diff --git a/source3/lib/netapi/examples/netlogon/nltest.c b/source3/lib/netapi/examples/netlogon/nltest.c
index e3ced90a20..0c393ea3be 100644
--- a/source3/lib/netapi/examples/netlogon/nltest.c
+++ b/source3/lib/netapi/examples/netlogon/nltest.c
@@ -58,7 +58,8 @@ enum {
OPT_SITE,
OPT_ACCOUNT,
OPT_RET_DNS,
- OPT_RET_NETBIOS
+ OPT_RET_NETBIOS,
+ OPT_DSREGDNS
};
/****************************************************************
@@ -207,6 +208,7 @@ int main(int argc, const char **argv)
char *opt_account = NULL;
int opt_ret_dns = 0;
int opt_ret_netbios = 0;
+ int opt_dsregdns = 0;
uint32_t query_level = 0;
uint8_t *buffer = NULL;
uint32_t flags = 0;
@@ -244,6 +246,7 @@ int main(int argc, const char **argv)
{"account", 0, POPT_ARG_STRING, &opt_account, OPT_ACCOUNT, "ACCOUNT"},
{"ret_dns", 0, POPT_ARG_NONE, &opt_ret_dns, OPT_RET_DNS, NULL},
{"ret_netbios", 0, POPT_ARG_NONE, &opt_ret_netbios, OPT_RET_NETBIOS, NULL},
+ {"dsregdns", 0, POPT_ARG_NONE, &opt_dsregdns, OPT_DSREGDNS, "Force registration of all DC-specific DNS records"},
POPT_COMMON_LIBNETAPI_EXAMPLES
POPT_TABLEEND
};
@@ -363,6 +366,23 @@ int main(int argc, const char **argv)
print_netlogon_info_result(query_level, buffer);
break;
+ case OPT_DSREGDNS:
+ query_level = 1;
+ status = I_NetLogonControl2(opt_server,
+ NETLOGON_CONTROL_FORCE_DNS_REG,
+ query_level,
+ NULL,
+ &buffer);
+ if (status != 0) {
+ fprintf(stderr, "I_NetlogonControl failed: Status = %d 0x%x %s\n",
+ status, status,
+ libnetapi_get_error_string(ctx, status));
+ goto done;
+ }
+
+ print_netlogon_info_result(query_level, buffer);
+
+ break;
case OPT_DSGETDC:
if (opt_pdc)
flags |= DS_PDC_REQUIRED;
diff --git a/source3/lib/netapi/group.c b/source3/lib/netapi/group.c
index 53114b5d7d..6a926953c0 100644
--- a/source3/lib/netapi/group.c
+++ b/source3/lib/netapi/group.c
@@ -25,6 +25,7 @@
#include "lib/netapi/libnetapi.h"
#include "../librpc/gen_ndr/cli_samr.h"
#include "rpc_client/init_lsa.h"
+#include "../libcli/security/dom_sid.h"
/****************************************************************
****************************************************************/
@@ -603,7 +604,7 @@ static WERROR map_group_info_to_buffer(TALLOC_CTX *mem_ctx,
info3.grpi3_name = info->name.string;
info3.grpi3_comment = info->description.string;
info3.grpi3_attributes = info->attributes;
- info3.grpi3_group_sid = (struct domsid *)sid_dup_talloc(mem_ctx, &sid);
+ info3.grpi3_group_sid = (struct domsid *)dom_sid_dup(mem_ctx, &sid);
*buffer = (uint8_t *)talloc_memdup(mem_ctx, &info3, sizeof(info3));
@@ -1086,7 +1087,7 @@ static WERROR convert_samr_disp_groups_to_GROUP_INFO_3_buffer(TALLOC_CTX *mem_ct
groups->entries[i].account_name.string);
g3[i].grpi3_comment = talloc_strdup(mem_ctx,
groups->entries[i].description.string);
- g3[i].grpi3_group_sid = (struct domsid *)sid_dup_talloc(mem_ctx, &sid);
+ g3[i].grpi3_group_sid = (struct domsid *)dom_sid_dup(mem_ctx, &sid);
g3[i].grpi3_attributes = groups->entries[i].acct_flags;
W_ERROR_HAVE_NO_MEMORY(g3[i].grpi3_name);
}
diff --git a/source3/lib/netapi/localgroup.c b/source3/lib/netapi/localgroup.c
index 69cf974225..c9e1b722bd 100644
--- a/source3/lib/netapi/localgroup.c
+++ b/source3/lib/netapi/localgroup.c
@@ -27,6 +27,7 @@
#include "../librpc/gen_ndr/cli_lsa.h"
#include "rpc_client/cli_lsarpc.h"
#include "rpc_client/init_lsa.h"
+#include "../libcli/security/dom_sid.h"
static NTSTATUS libnetapi_samr_lookup_and_open_alias(TALLOC_CTX *mem_ctx,
struct rpc_pipe_client *pipe_cli,
@@ -1171,7 +1172,7 @@ static WERROR NetLocalGroupModifyMembers_r(struct libnetapi_ctx *ctx,
for (i=0; i < r->in.total_entries; i++) {
bool already_member = false;
for (k=0; k < current_sids.num_sids; k++) {
- if (sid_equal(&member_sids[i],
+ if (dom_sid_equal(&member_sids[i],
current_sids.sids[k].sid)) {
already_member = true;
break;
@@ -1193,7 +1194,7 @@ static WERROR NetLocalGroupModifyMembers_r(struct libnetapi_ctx *ctx,
for (k=0; k < current_sids.num_sids; k++) {
bool keep_member = false;
for (i=0; i < r->in.total_entries; i++) {
- if (sid_equal(&member_sids[i],
+ if (dom_sid_equal(&member_sids[i],
current_sids.sids[k].sid)) {
keep_member = true;
break;
diff --git a/source3/lib/netapi/netlogon.c b/source3/lib/netapi/netlogon.c
index d58b7ccf67..932ab8bb1d 100644
--- a/source3/lib/netapi/netlogon.c
+++ b/source3/lib/netapi/netlogon.c
@@ -43,6 +43,9 @@ static WERROR construct_data(enum netr_LogonControlCode function_code,
case NETLOGON_CONTROL_SET_DBFLAG:
data_out->debug_level = atoi((const char *)data_in);
break;
+ case NETLOGON_CONTROL_FORCE_DNS_REG:
+ ZERO_STRUCTP(data_out);
+ break;
default:
return WERR_INVALID_PARAM;
}
@@ -193,6 +196,7 @@ WERROR I_NetLogonControl2_r(struct libnetapi_ctx *ctx,
switch (r->in.function_code) {
case NETLOGON_CONTROL_TC_VERIFY:
case NETLOGON_CONTROL_SET_DBFLAG:
+ case NETLOGON_CONTROL_FORCE_DNS_REG:
status = rpccli_netr_LogonControl2Ex(pipe_cli, ctx,
r->in.server_name,
r->in.function_code,
diff --git a/source3/lib/netapi/user.c b/source3/lib/netapi/user.c
index 67a7443cd4..de0fc7da6e 100644
--- a/source3/lib/netapi/user.c
+++ b/source3/lib/netapi/user.c
@@ -27,6 +27,7 @@
#include "rpc_client/init_samr.h"
#include "../libds/common/flags.h"
#include "rpc_client/init_lsa.h"
+#include "../libcli/security/dom_sid.h"
/****************************************************************
****************************************************************/
@@ -705,12 +706,12 @@ static NTSTATUS libnetapi_samr_lookup_user(TALLOC_CTX *mem_ctx,
for (i=0; i<rid_array->count; i++) {
sid_compose(&sid, domain_sid, rid_array->rids[i].rid);
- sid_array.sids[i].sid = sid_dup_talloc(mem_ctx, &sid);
+ sid_array.sids[i].sid = dom_sid_dup(mem_ctx, &sid);
NT_STATUS_HAVE_NO_MEMORY(sid_array.sids[i].sid);
}
sid_compose(&sid, domain_sid, rid);
- sid_array.sids[i].sid = sid_dup_talloc(mem_ctx, &sid);
+ sid_array.sids[i].sid = dom_sid_dup(mem_ctx, &sid);
NT_STATUS_HAVE_NO_MEMORY(sid_array.sids[i].sid);
status = rpccli_samr_GetAliasMembership(pipe_cli, mem_ctx,
@@ -923,7 +924,7 @@ static NTSTATUS info21_to_USER_INFO_4(TALLOC_CTX *mem_ctx,
if (!sid_compose(&sid, domain_sid, i21->rid)) {
return NT_STATUS_NO_MEMORY;
}
- i->usri4_user_sid = (struct domsid *)sid_dup_talloc(mem_ctx, &sid);
+ i->usri4_user_sid = (struct domsid *)dom_sid_dup(mem_ctx, &sid);
i->usri4_primary_group_id = i21->primary_gid;
i->usri4_profile = talloc_strdup(mem_ctx, i21->profile_path.string);
i->usri4_home_dir_drive = talloc_strdup(mem_ctx, i21->home_drive.string);
@@ -1024,7 +1025,7 @@ static NTSTATUS info21_to_USER_INFO_23(TALLOC_CTX *mem_ctx,
if (!sid_compose(&sid, domain_sid, i21->rid)) {
return NT_STATUS_NO_MEMORY;
}
- i->usri23_user_sid = (struct domsid *)sid_dup_talloc(mem_ctx, &sid);
+ i->usri23_user_sid = (struct domsid *)dom_sid_dup(mem_ctx, &sid);
return NT_STATUS_OK;
}
@@ -2066,7 +2067,7 @@ static NTSTATUS query_USER_MODALS_INFO_2(TALLOC_CTX *mem_ctx,
info2->usrmod2_domain_name =
talloc_strdup(mem_ctx, dom_info5.domain_name.string);
info2->usrmod2_domain_id =
- (struct domsid *)sid_dup_talloc(mem_ctx, domain_sid);
+ (struct domsid *)dom_sid_dup(mem_ctx, domain_sid);
NT_STATUS_HAVE_NO_MEMORY(info2->usrmod2_domain_name);
NT_STATUS_HAVE_NO_MEMORY(info2->usrmod2_domain_id);
@@ -3334,7 +3335,7 @@ WERROR NetUserGetLocalGroups_r(struct libnetapi_ctx *ctx,
goto done;
}
- sid_array.sids[0].sid = sid_dup_talloc(ctx, &user_sid);
+ sid_array.sids[0].sid = dom_sid_dup(ctx, &user_sid);
if (!sid_array.sids[0].sid) {
werr = WERR_NOMEM;
goto done;
@@ -3348,7 +3349,7 @@ WERROR NetUserGetLocalGroups_r(struct libnetapi_ctx *ctx,
goto done;
}
- sid_array.sids[i+1].sid = sid_dup_talloc(ctx, &sid);
+ sid_array.sids[i+1].sid = dom_sid_dup(ctx, &sid);
if (!sid_array.sids[i+1].sid) {
werr = WERR_NOMEM;
goto done;