[SCM] Samba Shared Repository - branch v3-2-test updated -
release-3-2-0pre2-452-g9024aec
Günther Deschner
gd at samba.org
Wed Mar 26 18:31:25 GMT 2008
The branch, v3-2-test has been updated
via 9024aecdbf5d4df9996625f0cc8ce8a5ecdd247e (commit)
via 5d0aa3bbf8e56f5d2a1ab4d037d7fd146b095f9d (commit)
via 42971b71acec9c9fd94011c06d41702dac6b4f87 (commit)
via 4abe30fdae511422dccd04d0287d962192beadcb (commit)
from 9ef9d4c4e77523d7f3cc5fdac199559896e585bd (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test
- Log -----------------------------------------------------------------
commit 9024aecdbf5d4df9996625f0cc8ce8a5ecdd247e
Author: Günther Deschner <gd at samba.org>
Date: Wed Mar 26 19:27:18 2008 +0100
Re-run make idl.
Guenther
commit 5d0aa3bbf8e56f5d2a1ab4d037d7fd146b095f9d
Author: Günther Deschner <gd at samba.org>
Date: Wed Mar 26 19:25:54 2008 +0100
Fix IDL for netr_NETLOGON_INFO_2.
W2k8 generated NT_STATUS_ARRAY_BOUNDS_EXCEEDED errors while validating trusts.
Guenther
commit 42971b71acec9c9fd94011c06d41702dac6b4f87
Author: Günther Deschner <gd at samba.org>
Date: Wed Mar 26 19:18:08 2008 +0100
Fix _netr_LogonControl2(). Return talloced dcname.
Guenther
commit 4abe30fdae511422dccd04d0287d962192beadcb
Author: Günther Deschner <gd at samba.org>
Date: Mon Feb 18 02:40:55 2008 +0100
Add ntsvcs_getdevregprop command to rpcclient.
Guenther
-----------------------------------------------------------------------
Summary of changes:
source/librpc/gen_ndr/ndr_netlogon.c | 47 ++++++++++++++++++++++++---------
source/librpc/gen_ndr/netlogon.h | 2 +-
source/librpc/idl/netlogon.idl | 2 +-
source/rpc_server/srv_netlog_nt.c | 14 +++++++---
source/rpcclient/cmd_ntsvcs.c | 40 ++++++++++++++++++++++++++++
5 files changed, 86 insertions(+), 19 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source/librpc/gen_ndr/ndr_netlogon.c b/source/librpc/gen_ndr/ndr_netlogon.c
index 4c46fb0..a898be6 100644
--- a/source/librpc/gen_ndr/ndr_netlogon.c
+++ b/source/librpc/gen_ndr/ndr_netlogon.c
@@ -5420,33 +5420,49 @@ static enum ndr_err_code ndr_push_netr_NETLOGON_INFO_2(struct ndr_push *ndr, int
NDR_CHECK(ndr_push_align(ndr, 4));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->flags));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->pdc_connection_status));
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->trusted_dc_name, CH_UTF16)));
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->trusted_dc_name, CH_UTF16)));
- NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->trusted_dc_name, ndr_charset_length(r->trusted_dc_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
+ NDR_CHECK(ndr_push_unique_ptr(ndr, r->trusted_dc_name));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->tc_connection_status));
}
if (ndr_flags & NDR_BUFFERS) {
+ if (r->trusted_dc_name) {
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->trusted_dc_name, CH_UTF16)));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->trusted_dc_name, CH_UTF16)));
+ NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->trusted_dc_name, ndr_charset_length(r->trusted_dc_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
+ }
}
return NDR_ERR_SUCCESS;
}
static enum ndr_err_code ndr_pull_netr_NETLOGON_INFO_2(struct ndr_pull *ndr, int ndr_flags, struct netr_NETLOGON_INFO_2 *r)
{
+ uint32_t _ptr_trusted_dc_name;
+ TALLOC_CTX *_mem_save_trusted_dc_name_0;
if (ndr_flags & NDR_SCALARS) {
NDR_CHECK(ndr_pull_align(ndr, 4));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->flags));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->pdc_connection_status));
- NDR_CHECK(ndr_pull_array_size(ndr, &r->trusted_dc_name));
- NDR_CHECK(ndr_pull_array_length(ndr, &r->trusted_dc_name));
- if (ndr_get_array_length(ndr, &r->trusted_dc_name) > ndr_get_array_size(ndr, &r->trusted_dc_name)) {
- return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->trusted_dc_name), ndr_get_array_length(ndr, &r->trusted_dc_name));
+ NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_trusted_dc_name));
+ if (_ptr_trusted_dc_name) {
+ NDR_PULL_ALLOC(ndr, r->trusted_dc_name);
+ } else {
+ r->trusted_dc_name = NULL;
}
- NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->trusted_dc_name), sizeof(uint16_t)));
- NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->trusted_dc_name, ndr_get_array_length(ndr, &r->trusted_dc_name), sizeof(uint16_t), CH_UTF16));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->tc_connection_status));
}
if (ndr_flags & NDR_BUFFERS) {
+ if (r->trusted_dc_name) {
+ _mem_save_trusted_dc_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
+ NDR_PULL_SET_MEM_CTX(ndr, r->trusted_dc_name, 0);
+ NDR_CHECK(ndr_pull_array_size(ndr, &r->trusted_dc_name));
+ NDR_CHECK(ndr_pull_array_length(ndr, &r->trusted_dc_name));
+ if (ndr_get_array_length(ndr, &r->trusted_dc_name) > ndr_get_array_size(ndr, &r->trusted_dc_name)) {
+ return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->trusted_dc_name), ndr_get_array_length(ndr, &r->trusted_dc_name));
+ }
+ NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->trusted_dc_name), sizeof(uint16_t)));
+ NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->trusted_dc_name, ndr_get_array_length(ndr, &r->trusted_dc_name), sizeof(uint16_t), CH_UTF16));
+ NDR_PULL_SET_MEM_CTX(ndr, _mem_save_trusted_dc_name_0, 0);
+ }
}
return NDR_ERR_SUCCESS;
}
@@ -5457,7 +5473,12 @@ _PUBLIC_ void ndr_print_netr_NETLOGON_INFO_2(struct ndr_print *ndr, const char *
ndr->depth++;
ndr_print_uint32(ndr, "flags", r->flags);
ndr_print_uint32(ndr, "pdc_connection_status", r->pdc_connection_status);
- ndr_print_string(ndr, "trusted_dc_name", r->trusted_dc_name);
+ ndr_print_ptr(ndr, "trusted_dc_name", r->trusted_dc_name);
+ ndr->depth++;
+ if (r->trusted_dc_name) {
+ ndr_print_string(ndr, "trusted_dc_name", r->trusted_dc_name);
+ }
+ ndr->depth--;
ndr_print_uint32(ndr, "tc_connection_status", r->tc_connection_status);
ndr->depth--;
}
@@ -5543,7 +5564,7 @@ static enum ndr_err_code ndr_push_netr_CONTROL_QUERY_INFORMATION(struct ndr_push
case 2:
if (r->info2) {
- NDR_CHECK(ndr_push_netr_NETLOGON_INFO_2(ndr, NDR_SCALARS, r->info2));
+ NDR_CHECK(ndr_push_netr_NETLOGON_INFO_2(ndr, NDR_SCALARS|NDR_BUFFERS, r->info2));
}
break;
@@ -5623,7 +5644,7 @@ static enum ndr_err_code ndr_pull_netr_CONTROL_QUERY_INFORMATION(struct ndr_pull
if (r->info2) {
_mem_save_info2_0 = NDR_PULL_GET_MEM_CTX(ndr);
NDR_PULL_SET_MEM_CTX(ndr, r->info2, 0);
- NDR_CHECK(ndr_pull_netr_NETLOGON_INFO_2(ndr, NDR_SCALARS, r->info2));
+ NDR_CHECK(ndr_pull_netr_NETLOGON_INFO_2(ndr, NDR_SCALARS|NDR_BUFFERS, r->info2));
NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info2_0, 0);
}
break;
diff --git a/source/librpc/gen_ndr/netlogon.h b/source/librpc/gen_ndr/netlogon.h
index 058e5e7..434e989 100644
--- a/source/librpc/gen_ndr/netlogon.h
+++ b/source/librpc/gen_ndr/netlogon.h
@@ -580,7 +580,7 @@ struct netr_NETLOGON_INFO_1 {
struct netr_NETLOGON_INFO_2 {
uint32_t flags;
uint32_t pdc_connection_status;
- const char *trusted_dc_name;/* [charset(UTF16)] */
+ const char *trusted_dc_name;/* [unique,charset(UTF16)] */
uint32_t tc_connection_status;
};
diff --git a/source/librpc/idl/netlogon.idl b/source/librpc/idl/netlogon.idl
index 5979701..2a7b14c 100644
--- a/source/librpc/idl/netlogon.idl
+++ b/source/librpc/idl/netlogon.idl
@@ -776,7 +776,7 @@ interface netlogon
typedef struct {
uint32 flags;
uint32 pdc_connection_status;
- [string,charset(UTF16)] uint16 trusted_dc_name[];
+ [string,charset(UTF16)] uint16 *trusted_dc_name;
uint32 tc_connection_status;
} netr_NETLOGON_INFO_2;
diff --git a/source/rpc_server/srv_netlog_nt.c b/source/rpc_server/srv_netlog_nt.c
index 5b26f55..f4967dc 100644
--- a/source/rpc_server/srv_netlog_nt.c
+++ b/source/rpc_server/srv_netlog_nt.c
@@ -136,7 +136,8 @@ WERROR _netr_LogonControl2(pipes_struct *p,
uint32 pdc_connection_status = 0x0;
uint32 logon_attempts = 0x0;
uint32 tc_status;
- fstring dc_name, dc_name2;
+ fstring dc_name2;
+ const char *dc_name = NULL;
struct sockaddr_storage dc_ss;
const char *domain = NULL;
struct netr_NETLOGON_INFO_1 *info1;
@@ -144,7 +145,6 @@ WERROR _netr_LogonControl2(pipes_struct *p,
struct netr_NETLOGON_INFO_3 *info3;
tc_status = W_ERROR_V(WERR_NO_SUCH_DOMAIN);
- fstrcpy( dc_name, "" );
switch (r->in.function_code) {
case NETLOGON_CONTROL_TC_QUERY:
@@ -158,7 +158,10 @@ WERROR _netr_LogonControl2(pipes_struct *p,
break;
}
- fstr_sprintf( dc_name, "\\\\%s", dc_name2 );
+ dc_name = talloc_asprintf(p->mem_ctx, "\\\\%s", dc_name2);
+ if (!dc_name) {
+ return WERR_NOMEM;
+ }
tc_status = W_ERROR_V(WERR_OK);
@@ -175,7 +178,10 @@ WERROR _netr_LogonControl2(pipes_struct *p,
break;
}
- fstr_sprintf( dc_name, "\\\\%s", dc_name2 );
+ dc_name = talloc_asprintf(p->mem_ctx, "\\\\%s", dc_name2);
+ if (!dc_name) {
+ return WERR_NOMEM;
+ }
tc_status = W_ERROR_V(WERR_OK);
diff --git a/source/rpcclient/cmd_ntsvcs.c b/source/rpcclient/cmd_ntsvcs.c
index b7b37e2..7fd9e79 100644
--- a/source/rpcclient/cmd_ntsvcs.c
+++ b/source/rpcclient/cmd_ntsvcs.c
@@ -177,6 +177,45 @@ static WERROR cmd_ntsvcs_get_hw_prof_info(struct rpc_pipe_client *cli,
return werr;
}
+static WERROR cmd_ntsvcs_get_dev_reg_prop(struct rpc_pipe_client *cli,
+ TALLOC_CTX *mem_ctx,
+ int argc,
+ const char **argv)
+{
+ NTSTATUS status;
+ WERROR werr;
+ const char *devicepath = NULL;
+ uint32_t property = DEV_REGPROP_DESC;
+ uint32_t unknown1 = 0;
+ uint8_t buffer;
+ uint32_t buffer_size = 0;
+ uint32_t unknown2 = 0;
+ uint32_t unknown3 = 0;
+
+ if (argc < 2) {
+ printf("usage: %s [devicepath]\n", argv[0]);
+ return WERR_OK;
+ }
+
+ devicepath = argv[1];
+
+ status = rpccli_PNP_GetDeviceRegProp(cli, mem_ctx,
+ devicepath,
+ property,
+ &unknown1,
+ &buffer,
+ &buffer_size,
+ &unknown2,
+ unknown3,
+ &werr);
+ if (!NT_STATUS_IS_OK(status)) {
+ return ntstatus_to_werror(status);
+ }
+
+ return werr;
+}
+
+
struct cmd_set ntsvcs_commands[] = {
{ "NTSVCS" },
@@ -185,5 +224,6 @@ struct cmd_set ntsvcs_commands[] = {
{ "ntsvcs_getdevlistsize", RPC_RTYPE_WERROR, NULL, cmd_ntsvcs_get_device_list_size, PI_NTSVCS, NULL, "Query NTSVCS get device list", "" },
{ "ntsvcs_hwprofflags", RPC_RTYPE_WERROR, NULL, cmd_ntsvcs_hw_prof_flags, PI_NTSVCS, NULL, "Query NTSVCS HW prof flags", "" },
{ "ntsvcs_hwprofinfo", RPC_RTYPE_WERROR, NULL, cmd_ntsvcs_get_hw_prof_info, PI_NTSVCS, NULL, "Query NTSVCS HW prof info", "" },
+ { "ntsvcs_getdevregprop", RPC_RTYPE_WERROR, NULL, cmd_ntsvcs_get_dev_reg_prop, PI_NTSVCS, NULL, "Query NTSVCS device registry property", "" },
{ NULL }
};
--
Samba Shared Repository
More information about the samba-cvs
mailing list