From f1516f4af21af4a6a0224b8aa47393ae39597194 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Baumbach?= Date: Fri, 18 Nov 2011 18:54:56 +0100 Subject: [PATCH] s3-printing: fix migrate printer code (bug 8618) Removed path from driver files. We only the basenames. --- source3/printing/nt_printing_migrate.c | 52 ++++++++++++++++++++++++++++--- source3/printing/nt_printing_migrate.h | 2 + 2 files changed, 49 insertions(+), 5 deletions(-) diff --git a/source3/printing/nt_printing_migrate.c b/source3/printing/nt_printing_migrate.c index e927a23..0406ef4 100644 --- a/source3/printing/nt_printing_migrate.c +++ b/source3/printing/nt_printing_migrate.c @@ -3,6 +3,7 @@ * RPC Pipe client / server routines * * Copyright (c) Andreas Schneider 2010. + * Copyright (C) Bjoern Baumbach 2011 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,6 +28,20 @@ #include "librpc/gen_ndr/ndr_security.h" #include "rpc_client/cli_winreg_spoolss.h" +const char *driver_file_basename(const char *file) +{ + const char *basefile; + + basefile = strrchr(file, '\\'); + if (basefile == NULL) { + basefile = file; + } else { + basefile++; + } + + return basefile; +} + NTSTATUS printing_tdb_migrate_form(TALLOC_CTX *mem_ctx, struct rpc_pipe_client *winreg_pipe, const char *key_name, @@ -99,7 +114,13 @@ NTSTATUS printing_tdb_migrate_driver(TALLOC_CTX *mem_ctx, DATA_BLOB blob; WERROR result; const char *driver_name; + const char *driver_path; + const char *config_file; + const char *data_file; + const char *help_file; + const char **dependent_files; uint32_t driver_version; + int i; blob = data_blob_const(data, length); @@ -118,15 +139,36 @@ NTSTATUS printing_tdb_migrate_driver(TALLOC_CTX *mem_ctx, ZERO_STRUCT(d3); ZERO_STRUCT(a); - a.string = r.dependent_files; + /* remove paths from file names */ + if (r.dependent_files != NULL) { + /* count elements in r.dependent_files */ + for(i = 0 ; r.dependent_files[i] != NULL; i++) { } + + dependent_files = SMB_MALLOC_ARRAY(const char *, i); + if (dependent_files == NULL) { + DEBUG(2, ("Out of memory!\n")); + return NT_STATUS_NO_MEMORY; + } + + for (i = 0 ; r.dependent_files[i] != NULL; i++) { + dependent_files[i] = driver_file_basename(r.dependent_files[i]); + } + dependent_files[i] = NULL; + } + a.string = dependent_files; + + driver_path = driver_file_basename(r.driverpath); + config_file = driver_file_basename(r.configfile); + data_file = driver_file_basename(r.datafile); + help_file = driver_file_basename(r.helpfile); d3.architecture = r.environment; - d3.config_file = r.configfile; - d3.data_file = r.datafile; + d3.config_file = config_file; + d3.data_file = data_file; d3.default_datatype = r.defaultdatatype; d3.dependent_files = &a; - d3.driver_path = r.driverpath; - d3.help_file = r.helpfile; + d3.driver_path = driver_path; + d3.help_file = help_file; d3.monitor_name = r.monitorname; d3.driver_name = r.name; d3.version = r.version; diff --git a/source3/printing/nt_printing_migrate.h b/source3/printing/nt_printing_migrate.h index 3da8db4..edfb8aa 100644 --- a/source3/printing/nt_printing_migrate.h +++ b/source3/printing/nt_printing_migrate.h @@ -42,4 +42,6 @@ NTSTATUS printing_tdb_migrate_secdesc(TALLOC_CTX *mem_ctx, unsigned char *data, size_t length); +const char *driver_file_basename(const char *file); + #endif /* _NT_PRINTING_MIGRATE_H_ */ -- 1.7.3.4