]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
r19202: Make RPC-SAMBA3-SPOOLSS work against w2k3 again
authorVolker Lendecke <vlendec@samba.org>
Mon, 9 Oct 2006 11:52:57 +0000 (11:52 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:20:53 +0000 (14:20 -0500)
(This used to be commit f67a0159d107238a0b2197777fb2d51596f66097)

source4/torture/rpc/samba3rpc.c

index ecc0378471cea4683733fe07d9f4a085e66b666d..91a86387ff1e63595933d5a23e20fc9e5f3ff860 100644 (file)
 
 #include "includes.h"
 #include "libcli/raw/libcliraw.h"
+#include "libcli/rap/rap.h"
 #include "torture/torture.h"
 #include "torture/util.h"
+#include "torture/rap/proto.h"
 #include "librpc/gen_ndr/ndr_lsa.h"
 #include "librpc/gen_ndr/ndr_lsa_c.h"
 #include "librpc/gen_ndr/ndr_samr.h"
@@ -2171,6 +2173,32 @@ BOOL torture_samba3_rpc_lsa(struct torture_context *torture)
        return ret;
 }
 
+static NTSTATUS get_servername(TALLOC_CTX *mem_ctx, struct smbcli_tree *tree,
+                              char **name)
+{
+       struct rap_WserverGetInfo r;
+       NTSTATUS status;
+       char servername[17];
+
+       r.in.level = 0;
+       r.in.bufsize = 0xffff;
+
+       status = smbcli_rap_netservergetinfo(tree, mem_ctx, &r);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+
+       memcpy(servername, r.out.info.info0.name, 16);
+       servername[16] = '\0';
+
+       if (pull_ascii_talloc(mem_ctx, name, servername) < 0) {
+               return NT_STATUS_NO_MEMORY;
+       }
+
+       return NT_STATUS_OK;
+}
+
+
 static NTSTATUS find_printers(TALLOC_CTX *ctx, struct smbcli_tree *tree,
                              const char ***printers, int *num_printers)
 {
@@ -2230,14 +2258,14 @@ static NTSTATUS find_printers(TALLOC_CTX *ctx, struct smbcli_tree *tree,
 }
 
 static BOOL enumprinters(TALLOC_CTX *mem_ctx, struct dcerpc_pipe *pipe,
-                        int level, int *num_printers)
+                        const char *servername, int level, int *num_printers)
 {
        struct spoolss_EnumPrinters r;
        NTSTATUS status;
        DATA_BLOB blob;
 
        r.in.flags = PRINTER_ENUM_LOCAL;
-       r.in.server = "\\\\localhost";
+       r.in.server = talloc_asprintf(mem_ctx, "\\\\%s", servername);
        r.in.level = level;
        r.in.buffer = NULL;
        r.in.offered = 0;
@@ -2354,6 +2382,7 @@ BOOL torture_samba3_rpc_spoolss(struct torture_context *torture)
        const char **printers;
        int num_printers;
        struct spoolss_UserLevel1 userlevel1;
+       char *servername;
 
        if (!(mem_ctx = talloc_new(torture))) {
                return False;
@@ -2367,6 +2396,14 @@ BOOL torture_samba3_rpc_spoolss(struct torture_context *torture)
                return False;
        }
 
+       status = get_servername(mem_ctx, cli->tree, &servername);
+       if (!NT_STATUS_IS_OK(status)) {
+               d_fprintf(stderr, "(%s) get_servername returned %s\n",
+                         __location__, nt_errstr(status));
+               talloc_free(mem_ctx);
+               return False;
+       }
+
        if (!NT_STATUS_IS_OK(find_printers(mem_ctx, cli->tree,
                                           &printers, &num_printers))) {
                talloc_free(mem_ctx);
@@ -2401,7 +2438,8 @@ BOOL torture_samba3_rpc_spoolss(struct torture_context *torture)
                struct spoolss_OpenPrinterEx r;
 
                ZERO_STRUCT(r);
-               r.in.printername = "\\\\localhost";
+               r.in.printername = talloc_asprintf(mem_ctx, "\\\\%s",
+                                                  servername);
                r.in.datatype = NULL;
                r.in.access_mask = 0;
                r.in.level = 1;
@@ -2451,7 +2489,7 @@ BOOL torture_samba3_rpc_spoolss(struct torture_context *torture)
 
                ZERO_STRUCT(r);
                r.in.printername = talloc_asprintf(
-                       mem_ctx, "\\\\localhost\\%s", printers[0]);
+                       mem_ctx, "\\\\%s\\%s", servername, printers[0]);
                r.in.datatype = NULL;
                r.in.access_mask = 0;
                r.in.level = 1;
@@ -2510,7 +2548,8 @@ BOOL torture_samba3_rpc_spoolss(struct torture_context *torture)
 
        {
                int num_enumerated;
-               if (!enumprinters(mem_ctx, p, 1, &num_enumerated)) {
+               if (!enumprinters(mem_ctx, p, servername, 1,
+                                 &num_enumerated)) {
                        d_printf("(%s) enumprinters failed\n", __location__);
                        talloc_free(mem_ctx);
                        return False;
@@ -2526,7 +2565,8 @@ BOOL torture_samba3_rpc_spoolss(struct torture_context *torture)
 
        {
                int num_enumerated;
-               if (!enumprinters(mem_ctx, p, 2, &num_enumerated)) {
+               if (!enumprinters(mem_ctx, p, servername, 2,
+                                 &num_enumerated)) {
                        d_printf("(%s) enumprinters failed\n", __location__);
                        talloc_free(mem_ctx);
                        return False;