Guenther
Signed-off-by: Günther Deschner <gd@samba.org>
Reviewed-by: David Disseldorp <ddiss@samba.org>
WERROR spoolss_SetForm(
[in,ref] policy_handle *handle,
[in] [string,charset(UTF16)] uint16 form_name[],
WERROR spoolss_SetForm(
[in,ref] policy_handle *handle,
[in] [string,charset(UTF16)] uint16 form_name[],
- [in] uint32 level,
- [in,switch_is(level)] spoolss_AddFormInfo info
+ [in,ref] spoolss_AddFormInfoCtr *info_ctr
WERROR _spoolss_SetForm(struct pipes_struct *p,
struct spoolss_SetForm *r)
{
WERROR _spoolss_SetForm(struct pipes_struct *p,
struct spoolss_SetForm *r)
{
- struct spoolss_AddFormInfo1 *form = r->in.info.info1;
+ struct spoolss_AddFormInfo1 *form;
const char *form_name = r->in.form_name;
int snum = -1;
WERROR status = WERR_OK;
const char *form_name = r->in.form_name;
int snum = -1;
WERROR status = WERR_OK;
return WERR_ACCESS_DENIED;
}
return WERR_ACCESS_DENIED;
}
+ if (r->in.info_ctr->level != 1) {
+ return WERR_INVALID_LEVEL;
+ }
+
+ form = r->in.info_ctr->info.info1;
+ if (!form) {
+ return WERR_INVALID_PARAM;
+ }
+
tmp_ctx = talloc_new(p->mem_ctx);
if (!tmp_ctx) {
return WERR_NOMEM;
tmp_ctx = talloc_new(p->mem_ctx);
if (!tmp_ctx) {
return WERR_NOMEM;
WERROR werror;
NTSTATUS status;
const char *printername;
WERROR werror;
NTSTATUS status;
const char *printername;
- union spoolss_AddFormInfo info;
+ struct spoolss_AddFormInfoCtr info_ctr;
struct spoolss_AddFormInfo1 info1;
struct dcerpc_binding_handle *b = cli->binding_handle;
struct spoolss_AddFormInfo1 info1;
struct dcerpc_binding_handle *b = cli->binding_handle;
info1.area.bottom = 3000;
info1.form_name = argv[2];
info1.area.bottom = 3000;
info1.form_name = argv[2];
+ info_ctr.info.info1 = &info1;
+ info_ctr.level = 1;
/* Set the form */
status = dcerpc_spoolss_SetForm(b, mem_ctx,
&handle,
argv[2],
/* Set the form */
status = dcerpc_spoolss_SetForm(b, mem_ctx,
&handle,
argv[2],
&werror);
if (!NT_STATUS_IS_OK(status)) {
werror = ntstatus_to_werror(status);
&werror);
if (!NT_STATUS_IS_OK(status)) {
werror = ntstatus_to_werror(status);
+ switch (r->in.info_ctr->level) {
- if (!r->in.info.info1) {
+ if (!r->in.info_ctr->info.info1) {
return WERR_FOOBAR;
}
count = sptr_db_search(sptr_db, mem_ctx,
ldb_dn_new(mem_ctx, sptr_db, "CN=Forms,CN=PrintServer"),
&msgs, attrs, "(&(form-name=%s)(objectClass=form))",
return WERR_FOOBAR;
}
count = sptr_db_search(sptr_db, mem_ctx,
ldb_dn_new(mem_ctx, sptr_db, "CN=Forms,CN=PrintServer"),
&msgs, attrs, "(&(form-name=%s)(objectClass=form))",
- r->in.info.info1->form_name);
+ r->in.info_ctr->info.info1->form_name);
if (count == 0) return WERR_FOOBAR;
if (count > 1) return WERR_FOOBAR;
if (count == 0) return WERR_FOOBAR;
if (count > 1) return WERR_FOOBAR;
/* add core elements to the ldb_message for the user */
msg->dn = msgs[0]->dn;
/* add core elements to the ldb_message for the user */
msg->dn = msgs[0]->dn;
- SET_UINT(sptr_db, msg, "flags", r->in.info.info1->flags);
+ SET_UINT(sptr_db, msg, "flags", r->in.info_ctr->info.info1->flags);
- SET_STRING(sptr_db, msg, "form-name", r->in.info.info1->form_name);
+ SET_STRING(sptr_db, msg, "form-name", r->in.info_ctr->info.info1->form_name);
- SET_UINT(sptr_db, msg, "size-width", r->in.info.info1->size.width);
- SET_UINT(sptr_db, msg, "size-height", r->in.info.info1->size.height);
+ SET_UINT(sptr_db, msg, "size-width", r->in.info_ctr->info.info1->size.width);
+ SET_UINT(sptr_db, msg, "size-height", r->in.info_ctr->info.info1->size.height);
- SET_UINT(sptr_db, msg, "area-left", r->in.info.info1->area.left);
- SET_UINT(sptr_db, msg, "area-top", r->in.info.info1->area.top);
- SET_UINT(sptr_db, msg, "area-right", r->in.info.info1->area.right);
- SET_UINT(sptr_db, msg, "area-bottom", r->in.info.info1->area.bottom);
+ SET_UINT(sptr_db, msg, "area-left", r->in.info_ctr->info.info1->area.left);
+ SET_UINT(sptr_db, msg, "area-top", r->in.info_ctr->info.info1->area.top);
+ SET_UINT(sptr_db, msg, "area-right", r->in.info_ctr->info.info1->area.right);
+ SET_UINT(sptr_db, msg, "area-bottom", r->in.info_ctr->info.info1->area.bottom);
break;
default:
return WERR_UNKNOWN_LEVEL;
break;
default:
return WERR_UNKNOWN_LEVEL;
union spoolss_AddFormInfo *info)
{
struct spoolss_SetForm r;
union spoolss_AddFormInfo *info)
{
struct spoolss_SetForm r;
+ struct spoolss_AddFormInfoCtr info_ctr;
+
+ info_ctr.level = level;
+ info_ctr.info = *info;
r.in.handle = handle;
r.in.form_name = form_name;
r.in.handle = handle;
r.in.form_name = form_name;
- r.in.level = level;
- r.in.info = *info;
+ r.in.info_ctr = &info_ctr;
torture_comment(tctx, "Testing SetForm(%s) level %d\n",
torture_comment(tctx, "Testing SetForm(%s) level %d\n",
- form_name, r.in.level);
torture_assert_ntstatus_ok(tctx, dcerpc_spoolss_SetForm_r(b, tctx, &r),
"SetForm failed");
torture_assert_ntstatus_ok(tctx, dcerpc_spoolss_SetForm_r(b, tctx, &r),
"SetForm failed");