[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