summaryrefslogtreecommitdiff
path: root/source4/torture
diff options
context:
space:
mode:
Diffstat (limited to 'source4/torture')
-rw-r--r--source4/torture/rpc/spoolss.c125
1 files changed, 27 insertions, 98 deletions
diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c
index c11a004e33..8e4ea15677 100644
--- a/source4/torture/rpc/spoolss.c
+++ b/source4/torture/rpc/spoolss.c
@@ -162,24 +162,16 @@ static BOOL test_EnumForms(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
status = dcerpc_spoolss_EnumForms(p, mem_ctx, &r);
- if (!r.out.buffer) {
+ if (!r.out.info) {
printf("No forms returned");
return False;
}
- status = pull_spoolss_FormInfoArray(r.out.buffer, mem_ctx, r.in.level, r.out.count, &info);
- if (!NT_STATUS_IS_OK(status)) {
- printf("EnumFormsArray parse failed - %s\n", nt_errstr(status));
- return False;
- }
-
- for (j=0;j<r.out.count;j++) {
- printf("Form %d\n", j);
- NDR_PRINT_UNION_DEBUG(spoolss_FormInfo, r.in.level, &info[j]);
- }
+ info = *r.out.info;
- for (j = 0; j < r.out.count; j++)
+ for (j = 0; j < r.out.count; j++) {
test_GetForm(p, mem_ctx, handle, info[j].info1.formname);
+ }
}
if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(r.out.result)) {
@@ -298,8 +290,6 @@ static BOOL test_EnumPorts(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
if (W_ERROR_EQUAL(r.out.result, WERR_INSUFFICIENT_BUFFER)) {
DATA_BLOB blob = data_blob_talloc(mem_ctx, NULL, buf_size);
- union spoolss_PortInfo *info;
- int j;
data_blob_clear(&blob);
r.in.buffer = &blob;
@@ -311,25 +301,10 @@ static BOOL test_EnumPorts(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
return False;
}
- if (!r.out.buffer) {
+ if (!r.out.info) {
printf("No ports returned");
return False;
}
-
- status = pull_spoolss_PortInfoArray(r.out.buffer, mem_ctx,
- r.in.level, r.out.count,
- &info);
- if (!NT_STATUS_IS_OK(status)) {
- printf("EnumPortArray parse failed - %s\n",
- nt_errstr(status));
- return False;
- }
-
- for (j=0;j<r.out.count;j++) {
- printf("Port %d\n", j);
- NDR_PRINT_UNION_DEBUG(spoolss_PortInfo, r.in.level,
- &info[j]);
- }
}
return True;
@@ -433,31 +408,16 @@ static BOOL test_EnumJobs(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
status = dcerpc_spoolss_EnumJobs(p, mem_ctx, &r);
- if (!r.out.buffer) {
+ if (!r.out.info) {
printf("No jobs returned");
return True;
}
- status = pull_spoolss_JobInfoArray(
- r.out.buffer, mem_ctx, r.in.level, r.out.count,
- &info);
-
- if (!NT_STATUS_IS_OK(status)) {
- printf("EnumJobsArray parse failed - %s\n",
- nt_errstr(status));
- return False;
- }
-
- for (j = 0; j < r.out.count; j++) {
- printf("Job %d\n", j);
- NDR_PRINT_UNION_DEBUG(
- spoolss_JobInfo, r.in.level, &info[j]);
- }
+ info = *r.out.info;
for (j = 0; j < r.out.count; j++) {
test_GetJob(p, mem_ctx, handle, info[j].info1.job_id);
- test_SetJob(
- p, mem_ctx, handle, info[j].info1.job_id, 1);
+ test_SetJob(p, mem_ctx, handle, info[j].info1.job_id, 1);
}
} else if (!W_ERROR_IS_OK(r.out.result)) {
@@ -697,7 +657,7 @@ static BOOL test_OpenPrinter(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
r.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
r.out.handle = &handle;
- printf("\nTesting OpenPrinter(\\\\%s)\n", r.in.server);
+ printf("\nTesting OpenPrinter(%s)\n", r.in.server);
status = dcerpc_spoolss_OpenPrinter(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(r.out.result)) {
@@ -858,21 +818,12 @@ static BOOL test_EnumPrinters(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
continue;
}
- if (!r.out.buffer) {
+ if (!r.out.info) {
printf("No printers returned");
continue;
}
- status = pull_spoolss_PrinterInfoArray(r.out.buffer, mem_ctx, r.in.level, r.out.count, &info);
- if (!NT_STATUS_IS_OK(status)) {
- printf("EnumPrintersArray parse failed - %s\n", nt_errstr(status));
- continue;
- }
-
- for (j=0;j<r.out.count;j++) {
- printf("Printer %d\n", j);
- NDR_PRINT_UNION_DEBUG(spoolss_PrinterInfo, r.in.level, &info[j]);
- }
+ info = *r.out.info;
for (j=0;j<r.out.count;j++) {
if (r.in.level == 1) {
@@ -943,12 +894,10 @@ static BOOL test_EnumPrinterDrivers(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
for (i=0;i<ARRAY_SIZE(levels);i++) {
uint32_t buf_size;
- char *server;
union spoolss_DriverInfo *info;
uint32_t j;
- asprintf(&server, "\\\\%s", dcerpc_server_name(p));
- r.in.server = server;
+ r.in.server = talloc_asprintf(mem_ctx, "\\\\%s", dcerpc_server_name(p));
r.in.environment = "Windows NT x86";
r.in.level = levels[i];
r.in.buffer = NULL;
@@ -966,62 +915,42 @@ static BOOL test_EnumPrinterDrivers(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
ret = False;
continue;
}
-
+
if (W_ERROR_EQUAL(r.out.result, WERR_INSUFFICIENT_BUFFER)) {
DATA_BLOB blob = data_blob_talloc(
mem_ctx, NULL, buf_size);
data_blob_clear(&blob);
r.in.buffer = &blob;
- status = dcerpc_spoolss_EnumPrinterDrivers(
- p, mem_ctx, &r);
+ status = dcerpc_spoolss_EnumPrinterDrivers(p, mem_ctx, &r);
}
if (!NT_STATUS_IS_OK(status) ||
!W_ERROR_IS_OK(r.out.result)) {
printf("EnumPrinterDrivers failed - %s/%s\n",
nt_errstr(status), win_errstr(r.out.result));
- goto done;
+ break;
}
- if (!r.out.buffer) {
+ if (!r.out.info) {
printf("No printer drivers returned");
- goto done;
+ break;
}
- status = pull_spoolss_DriverInfoArray(
- r.out.buffer, mem_ctx, r.in.level, r.out.count, &info);
+ info = *r.out.info;
- if (!NT_STATUS_IS_OK(status)) {
- printf("EnumPrinterDriverArray parse failed - %s\n",
- nt_errstr(status));
- continue;
- }
+ if (r.in.level != 1) continue;
for (j=0;j<r.out.count;j++) {
- printf("Printer driver %d\n", j);
- NDR_PRINT_UNION_DEBUG(
- spoolss_DriverInfo, r.in.level,
- &info[j]);
-
- if (r.in.level == 1) {
- struct policy_handle handle;
+ struct policy_handle handle;
- if (!call_OpenPrinterEx(
- p, mem_ctx, "",
- &handle))
- continue;
-
- test_GetPrinterDriver2(
- p, mem_ctx, &handle,
- info[j].info1.driver_name);
+ if (!call_OpenPrinterEx(p, mem_ctx, "",&handle)) {
+ continue;
}
+ ret &=test_GetPrinterDriver2(p, mem_ctx, &handle, info[j].info1.driver_name);
}
-
- done:
- free(server);
}
-
+
return ret;
}
@@ -1032,8 +961,6 @@ BOOL torture_rpc_spoolss(void)
TALLOC_CTX *mem_ctx;
BOOL ret = True;
- mem_ctx = talloc_init("torture_rpc_spoolss");
-
status = torture_rpc_connection(&p,
DCERPC_SPOOLSS_NAME,
DCERPC_SPOOLSS_UUID,
@@ -1042,6 +969,8 @@ BOOL torture_rpc_spoolss(void)
return False;
}
+ mem_ctx = talloc_init("torture_rpc_spoolss");
+
if (!test_EnumPorts(p, mem_ctx)) {
ret = False;
}
@@ -1053,7 +982,7 @@ BOOL torture_rpc_spoolss(void)
if (!test_EnumPrinterDrivers(p, mem_ctx)) {
ret = False;
}
-
+printf("blub\n");
talloc_free(mem_ctx);
torture_rpc_close(p);