1
0
mirror of https://github.com/samba-team/samba.git synced 2025-12-07 20:23:50 +03:00

fixed the pack/unpack of the devicemode

we were being bitten by uint16/uint32 mixups
This commit is contained in:
Andrew Tridgell
-
parent 46f5f41c88
commit 1d37f76953
2 changed files with 86 additions and 52 deletions

View File

@@ -186,11 +186,12 @@ typedef struct nt_printer_param
typedef struct ntdevicemode typedef struct ntdevicemode
{ {
fstring devicename; fstring devicename;
fstring formname;
uint16 specversion; uint16 specversion;
uint16 driverversion; uint16 driverversion;
uint16 size; uint16 size;
uint16 driverextra; uint16 driverextra;
uint32 fields;
uint16 orientation; uint16 orientation;
uint16 papersize; uint16 papersize;
uint16 paperlength; uint16 paperlength;
@@ -204,8 +205,9 @@ typedef struct ntdevicemode
uint16 yresolution; uint16 yresolution;
uint16 ttoption; uint16 ttoption;
uint16 collate; uint16 collate;
fstring formname;
uint16 logpixels; uint16 logpixels;
uint32 fields;
uint32 bitsperpel; uint32 bitsperpel;
uint32 pelswidth; uint32 pelswidth;
uint32 pelsheight; uint32 pelsheight;

View File

@@ -491,13 +491,13 @@ static int pack_devicemode(NT_DEVICEMODE *nt_devmode, char *buf, int buflen)
if (!nt_devmode) return len; if (!nt_devmode) return len;
len += tdb_pack(buf+len, buflen-len, "fddddddddddddddddddddddp", len += tdb_pack(buf+len, buflen-len, "fwwwwwwwwwwwwwwwwwwddddddddddddddp",
nt_devmode->formname, nt_devmode->formname,
nt_devmode->specversion, nt_devmode->specversion,
nt_devmode->driverversion, nt_devmode->driverversion,
nt_devmode->size, nt_devmode->size,
nt_devmode->driverextra, nt_devmode->driverextra,
nt_devmode->fields,
nt_devmode->orientation, nt_devmode->orientation,
nt_devmode->papersize, nt_devmode->papersize,
nt_devmode->paperlength, nt_devmode->paperlength,
@@ -511,18 +511,33 @@ static int pack_devicemode(NT_DEVICEMODE *nt_devmode, char *buf, int buflen)
nt_devmode->yresolution, nt_devmode->yresolution,
nt_devmode->ttoption, nt_devmode->ttoption,
nt_devmode->collate, nt_devmode->collate,
nt_devmode->logpixels,
nt_devmode->fields,
nt_devmode->bitsperpel,
nt_devmode->pelswidth,
nt_devmode->pelsheight,
nt_devmode->displayflags,
nt_devmode->displayfrequency,
nt_devmode->icmmethod, nt_devmode->icmmethod,
nt_devmode->icmintent, nt_devmode->icmintent,
nt_devmode->mediatype, nt_devmode->mediatype,
nt_devmode->dithertype, nt_devmode->dithertype,
nt_devmode->reserved1,
nt_devmode->reserved2,
nt_devmode->panningwidth,
nt_devmode->panningheight,
nt_devmode->private); nt_devmode->private);
if (nt_devmode->private) { if (nt_devmode->private) {
len += tdb_pack(buf+len, buflen-len, "B", len += tdb_pack(buf+len, buflen-len, "B",
nt_devmode->driverextra, nt_devmode->driverextra,
nt_devmode->private); nt_devmode->private);
} }
DEBUG(8,("Packed devicemode [%s]\n", nt_devmode->formname));
return len; return len;
} }
@@ -652,6 +667,9 @@ static uint32 add_a_printer_2(NT_PRINTER_INFO_LEVEL_2 *info)
safe_free(buf); safe_free(buf);
DEBUG(8,("packed printer [%s] with form [%s] len=%d\n",
info->portname, info->devmode->formname, len));
return ret; return ret;
} }
@@ -893,13 +911,13 @@ static int unpack_devicemode(NT_DEVICEMODE **nt_devmode, char *buf, int buflen)
if (!*nt_devmode) return len; if (!*nt_devmode) return len;
len += tdb_unpack(buf+len, buflen-len, "fddddddddddddddddddddddp", len += tdb_unpack(buf+len, buflen-len, "fwwwwwwwwwwwwwwwwwwddddddddddddddp",
devmode.formname, devmode.formname,
&devmode.specversion, &devmode.specversion,
&devmode.driverversion, &devmode.driverversion,
&devmode.size, &devmode.size,
&devmode.driverextra, &devmode.driverextra,
&devmode.fields,
&devmode.orientation, &devmode.orientation,
&devmode.papersize, &devmode.papersize,
&devmode.paperlength, &devmode.paperlength,
@@ -913,10 +931,22 @@ static int unpack_devicemode(NT_DEVICEMODE **nt_devmode, char *buf, int buflen)
&devmode.yresolution, &devmode.yresolution,
&devmode.ttoption, &devmode.ttoption,
&devmode.collate, &devmode.collate,
&devmode.logpixels,
&devmode.fields,
&devmode.bitsperpel,
&devmode.pelswidth,
&devmode.pelsheight,
&devmode.displayflags,
&devmode.displayfrequency,
&devmode.icmmethod, &devmode.icmmethod,
&devmode.icmintent, &devmode.icmintent,
&devmode.mediatype, &devmode.mediatype,
&devmode.dithertype, &devmode.dithertype,
&devmode.reserved1,
&devmode.reserved2,
&devmode.panningwidth,
&devmode.panningheight,
&devmode.private); &devmode.private);
if (devmode.private) { if (devmode.private) {
@@ -929,6 +959,8 @@ static int unpack_devicemode(NT_DEVICEMODE **nt_devmode, char *buf, int buflen)
*nt_devmode = (NT_DEVICEMODE *)memdup(&devmode, sizeof(devmode)); *nt_devmode = (NT_DEVICEMODE *)memdup(&devmode, sizeof(devmode));
DEBUG(8,("Unpacked devicemode [%s]\n", devmode.formname));
return len; return len;
} }