summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/librpc/idl/spoolss.idl6
-rw-r--r--source4/torture/rpc/spoolss.c27
2 files changed, 29 insertions, 4 deletions
diff --git a/source4/librpc/idl/spoolss.idl b/source4/librpc/idl/spoolss.idl
index 99db12b34d..2d70372125 100644
--- a/source4/librpc/idl/spoolss.idl
+++ b/source4/librpc/idl/spoolss.idl
@@ -347,7 +347,11 @@
/******************/
/* Function: 0x21 */
- WERROR spoolss_21(
+ WERROR spoolss_SetForm(
+ [in,ref] policy_handle *handle,
+ [in] unistr form_name,
+ [in] uint32 level,
+ [in,switch_is(level)] spoolss_AddFormInfo info
);
typedef [nodiscriminant,public] union {
diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c
index 468484e471..c355b8d9bc 100644
--- a/source4/torture/rpc/spoolss.c
+++ b/source4/torture/rpc/spoolss.c
@@ -216,6 +216,7 @@ BOOL test_AddForm(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
struct spoolss_AddFormInfo1 form;
NTSTATUS status;
char *formname = "testform3";
+ BOOL ret = True;
r.in.handle = handle;
r.in.level = 1;
@@ -238,15 +239,35 @@ BOOL test_AddForm(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
if (!W_ERROR_IS_OK(r.out.result)) {
printf("AddForm failed - %s\n", nt_errstr(status));
- /* Fall through to delete form */
+ goto done;
}
+ {
+ struct spoolss_SetForm sf;
+
+ sf.in.handle = handle;
+ sf.in.form_name = formname;
+ sf.in.level = 1;
+ sf.in.info.info1 = &form;
+ form.width = 1234;
+
+ status = dcerpc_spoolss_SetForm(p, mem_ctx, &sf);
+
+ if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(r.out.result)) {
+ printf("SetForm failed - %s/%s\n",
+ nt_errstr(status), win_errstr(r.out.result));
+ ret = False;
+ /* Fall through to delete */
+ }
+ }
+
+ done:
if (!test_DeleteForm(p, mem_ctx, handle, formname)) {
printf("DeleteForm failed\n");
- return False;
+ ret = False;
}
- return True;
+ return ret;
}
BOOL test_EnumPrinterData(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,