summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorAndreas Schneider <asn@samba.org>2013-01-17 17:18:04 +0100
committerAndreas Schneider <asn@cryptomilk.org>2013-01-17 20:36:17 +0100
commitd34cd6d061ce53c305e146420c4b4451fe35df6f (patch)
tree0264578f2c1f79a852a15074f832717bae87fdd6 /source3
parent79fa78e2851009bc992d5b1bb447cb91d8b68900 (diff)
downloadsamba-d34cd6d061ce53c305e146420c4b4451fe35df6f.tar.gz
samba-d34cd6d061ce53c305e146420c4b4451fe35df6f.tar.bz2
samba-d34cd6d061ce53c305e146420c4b4451fe35df6f.zip
printing: Create default architecture directories on init.
Reviewed-by: Guenther Deschner <gd@samba.org> Autobuild-User(master): Andreas Schneider <asn@cryptomilk.org> Autobuild-Date(master): Thu Jan 17 20:36:17 CET 2013 on sn-devel-104
Diffstat (limited to 'source3')
-rw-r--r--source3/printing/nt_printing.c59
1 files changed, 59 insertions, 0 deletions
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;
}