diff options
author | Stefan Metzmacher <metze@samba.org> | 2005-07-01 11:04:33 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:19:02 -0500 |
commit | 88df3c81ee283819faed2d521e98b1922c03854d (patch) | |
tree | 5bbf52cbb8d085ebbbd266068c13830ea21cd27a /source4/librpc | |
parent | 96a073fdeab2467e95ec332fd64293e882d16b5f (diff) | |
download | samba-88df3c81ee283819faed2d521e98b1922c03854d.tar.gz samba-88df3c81ee283819faed2d521e98b1922c03854d.tar.bz2 samba-88df3c81ee283819faed2d521e98b1922c03854d.zip |
r8050: - make use of more [value()] properties
- the out subcontext's need to have a fixed size of r->in.offered,
to make windows clients happy
metze
(This used to be commit 054e1ca434b2f81de199eeb41cb6233524fc5779)
Diffstat (limited to 'source4/librpc')
-rw-r--r-- | source4/librpc/idl/spoolss.idl | 23 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr_spoolss_buf.c | 6 |
2 files changed, 15 insertions, 14 deletions
diff --git a/source4/librpc/idl/spoolss.idl b/source4/librpc/idl/spoolss.idl index 87a909b22f..0dec162763 100644 --- a/source4/librpc/idl/spoolss.idl +++ b/source4/librpc/idl/spoolss.idl @@ -56,7 +56,7 @@ uint32 unknown29; } spoolss_PrinterInfo0; - typedef struct { + typedef [gensize] struct { string32 devicename; uint16 specversion; uint16 driverversion; @@ -282,8 +282,8 @@ /******************/ /* Function: 0x01 */ typedef struct { - uint32 size; - [subcontext(4),subcontext_size(size)] spoolss_DeviceMode *devmode; + [value(_ndr_size_spoolss_DeviceMode(devmode, ndr->flags))] uint32 _ndr_size; + [subcontext(4),subcontext_size(_ndr_size)] spoolss_DeviceMode *devmode; } spoolss_DevmodeContainer; WERROR spoolss_OpenPrinter( @@ -349,7 +349,7 @@ [in] uint32 level, [in] DATA_BLOB *buffer, [in] uint32 offered, - [out,subcontext(4),switch_is(level)] spoolss_JobInfo *info, + [out,subcontext(4),subcontext_size(offered),switch_is(level)] spoolss_JobInfo *info, [out] uint32 needed ); @@ -419,17 +419,12 @@ [default]; } spoolss_SetPrinterInfo; - typedef struct { - uint32 size; - [subcontext(4),subcontext_size(size)] security_descriptor *sd; - } spoolss_SecDescContainer; - WERROR spoolss_SetPrinter( [in,ref] policy_handle *handle, [in] uint32 level, [in,switch_is(level)] spoolss_SetPrinterInfo info, [in] spoolss_DevmodeContainer devmode_ctr, - [in] spoolss_SecDescContainer secdesc_ctr, + [in] sec_desc_buf secdesc_ctr, [in] spoolss_PrinterControl command ); @@ -440,7 +435,7 @@ [in] uint32 level, [in] DATA_BLOB *buffer, [in] uint32 offered, - [out,subcontext(4),switch_is(level)] spoolss_PrinterInfo *info, + [out,subcontext(4),subcontext_size(offered),switch_is(level)] spoolss_PrinterInfo *info, [out] uint32 needed ); @@ -591,7 +586,7 @@ [in] uint32 level, [in] DATA_BLOB *buffer, [in] uint32 offered, - [out,subcontext(4),switch_is(level)] spoolss_DriverDirectoryInfo *info, + [out,subcontext(4),subcontext_size(offered),switch_is(level)] spoolss_DriverDirectoryInfo *info, [out] uint32 needed ); @@ -759,7 +754,7 @@ [in] unistr value_name, [in] uint32 offered, [out] spoolss_PrinterDataType type, - [out,subcontext(4),switch_is(type)] spoolss_PrinterData data, + [out,subcontext(4),subcontext_size(offered),switch_is(type)] spoolss_PrinterData data, [out] uint32 needed ); @@ -859,7 +854,7 @@ [in] uint32 level, [in] DATA_BLOB *buffer, [in] uint32 offered, - [out,subcontext(4),switch_is(level)] spoolss_FormInfo *info, + [out,subcontext(4),subcontext_size(offered),switch_is(level)] spoolss_FormInfo *info, [out] uint32 needed ); diff --git a/source4/librpc/ndr/ndr_spoolss_buf.c b/source4/librpc/ndr/ndr_spoolss_buf.c index 594c56dda3..d9f9522eda 100644 --- a/source4/librpc/ndr/ndr_spoolss_buf.c +++ b/source4/librpc/ndr/ndr_spoolss_buf.c @@ -523,3 +523,9 @@ NTSTATUS ndr_push_spoolss_SetPrinterData(struct ndr_push *ndr, int flags, const } return NT_STATUS_OK; } + +uint32_t _ndr_size_spoolss_DeviceMode(struct spoolss_DeviceMode *devmode, uint32_t flags) +{ + if (!devmode) return 0; + return ndr_size_spoolss_DeviceMode(devmode,flags); +} |