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 <g...@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 <g...@samba.org>
Date:   Fri Apr 23 03:03:59 2010 +0200

    s4-smbtorture: fix test_EnumPrinterDrivers_findone().
    
    Guenther

commit 20133cfe560f2bd84b5c2ebab9dc25b0c98efeb9
Author: Günther Deschner <g...@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

Reply via email to