summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/printing/nt_printing.c37
1 files changed, 27 insertions, 10 deletions
diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c
index a462094111..2a863e1b9f 100644
--- a/source3/printing/nt_printing.c
+++ b/source3/printing/nt_printing.c
@@ -32,6 +32,14 @@ static TDB_CONTEXT *tdb; /* used for driver files */
#define DATABASE_VERSION 1
+/* we need to have a small set of default forms to support our
+ default printer */
+static nt_forms_struct default_forms[] = {
+ {"A4", 0xb0, 0x3354f, 0x4884e, 0x0, 0x0, 0x3354f, 0x4884e},
+ {"Letter", 0x20, 0x34b5b, 0x44367, 0x0, 0x0, 0x34b5b, 0x44367}
+};
+
+
/****************************************************************************
open the NT printing tdb
****************************************************************************/
@@ -78,7 +86,7 @@ int get_ntforms(nt_forms_struct **list)
dbuf = tdb_fetch(tdb, kbuf);
if (!dbuf.dptr) continue;
- fstrcpy(form.name, kbuf.dptr+strlen(FORMS_PREFIX)+1);
+ fstrcpy(form.name, kbuf.dptr+strlen(FORMS_PREFIX));
ret = tdb_unpack(dbuf.dptr, dbuf.dsize, "ddddddd",
&form.flag, &form.width, &form.length, &form.left,
&form.top, &form.right, &form.bottom);
@@ -90,6 +98,13 @@ int get_ntforms(nt_forms_struct **list)
n++;
}
+ /* we should never return a null forms list or NT gets unhappy */
+ if (n == 0) {
+ *list = (nt_forms_struct *)memdup(&default_forms, sizeof(default_forms));
+ n = sizeof(sizeof(default_forms))/ sizeof(sizeof(default_forms[0]));
+ }
+
+
return n;
}
@@ -109,7 +124,7 @@ int write_ntforms(nt_forms_struct **list, int number)
(*list)[i].left, (*list)[i].top, (*list)[i].right,
(*list)[i].bottom);
if (len > sizeof(buf)) break;
- slprintf(key, sizeof(key), "%s/%s", FORMS_PREFIX, (*list)[i].name);
+ slprintf(key, sizeof(key), "%s%s", FORMS_PREFIX, (*list)[i].name);
kbuf.dsize = strlen(key)+1;
kbuf.dptr = key;
dbuf.dsize = len;
@@ -207,7 +222,7 @@ int get_ntdrivers(fstring **list, char *architecture)
TDB_DATA kbuf, newkey;
get_short_archi(short_archi, architecture);
- slprintf(key, sizeof(key), "%s/%s/", DRIVERS_PREFIX, short_archi);
+ slprintf(key, sizeof(key), "%s%s/", DRIVERS_PREFIX, short_archi);
for (kbuf = tdb_firstkey(tdb);
kbuf.dptr;
@@ -275,7 +290,7 @@ static uint32 add_a_printer_driver_3(NT_PRINTER_DRIVER_INFO_LEVEL_3 *driver)
TDB_DATA kbuf, dbuf;
get_short_archi(architecture, driver->environment);
- slprintf(key, sizeof(key), "%s/%s/%s", DRIVERS_PREFIX, architecture, driver->name);
+ slprintf(key, sizeof(key), "%s%s/%s", DRIVERS_PREFIX, architecture, driver->name);
/*
* cversion must be 2.
@@ -386,7 +401,7 @@ static uint32 get_a_printer_driver_3(NT_PRINTER_DRIVER_INFO_LEVEL_3 **info_ptr,
ZERO_STRUCT(driver);
get_short_archi(architecture, in_arch);
- slprintf(key, sizeof(key), "%s/%s/%s", DRIVERS_PREFIX, architecture, in_prt);
+ slprintf(key, sizeof(key), "%s%s/%s", DRIVERS_PREFIX, architecture, in_prt);
kbuf.dptr = key;
kbuf.dsize = strlen(key)+1;
@@ -572,7 +587,7 @@ uint32 del_a_printer(char *portname)
pstring key;
TDB_DATA kbuf;
- slprintf(key, sizeof(key), "%s/%s",
+ slprintf(key, sizeof(key), "%s%s",
PRINTERS_PREFIX, portname);
kbuf.dptr=key;
@@ -655,7 +670,7 @@ static uint32 add_a_printer_2(NT_PRINTER_INFO_LEVEL_2 *info)
}
- slprintf(key, sizeof(key), "%s/%s",
+ slprintf(key, sizeof(key), "%s%s",
PRINTERS_PREFIX, info->portname);
kbuf.dptr = key;
@@ -781,7 +796,7 @@ NT_DEVICEMODE *construct_nt_devicemode(void)
ZERO_STRUCTP(nt_devmode);
- fstrcpy(nt_devmode->formname, "A4");
+ fstrcpy(nt_devmode->formname, "Letter");
nt_devmode->specversion = 0x0401;
nt_devmode->driverversion = 0x0400;
@@ -791,7 +806,7 @@ NT_DEVICEMODE *construct_nt_devicemode(void)
DEFAULTSOURCE | COPIES | SCALE |
PAPERSIZE | ORIENTATION;
nt_devmode->orientation = 1;
- nt_devmode->papersize = PAPER_A4;
+ nt_devmode->papersize = PAPER_LETTER;
nt_devmode->paperlength = 0;
nt_devmode->paperwidth = 0;
nt_devmode->scale = 0x64;
@@ -1051,7 +1066,7 @@ static uint32 get_a_printer_2(NT_PRINTER_INFO_LEVEL_2 **info_ptr, fstring sharen
ZERO_STRUCT(info);
- slprintf(key, sizeof(key), "%s/%s",
+ slprintf(key, sizeof(key), "%s%s",
PRINTERS_PREFIX, sharename);
kbuf.dptr = key;
@@ -1090,6 +1105,8 @@ static uint32 get_a_printer_2(NT_PRINTER_INFO_LEVEL_2 **info_ptr, fstring sharen
nt_printing_getsec(sharename, &info.secdesc_buf);
+ fstrcpy(info.sharename, "");
+
safe_free(dbuf.dptr);
*info_ptr=memdup(&info, sizeof(info));