The branch, master has been updated via ca0e5ea... s4-smbtorture: use server_name for all printerdriver delete and enum operations. via 698b778... s3-spoolss: make switch in _spoolss_AddPrinterDriver() a bit more clear. via 4be5d59... s4-smbtorture: allow to upload or remove any file belonging to a driver. from c82fd3e... s3: Fix a winbind crash when scanning trusts
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit ca0e5ea8331857bca5207105c6bb4b6aaa8edadb Author: Günther Deschner <g...@samba.org> Date: Fri Apr 23 11:39:12 2010 +0200 s4-smbtorture: use server_name for all printerdriver delete and enum operations. With this s3 passes the RPC-PRINTER-DRIVER test. Guenther commit 698b7780c90687e9c1744e2435865dba1f18b274 Author: Günther Deschner <g...@samba.org> Date: Fri Apr 23 11:33:51 2010 +0200 s3-spoolss: make switch in _spoolss_AddPrinterDriver() a bit more clear. Guenther commit 4be5d59c4f034ef9a125fe813e9e02ba5c2c833b Author: Günther Deschner <g...@samba.org> Date: Fri Apr 23 11:27:51 2010 +0200 s4-smbtorture: allow to upload or remove any file belonging to a driver. Guenther ----------------------------------------------------------------------- Summary of changes: source3/rpc_server/srv_spoolss_nt.c | 10 +++-- source4/torture/rpc/spoolss.c | 58 +++++++++++++++++++++++++++------- 2 files changed, 52 insertions(+), 16 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 e8b5f8e..28e8a7d 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -7519,11 +7519,13 @@ WERROR _spoolss_AddPrinterDriver(pipes_struct *p, struct spoolss_AddPrinterDriverEx a; switch (r->in.info_ctr->level) { - case 6: - case 8: - return WERR_UNKNOWN_LEVEL; - default: + case 2: + case 3: + case 4: + case 5: break; + default: + return WERR_UNKNOWN_LEVEL; } a.in.servername = r->in.servername; diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c index 711f4df..81b63e9 100644 --- a/source4/torture/rpc/spoolss.c +++ b/source4/torture/rpc/spoolss.c @@ -6886,13 +6886,14 @@ static bool test_AddPrinterDriver_args_level_8(struct torture_context *tctx, static bool test_DeletePrinterDriver_exp(struct torture_context *tctx, struct dcerpc_binding_handle *b, + const char *server, const char *driver, const char *environment, WERROR expected_result) { struct spoolss_DeletePrinterDriver r; - r.in.server = NULL; + r.in.server = server; r.in.architecture = environment; r.in.driver = driver; @@ -6909,6 +6910,7 @@ static bool test_DeletePrinterDriver_exp(struct torture_context *tctx, static bool test_DeletePrinterDriverEx_exp(struct torture_context *tctx, struct dcerpc_binding_handle *b, + const char *server, const char *driver, const char *environment, uint32_t delete_flags, @@ -6917,7 +6919,7 @@ static bool test_DeletePrinterDriverEx_exp(struct torture_context *tctx, { struct spoolss_DeletePrinterDriverEx r; - r.in.server = NULL; + r.in.server = server; r.in.architecture = environment; r.in.driver = driver; r.in.delete_flags = delete_flags; @@ -6936,23 +6938,24 @@ static bool test_DeletePrinterDriverEx_exp(struct torture_context *tctx, static bool test_DeletePrinterDriver(struct torture_context *tctx, struct dcerpc_binding_handle *b, + const char *server_name, const char *driver, const char *environment) { torture_assert(tctx, - test_DeletePrinterDriver_exp(tctx, b, driver, "FOOBAR", WERR_INVALID_ENVIRONMENT), + test_DeletePrinterDriver_exp(tctx, b, server_name, driver, "FOOBAR", WERR_INVALID_ENVIRONMENT), "failed to delete driver"); torture_assert(tctx, - test_DeletePrinterDriver_exp(tctx, b, driver, environment, WERR_OK), + test_DeletePrinterDriver_exp(tctx, b, server_name, driver, environment, WERR_OK), "failed to delete driver"); - if (test_EnumPrinterDrivers_findone(tctx, b, NULL, environment, 1, driver)) { + if (test_EnumPrinterDrivers_findone(tctx, b, server_name, environment, 1, driver)) { torture_fail(tctx, "deleted driver still enumerated"); } torture_assert(tctx, - test_DeletePrinterDriver_exp(tctx, b, driver, environment, WERR_UNKNOWN_PRINTER_DRIVER), + test_DeletePrinterDriver_exp(tctx, b, server_name, driver, environment, WERR_UNKNOWN_PRINTER_DRIVER), "2nd delete failed"); return true; @@ -6960,25 +6963,26 @@ static bool test_DeletePrinterDriver(struct torture_context *tctx, static bool test_DeletePrinterDriverEx(struct torture_context *tctx, struct dcerpc_binding_handle *b, + const char *server_name, const char *driver, const char *environment, uint32_t delete_flags, uint32_t version) { torture_assert(tctx, - test_DeletePrinterDriverEx_exp(tctx, b, driver, "FOOBAR", delete_flags, version, WERR_INVALID_ENVIRONMENT), + test_DeletePrinterDriverEx_exp(tctx, b, server_name, driver, "FOOBAR", delete_flags, version, WERR_INVALID_ENVIRONMENT), "failed to delete driver"); torture_assert(tctx, - test_DeletePrinterDriverEx_exp(tctx, b, driver, environment, delete_flags, version, WERR_OK), + test_DeletePrinterDriverEx_exp(tctx, b, server_name, driver, environment, delete_flags, version, WERR_OK), "failed to delete driver"); - if (test_EnumPrinterDrivers_findone(tctx, b, NULL, environment, 1, driver)) { + if (test_EnumPrinterDrivers_findone(tctx, b, server_name, environment, 1, driver)) { torture_fail(tctx, "deleted driver still enumerated"); } torture_assert(tctx, - test_DeletePrinterDriverEx_exp(tctx, b, driver, environment, delete_flags, version, WERR_UNKNOWN_PRINTER_DRIVER), + test_DeletePrinterDriverEx_exp(tctx, b, server_name, driver, environment, delete_flags, version, WERR_UNKNOWN_PRINTER_DRIVER), "2nd delete failed"); return true; @@ -7034,9 +7038,9 @@ static bool test_PrinterDriver_args(struct torture_context *tctx, } if (ex) { - return test_DeletePrinterDriverEx(tctx, b, r->driver_name, r->architecture, delete_flags, r->version); + return test_DeletePrinterDriverEx(tctx, b, server_name, r->driver_name, r->architecture, delete_flags, r->version); } else { - return test_DeletePrinterDriver(tctx, b, r->driver_name, r->architecture); + return test_DeletePrinterDriver(tctx, b, server_name, r->driver_name, r->architecture); } } @@ -7116,6 +7120,10 @@ static bool upload_printer_driver_file(struct torture_context *tctx, const char *local_name = talloc_asprintf(tctx, "%s/%s", d->local.driver_directory, file_name); const char *remote_name = talloc_asprintf(tctx, "%s\\%s", remote_dir, file_name); + if (!file_name) { + return true; + } + torture_comment(tctx, "Uploading %s to %s\n", local_name, remote_name); fnum = smbcli_open(cli->tree, remote_name, O_RDWR|O_CREAT|O_TRUNC, DENY_NONE); @@ -7202,6 +7210,7 @@ static bool upload_printer_driver(struct torture_context *tctx, { struct smbcli_state *cli; const char *share_name = driver_directory_share(tctx, d->remote.driver_directory); + int i; torture_assert(tctx, connect_printer_driver_share(tctx, server_name, share_name, &cli), @@ -7219,6 +7228,16 @@ static bool upload_printer_driver(struct torture_context *tctx, torture_assert(tctx, upload_printer_driver_file(tctx, cli, d, d->info8.config_file), "failed to upload config_file"); + torture_assert(tctx, + upload_printer_driver_file(tctx, cli, d, d->info8.help_file), + "failed to upload help_file"); + if (d->info8.dependent_files) { + for (i=0; d->info8.dependent_files->string && d->info8.dependent_files->string[i] != NULL; i++) { + torture_assert(tctx, + upload_printer_driver_file(tctx, cli, d, d->info8.dependent_files->string[i]), + "failed to upload dependent_files"); + } + } talloc_free(cli); @@ -7233,6 +7252,10 @@ static bool remove_printer_driver_file(struct torture_context *tctx, const char *remote_name; const char *remote_dir = driver_directory_dir(d->remote.driver_directory); + if (!file_name) { + return true; + } + remote_name = talloc_asprintf(tctx, "%s\\%s", remote_dir, file_name); torture_comment(tctx, "Removing %s\n", remote_name); @@ -7250,6 +7273,7 @@ static bool remove_printer_driver(struct torture_context *tctx, { struct smbcli_state *cli; const char *share_name = driver_directory_share(tctx, d->remote.driver_directory); + int i; torture_assert(tctx, connect_printer_driver_share(tctx, server_name, share_name, &cli), @@ -7267,6 +7291,16 @@ static bool remove_printer_driver(struct torture_context *tctx, torture_assert(tctx, remove_printer_driver_file(tctx, cli, d, d->info8.config_file), "failed to remove config_file"); + torture_assert(tctx, + remove_printer_driver_file(tctx, cli, d, d->info8.help_file), + "failed to remove help_file"); + if (d->info8.dependent_files) { + for (i=0; d->info8.dependent_files->string && d->info8.dependent_files->string[i] != NULL; i++) { + torture_assert(tctx, + remove_printer_driver_file(tctx, cli, d, d->info8.dependent_files->string[i]), + "failed to remove dependent_files"); + } + } talloc_free(cli); -- Samba Shared Repository