printing/spoolss: add ARM64 support
authorBjörn Jacke <bj@sernet.de>
Wed, 7 Oct 2020 16:00:25 +0000 (18:00 +0200)
committerRalph Boehme <slow@samba.org>
Sat, 17 Oct 2020 09:22:31 +0000 (09:22 +0000)
Signed-off-by: Bjoern Jacke <bjacke@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
librpc/idl/spoolss.idl
source3/include/nt_printing.h
source3/printing/nt_printing.c
source3/rpc_server/spoolss/srv_spoolss_nt.c

index e73f8cf844fa93d1c5694f76dcc4bc8c4ab1bf77..c82c3901f81799565c26c5d5858726ef5cbafca0 100644 (file)
@@ -1866,6 +1866,7 @@ cpp_quote("#define spoolss_security_descriptor security_descriptor")
        const string SPL_ARCH_IA64              = "IA64";
        const string SPL_ARCH_X64               = "x64";
        const string SPL_ARCH_ARM               = "ARM";
+       const string SPL_ARCH_ARM64             = "ARM64";
 
        const string SPOOLSS_ARCHITECTURE_ALL                   = "All";
        const string SPOOLSS_ARCHITECTURE_ALL_CLUSTER           = "AllCluster";
@@ -1877,6 +1878,7 @@ cpp_quote("#define spoolss_security_descriptor security_descriptor")
        const string SPOOLSS_ARCHITECTURE_W32PPC                = "Windows NT PowerPC";
        const string SPOOLSS_ARCHITECTURE_W32ALPHA              = "Windows NT Alpha AXP";
        const string SPOOLSS_ARCHITECTURE_ARM                   = "Windows ARM";
+       const string SPOOLSS_ARCHITECTURE_ARM64                 = "Windows ARM64";
        const string SPOOLSS_DEFAULT_SERVER_PATH                = "C:\\WINDOWS\\system32\\spool";
 
        typedef [public,gensize] struct {
index e5391687556b50323b6c0519f3c8f0de8cb5df09..bd94821a29c5b844dcb84806fa3fb1fa7f9cde89 100644 (file)
@@ -205,6 +205,7 @@ static const struct print_architecture_table_node archi_table[]= {
        {SPOOLSS_ARCHITECTURE_W32PPC,   SPL_ARCH_W32PPC,        2 },
        {SPOOLSS_ARCHITECTURE_IA_64,    SPL_ARCH_IA64,          3 },
        {SPOOLSS_ARCHITECTURE_x64,      SPL_ARCH_X64,           3 },
+       {SPOOLSS_ARCHITECTURE_ARM64,    SPL_ARCH_ARM64,         3 },
        {NULL,                   "",            -1 }
 };
 
index 3654a4c9b7f3dedc97d021aa43f7de3c674a7644..2e9205ec1b4d7162067ec7341b5cfb6307d41471 100644 (file)
@@ -75,6 +75,7 @@ static bool print_driver_directories_init(void)
        const char *dir_list[] = {
                "W32X86/PCC",
                "x64/PCC",
+               "ARM64",
                "color"
        };
 
@@ -1001,8 +1002,9 @@ static uint32_t get_correct_cversion(const struct auth_session_info *session_inf
        }
 
        /* If architecture is Windows x64, the version is always 3. */
-       if (strcmp(architecture, SPL_ARCH_X64) == 0) {
-               DEBUG(10,("get_correct_cversion: Driver is x64, cversion = 3\n"));
+       if (strcmp(architecture, SPL_ARCH_X64) == 0 ||
+               strcmp(architecture, SPL_ARCH_ARM64) == 0) {
+               DBG_DEBUG("get_correct_cversion: this architecture must be, cversion = 3\n");
                *perr = WERR_OK;
                TALLOC_FREE(frame);
                return 3;
index e42926a97fa17e0cc3bc71341d62ac88ce3f8607..f814ad96bf4ebf56dd5dd609161285bd54c05d7a 100644 (file)
@@ -3939,6 +3939,9 @@ static WERROR construct_printer_info0(TALLOC_CTX *mem_ctx,
        if (strequal(architecture, SPOOLSS_ARCHITECTURE_x64)) {
                processor_architecture  = PROCESSOR_ARCHITECTURE_AMD64;
                processor_type          = PROCESSOR_AMD_X8664;
+       } else if (strequal(architecture, SPOOLSS_ARCHITECTURE_ARM64)) {
+               processor_architecture  = PROCESSOR_ARCHITECTURE_ARM64;
+               processor_type          = PROCESSOR_ARM820;
        } else {
                processor_architecture  = PROCESSOR_ARCHITECTURE_INTEL;
                processor_type          = PROCESSOR_INTEL_PENTIUM;