The branch, v3-4-stable has been updated
via 7084334171746f6698c02037b9d71a5466d23f2f (commit)
via 80c20a1cd287edd945dd3d9e5783824a613b3c41 (commit)
via 8a3db2f6d5c3e2909888dc467d1034d688fb0620 (commit)
via be297520dabf9e9877a7375f54b503388df4ebb1 (commit)
via ce3abef6d4fa6441af9ba8a9104d9d44439109d3 (commit)
via 6728bc093237aa45605daec5a2daf42e5f888fda (commit)
via c417aa473fb37022d45b87ae9931b46d67a2bbfd (commit)
via f29ab6bbb7309ce25df6a68d64d443bd54533411 (commit)
via 6950d7b0302a70bc62ff1eeb3cf16e220523d1c7 (commit)
via 1d1786bdb58569ea710740f45aca61119ecfa8ae (commit)
via 49fdd2055ca6f68fd32f69e5dd3ee3ce047cc2cb (commit)
from 5c89bbd6b53d4a3ab7b84f906ecc7ad8a95b3183 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-4-stable
- Log -----------------------------------------------------------------
commit 7084334171746f6698c02037b9d71a5466d23f2f
Author: Karolin Seeger <[email protected]>
Date: Wed Apr 29 12:45:39 2009 +0200
WHATSNEW: Update WHATSNEW.
Karolin
(cherry picked from commit 245b859dfb0e1de4c453cf9de97e6d50b163daa4)
commit 80c20a1cd287edd945dd3d9e5783824a613b3c41
Author: Karolin Seeger <[email protected]>
Date: Wed Apr 29 12:38:28 2009 +0200
s3/docs: Remove documentation of "use kerberos keytab".
This parameter has been removed with d96248a9b4655.
Karolin
(cherry picked from commit b6eab68c20f0914cb946f05ebae2faba67f32806)
(cherry picked from commit 644d45ef4878e396fe62918e35e7103465eeb971)
commit 8a3db2f6d5c3e2909888dc467d1034d688fb0620
Author: Günther Deschner <[email protected]>
Date: Tue Apr 14 00:01:03 2009 +0200
s3-spoolss: add support for _spoolss_EnumPrinterDrivers() level 6.
Guenther
(cherry picked from commit 6900d61d369961e0c11e590ccdc102169f21cef3)
(cherry picked from commit 41dae8256cdddd9557ae7a00b1282a0eb05d4f36)
commit be297520dabf9e9877a7375f54b503388df4ebb1
Author: Günther Deschner <[email protected]>
Date: Tue Apr 14 00:00:37 2009 +0200
s3-spoolss: add support for _spoolss_EnumPrinterDrivers() level 5.
Guenther
(cherry picked from commit 5e563ee508d0b3cc87d72ad52d777946ee0537b1)
(cherry picked from commit c3f1cbd26792928970b6a60d82746719fea688d7)
commit ce3abef6d4fa6441af9ba8a9104d9d44439109d3
Author: Günther Deschner <[email protected]>
Date: Mon Apr 13 23:58:59 2009 +0200
s3-spoolss: add support for _spoolss_EnumPrinterDrivers() level 4.
Guenther
(cherry picked from commit d76837f6da2cf735d2b18c97f3b46ae2f04b750d)
(cherry picked from commit d845a971ee32c8e9adb4717abe546355eb7153c9)
commit 6728bc093237aa45605daec5a2daf42e5f888fda
Author: Günther Deschner <[email protected]>
Date: Wed Apr 29 11:46:43 2009 +0200
s3-docs: document "net eventlog" in net manpage.
Guenther
(cherry picked from commit 664ff081cadd29a1e750b349ecb23e8402d977cb)
(cherry picked from commit 65d4acdb1b7f9cd78d38c23a00267688dc156da6)
commit c417aa473fb37022d45b87ae9931b46d67a2bbfd
Author: Günther Deschner <[email protected]>
Date: Wed Apr 29 11:46:12 2009 +0200
s3-net: make "net eventlog" help output a little more appropriate.
Guenther
(cherry picked from commit e89cc775e660183e7126bcfa8fb37496074cf5a1)
(cherry picked from commit e26efbd2c8a49012383032fef07cddec76561aa3)
commit f29ab6bbb7309ce25df6a68d64d443bd54533411
Author: Michael Adam <[email protected]>
Date: Wed Apr 29 01:49:53 2009 +0200
s3:smbd/service: switch load_registry_service/shares to use loadparm
routines
instead of reading the registry directly with tdb and activating the
configure options by hand.
This eliminates the need for repeating checks done in loadparm.
For instance it disables registry shares without path in the server
as is the case with text based shares.
Michael
(cherry picked from commit 077bcc11257697b243916fbb02cd72b3a122b9ba)
(cherry picked from commit 502bfe9352d36ee909d7210a9d0ec0b6c7db5149)
commit 6950d7b0302a70bc62ff1eeb3cf16e220523d1c7
Author: Michael Adam <[email protected]>
Date: Wed Apr 29 01:31:03 2009 +0200
s3:loadparm: refactor process_registry_service out or
process_registry_globals
Michael
(cherry picked from commit fb3b6576127ce837ac711e87c293d1f4cf97473c)
(cherry picked from commit 480af4e0ead10241aa94f4095c7fa580240fec00)
commit 1d1786bdb58569ea710740f45aca61119ecfa8ae
Author: Günther Deschner <[email protected]>
Date: Wed Apr 29 01:55:09 2009 +0200
samr: fix samr_ConnectVersion enum which is 32bit not 16bit.
Volker, please check.
Rafal, haven't we seen this in your tests at sambaxp as well ?
Guenther
(cherry picked from commit 67ca76c288eb095ae59e98927317d51c96c89551)
(cherry picked from commit 59e75824e81ffb6d05e624a5344123c585998904)
commit 49fdd2055ca6f68fd32f69e5dd3ee3ce047cc2cb
Author: Günther Deschner <[email protected]>
Date: Wed Apr 29 01:49:26 2009 +0200
svcctl: Fix IDL for svcctl_StartServiceW().
Guenther
(cherry picked from commit a23fb4663df11b237e94683510d282c286bbeed6)
(cherry picked from commit d49e69d49a41d193d6e1dd342c653d9a8bc3b140)
-----------------------------------------------------------------------
Summary of changes:
WHATSNEW.txt | 56 ++++++-
docs-xml/manpages-3/net.8.xml | 59 ++++++
docs-xml/smbdotconf/security/usekerberoskeytab.xml | 23 ---
librpc/gen_ndr/cli_svcctl.c | 4 +-
librpc/gen_ndr/cli_svcctl.h | 4 +-
librpc/gen_ndr/ndr_samr.c | 6 +-
librpc/gen_ndr/ndr_svcctl.c | 106 ++++++++++-
librpc/gen_ndr/ndr_svcctl.h | 1 +
librpc/gen_ndr/svcctl.h | 10 +-
librpc/idl/samr.idl | 2 +-
librpc/idl/svcctl.idl | 12 +-
source3/include/proto.h | 2 +
source3/param/loadparm.c | 38 +++--
source3/rpc_server/srv_spoolss_nt.c | 187 +++++++++++++++++++-
source3/smbd/service.c | 73 +--------
source3/utils/net.c | 2 +-
16 files changed, 451 insertions(+), 134 deletions(-)
delete mode 100644 docs-xml/smbdotconf/security/usekerberoskeytab.xml
Changeset truncated at 500 lines:
diff --git a/WHATSNEW.txt b/WHATSNEW.txt
index 2cd22c1..b13fef7 100644
--- a/WHATSNEW.txt
+++ b/WHATSNEW.txt
@@ -1,6 +1,6 @@
=================================
Release Notes for Samba 3.4.0pre1
-
+ April 30, 2009
=================================
@@ -18,12 +18,18 @@ o Samba4 and Samba3 sources are included in the tarball
Authentication Changes:
o Changed the way smbd handles untrusted domain names given during user
- authentication
+ authentication.
+
+Printing Changes:
+o Support for Windows Vista Printer Change Notification has been added.
+o Various fixes for Samba spoolss print server.
Internal changes:
-o The ntsvcs, svcctl, eventlog and spoolss subsystems have been converted
- to IDL.
+o The remaining hand-marshalled DCE/RPC services (ntsvcs, svcctl, eventlog
+ and spoolss) were replaced by autogenerated code based on PIDL.
o Samba3 and Samba4 do now share a common tevent library.
+o The code has been cleaned up and the major basic interfaces are shared with
+ Samba4 now.
General Changes
@@ -63,10 +69,21 @@ parameter "map untrusted to domain" can be enabled to
revert to the legacy
behavior.
+Printing Changes
+================
+
+Support for Windows Vista Printer Change Notification has been added to Samba.
+
+The spoolss was replaced by autogenerated code based on PIDL. That fixes
+several printing issues on Samba print servers and will stabilize the printing
+functionality generally.
+
+
Internal Changes
================
-The ntsvcs, svcctl, eventlog and spoolss subsystems have been converted to IDL.
+The remaining hand-marshalled DCE/RPC services (ntsvcs, svcctl, eventlog and
+spoolss) were replaced by autogenerated code based on PIDL.
So Günther Deschner finally corrected one of the biggest mistakes in the
development of Samba: Hand-marshalled RPC stubs.
@@ -74,6 +91,35 @@ Thanks a lot! :-)
Samba3 and Samba4 do now share a common tevent library for fd and timer events.
+The code has been cleaned up and Samba3 and Samba4 do share the major basic
+interfaces now. That is why the libraries were moved to the toplevel directory.
+That is one of the first steps to share code and minimize the gap between
+these two versions.
+
+
+######################################################################
+Changes
+#######
+
+smb.conf changes
+----------------
+
+ Parameter Name Description Default
+ -------------- ----------- -------
+ access based share enum New No
+ dedicated keytab file New ""
+ kerberos method New default
+ map untrusted to domain New No
+ max open files Changed Default auto detected
+ perfcount module New ""
+ use kerberos keytab Removed
+
+
+New [sub]commands
+-----------------
+
+ net eventlog
+
######################################################################
Reporting bugs & Development Discussion
diff --git a/docs-xml/manpages-3/net.8.xml b/docs-xml/manpages-3/net.8.xml
index 826b916..477c3d8 100644
--- a/docs-xml/manpages-3/net.8.xml
+++ b/docs-xml/manpages-3/net.8.xml
@@ -1582,6 +1582,65 @@ Delete the list of includes from the provided section
(global or share).
</refsect2>
<refsect2>
+<title>EVENTLOG</title>
+
+<para>Starting with version 3.4.0 net can read, dump, import and export native
+win32 eventlog files (usually *.evt). evt files are used by the native Windows
eventviewer tools.
+</para>
+
+<para>
+The import and export of evt files can only succeed when <parameter>eventlog
list</parameter> is used in
+<emphasis>smb.conf</emphasis> file.
+See the <citerefentry><refentrytitle>smb.conf</refentrytitle>
<manvolnum>5</manvolnum></citerefentry> manpage for details.
+</para>
+
+<para>The eventlog commands are:
+<simplelist>
+<member>net eventlog dump - Dump a eventlog *.evt file on the screen.</member>
+<member>net eventlog import - Import a eventlog *.evt into the samba internal
+tdb based representation of eventlogs.</member>
+<member>net eventlog export - Export the samba internal tdb based
representation
+of eventlogs into an eventlog *.evt file.</member>
+</simplelist>
+</para>
+
+<refsect3>
+<title>EVENTLOG DUMP</title>
+
+<para>
+Prints a eventlog *.evt file to standard output.
+</para>
+</refsect3>
+
+<refsect3>
+<title>EVENTLOG IMPORT <replaceable>filename</replaceable>
<replaceable>eventlog</replaceable></title>
+
+<para>
+Imports a eventlog *.evt file defined by <replaceable>filename</replaceable>
into the
+samba internal tdb representation of eventlog defined by
<replaceable>eventlog</replaceable>.
+<replaceable>eventlog</replaceable> needs to part of the <parameter>eventlog
list</parameter>
+defined in smb.conf.
+See the <citerefentry><refentrytitle>smb.conf</refentrytitle>
<manvolnum>5</manvolnum></citerefentry> manpage for details.
+</para>
+
+</refsect3>
+
+<refsect3>
+<title>EVENTLOG EXPORT <replaceable>filename</replaceable>
<replaceable>eventlog</replaceable></title>
+
+<para>
+Exports the samba internal tdb representation of eventlog defined by
<replaceable>eventlog</replaceable>
+to a eventlog *.evt file defined by <replaceable>filename</replaceable>.
+<replaceable>eventlog</replaceable> needs to part of the <parameter>eventlog
list</parameter>
+defined in smb.conf.
+See the <citerefentry><refentrytitle>smb.conf</refentrytitle>
<manvolnum>5</manvolnum></citerefentry> manpage for details.
+</para>
+
+</refsect3>
+
+</refsect2>
+
+<refsect2>
<title>HELP [COMMAND]</title>
<para>Gives usage information for the specified command.</para>
diff --git a/docs-xml/smbdotconf/security/usekerberoskeytab.xml
b/docs-xml/smbdotconf/security/usekerberoskeytab.xml
deleted file mode 100644
index ad6cc88..0000000
--- a/docs-xml/smbdotconf/security/usekerberoskeytab.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<samba:parameter name="use kerberos keytab"
- context="G"
- type="boolean"
- xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
-<description>
- <para>
- Specifies whether Samba should attempt to maintain service principals
in the systems
- keytab file for <constant>host/FQDN</constant> and
<constant>cifs/FQDN</constant>.
- </para>
-
- <para>
- When you are using the heimdal Kerberos libraries, you must also
specify the following in
- <filename>/etc/krb5.conf</filename>:
-<programlisting>
-[libdefaults]
-default_keytab_name = FILE:/etc/krb5.keytab
-</programlisting>
- </para>
-
-</description>
-
-<value type="default">False</value>
-</samba:parameter>
diff --git a/librpc/gen_ndr/cli_svcctl.c b/librpc/gen_ndr/cli_svcctl.c
index f6cedfb..a95a4e7 100644
--- a/librpc/gen_ndr/cli_svcctl.c
+++ b/librpc/gen_ndr/cli_svcctl.c
@@ -956,8 +956,8 @@ NTSTATUS rpccli_svcctl_QueryServiceLockStatusW(struct
rpc_pipe_client *cli,
NTSTATUS rpccli_svcctl_StartServiceW(struct rpc_pipe_client *cli,
TALLOC_CTX *mem_ctx,
struct policy_handle *handle /* [in] [ref]
*/,
- uint32_t NumArgs /* [in] */,
- const char *Arguments /* [in]
[unique,charset(UTF16)] */,
+ uint32_t NumArgs /* [in]
[range(0,SC_MAX_ARGUMENTS)] */,
+ struct svcctl_ArgumentString *Arguments /*
[in] [unique,size_is(NumArgs)] */,
WERROR *werror)
{
struct svcctl_StartServiceW r;
diff --git a/librpc/gen_ndr/cli_svcctl.h b/librpc/gen_ndr/cli_svcctl.h
index c656eba..fcfb219 100644
--- a/librpc/gen_ndr/cli_svcctl.h
+++ b/librpc/gen_ndr/cli_svcctl.h
@@ -141,8 +141,8 @@ NTSTATUS rpccli_svcctl_QueryServiceLockStatusW(struct
rpc_pipe_client *cli,
NTSTATUS rpccli_svcctl_StartServiceW(struct rpc_pipe_client *cli,
TALLOC_CTX *mem_ctx,
struct policy_handle *handle /* [in] [ref]
*/,
- uint32_t NumArgs /* [in] */,
- const char *Arguments /* [in]
[unique,charset(UTF16)] */,
+ uint32_t NumArgs /* [in]
[range(0,SC_MAX_ARGUMENTS)] */,
+ struct svcctl_ArgumentString *Arguments /*
[in] [unique,size_is(NumArgs)] */,
WERROR *werror);
NTSTATUS rpccli_svcctl_GetServiceDisplayNameW(struct rpc_pipe_client *cli,
TALLOC_CTX *mem_ctx,
diff --git a/librpc/gen_ndr/ndr_samr.c b/librpc/gen_ndr/ndr_samr.c
index d2d345a..ab76f5a 100644
--- a/librpc/gen_ndr/ndr_samr.c
+++ b/librpc/gen_ndr/ndr_samr.c
@@ -4508,14 +4508,14 @@ _PUBLIC_ void ndr_print_samr_PwInfo(struct ndr_print
*ndr, const char *name, con
static enum ndr_err_code ndr_push_samr_ConnectVersion(struct ndr_push *ndr,
int ndr_flags, enum samr_ConnectVersion r)
{
- NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
return NDR_ERR_SUCCESS;
}
static enum ndr_err_code ndr_pull_samr_ConnectVersion(struct ndr_pull *ndr,
int ndr_flags, enum samr_ConnectVersion *r)
{
- uint16_t v;
- NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
+ uint32_t v;
+ NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
*r = v;
return NDR_ERR_SUCCESS;
}
diff --git a/librpc/gen_ndr/ndr_svcctl.c b/librpc/gen_ndr/ndr_svcctl.c
index ee828ee..1770e1f 100644
--- a/librpc/gen_ndr/ndr_svcctl.c
+++ b/librpc/gen_ndr/ndr_svcctl.c
@@ -907,6 +907,66 @@ _PUBLIC_ size_t ndr_size_QUERY_SERVICE_CONFIG(const struct
QUERY_SERVICE_CONFIG
return ndr_size_struct(r, flags,
(ndr_push_flags_fn_t)ndr_push_QUERY_SERVICE_CONFIG, ic);
}
+static enum ndr_err_code ndr_push_svcctl_ArgumentString(struct ndr_push *ndr,
int ndr_flags, const struct svcctl_ArgumentString *r)
+{
+ if (ndr_flags & NDR_SCALARS) {
+ NDR_CHECK(ndr_push_align(ndr, 4));
+ NDR_CHECK(ndr_push_unique_ptr(ndr, r->string));
+ }
+ if (ndr_flags & NDR_BUFFERS) {
+ if (r->string) {
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS,
ndr_charset_length(r->string, CH_UTF16)));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS,
ndr_charset_length(r->string, CH_UTF16)));
+ NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->string,
ndr_charset_length(r->string, CH_UTF16), sizeof(uint16_t), CH_UTF16));
+ }
+ }
+ return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_svcctl_ArgumentString(struct ndr_pull *ndr,
int ndr_flags, struct svcctl_ArgumentString *r)
+{
+ uint32_t _ptr_string;
+ TALLOC_CTX *_mem_save_string_0;
+ if (ndr_flags & NDR_SCALARS) {
+ NDR_CHECK(ndr_pull_align(ndr, 4));
+ NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_string));
+ if (_ptr_string) {
+ NDR_PULL_ALLOC(ndr, r->string);
+ } else {
+ r->string = NULL;
+ }
+ }
+ if (ndr_flags & NDR_BUFFERS) {
+ if (r->string) {
+ _mem_save_string_0 = NDR_PULL_GET_MEM_CTX(ndr);
+ NDR_PULL_SET_MEM_CTX(ndr, r->string, 0);
+ NDR_CHECK(ndr_pull_array_size(ndr, &r->string));
+ NDR_CHECK(ndr_pull_array_length(ndr, &r->string));
+ if (ndr_get_array_length(ndr, &r->string) >
ndr_get_array_size(ndr, &r->string)) {
+ return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE,
"Bad array size %u should exceed array length %u", ndr_get_array_size(ndr,
&r->string), ndr_get_array_length(ndr, &r->string));
+ }
+ NDR_CHECK(ndr_check_string_terminator(ndr,
ndr_get_array_length(ndr, &r->string), sizeof(uint16_t)));
+ NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS,
&r->string, ndr_get_array_length(ndr, &r->string), sizeof(uint16_t), CH_UTF16));
+ NDR_PULL_SET_MEM_CTX(ndr, _mem_save_string_0, 0);
+ }
+ }
+ return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_svcctl_ArgumentString(struct ndr_print *ndr, const
char *name, const struct svcctl_ArgumentString *r)
+{
+ ndr_print_struct(ndr, name, "svcctl_ArgumentString");
+ ndr->depth++;
+ ndr_print_ptr(ndr, "string", r->string);
+ ndr->depth++;
+ if (r->string) {
+ ndr_print_string(ndr, "string", r->string);
+ }
+ ndr->depth--;
+ ndr->depth--;
+}
+
static enum ndr_err_code ndr_push_svcctl_ConfigLevel(struct ndr_push *ndr, int
ndr_flags, enum svcctl_ConfigLevel r)
{
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
@@ -3415,6 +3475,7 @@ _PUBLIC_ void
ndr_print_svcctl_QueryServiceLockStatusW(struct ndr_print *ndr, co
static enum ndr_err_code ndr_push_svcctl_StartServiceW(struct ndr_push *ndr,
int flags, const struct svcctl_StartServiceW *r)
{
+ uint32_t cntr_Arguments_1;
if (flags & NDR_IN) {
if (r->in.handle == NULL) {
return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER,
"NULL [ref] pointer");
@@ -3423,10 +3484,13 @@ static enum ndr_err_code
ndr_push_svcctl_StartServiceW(struct ndr_push *ndr, int
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.NumArgs));
NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.Arguments));
if (r->in.Arguments) {
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS,
ndr_charset_length(r->in.Arguments, CH_UTF16)));
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS,
ndr_charset_length(r->in.Arguments, CH_UTF16)));
- NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS,
r->in.Arguments, ndr_charset_length(r->in.Arguments, CH_UTF16),
sizeof(uint16_t), CH_UTF16));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS,
r->in.NumArgs));
+ for (cntr_Arguments_1 = 0; cntr_Arguments_1 <
r->in.NumArgs; cntr_Arguments_1++) {
+ NDR_CHECK(ndr_push_svcctl_ArgumentString(ndr,
NDR_SCALARS, &r->in.Arguments[cntr_Arguments_1]));
+ }
+ for (cntr_Arguments_1 = 0; cntr_Arguments_1 <
r->in.NumArgs; cntr_Arguments_1++) {
+ NDR_CHECK(ndr_push_svcctl_ArgumentString(ndr,
NDR_BUFFERS, &r->in.Arguments[cntr_Arguments_1]));
+ }
}
}
if (flags & NDR_OUT) {
@@ -3438,8 +3502,10 @@ static enum ndr_err_code
ndr_push_svcctl_StartServiceW(struct ndr_push *ndr, int
static enum ndr_err_code ndr_pull_svcctl_StartServiceW(struct ndr_pull *ndr,
int flags, struct svcctl_StartServiceW *r)
{
uint32_t _ptr_Arguments;
+ uint32_t cntr_Arguments_1;
TALLOC_CTX *_mem_save_handle_0;
TALLOC_CTX *_mem_save_Arguments_0;
+ TALLOC_CTX *_mem_save_Arguments_1;
if (flags & NDR_IN) {
if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
NDR_PULL_ALLOC(ndr, r->in.handle);
@@ -3449,6 +3515,9 @@ static enum ndr_err_code
ndr_pull_svcctl_StartServiceW(struct ndr_pull *ndr, int
NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS,
r->in.handle));
NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0,
LIBNDR_FLAG_REF_ALLOC);
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.NumArgs));
+ if (r->in.NumArgs > SC_MAX_ARGUMENTS) {
+ return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of
range");
+ }
NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_Arguments));
if (_ptr_Arguments) {
NDR_PULL_ALLOC(ndr, r->in.Arguments);
@@ -3459,14 +3528,21 @@ static enum ndr_err_code
ndr_pull_svcctl_StartServiceW(struct ndr_pull *ndr, int
_mem_save_Arguments_0 = NDR_PULL_GET_MEM_CTX(ndr);
NDR_PULL_SET_MEM_CTX(ndr, r->in.Arguments, 0);
NDR_CHECK(ndr_pull_array_size(ndr, &r->in.Arguments));
- NDR_CHECK(ndr_pull_array_length(ndr, &r->in.Arguments));
- if (ndr_get_array_length(ndr, &r->in.Arguments) >
ndr_get_array_size(ndr, &r->in.Arguments)) {
- return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE,
"Bad array size %u should exceed array length %u", ndr_get_array_size(ndr,
&r->in.Arguments), ndr_get_array_length(ndr, &r->in.Arguments));
+ NDR_PULL_ALLOC_N(ndr, r->in.Arguments,
ndr_get_array_size(ndr, &r->in.Arguments));
+ _mem_save_Arguments_1 = NDR_PULL_GET_MEM_CTX(ndr);
+ NDR_PULL_SET_MEM_CTX(ndr, r->in.Arguments, 0);
+ for (cntr_Arguments_1 = 0; cntr_Arguments_1 <
r->in.NumArgs; cntr_Arguments_1++) {
+ NDR_CHECK(ndr_pull_svcctl_ArgumentString(ndr,
NDR_SCALARS, &r->in.Arguments[cntr_Arguments_1]));
}
- NDR_CHECK(ndr_check_string_terminator(ndr,
ndr_get_array_length(ndr, &r->in.Arguments), sizeof(uint16_t)));
- NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS,
&r->in.Arguments, ndr_get_array_length(ndr, &r->in.Arguments),
sizeof(uint16_t), CH_UTF16));
+ for (cntr_Arguments_1 = 0; cntr_Arguments_1 <
r->in.NumArgs; cntr_Arguments_1++) {
+ NDR_CHECK(ndr_pull_svcctl_ArgumentString(ndr,
NDR_BUFFERS, &r->in.Arguments[cntr_Arguments_1]));
+ }
+ NDR_PULL_SET_MEM_CTX(ndr, _mem_save_Arguments_1, 0);
NDR_PULL_SET_MEM_CTX(ndr, _mem_save_Arguments_0, 0);
}
+ if (r->in.Arguments) {
+ NDR_CHECK(ndr_check_array_size(ndr,
(void*)&r->in.Arguments, r->in.NumArgs));
+ }
}
if (flags & NDR_OUT) {
NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
@@ -3476,6 +3552,7 @@ static enum ndr_err_code
ndr_pull_svcctl_StartServiceW(struct ndr_pull *ndr, int
_PUBLIC_ void ndr_print_svcctl_StartServiceW(struct ndr_print *ndr, const char
*name, int flags, const struct svcctl_StartServiceW *r)
{
+ uint32_t cntr_Arguments_1;
ndr_print_struct(ndr, name, "svcctl_StartServiceW");
ndr->depth++;
if (flags & NDR_SET_VALUES) {
@@ -3492,7 +3569,16 @@ _PUBLIC_ void ndr_print_svcctl_StartServiceW(struct
ndr_print *ndr, const char *
ndr_print_ptr(ndr, "Arguments", r->in.Arguments);
ndr->depth++;
if (r->in.Arguments) {
- ndr_print_string(ndr, "Arguments", r->in.Arguments);
+ ndr->print(ndr, "%s: ARRAY(%d)", "Arguments",
(int)r->in.NumArgs);
+ ndr->depth++;
+ for
(cntr_Arguments_1=0;cntr_Arguments_1<r->in.NumArgs;cntr_Arguments_1++) {
+ char *idx_1=NULL;
+ if (asprintf(&idx_1, "[%d]", cntr_Arguments_1)
!= -1) {
+ ndr_print_svcctl_ArgumentString(ndr,
"Arguments", &r->in.Arguments[cntr_Arguments_1]);
+ free(idx_1);
+ }
+ }
+ ndr->depth--;
}
ndr->depth--;
ndr->depth--;
diff --git a/librpc/gen_ndr/ndr_svcctl.h b/librpc/gen_ndr/ndr_svcctl.h
index 902565d..6e765d8 100644
--- a/librpc/gen_ndr/ndr_svcctl.h
+++ b/librpc/gen_ndr/ndr_svcctl.h
@@ -129,6 +129,7 @@ enum ndr_err_code ndr_push_QUERY_SERVICE_CONFIG(struct
ndr_push *ndr, int ndr_fl
enum ndr_err_code ndr_pull_QUERY_SERVICE_CONFIG(struct ndr_pull *ndr, int
ndr_flags, struct QUERY_SERVICE_CONFIG *r);
void ndr_print_QUERY_SERVICE_CONFIG(struct ndr_print *ndr, const char *name,
const struct QUERY_SERVICE_CONFIG *r);
size_t ndr_size_QUERY_SERVICE_CONFIG(const struct QUERY_SERVICE_CONFIG *r,
struct smb_iconv_convenience *ic, int flags);
+void ndr_print_svcctl_ArgumentString(struct ndr_print *ndr, const char *name,
const struct svcctl_ArgumentString *r);
void ndr_print_svcctl_ConfigLevel(struct ndr_print *ndr, const char *name,
enum svcctl_ConfigLevel r);
enum ndr_err_code ndr_push_SERVICE_DESCRIPTION(struct ndr_push *ndr, int
ndr_flags, const struct SERVICE_DESCRIPTION *r);
enum ndr_err_code ndr_pull_SERVICE_DESCRIPTION(struct ndr_pull *ndr, int
ndr_flags, struct SERVICE_DESCRIPTION *r);
diff --git a/librpc/gen_ndr/svcctl.h b/librpc/gen_ndr/svcctl.h
index c0daab4..eb48fa0 100644
--- a/librpc/gen_ndr/svcctl.h
+++ b/librpc/gen_ndr/svcctl.h
@@ -28,6 +28,8 @@
#define SERVICE_EXECUTE_ACCESS (
(SERVICE_READ_ACCESS|SC_RIGHT_SVC_START|SC_RIGHT_SVC_STOP|SC_RIGHT_SVC_PAUSE_CONTINUE)
)
#define SERVICE_WRITE_ACCESS (
(SEC_STD_REQUIRED|SERVICE_READ_ACCESS|SERVICE_EXECUTE_ACCESS|SC_RIGHT_SVC_CHANGE_CONFIG)
)
#define SERVICE_ALL_ACCESS ( SERVICE_WRITE_ACCESS )
+#define SC_MAX_ARGUMENT_LENGTH ( 1024 )
+#define SC_MAX_ARGUMENTS ( 1024 )
struct SERVICE_LOCK_STATUS {
uint32_t is_locked;
const char *lock_owner;/* [unique,charset(UTF16)] */
@@ -226,6 +228,10 @@ struct QUERY_SERVICE_CONFIG {
const char *displayname;/* [unique,range(0,8192),charset(UTF16)] */
}/* [gensize,public] */;
+struct svcctl_ArgumentString {
+ const char *string;/*
[unique,range(0,SC_MAX_ARGUMENT_LENGTH),charset(UTF16)] */
+};
+
enum svcctl_ConfigLevel
#ifndef USE_UINT_ENUMS
{
@@ -575,8 +581,8 @@ struct svcctl_QueryServiceLockStatusW {
struct svcctl_StartServiceW {
struct {
struct policy_handle *handle;/* [ref] */
- uint32_t NumArgs;
- const char *Arguments;/* [unique,charset(UTF16)] */
+ uint32_t NumArgs;/* [range(0,SC_MAX_ARGUMENTS)] */
+ struct svcctl_ArgumentString *Arguments;/*
[unique,size_is(NumArgs)] */
} in;
struct {
diff --git a/librpc/idl/samr.idl b/librpc/idl/samr.idl
index bcd8ca0..fcfa8fa 100644
--- a/librpc/idl/samr.idl
+++ b/librpc/idl/samr.idl
@@ -1387,7 +1387,7 @@ import "misc.idl", "lsa.idl", "security.idl";
/************************/
/* Function 0x3e */
- typedef enum {
+ typedef [v1_enum] enum {
SAMR_CONNECT_PRE_W2K = 1,
SAMR_CONNECT_W2K = 2,
SAMR_CONNECT_AFTER_W2K = 3
diff --git a/librpc/idl/svcctl.idl b/librpc/idl/svcctl.idl
index a5685e8..19866d2 100644
--- a/librpc/idl/svcctl.idl
+++ b/librpc/idl/svcctl.idl
@@ -404,10 +404,18 @@ import "misc.idl", "security.idl";
/*****************/
/* Function 0x13 */
+
+ const int SC_MAX_ARGUMENT_LENGTH = 1024;
+ const int SC_MAX_ARGUMENTS = 1024;
+
+ typedef struct {
+ [string,charset(UTF16),range(0,SC_MAX_ARGUMENT_LENGTH)] uint16
*string;
+ } svcctl_ArgumentString;
+
WERROR svcctl_StartServiceW(
[in,ref] policy_handle *handle,
- [in] uint32 NumArgs,
- [in,unique/*FIXME:,length_is(NumArgs)*/]
[string,charset(UTF16)] uint16 *Arguments
+ [in,range(0,SC_MAX_ARGUMENTS)] uint32 NumArgs,
+ [in,unique,size_is(NumArgs)] svcctl_ArgumentString *Arguments
);
/*****************/
--
Samba Shared Repository