svn commit: samba r19200 - in branches/SAMBA_4_0/source: libcli/rap
torture/rap
vlendec at samba.org
vlendec at samba.org
Mon Oct 9 11:19:31 GMT 2006
Author: vlendec
Date: 2006-10-09 11:19:30 +0000 (Mon, 09 Oct 2006)
New Revision: 19200
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=19200
Log:
Implement smbcli_rap_netservergetinfo. To be used in RPC-SAMBA3SPOOLSS and
others that might need the server name.
Volker
Modified:
branches/SAMBA_4_0/source/libcli/rap/rap.h
branches/SAMBA_4_0/source/torture/rap/rap.c
Changeset:
Modified: branches/SAMBA_4_0/source/libcli/rap/rap.h
===================================================================
--- branches/SAMBA_4_0/source/libcli/rap/rap.h 2006-10-09 11:13:49 UTC (rev 19199)
+++ branches/SAMBA_4_0/source/libcli/rap/rap.h 2006-10-09 11:19:30 UTC (rev 19200)
@@ -343,3 +343,17 @@
union rap_server_info *info;
} out;
};
+
+struct rap_WserverGetInfo {
+ struct {
+ uint16_t level;
+ uint16_t bufsize;
+ } in;
+
+ struct {
+ uint16_t status;
+ uint16_t convert;
+ uint16_t available;
+ union rap_server_info info;
+ } out;
+};
Modified: branches/SAMBA_4_0/source/torture/rap/rap.c
===================================================================
--- branches/SAMBA_4_0/source/torture/rap/rap.c 2006-10-09 11:13:49 UTC (rev 19199)
+++ branches/SAMBA_4_0/source/torture/rap/rap.c 2006-10-09 11:19:30 UTC (rev 19200)
@@ -113,6 +113,12 @@
call->rcv_paramlen += 4; /* uint16_t entry count, uint16_t total */
}
+static void rap_cli_expect_word(struct rap_call *call)
+{
+ rap_cli_push_paramdesc(call, 'h');
+ call->rcv_paramlen += 2;
+}
+
static void rap_cli_push_string(struct rap_call *call, const char *str)
{
if (str == NULL) {
@@ -313,7 +319,7 @@
NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
int i;
- call = new_rap_cli_call(NULL, RAP_NetServerEnum2);
+ call = new_rap_cli_call(mem_ctx, RAP_NetServerEnum2);
if (call == NULL)
return NT_STATUS_NO_MEMORY;
@@ -413,21 +419,97 @@
return True;
}
+NTSTATUS smbcli_rap_netservergetinfo(struct smbcli_state *cli,
+ TALLOC_CTX *mem_ctx,
+ struct rap_WserverGetInfo *r)
+{
+ struct rap_call *call;
+ NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+ if (!(call = new_rap_cli_call(mem_ctx, RAP_WserverGetInfo))) {
+ return NT_STATUS_NO_MEMORY;
+ }
-static BOOL test_rap(struct smbcli_state *cli)
+ rap_cli_push_word(call, r->in.level);
+ rap_cli_push_rcvbuf(call, r->in.bufsize);
+ rap_cli_expect_word(call);
+
+ switch(r->in.level) {
+ case 0:
+ rap_cli_expect_format(call, "B16");
+ break;
+ case 1:
+ rap_cli_expect_format(call, "B16BBDz");
+ break;
+ default:
+ result = NT_STATUS_INVALID_PARAMETER;
+ goto done;
+ }
+
+ result = rap_cli_do_call(cli, call);
+
+ if (!NT_STATUS_IS_OK(result))
+ goto done;
+
+ 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.available));
+
+ switch(r->in.level) {
+ case 0:
+ NDR_OK(ndr_pull_bytes(call->ndr_pull_data,
+ (uint8_t *)r->out.info.info0.name, 16));
+ break;
+ case 1:
+ NDR_OK(ndr_pull_bytes(call->ndr_pull_data,
+ (uint8_t *)r->out.info.info1.name, 16));
+ NDR_OK(ndr_pull_bytes(call->ndr_pull_data,
+ &r->out.info.info1.version_major, 1));
+ NDR_OK(ndr_pull_bytes(call->ndr_pull_data,
+ &r->out.info.info1.version_minor, 1));
+ NDR_OK(ndr_pull_uint32(call->ndr_pull_data,
+ NDR_SCALARS, &r->out.info.info1.servertype));
+ NDR_OK(rap_pull_string(mem_ctx, call->ndr_pull_data,
+ r->out.convert,
+ &r->out.info.info1.comment));
+ }
+ done:
+ talloc_free(call);
+ return result;
+}
+
+static BOOL test_netservergetinfo(struct smbcli_state *cli)
{
+ struct rap_WserverGetInfo r;
BOOL res = True;
+ TALLOC_CTX *mem_ctx;
- if (!test_netserverenum(cli))
- res = False;
+ if (!(mem_ctx = talloc_new(cli))) {
+ return False;
+ }
- if (!test_netshareenum(cli))
- res = False;
+ r.in.bufsize = 0xffff;
+ r.in.level = 0;
+ res &= NT_STATUS_IS_OK(smbcli_rap_netservergetinfo(cli, mem_ctx, &r));
+ r.in.level = 1;
+ res &= NT_STATUS_IS_OK(smbcli_rap_netservergetinfo(cli, mem_ctx, &r));
+
+ talloc_free(mem_ctx);
return res;
}
+static BOOL test_rap(struct smbcli_state *cli)
+{
+ BOOL res = True;
+
+ res &= test_netserverenum(cli);
+ res &= test_netshareenum(cli);
+ res &= test_netservergetinfo(cli);
+
+ return res;
+}
+
BOOL torture_rap_basic(struct torture_context *torture)
{
struct smbcli_state *cli;
More information about the samba-cvs
mailing list