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:
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user