r14542: Remove librpc, libndr and libnbt from includes.h
[kai/samba-autobuild/.git] / source4 / torture / rap / rap.c
index dd0654f90f2cbd12b4f05c72704f2b7248be041e..bdc2d0d764016d56588b2303e6183c84272b09c3 100644 (file)
 */
 
 #include "includes.h"
-#include "rap.h"
+#include "libcli/libcli.h"
+#include "torture/util.h"
+#include "libcli/rap/rap.h"
+#include "libcli/raw/libcliraw.h"
+#include "libcli/libcli.h"
+#include "librpc/ndr/libndr.h"
 
 struct rap_call {
-       uint16 callno;
+       uint16_t callno;
        char *paramdesc;
        const char *datadesc;
 
-       uint16 status;
-       uint16 convert;
+       uint16_t status;
+       uint16_t convert;
        
-       uint16 rcv_paramlen, rcv_datalen;
+       uint16_t rcv_paramlen, rcv_datalen;
 
        struct ndr_push *ndr_push_param;
        struct ndr_push *ndr_push_data;
@@ -40,11 +45,11 @@ struct rap_call {
 
 #define RAPNDR_FLAGS (LIBNDR_FLAG_NOALIGN|LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
 
-static struct rap_call *new_rap_cli_call(TALLOC_CTX *mem_ctx, uint16 callno)
+static struct rap_call *new_rap_cli_call(TALLOC_CTX *mem_ctx, uint16_t callno)
 {
        struct rap_call *call;
 
-       call = talloc_p(mem_ctx, struct rap_call);
+       call = talloc(mem_ctx, struct rap_call);
 
        if (call == NULL)
                return NULL;
@@ -80,23 +85,23 @@ static void rap_cli_push_paramdesc(struct rap_call *call, char desc)
        call->paramdesc[len+1] = '\0';
 }
 
-static void rap_cli_push_word(struct rap_call *call, uint16 val)
+static void rap_cli_push_word(struct rap_call *call, uint16_t val)
 {
        rap_cli_push_paramdesc(call, 'W');
-       ndr_push_uint16(call->ndr_push_param, val);
+       ndr_push_uint16(call->ndr_push_param, NDR_SCALARS, val);
 }
 
-static void rap_cli_push_dword(struct rap_call *call, uint32 val)
+static void rap_cli_push_dword(struct rap_call *call, uint32_t val)
 {
        rap_cli_push_paramdesc(call, 'D');
-       ndr_push_uint32(call->ndr_push_param, val);
+       ndr_push_uint32(call->ndr_push_param, NDR_SCALARS, val);
 }
 
 static void rap_cli_push_rcvbuf(struct rap_call *call, int len)
 {
        rap_cli_push_paramdesc(call, 'r');
        rap_cli_push_paramdesc(call, 'L');
-       ndr_push_uint16(call->ndr_push_param, len);
+       ndr_push_uint16(call->ndr_push_param, NDR_SCALARS, len);
        call->rcv_datalen = len;
 }
 
@@ -104,7 +109,7 @@ static void rap_cli_expect_multiple_entries(struct rap_call *call)
 {
        rap_cli_push_paramdesc(call, 'e');
        rap_cli_push_paramdesc(call, 'h');
-       call->rcv_paramlen += 4; /* uint16 entry count, uint16 total */
+       call->rcv_paramlen += 4; /* uint16_t entry count, uint16_t total */
 }
 
 static void rap_cli_push_string(struct rap_call *call, const char *str)
@@ -123,15 +128,15 @@ static void rap_cli_expect_format(struct rap_call *call, const char *format)
 }
 
 static NTSTATUS rap_pull_string(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr,
-                               uint16 convert, char **dest)
+                               uint16_t convert, char **dest)
 {
-       uint16 string_offset;
-       uint16 ignore;
+       uint16_t string_offset;
+       uint16_t ignore;
        const char *p;
        size_t len;
 
-       NDR_CHECK(ndr_pull_uint16(ndr, &string_offset));
-       NDR_CHECK(ndr_pull_uint16(ndr, &ignore));
+       NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &string_offset));
+       NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &ignore));
 
        string_offset -= convert;
 
@@ -173,7 +178,7 @@ static NTSTATUS rap_cli_do_call(struct smbcli_state *cli, struct rap_call *call)
        trans.in.setup = NULL;
        trans.in.trans_name = "\\PIPE\\LANMAN";
 
-       NDR_CHECK(ndr_push_uint16(params, call->callno));
+       NDR_CHECK(ndr_push_uint16(params, NDR_SCALARS, call->callno));
        if (call->paramdesc)
                NDR_CHECK(ndr_push_string(params, NDR_SCALARS, call->paramdesc));
        if (call->datadesc)
@@ -207,13 +212,14 @@ static NTSTATUS rap_cli_do_call(struct smbcli_state *cli, struct rap_call *call)
                         } while (0)
 
 static NTSTATUS smbcli_rap_netshareenum(struct smbcli_state *cli,
+                                       TALLOC_CTX *mem_ctx,
                                        struct rap_NetShareEnum *r)
 {
        struct rap_call *call;
        NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
        int i;
 
-       call = new_rap_cli_call(NULL, 0);
+       call = new_rap_cli_call(NULL, RAP_WshareEnum);
 
        if (call == NULL)
                return NT_STATUS_NO_MEMORY;
@@ -236,13 +242,12 @@ static NTSTATUS smbcli_rap_netshareenum(struct smbcli_state *cli,
        if (!NT_STATUS_IS_OK(result))
                goto done;
 
-       NDR_OK(ndr_pull_uint16(call->ndr_pull_param, &r->out.status));
-       NDR_OK(ndr_pull_uint16(call->ndr_pull_param, &r->out.convert));
-       NDR_OK(ndr_pull_uint16(call->ndr_pull_param, &r->out.count));
-       NDR_OK(ndr_pull_uint16(call->ndr_pull_param, &r->out.available));
+       NDR_OK(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
+       NDR_OK(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
+       NDR_OK(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.count));
+       NDR_OK(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.available));
 
-       r->out.info = talloc_array_p(call, union rap_shareenum_info,
-                                    r->out.count);
+       r->out.info = talloc_array(mem_ctx, union rap_shareenum_info, r->out.count);
 
        if (r->out.info == NULL) {
                result = NT_STATUS_NO_MEMORY;
@@ -261,8 +266,8 @@ static NTSTATUS smbcli_rap_netshareenum(struct smbcli_state *cli,
                        NDR_OK(ndr_pull_bytes(call->ndr_pull_data,
                                              (uint8_t *)&r->out.info[i].info1.pad, 1));
                        NDR_OK(ndr_pull_uint16(call->ndr_pull_data,
-                                              &r->out.info[i].info1.type));
-                       NDR_OK(rap_pull_string(call, call->ndr_pull_data,
+                                              NDR_SCALARS, &r->out.info[i].info1.type));
+                       NDR_OK(rap_pull_string(mem_ctx, call->ndr_pull_data,
                                               r->out.convert,
                                               &r->out.info[i].info1.comment));
                        break;
@@ -272,7 +277,7 @@ static NTSTATUS smbcli_rap_netshareenum(struct smbcli_state *cli,
        result = NT_STATUS_OK;
 
  done:
-       talloc_destroy(call);
+       talloc_free(call);
        return result;
 }
 
@@ -280,11 +285,12 @@ static BOOL test_netshareenum(struct smbcli_state *cli)
 {
        struct rap_NetShareEnum r;
        int i;
+       TALLOC_CTX *tmp_ctx = talloc_new(cli);
 
        r.in.level = 1;
        r.in.bufsize = 8192;
 
-       if (!NT_STATUS_IS_OK(smbcli_rap_netshareenum(cli, &r)))
+       if (!NT_STATUS_IS_OK(smbcli_rap_netshareenum(cli, tmp_ctx, &r)))
                return False;
 
        for (i=0; i<r.out.count; i++) {
@@ -293,17 +299,20 @@ static BOOL test_netshareenum(struct smbcli_state *cli)
                       r.out.info[i].info1.comment);
        }
 
+       talloc_free(tmp_ctx);
+
        return True;
 }
 
 static NTSTATUS smbcli_rap_netserverenum2(struct smbcli_state *cli,
+                                         TALLOC_CTX *mem_ctx,
                                          struct rap_NetServerEnum2 *r)
 {
        struct rap_call *call;
        NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
        int i;
 
-       call = new_rap_cli_call(NULL, 104);
+       call = new_rap_cli_call(NULL, RAP_NetServerEnum2);
 
        if (call == NULL)
                return NT_STATUS_NO_MEMORY;
@@ -330,13 +339,12 @@ static NTSTATUS smbcli_rap_netserverenum2(struct smbcli_state *cli,
 
        result = NT_STATUS_INVALID_PARAMETER;
 
-       NDR_OK(ndr_pull_uint16(call->ndr_pull_param, &r->out.status));
-       NDR_OK(ndr_pull_uint16(call->ndr_pull_param, &r->out.convert));
-       NDR_OK(ndr_pull_uint16(call->ndr_pull_param, &r->out.count));
-       NDR_OK(ndr_pull_uint16(call->ndr_pull_param, &r->out.available));
+       NDR_OK(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
+       NDR_OK(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
+       NDR_OK(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.count));
+       NDR_OK(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.available));
 
-       r->out.info = talloc_array_p(call, union rap_server_info,
-                                    r->out.count);
+       r->out.info = talloc_array(mem_ctx, union rap_server_info, r->out.count);
 
        if (r->out.info == NULL) {
                result = NT_STATUS_NO_MEMORY;
@@ -357,8 +365,8 @@ static NTSTATUS smbcli_rap_netserverenum2(struct smbcli_state *cli,
                        NDR_OK(ndr_pull_bytes(call->ndr_pull_data,
                                              &r->out.info[i].info1.version_minor, 1));
                        NDR_OK(ndr_pull_uint32(call->ndr_pull_data,
-                                              &r->out.info[i].info1.servertype));
-                       NDR_OK(rap_pull_string(call, call->ndr_pull_data,
+                                              NDR_SCALARS, &r->out.info[i].info1.servertype));
+                       NDR_OK(rap_pull_string(mem_ctx, call->ndr_pull_data,
                                               r->out.convert,
                                               &r->out.info[i].info1.comment));
                }
@@ -367,7 +375,7 @@ static NTSTATUS smbcli_rap_netserverenum2(struct smbcli_state *cli,
        result = NT_STATUS_OK;
 
  done:
-       talloc_destroy(call);
+       talloc_free(call);
        return result;
 }
 
@@ -375,6 +383,7 @@ static BOOL test_netserverenum(struct smbcli_state *cli)
 {
        struct rap_NetServerEnum2 r;
        int i;
+       TALLOC_CTX *tmp_ctx = talloc_new(cli);
 
        r.in.level = 0;
        r.in.bufsize = 8192;
@@ -382,7 +391,7 @@ static BOOL test_netserverenum(struct smbcli_state *cli)
        r.in.servertype = 0x80000000;
        r.in.domain = NULL;
 
-       if (!NT_STATUS_IS_OK(smbcli_rap_netserverenum2(cli, &r)))
+       if (!NT_STATUS_IS_OK(smbcli_rap_netserverenum2(cli, tmp_ctx, &r)))
                return False;
 
        for (i=0; i<r.out.count; i++) {
@@ -398,6 +407,8 @@ static BOOL test_netserverenum(struct smbcli_state *cli)
                }
        }
 
+       talloc_free(tmp_ctx);
+
        return True;
 }
 
@@ -433,7 +444,7 @@ BOOL torture_raw_rap(void)
        }
 
        torture_close_connection(cli);
-       talloc_destroy(mem_ctx);
+       talloc_free(mem_ctx);
 
        return ret;
 }
@@ -442,7 +453,7 @@ BOOL torture_rap_scan(void)
 {
        TALLOC_CTX *mem_ctx;
        struct smbcli_state *cli;
-       uint16 callno;
+       int callno;
 
        mem_ctx = talloc_init("torture_rap_scan");
 
@@ -456,12 +467,13 @@ BOOL torture_rap_scan(void)
 
                result = rap_cli_do_call(cli, call);
 
-               if (NT_STATUS_EQUAL(result, NT_STATUS_INVALID_PARAMETER))
-                       printf("callno %d is RAP call\n", callno);
+               if (!NT_STATUS_EQUAL(result, NT_STATUS_INVALID_PARAMETER))
+                       continue;
+
+               printf("callno %d is RAP call\n", callno);
        }
 
        torture_close_connection(cli);
 
-
        return True;
 }