s3-printing: move os2 related functions to printing/nt_printing_os2.c.
authorGünther Deschner <gd@samba.org>
Mon, 4 Jul 2011 23:24:48 +0000 (01:24 +0200)
committerGünther Deschner <gd@samba.org>
Thu, 7 Jul 2011 16:06:01 +0000 (18:06 +0200)
Guenther

Pair-Programmed-With: David Disseldorp <ddiss@suse.de>

source3/Makefile.in
source3/include/nt_printing.h
source3/printing/nt_printing.c
source3/printing/nt_printing_os2.c [new file with mode: 0644]
source3/printing/nt_printing_os2.h [new file with mode: 0644]
source3/rpc_server/spoolss/srv_spoolss_util.c
source3/wscript_build

index 3cfc6fa..86f4f36 100644 (file)
@@ -965,6 +965,7 @@ PRINTBACKEND_OBJ = printing/printing.o \
                   printing/nt_printing_migrate.o \
                   printing/nt_printing_migrate_internal.o \
                   printing/nt_printing_ads.o \
+                  printing/nt_printing_os2.o \
                   librpc/gen_ndr/ndr_ntprinting.o \
                    ../librpc/ndr/ndr_ntprinting.o \
                   $(PRINTBASE_OBJ)
index ad6262e..319e895 100644 (file)
@@ -133,8 +133,6 @@ WERROR spoolss_create_default_devmode(TALLOC_CTX *mem_ctx,
 WERROR spoolss_create_default_secdesc(TALLOC_CTX *mem_ctx,
                                      struct spoolss_security_descriptor **secdesc);
 
-WERROR spoolss_map_to_os2_driver(TALLOC_CTX *mem_ctx, const char **pdrivername);
-
 const char *get_short_archi(const char *long_archi);
 
 bool print_access_check(const struct auth_serversupplied_info *server_info,
index 45d4191..7a96430 100644 (file)
@@ -1339,148 +1339,6 @@ WERROR spoolss_create_default_secdesc(TALLOC_CTX *mem_ctx,
        return WERR_OK;
 }
 
-/****************************************************************************
- ***************************************************************************/
-
-static char *win_driver;
-static char *os2_driver;
-
-static const char *get_win_driver(void)
-{
-       if (win_driver == NULL) {
-               return "";
-       }
-       return win_driver;
-}
-
-static const char *get_os2_driver(void)
-{
-       if (os2_driver == NULL) {
-               return "";
-       }
-       return os2_driver;
-}
-
-static bool set_driver_mapping(const char *from, const char *to)
-{
-       SAFE_FREE(win_driver);
-       SAFE_FREE(os2_driver);
-
-       win_driver = SMB_STRDUP(from);
-       os2_driver = SMB_STRDUP(to);
-
-       if (win_driver == NULL || os2_driver == NULL) {
-               SAFE_FREE(win_driver);
-               SAFE_FREE(os2_driver);
-               return false;
-       }
-       return true;
-}
-
-/**
- * @internal
- *
- * @brief Map a Windows driver to a OS/2 driver.
- *
- * @param[in]  mem_ctx  The memory context to use.
- *
- * @param[in,out] pdrivername The drivername of Windows to remap.
- *
- * @return              WERR_OK on success, a corresponding WERROR on failure.
- */
-WERROR spoolss_map_to_os2_driver(TALLOC_CTX *mem_ctx, const char **pdrivername)
-{
-       const char *mapfile = lp_os2_driver_map();
-       char **lines = NULL;
-       const char *drivername;
-       int numlines = 0;
-       int i;
-
-       if (pdrivername == NULL || *pdrivername == NULL || *pdrivername[0] == '\0') {
-               return WERR_INVALID_PARAMETER;
-       }
-
-       drivername = *pdrivername;
-
-       if (mapfile[0] == '\0') {
-               return WERR_BADFILE;
-       }
-
-       if (strequal(drivername, get_win_driver())) {
-               DEBUG(3,("Mapped Windows driver %s to OS/2 driver %s\n",
-                       drivername, get_os2_driver()));
-               drivername = talloc_strdup(mem_ctx, get_os2_driver());
-               if (drivername == NULL) {
-                       return WERR_NOMEM;
-               }
-               *pdrivername = drivername;
-               return WERR_OK;
-       }
-
-       lines = file_lines_load(mapfile, &numlines, 0, NULL);
-       if (numlines == 0 || lines == NULL) {
-               DEBUG(0,("No entries in OS/2 driver map %s\n", mapfile));
-               TALLOC_FREE(lines);
-               return WERR_EMPTY;
-       }
-
-       DEBUG(4,("Scanning OS/2 driver map %s\n",mapfile));
-
-       for( i = 0; i < numlines; i++) {
-               char *nt_name = lines[i];
-               char *os2_name = strchr(nt_name, '=');
-
-               if (os2_name == NULL) {
-                       continue;
-               }
-
-               *os2_name++ = '\0';
-
-               while (isspace(*nt_name)) {
-                       nt_name++;
-               }
-
-               if (*nt_name == '\0' || strchr("#;", *nt_name)) {
-                       continue;
-               }
-
-               {
-                       int l = strlen(nt_name);
-                       while (l && isspace(nt_name[l - 1])) {
-                               nt_name[l - 1] = 0;
-                               l--;
-                       }
-               }
-
-               while (isspace(*os2_name)) {
-                       os2_name++;
-               }
-
-               {
-                       int l = strlen(os2_name);
-                       while (l && isspace(os2_name[l-1])) {
-                               os2_name[l-1] = 0;
-                               l--;
-                       }
-               }
-
-               if (strequal(nt_name, drivername)) {
-                       DEBUG(3,("Mapped Windows driver %s to OS/2 driver %s\n",drivername,os2_name));
-                       set_driver_mapping(drivername, os2_name);
-                       drivername = talloc_strdup(mem_ctx, os2_name);
-                       TALLOC_FREE(lines);
-                       if (drivername == NULL) {
-                               return WERR_NOMEM;
-                       }
-                       *pdrivername = drivername;
-                       return WERR_OK;
-               }
-       }
-
-       TALLOC_FREE(lines);
-       return WERR_OK;
-}
-
 /****************************************************************************
 ****************************************************************************/
 
diff --git a/source3/printing/nt_printing_os2.c b/source3/printing/nt_printing_os2.c
new file mode 100644 (file)
index 0000000..80c02eb
--- /dev/null
@@ -0,0 +1,165 @@
+/*
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ *  Copyright (C) Andrew Tridgell              1992-2000,
+ *  Copyright (C) Jean François Micouleau      1998-2000.
+ *  Copyright (C) Gerald Carter                2002-2005.
+ *
+ *  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
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "includes.h"
+#include "printing/nt_printing_os2.h"
+
+/****************************************************************************
+ ***************************************************************************/
+
+static char *win_driver;
+static char *os2_driver;
+
+static const char *get_win_driver(void)
+{
+       if (win_driver == NULL) {
+               return "";
+       }
+       return win_driver;
+}
+
+static const char *get_os2_driver(void)
+{
+       if (os2_driver == NULL) {
+               return "";
+       }
+       return os2_driver;
+}
+
+static bool set_driver_mapping(const char *from, const char *to)
+{
+       SAFE_FREE(win_driver);
+       SAFE_FREE(os2_driver);
+
+       win_driver = SMB_STRDUP(from);
+       os2_driver = SMB_STRDUP(to);
+
+       if (win_driver == NULL || os2_driver == NULL) {
+               SAFE_FREE(win_driver);
+               SAFE_FREE(os2_driver);
+               return false;
+       }
+       return true;
+}
+
+/**
+ * @internal
+ *
+ * @brief Map a Windows driver to a OS/2 driver.
+ *
+ * @param[in]  mem_ctx  The memory context to use.
+ *
+ * @param[in,out] pdrivername The drivername of Windows to remap.
+ *
+ * @return              WERR_OK on success, a corresponding WERROR on failure.
+ */
+WERROR spoolss_map_to_os2_driver(TALLOC_CTX *mem_ctx, const char **pdrivername)
+{
+       const char *mapfile = lp_os2_driver_map();
+       char **lines = NULL;
+       const char *drivername;
+       int numlines = 0;
+       int i;
+
+       if (pdrivername == NULL || *pdrivername == NULL || *pdrivername[0] == '\0') {
+               return WERR_INVALID_PARAMETER;
+       }
+
+       drivername = *pdrivername;
+
+       if (mapfile[0] == '\0') {
+               return WERR_BADFILE;
+       }
+
+       if (strequal(drivername, get_win_driver())) {
+               DEBUG(3,("Mapped Windows driver %s to OS/2 driver %s\n",
+                       drivername, get_os2_driver()));
+               drivername = talloc_strdup(mem_ctx, get_os2_driver());
+               if (drivername == NULL) {
+                       return WERR_NOMEM;
+               }
+               *pdrivername = drivername;
+               return WERR_OK;
+       }
+
+       lines = file_lines_load(mapfile, &numlines, 0, NULL);
+       if (numlines == 0 || lines == NULL) {
+               DEBUG(0,("No entries in OS/2 driver map %s\n", mapfile));
+               TALLOC_FREE(lines);
+               return WERR_EMPTY;
+       }
+
+       DEBUG(4,("Scanning OS/2 driver map %s\n",mapfile));
+
+       for( i = 0; i < numlines; i++) {
+               char *nt_name = lines[i];
+               char *os2_name = strchr(nt_name, '=');
+
+               if (os2_name == NULL) {
+                       continue;
+               }
+
+               *os2_name++ = '\0';
+
+               while (isspace(*nt_name)) {
+                       nt_name++;
+               }
+
+               if (*nt_name == '\0' || strchr("#;", *nt_name)) {
+                       continue;
+               }
+
+               {
+                       int l = strlen(nt_name);
+                       while (l && isspace(nt_name[l - 1])) {
+                               nt_name[l - 1] = 0;
+                               l--;
+                       }
+               }
+
+               while (isspace(*os2_name)) {
+                       os2_name++;
+               }
+
+               {
+                       int l = strlen(os2_name);
+                       while (l && isspace(os2_name[l-1])) {
+                               os2_name[l-1] = 0;
+                               l--;
+                       }
+               }
+
+               if (strequal(nt_name, drivername)) {
+                       DEBUG(3,("Mapped Windows driver %s to OS/2 driver %s\n",drivername,os2_name));
+                       set_driver_mapping(drivername, os2_name);
+                       drivername = talloc_strdup(mem_ctx, os2_name);
+                       TALLOC_FREE(lines);
+                       if (drivername == NULL) {
+                               return WERR_NOMEM;
+                       }
+                       *pdrivername = drivername;
+                       return WERR_OK;
+               }
+       }
+
+       TALLOC_FREE(lines);
+       return WERR_OK;
+}
diff --git a/source3/printing/nt_printing_os2.h b/source3/printing/nt_printing_os2.h
new file mode 100644 (file)
index 0000000..0ef07de
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ *  Copyright (C) Andrew Tridgell              1992-2000,
+ *  Copyright (C) Jean François Micouleau      1998-2000.
+ *  Copyright (C) Gerald Carter                2002-2005.
+ *
+ *  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
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+WERROR spoolss_map_to_os2_driver(TALLOC_CTX *mem_ctx, const char **pdrivername);
index acf2b40..b297142 100644 (file)
@@ -31,6 +31,7 @@
 #include "rpc_client/cli_winreg.h"
 #include "../libcli/registry/util_reg.h"
 #include "../lib/tsocket/tsocket.h"
+#include "printing/nt_printing_os2.h"
 
 #define TOP_LEVEL_PRINT_KEY "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Print"
 #define TOP_LEVEL_PRINT_PRINTERS_KEY TOP_LEVEL_PRINT_KEY "\\Printers"
index 020eaaf..dc5fa8f 100755 (executable)
@@ -400,7 +400,8 @@ PRINTBACKEND_SRC = '''printing/printing.c
                       printing/nt_printing.c
                       printing/nt_printing_tdb.c
                       printing/nt_printing_migrate_internal.c
-                      printing/nt_printing_ads.c'''
+                      printing/nt_printing_ads.c
+                      printing/nt_printing_os2.c'''
 
 SMBD_SRC = '''${SMBD_SRC_BASE} ${SMBD_SRC_MAIN}'''