From d34cd6d061ce53c305e146420c4b4451fe35df6f Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Thu, 17 Jan 2013 17:18:04 +0100 Subject: printing: Create default architecture directories on init. Reviewed-by: Guenther Deschner Autobuild-User(master): Andreas Schneider Autobuild-Date(master): Thu Jan 17 20:36:17 CET 2013 on sn-devel-104 --- source3/printing/nt_printing.c | 59 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) (limited to 'source3/printing') diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c index e09ee8968f..7bf2c5530d 100644 --- a/source3/printing/nt_printing.c +++ b/source3/printing/nt_printing.c @@ -74,6 +74,61 @@ static const struct print_architecture_table_node archi_table[]= { {NULL, "", -1 } }; +static bool print_driver_directories_init(void) +{ + int service, i; + char *driver_path; + bool ok; + TALLOC_CTX *mem_ctx = talloc_stackframe(); + + service = lp_servicenumber("print$"); + if (service < 0) { + /* We don't have a print$ share */ + DEBUG(5, ("No print$ share has been configured.\n")); + return true; + } + + driver_path = lp_pathname(mem_ctx, service); + if (driver_path == NULL) { + return false; + } + + ok = directory_create_or_exist(driver_path, sec_initial_uid(), 0755); + if (!ok) { + DEBUG(1, ("Failed to create printer driver directory %s\n", + driver_path)); + talloc_free(mem_ctx); + return false; + } + + for (i = 0; archi_table[i].long_archi != NULL; i++) { + const char *arch_path; + + arch_path = talloc_asprintf(mem_ctx, + "%s/%s", + driver_path, + archi_table[i].short_archi); + if (arch_path == NULL) { + talloc_free(mem_ctx); + return false; + } + + ok = directory_create_or_exist(arch_path, + sec_initial_uid(), + 0755); + if (!ok) { + DEBUG(1, ("Failed to create printer driver " + "architecture directory %s\n", + arch_path)); + talloc_free(mem_ctx); + return false; + } + } + + talloc_free(mem_ctx); + return true; +} + /**************************************************************************** Open the NT printing tdbs. Done once before fork(). ****************************************************************************/ @@ -82,6 +137,10 @@ bool nt_printing_init(struct messaging_context *msg_ctx) { WERROR win_rc; + if (!print_driver_directories_init()) { + return false; + } + if (!nt_printing_tdb_upgrade()) { return false; } -- cgit