[SCM] Samba Shared Repository - branch master updated

Günther Deschner gd at samba.org
Thu Apr 22 19:27:10 MDT 2010


The branch, master has been updated
       via  a149383... s3-spoolss: make sure AddPrinterDriver calls into AddPrinterDriverEx.
       via  587921b... s4-smbtorture: fix test_EnumPrinterDrivers_findone().
       via  20133cf... s4-smbtorture: samba currently supports level 3 and 6 driver adds.
      from  413ffe9... s3-spoolss: fix some crash bugs and missing error codes in AddDriver paths.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit a14938377e42344eb04a3d3003199b231e88dc8d
Author: Günther Deschner <gd at samba.org>
Date:   Fri Apr 23 03:04:47 2010 +0200

    s3-spoolss: make sure AddPrinterDriver calls into AddPrinterDriverEx.
    
    Not vice versa. Also disable some info levels in AddPrinterDriver according to
    MS-RPRN 3.1.4.4.1.
    
    Found by torture test.
    
    Guenther

commit 587921b7da93cc02386193ac4c3354db4717fa3f
Author: Günther Deschner <gd at samba.org>
Date:   Fri Apr 23 03:03:59 2010 +0200

    s4-smbtorture: fix test_EnumPrinterDrivers_findone().
    
    Guenther

commit 20133cfe560f2bd84b5c2ebab9dc25b0c98efeb9
Author: Günther Deschner <gd at samba.org>
Date:   Fri Apr 23 02:49:42 2010 +0200

    s4-smbtorture: samba currently supports level 3 and 6 driver adds.
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 source3/rpc_server/srv_spoolss_nt.c |   46 ++++++++++++++++++++--------------
 source4/torture/rpc/spoolss.c       |   41 +++++++++++++++++++++++++------
 2 files changed, 60 insertions(+), 27 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c
index 72499d8..e8b5f8e 100644
--- a/source3/rpc_server/srv_spoolss_nt.c
+++ b/source3/rpc_server/srv_spoolss_nt.c
@@ -7370,11 +7370,11 @@ WERROR _spoolss_AddPrinter(pipes_struct *p,
 }
 
 /****************************************************************
- _spoolss_AddPrinterDriver
+ _spoolss_AddPrinterDriverEx
 ****************************************************************/
 
-WERROR _spoolss_AddPrinterDriver(pipes_struct *p,
-				 struct spoolss_AddPrinterDriver *r)
+WERROR _spoolss_AddPrinterDriverEx(pipes_struct *p,
+				   struct spoolss_AddPrinterDriverEx *r)
 {
 	WERROR err = WERR_OK;
 	char *driver_name = NULL;
@@ -7392,6 +7392,18 @@ WERROR _spoolss_AddPrinterDriver(pipes_struct *p,
 			return WERR_INVALID_PARAM;
 	}
 
+	/*
+	 * we only support the semantics of AddPrinterDriver()
+	 * i.e. only copy files that are newer than existing ones
+	 */
+
+	if (r->in.flags == 0) {
+		return WERR_INVALID_PARAM;
+	}
+
+	if (r->in.flags != APD_COPY_NEW_FILES) {
+		return WERR_ACCESS_DENIED;
+	}
 
 	/* FIXME */
 	if (r->in.info_ctr->level != 3 && r->in.info_ctr->level != 6) {
@@ -7498,31 +7510,27 @@ done:
 }
 
 /****************************************************************
- _spoolss_AddPrinterDriverEx
+ _spoolss_AddPrinterDriver
 ****************************************************************/
 
-WERROR _spoolss_AddPrinterDriverEx(pipes_struct *p,
-				   struct spoolss_AddPrinterDriverEx *r)
+WERROR _spoolss_AddPrinterDriver(pipes_struct *p,
+				 struct spoolss_AddPrinterDriver *r)
 {
-	struct spoolss_AddPrinterDriver a;
-
-	/*
-	 * we only support the semantics of AddPrinterDriver()
-	 * i.e. only copy files that are newer than existing ones
-	 */
-
-	if (r->in.flags == 0) {
-		return WERR_INVALID_PARAM;
-	}
+	struct spoolss_AddPrinterDriverEx a;
 
-	if (r->in.flags != APD_COPY_NEW_FILES) {
-		return WERR_ACCESS_DENIED;
+	switch (r->in.info_ctr->level) {
+	case 6:
+	case 8:
+		return WERR_UNKNOWN_LEVEL;
+	default:
+		break;
 	}
 
 	a.in.servername		= r->in.servername;
 	a.in.info_ctr		= r->in.info_ctr;
+	a.in.flags		= APD_COPY_NEW_FILES;
 
-	return _spoolss_AddPrinterDriver(p, &a);
+	return _spoolss_AddPrinterDriverEx(p, &a);
 }
 
 /****************************************************************************
diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c
index c046f18..711f4df 100644
--- a/source4/torture/rpc/spoolss.c
+++ b/source4/torture/rpc/spoolss.c
@@ -532,28 +532,28 @@ static bool test_EnumPrinterDrivers_findone(struct torture_context *tctx,
 		const char *driver_name_ret;
 		switch (level) {
 		case 1:
-			driver_name_ret = info->info1.driver_name;
+			driver_name_ret = info[i].info1.driver_name;
 			break;
 		case 2:
-			driver_name_ret = info->info2.driver_name;
+			driver_name_ret = info[i].info2.driver_name;
 			break;
 		case 3:
-			driver_name_ret = info->info3.driver_name;
+			driver_name_ret = info[i].info3.driver_name;
 			break;
 		case 4:
-			driver_name_ret = info->info4.driver_name;
+			driver_name_ret = info[i].info4.driver_name;
 			break;
 		case 5:
-			driver_name_ret = info->info5.driver_name;
+			driver_name_ret = info[i].info5.driver_name;
 			break;
 		case 6:
-			driver_name_ret = info->info6.driver_name;
+			driver_name_ret = info[i].info6.driver_name;
 			break;
 		case 7:
-			driver_name_ret = info->info7.driver_name;
+			driver_name_ret = info[i].info7.driver_name;
 			break;
 		case 8:
-			driver_name_ret = info->info8.driver_name;
+			driver_name_ret = info[i].info8.driver_name;
 			break;
 		default:
 			break;
@@ -7307,6 +7307,18 @@ static bool test_add_driver_arg(struct torture_context *tctx,
 
 	for (i=0; i < ARRAY_SIZE(levels); i++) {
 
+		if (torture_setting_bool(tctx, "samba3", false)) {
+			switch (levels[i]) {
+			case 2:
+			case 4:
+			case 8:
+				torture_comment(tctx, "skipping level %d against samba\n", levels[i]);
+				continue;
+			default:
+				break;
+			}
+		}
+
 		torture_comment(tctx,
 			"Testing PrinterDriver%s '%s' add & delete level %d\n",
 				d->ex ? "Ex" : "", info8.driver_name, levels[i]);
@@ -7320,6 +7332,19 @@ static bool test_add_driver_arg(struct torture_context *tctx,
 
 	for (i=0; i < ARRAY_SIZE(levels); i++) {
 
+		if (torture_setting_bool(tctx, "samba3", false)) {
+			switch (levels[i]) {
+			case 2:
+			case 4:
+			case 8:
+				torture_comment(tctx, "skipping level %d against samba\n", levels[i]);
+				continue;
+			default:
+				break;
+			}
+		}
+
+
 		torture_comment(tctx,
 			"Testing PrinterDriver%s '%s' add & delete level %d (full unc paths)\n",
 				d->ex ? "Ex" : "", info8.driver_name, levels[i]);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list