svn commit: samba r8054 - in branches/SAMBA_4_0/source: librpc/idl ntptr/simple_ldb torture/rpc

metze at samba.org metze at samba.org
Fri Jul 1 12:19:25 GMT 2005


Author: metze
Date: 2005-07-01 12:19:24 +0000 (Fri, 01 Jul 2005)
New Revision: 8054

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=8054

Log:
add OSVersion, OSVersionEx, DNSMachineName PrintServerData

metze
Modified:
   branches/SAMBA_4_0/source/librpc/idl/spoolss.idl
   branches/SAMBA_4_0/source/ntptr/simple_ldb/ntptr_simple_ldb.c
   branches/SAMBA_4_0/source/torture/rpc/spoolss.c


Changeset:
Modified: branches/SAMBA_4_0/source/librpc/idl/spoolss.idl
===================================================================
--- branches/SAMBA_4_0/source/librpc/idl/spoolss.idl	2005-07-01 12:18:39 UTC (rev 8053)
+++ branches/SAMBA_4_0/source/librpc/idl/spoolss.idl	2005-07-01 12:19:24 UTC (rev 8054)
@@ -724,15 +724,37 @@
 	/* Function: 0x1a */
 	const string SPOOLSS_ARCHITECTURE_NT_X86		= "Windows NT x86";
 
+	typedef [public,gensize] struct {
+		[value(ndr_size_spoolss_OSVersion(r,ndr->flags))] uint32 _ndr_size;
+		uint32 major;
+		uint32 minor;
+		uint32 build;
+		[value(2)] uint32 unknown;
+		[subcontext(0),subcontext_size(256)] nstring extra_string;
+	} spoolss_OSVersion;
+
+	typedef [public,gensize] struct {
+		[value(ndr_size_spoolss_OSVersionEx(r,ndr->flags))] uint32 _ndr_size;
+		uint32 major;
+		uint32 minor;
+		uint32 build;
+		[value(2)] uint32 unknown1;
+		[subcontext(0),subcontext_size(256)] nstring extra_string;
+		uint32 unknown2;/* service pack number? I saw 0 from w2k3 and 1 from winxp sp1*/
+		uint32 unknown3;/* hmm? w2k3: 131346(0x20112) winxp sp1: 503382272 0x1E010100 */
+	} spoolss_OSVersionEx;
+
 	typedef [v1_enum] enum {
 		SPOOLSS_PRINTER_DATA_TYPE_NULL = 0,
 		SPOOLSS_PRINTER_DATA_TYPE_STRING = 1,
+		SPOOLSS_PRINTER_DATA_TYPE_BINARY = 3,
 		SPOOLSS_PRINTER_DATA_TYPE_UINT32 = 4
 	} spoolss_PrinterDataType;
 
 	typedef [nodiscriminant,gensize] union {
 		[case(SPOOLSS_PRINTER_DATA_TYPE_NULL)];
 		[case(SPOOLSS_PRINTER_DATA_TYPE_STRING)] nstring string;
+		[case(SPOOLSS_PRINTER_DATA_TYPE_BINARY),flag(NDR_REMAINING)] DATA_BLOB binary;
 		[case(SPOOLSS_PRINTER_DATA_TYPE_UINT32)] uint32 value;
 		[default,flag(NDR_REMAINING)] DATA_BLOB data;
 	} spoolss_PrinterData;

Modified: branches/SAMBA_4_0/source/ntptr/simple_ldb/ntptr_simple_ldb.c
===================================================================
--- branches/SAMBA_4_0/source/ntptr/simple_ldb/ntptr_simple_ldb.c	2005-07-01 12:18:39 UTC (rev 8053)
+++ branches/SAMBA_4_0/source/ntptr/simple_ldb/ntptr_simple_ldb.c	2005-07-01 12:19:24 UTC (rev 8054)
@@ -160,6 +160,53 @@
 		r->out.type		= SPOOLSS_PRINTER_DATA_TYPE_UINT32;
 		r->out.data.value	= 1;
 		return WERR_OK;
+	} else if (strcmp("OSVersion", r->in.value_name) == 0) {
+		DATA_BLOB blob;
+		NTSTATUS status;
+		struct spoolss_OSVersion os;
+
+		os.major		= dcesrv_common_get_version_major(mem_ctx, NULL);
+		os.minor		= dcesrv_common_get_version_minor(mem_ctx, NULL);
+		os.build		= dcesrv_common_get_version_build(mem_ctx, NULL);
+		os.extra_string		= "";
+
+		status = ndr_push_struct_blob(&blob, mem_ctx, &os, (ndr_push_flags_fn_t)ndr_push_spoolss_OSVersion);
+		if (!NT_STATUS_IS_OK(status)) {
+			return WERR_GENERAL_FAILURE;
+		}
+
+		r->out.type		= SPOOLSS_PRINTER_DATA_TYPE_BINARY;
+		r->out.data.binary	= blob;
+		return WERR_OK;
+	} else if (strcmp("OSVersionEx", r->in.value_name) == 0) {
+		DATA_BLOB blob;
+		NTSTATUS status;
+		struct spoolss_OSVersionEx os_ex;
+
+		os_ex.major		= dcesrv_common_get_version_major(mem_ctx, NULL);
+		os_ex.minor		= dcesrv_common_get_version_minor(mem_ctx, NULL);
+		os_ex.build		= dcesrv_common_get_version_build(mem_ctx, NULL);
+		os_ex.extra_string		= "";
+		os_ex.unknown2		= 0;
+		os_ex.unknown3		= 0;
+
+		status = ndr_push_struct_blob(&blob, mem_ctx, &os_ex, (ndr_push_flags_fn_t)ndr_push_spoolss_OSVersionEx);
+		if (!NT_STATUS_IS_OK(status)) {
+			return WERR_GENERAL_FAILURE;
+		}
+
+		r->out.type		= SPOOLSS_PRINTER_DATA_TYPE_BINARY;
+		r->out.data.binary	= blob;
+		return WERR_OK;
+	} else if (strcmp("DNSMachineName", r->in.value_name) == 0) {
+		if (!lp_realm()) return WERR_INVALID_PARAM;
+
+		r->out.type		= SPOOLSS_PRINTER_DATA_TYPE_STRING;
+		r->out.data.string	= talloc_asprintf(mem_ctx, "%s.%s",
+								   lp_netbios_name(),
+								   lp_realm());
+		W_ERROR_HAVE_NO_MEMORY(r->out.data.string);
+		return WERR_OK;
 	}
 
 	return WERR_INVALID_PARAM;

Modified: branches/SAMBA_4_0/source/torture/rpc/spoolss.c
===================================================================
--- branches/SAMBA_4_0/source/torture/rpc/spoolss.c	2005-07-01 12:18:39 UTC (rev 8053)
+++ branches/SAMBA_4_0/source/torture/rpc/spoolss.c	2005-07-01 12:19:24 UTC (rev 8054)
@@ -2085,6 +2085,9 @@
 	ret &= test_GetPrinterData(ctx->p, ctx, &ctx->server_handle, "DefaultSpoolDirectory");
 	ret &= test_GetPrinterData(ctx->p, ctx, &ctx->server_handle, "Architecture");
 	ret &= test_GetPrinterData(ctx->p, ctx, &ctx->server_handle, "DsPresent");
+	ret &= test_GetPrinterData(ctx->p, ctx, &ctx->server_handle, "OSVersion");
+	ret &= test_GetPrinterData(ctx->p, ctx, &ctx->server_handle, "OSVersionEx");
+	ret &= test_GetPrinterData(ctx->p, ctx, &ctx->server_handle, "DNSMachineName");
 
 	ret &= test_EnumForms(ctx->p, ctx, &ctx->server_handle, True);
 



More information about the samba-cvs mailing list