[SCM] Samba Shared Repository - branch master updated
Günther Deschner
gd at samba.org
Thu Mar 4 02:10:32 MST 2010
The branch, master has been updated
via a319eb9... testprogs: add test_PrinterDataW.
via 55946dd... testprogs: use dump_data in dump_printer_data.
via 74ba0b7... testprogs: add print_printer_dataw and dump_data to printlib.
via 66b4463... testprogs: add some multibyte versions of PrinterData calls.
from 6384f45... s3: Rerun genmsg after adding more strings.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit a319eb9700bb6ae8aa217877181eaa37268e1c3b
Author: Günther Deschner <gd at samba.org>
Date: Thu Mar 4 01:35:33 2010 +0100
testprogs: add test_PrinterDataW.
Guenther
commit 55946ddd1db070cc94f8208aaf8f0f10eeef30b6
Author: Günther Deschner <gd at samba.org>
Date: Thu Mar 4 01:33:06 2010 +0100
testprogs: use dump_data in dump_printer_data.
Guenther
commit 74ba0b71891ce180079cc801e9fe11b4ea268e84
Author: Günther Deschner <gd at samba.org>
Date: Thu Mar 4 01:31:30 2010 +0100
testprogs: add print_printer_dataw and dump_data to printlib.
Guenther
commit 66b4463fc1a8c9aa0caf12765c4899ee0058a2b3
Author: Günther Deschner <gd at samba.org>
Date: Thu Mar 4 01:29:16 2010 +0100
testprogs: add some multibyte versions of PrinterData calls.
Guenther
-----------------------------------------------------------------------
Summary of changes:
testprogs/win32/spoolss/printlib.c | 120 ++++++++++++++----
testprogs/win32/spoolss/printlib_proto.h | 1 +
testprogs/win32/spoolss/spoolss.c | 211 ++++++++++++++++++++++++++++++
3 files changed, 309 insertions(+), 23 deletions(-)
Changeset truncated at 500 lines:
diff --git a/testprogs/win32/spoolss/printlib.c b/testprogs/win32/spoolss/printlib.c
index f3541c8..829ac40 100644
--- a/testprogs/win32/spoolss/printlib.c
+++ b/testprogs/win32/spoolss/printlib.c
@@ -24,6 +24,10 @@
#include <assert.h>
#include <sddl.h>
+#ifndef MIN
+#define MIN(a,b) ((a)<(b)?(a):(b))
+#endif
+
void print_devmode(DEVMODE *pDevModeIn)
{
if (pDevModeIn == NULL) {
@@ -1158,35 +1162,75 @@ LPSTR reg_type_str(DWORD type)
}
}
-void print_printer_data(LPSTR keyname, LPSTR valuename, DWORD size, LPBYTE buffer, DWORD type)
+void print_asc(const BYTE *buf, DWORD len)
{
- DWORD i = 0;
- LPSTR p = NULL;
-
- if (keyname) {
- printf("\tKey Name:\t%s\n", keyname);
+ int i;
+ for (i=0; i<len; i++) {
+ printf("%c", isprint(buf[i])?buf[i]:'.');
}
+}
- printf("\tValue Name:\t%s\n", valuename);
- printf("\tSize:\t\t0x%x (%d)\n", size, size);
- printf("\tType:\t\t%s\n", reg_type_str(type));
+static void dump_data(const BYTE *buf, int len)
+{
+ int i=0;
+ static const BYTE empty[16] = { 0, };
- if (buffer == NULL || size == 0) {
- return;
+ if (len<=0) return;
+
+ for (i=0; i<len;) {
+
+ if (i%16 == 0) {
+ if ((i > 0) &&
+ (len > i+16) &&
+ (memcmp(&buf[i], &empty, 16) == 0))
+ {
+ i +=16;
+ continue;
+ }
+
+ if (i<len) {
+ printf("[%04X] ",i);
+ }
+ }
+
+ printf("%02x ", buf[i]);
+ i++;
+
+ if (i%8 == 0) printf(" ");
+ if (i%16 == 0) {
+ print_asc(&buf[i-16],8); printf(" ");
+ print_asc(&buf[i-8],8); printf("\n");
+ }
+ }
+
+ if (i%16) {
+ int n;
+ n = 16 - (i%16);
+ printf(" ");
+ if (n>8) printf(" ");
+ while (n--) printf(" ");
+ n = MIN(8,i%16);
+ print_asc(&buf[i-(i%16)],n); printf( " " );
+ n = (i%16) - n;
+ if (n>0) print_asc(&buf[i-n],n);
+ printf("\n");
}
+}
+
+static void dump_printer_data(DWORD size, LPBYTE buffer, DWORD type)
+{
+ DWORD i = 0;
+ LPSTR p = NULL;
switch (type) {
case REG_SZ:
- printf("\t\t");
- for (i=0; i < size; i++) {
- printf("%c", buffer[i]);
- }
- printf("\n");
+ dump_data(buffer, size);
break;
case REG_MULTI_SZ:
+ dump_data(buffer, size);
p = (LPSTR)buffer;
while (p && *p) {
- printf("%s\n", p);
+ printf("\t\t%s\n", p);
for (; *p; p = CharNext(p)) {
p = CharNext(p);
}
@@ -1197,18 +1241,48 @@ void print_printer_data(LPSTR keyname, LPSTR valuename, DWORD size, LPBYTE buffe
printf("\t\t0x%08x\n", (DWORD)*buffer);
break;
case REG_BINARY:
- for (i=0; i < size; i++) {
- printf("\t0x%x", buffer[i]);
- if (i%4 == 3) {
- printf("\n");
- }
- }
+ dump_data(buffer, size);
break;
default:
break;
}
}
+void print_printer_data(LPSTR keyname, LPSTR valuename, DWORD size, LPBYTE buffer, DWORD type)
+{
+ if (keyname) {
+ printf("\tKey Name:\t%s\n", keyname);
+ }
+
+ printf("\tValue Name:\t%s\n", valuename);
+ printf("\tSize:\t\t0x%x (%d)\n", size, size);
+ printf("\tType:\t\t%s\n", reg_type_str(type));
+
+ if (buffer == NULL || size == 0) {
+ return;
+ }
+
+ dump_printer_data(size, buffer, type);
+}
+
+void print_printer_dataw(LPCWSTR keyname, LPCWSTR valuename, DWORD size, LPBYTE buffer, DWORD type)
+{
+ if (keyname) {
+ printf("\tKey Name:\t%ls\n", keyname);
+ }
+
+ printf("\tValue Name:\t%ls\n", valuename);
+ printf("\tSize:\t\t0x%x (%d)\n", size, size);
+ printf("\tType:\t\t%s\n", reg_type_str(type));
+
+ if (buffer == NULL || size == 0) {
+ return;
+ }
+
+ dump_printer_data(size, buffer, type);
+}
+
+
void print_printer_enum_values(PRINTER_ENUM_VALUES *info)
{
print_printer_data(NULL, info->pValueName, info->cbData, info->pData, info->dwType);
diff --git a/testprogs/win32/spoolss/printlib_proto.h b/testprogs/win32/spoolss/printlib_proto.h
index 5a43999..8e44d3b 100644
--- a/testprogs/win32/spoolss/printlib_proto.h
+++ b/testprogs/win32/spoolss/printlib_proto.h
@@ -56,6 +56,7 @@ void print_doc_info_1(PDOC_INFO_1 info);
void print_printer_keys(LPSTR buffer);
LPSTR reg_type_str(DWORD type);
void print_printer_data(LPSTR keyname, LPSTR valuename, DWORD size, LPBYTE buffer, DWORD type);
+void print_printer_dataw(LPCWSTR keyname, LPCWSTR valuename, DWORD size, LPBYTE buffer, DWORD type);
void print_printer_enum_values(PRINTER_ENUM_VALUES *info);
#undef _PRINTF_ATTRIBUTE
#define _PRINTF_ATTRIBUTE(a1, a2)
diff --git a/testprogs/win32/spoolss/spoolss.c b/testprogs/win32/spoolss/spoolss.c
index 7417b7f..c4c5017 100644
--- a/testprogs/win32/spoolss/spoolss.c
+++ b/testprogs/win32/spoolss/spoolss.c
@@ -988,6 +988,7 @@ static BOOL test_OnePrinter(struct torture_context *tctx,
ret &= test_EnumPrinterDataEx(tctx, printername, "PrinterDriverData", handle, NULL, NULL);
ret &= test_DeviceModes(tctx, printername, handle);
ret &= test_PrinterData(tctx, printername, handle);
+ ret &= test_PrinterDataW(tctx, printername, handle);
ret &= test_ClosePrinter(tctx, handle);
return ret;
@@ -1247,6 +1248,60 @@ static BOOL test_GetPrinterDataEx(struct torture_context *tctx,
/****************************************************************************
****************************************************************************/
+static BOOL test_GetPrinterDataExW(struct torture_context *tctx,
+ LPSTR servername,
+ LPCWSTR keyname,
+ LPCWSTR valuename,
+ HANDLE handle,
+ DWORD *type_p,
+ LPBYTE *buffer_p,
+ DWORD *size_p)
+{
+ LPBYTE buffer = NULL;
+ DWORD needed = 0;
+ DWORD type;
+ DWORD err = 0;
+ char tmp[1024];
+
+ torture_comment(tctx, "Testing GetPrinterDataExW(%ls - %ls)", keyname, valuename);
+
+ err = GetPrinterDataExW(handle, keyname, valuename, &type, NULL, 0, &needed);
+ if (err == ERROR_MORE_DATA) {
+ buffer = (LPBYTE)malloc(needed);
+ torture_assert(tctx, buffer, "malloc failed");
+ err = GetPrinterDataExW(handle, keyname, valuename, &type, buffer, needed, &needed);
+ }
+ if (err) {
+ sprintf(tmp, "GetPrinterDataExW(%ls) failed on [%s] (buffer size = %d), error: %s\n",
+ valuename, servername, needed, errstr(err));
+ torture_fail(tctx, tmp);
+ }
+
+ if (tctx->print) {
+ print_printer_dataw(keyname, valuename, needed, buffer, type);
+ }
+
+ if (type_p) {
+ *type_p = type;
+ }
+
+ if (size_p) {
+ *size_p = needed;
+ }
+
+ if (buffer_p) {
+ *buffer_p = buffer;
+ } else {
+ free(buffer);
+ }
+
+ return TRUE;
+}
+
+
+/****************************************************************************
+****************************************************************************/
+
static BOOL test_DeletePrinterDataEx(struct torture_context *tctx,
LPSTR servername,
LPSTR keyname,
@@ -1271,6 +1326,31 @@ static BOOL test_DeletePrinterDataEx(struct torture_context *tctx,
/****************************************************************************
****************************************************************************/
+static BOOL test_DeletePrinterDataExW(struct torture_context *tctx,
+ LPSTR servername,
+ LPCWSTR keyname,
+ LPCWSTR valuename,
+ HANDLE handle)
+{
+ DWORD err = 0;
+ char tmp[1024];
+
+ torture_comment(tctx, "Testing DeletePrinterDataExW(%ls - %ls)", keyname, valuename);
+
+ err = DeletePrinterDataExW(handle, keyname, valuename);
+ if (err) {
+ sprintf(tmp, "DeletePrinterDataExW(%ls - %ls) failed on [%s], error: %s\n",
+ keyname, valuename, servername, errstr(err));
+ torture_fail(tctx, tmp);
+ }
+
+ return TRUE;
+}
+
+
+/****************************************************************************
+****************************************************************************/
+
static BOOL test_DeletePrinterKey(struct torture_context *tctx,
LPSTR servername,
LPSTR keyname,
@@ -1294,6 +1374,29 @@ static BOOL test_DeletePrinterKey(struct torture_context *tctx,
/****************************************************************************
****************************************************************************/
+static BOOL test_DeletePrinterKeyW(struct torture_context *tctx,
+ LPSTR servername,
+ LPCWSTR keyname,
+ HANDLE handle)
+{
+ DWORD err = 0;
+ char tmp[1024];
+
+ torture_comment(tctx, "Testing DeletePrinterKeyW(%ls)", keyname);
+
+ err = DeletePrinterKeyW(handle, keyname);
+ if (err) {
+ sprintf(tmp, "DeletePrinterKeyW(%ls) failed on [%s], error: %s\n",
+ keyname, servername, errstr(err));
+ torture_fail(tctx, tmp);
+ }
+
+ return TRUE;
+}
+
+/****************************************************************************
+****************************************************************************/
+
static BOOL test_SetPrinterDataEx(struct torture_context *tctx,
LPSTR servername,
LPSTR keyname,
@@ -1321,6 +1424,34 @@ static BOOL test_SetPrinterDataEx(struct torture_context *tctx,
/****************************************************************************
****************************************************************************/
+static BOOL test_SetPrinterDataExW(struct torture_context *tctx,
+ LPCSTR servername,
+ LPCWSTR keyname,
+ LPCWSTR valuename,
+ HANDLE handle,
+ DWORD type,
+ LPBYTE buffer,
+ DWORD offered)
+{
+ DWORD err = 0;
+ char tmp[1024];
+
+ torture_comment(tctx, "Testing SetPrinterDataExW(%ls - %ls)", keyname, valuename);
+
+ err = SetPrinterDataExW(handle, keyname, valuename, type, buffer, offered);
+ if (err) {
+ sprintf(tmp, "SetPrinterDataExW(%ls) failed on [%s] (buffer size = %d), error: %s\n",
+ valuename, servername, offered, errstr(err));
+ torture_fail(tctx, tmp);
+ }
+
+ return TRUE;
+}
+
+
+/****************************************************************************
+****************************************************************************/
+
static BOOL test_PrinterData_Server(struct torture_context *tctx,
LPSTR servername,
HANDLE handle)
@@ -1407,6 +1538,7 @@ static BOOL test_PrinterData(struct torture_context *tctx,
break;
case REG_DWORD:
buffer = malloc(4);
+ memcpy(buffer, &value, 4);
size = 4;
break;
case REG_SZ:
@@ -1449,6 +1581,85 @@ static BOOL test_PrinterData(struct torture_context *tctx,
/****************************************************************************
****************************************************************************/
+static BOOL test_PrinterDataW(struct torture_context *tctx,
+ LPSTR printername,
+ HANDLE handle)
+{
+ char tmp[1024];
+ LPCWSTR keyname = L"torture_key";
+ LPCWSTR valuename = L"torture_value";
+ BOOL ret = TRUE;
+ DWORD types[] = {
+ REG_SZ,
+ REG_DWORD,
+ REG_BINARY
+ };
+ DWORD value = 12345678;
+ LPSTR str = "abcdefghijklmnopqrstuvwxzy";
+ DWORD t, s;
+
+ for (t=0; t < ARRAY_SIZE(types); t++) {
+ for (s=0; s < strlen(str); s++) {
+
+ DWORD type, type_ex;
+ LPBYTE buffer, buffer_ex;
+ DWORD size, size_ex;
+
+ if (types[t] == REG_DWORD) {
+ s = 0xffff;
+ }
+
+ switch (types[t]) {
+ case REG_BINARY:
+ buffer = malloc(s);
+ memcpy(buffer, str, s);
+ size = s;
+ break;
+ case REG_DWORD:
+ buffer = malloc(4);
+ memcpy(buffer, &value, 4);
+ size = 4;
+ break;
+ case REG_SZ:
+ buffer = malloc(s);
+ memcpy(buffer, str, s);
+ size = s;
+ break;
+ default:
+ sprintf(tmp, "type %d untested\n", types[t]);
+ torture_fail(tctx, tmp);
+ break;
+ }
+
+ type = types[t];
+
+ torture_comment(tctx, "Testing PrinterDataW (type: %s, size: 0x%08x)", reg_type_str(type), size);
+
+ torture_assert(tctx,
+ test_SetPrinterDataExW(tctx, printername, keyname, valuename, handle, type, buffer, size),
+ "failed to call SetPrinterDataExW");
+ torture_assert(tctx,
+ test_GetPrinterDataExW(tctx, printername, keyname, valuename, handle, &type_ex, &buffer_ex, &size_ex),
+ "failed to call GetPrinterDataExW");
+
+ if (!PrinterDataEqual(tctx, type_ex, type, size_ex, size, buffer_ex, buffer)) {
+ torture_warning(tctx, "GetPrinterDataExW does not return the same info as we set with SetPrinterDataExW");
+ ret = FALSE;
+ }
+ ret &= test_DeletePrinterDataExW(tctx, printername, keyname, valuename, handle);
+ ret &= test_DeletePrinterKeyW(tctx, printername, keyname, handle);
+
+ free(buffer);
+ free(buffer_ex);
+ }
+ }
+
+ return ret;
+}
+
+/****************************************************************************
+****************************************************************************/
+
const char *get_string_param(const char *str)
{
const char *p;
--
Samba Shared Repository
More information about the samba-cvs
mailing list