s3: Fix bug 8385
[Samba.git] / source4 / torture / ndr / atsvc.c
blob583a3eae49c6cd3bc0ea6e29cbe93fc6a25d2a68
1 /*
2 Unix SMB/CIFS implementation.
3 test suite for atsvc ndr operations
5 Copyright (C) Jelmer Vernooij 2007
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>.
21 #include "includes.h"
22 #include "torture/ndr/ndr.h"
23 #include "librpc/gen_ndr/ndr_atsvc.h"
25 static const uint8_t jobenum_in_data[] = {
26 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
27 0x09, 0x00, 0x00, 0x00, 0x57, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x32, 0x00,
28 0x4b, 0x00, 0x44, 0x00, 0x43, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00,
29 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
30 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
33 static bool jobenum_in_check(struct torture_context *tctx,
34 struct atsvc_JobEnum *r)
36 torture_assert(tctx, r->in.servername != NULL, "servername ptr");
37 torture_assert_str_equal(tctx, r->in.servername, "WIN2KDC1", "servername");
38 torture_assert_int_equal(tctx, r->in.ctr->entries_read, 0, "ctr entries read");
39 torture_assert(tctx, r->in.ctr->first_entry == NULL, "ctr entries first_entry");
40 torture_assert_int_equal(tctx, r->in.preferred_max_len, -1, "preferred max len");
41 torture_assert(tctx, r->in.resume_handle != NULL, "resume handle ptr");
42 torture_assert_int_equal(tctx, *r->in.resume_handle, 0, "resume handle");
43 return true;
46 static const uint8_t jobenum_out_data[] = {
47 0x07, 0x00, 0x00, 0x00, 0x28, 0x14, 0x0a, 0x00, 0x07, 0x00, 0x00, 0x00,
48 0x01, 0x00, 0x00, 0x00, 0xc0, 0xe4, 0x0a, 0x05, 0x00, 0x00, 0x00, 0x00,
49 0x02, 0x13, 0x00, 0x00, 0x40, 0x18, 0x0a, 0x00, 0x02, 0x00, 0x00, 0x00,
50 0xc0, 0xe4, 0x0a, 0x05, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00,
51 0x30, 0x18, 0x0a, 0x00, 0x03, 0x00, 0x00, 0x00, 0xc0, 0xe4, 0x0a, 0x05,
52 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x20, 0x18, 0x0a, 0x00,
53 0x04, 0x00, 0x00, 0x00, 0xc0, 0xe4, 0x0a, 0x05, 0x00, 0x00, 0x00, 0x00,
54 0x02, 0x13, 0x00, 0x00, 0x10, 0x18, 0x0a, 0x00, 0x05, 0x00, 0x00, 0x00,
55 0xc0, 0xe4, 0x0a, 0x05, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00,
56 0x00, 0x18, 0x0a, 0x00, 0x06, 0x00, 0x00, 0x00, 0xc0, 0xe4, 0x0a, 0x05,
57 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0xf0, 0x17, 0x0a, 0x00,
58 0x07, 0x00, 0x00, 0x00, 0xc0, 0xe4, 0x0a, 0x05, 0x00, 0x00, 0x00, 0x00,
59 0x02, 0x13, 0x00, 0x00, 0xe0, 0x17, 0x0a, 0x00, 0x08, 0x00, 0x00, 0x00,
60 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6f, 0x00,
61 0x6f, 0x00, 0x2e, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00, 0x00, 0x00,
62 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
63 0x62, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2e, 0x00, 0x65, 0x00, 0x78, 0x00,
64 0x65, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
65 0x08, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x2e, 0x00,
66 0x65, 0x00, 0x78, 0x00, 0x65, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
67 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6f, 0x00,
68 0x6f, 0x00, 0x2e, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00, 0x00, 0x00,
69 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
70 0x66, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x2e, 0x00, 0x65, 0x00, 0x78, 0x00,
71 0x65, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
72 0x08, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x2e, 0x00,
73 0x65, 0x00, 0x78, 0x00, 0x65, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
74 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6f, 0x00,
75 0x6f, 0x00, 0x2e, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00, 0x00, 0x00,
76 0x07, 0x00, 0x00, 0x00, 0xac, 0x34, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00,
77 0x00, 0x00, 0x00, 0x00
80 static bool jobenum_out_check(struct torture_context *tctx,
81 struct atsvc_JobEnum *r)
83 torture_assert_int_equal(tctx, r->out.ctr->entries_read, 7, "entries read");
84 torture_assert(tctx, r->out.ctr->first_entry != NULL, "first entry");
85 torture_assert_int_equal(tctx, r->out.ctr->first_entry[0].job_id, 1, "job id");
86 torture_assert_int_equal(tctx, r->out.ctr->first_entry[0].job_time, 84600000, "job time");
87 torture_assert_int_equal(tctx, r->out.ctr->first_entry[0].days_of_week, 0x2, "days of week");
88 torture_assert_int_equal(tctx, r->out.ctr->first_entry[0].flags, 0x13, "flags");
89 torture_assert_str_equal(tctx, r->out.ctr->first_entry[0].command, "foo.exe", "command");
90 torture_assert(tctx, r->out.total_entries != NULL, "total entries ptr");
91 torture_assert_int_equal(tctx, *r->out.total_entries, 7, "total entries");
92 torture_assert(tctx, r->out.resume_handle, "resume handle ptr");
93 torture_assert_int_equal(tctx, *r->out.resume_handle, 0, "resume handle");
94 torture_assert_ntstatus_ok(tctx, r->out.result, "return code");
96 return true;
99 static const uint8_t jobadd_in_data[] = {
100 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
101 0x09, 0x00, 0x00, 0x00, 0x57, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x32, 0x00,
102 0x4b, 0x00, 0x44, 0x00, 0x43, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00,
103 0xc0, 0xe4, 0x0a, 0x05, 0x00, 0x00, 0x00, 0x00, 0x02, 0x11, 0x00, 0x00,
104 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
105 0x08, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x2e, 0x00,
106 0x65, 0x00, 0x78, 0x00, 0x65, 0x00, 0x00, 0x00
109 static bool jobadd_in_check(struct torture_context *tctx,
110 struct atsvc_JobAdd *r)
112 torture_assert_str_equal(tctx, r->in.servername, "WIN2KDC1", "servername");
113 torture_assert_int_equal(tctx, r->in.job_info->job_time, 84600000, "time");
114 torture_assert_int_equal(tctx, r->in.job_info->days_of_month, 0, "days of month");
115 torture_assert_int_equal(tctx, r->in.job_info->days_of_week, 0x2, "days of week");
116 torture_assert_int_equal(tctx, r->in.job_info->flags, 17, "flags");
117 torture_assert_str_equal(tctx, r->in.job_info->command, "foo.exe", "command");
119 return true;
122 static const uint8_t jobadd_out_data[] = {
123 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
126 static bool jobadd_out_check(struct torture_context *tctx,
127 struct atsvc_JobAdd *r)
129 torture_assert_int_equal(tctx, *r->out.job_id, 14, "job id");
130 torture_assert_ntstatus_ok(tctx, r->out.result, "return code");
131 return true;
134 static const uint8_t jobdel_in_data[] = {
135 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
136 0x09, 0x00, 0x00, 0x00, 0x57, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x32, 0x00,
137 0x4b, 0x00, 0x44, 0x00, 0x43, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00,
138 0x0e, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00
141 static bool jobdel_in_check(struct torture_context *tctx,
142 struct atsvc_JobDel *r)
144 torture_assert_str_equal(tctx, r->in.servername, "WIN2KDC1", "servername");
145 torture_assert_int_equal(tctx, r->in.min_job_id, 14, "min job id");
146 torture_assert_int_equal(tctx, r->in.max_job_id, 14, "max job id");
147 return true;
150 static const uint8_t jobdel_out_data[] = {
151 0xde, 0x0e, 0x00, 0x00
154 static bool jobdel_out_check(struct torture_context *tctx,
155 struct atsvc_JobDel *r)
157 /* FIXME: Check for unknown code 0x00000ede */
158 return true;
161 static const uint8_t jobgetinfo_in_data[] = {
162 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
163 0x09, 0x00, 0x00, 0x00, 0x57, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x32, 0x00,
164 0x4b, 0x00, 0x44, 0x00, 0x43, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00,
165 0x01, 0x00, 0x00, 0x00
168 static bool jobgetinfo_in_check(struct torture_context *tctx,
169 struct atsvc_JobGetInfo *r)
171 torture_assert_str_equal(tctx, r->in.servername, "WIN2KDC1", "servername");
172 torture_assert_int_equal(tctx, r->in.job_id, 1, "job id");
173 return true;
176 static const uint8_t jobgetinfo_out_data[] = {
177 0x88, 0xe2, 0x09, 0x00, 0xc0, 0xe4, 0x0a, 0x05, 0x00, 0x00, 0x00, 0x00,
178 0x02, 0x13, 0x09, 0x00, 0x98, 0xe2, 0x09, 0x00, 0x08, 0x00, 0x00, 0x00,
179 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6f, 0x00,
180 0x6f, 0x00, 0x2e, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00, 0x00, 0x00,
181 0x00, 0x00, 0x00, 0x00
184 static bool jobgetinfo_out_check(struct torture_context *tctx,
185 struct atsvc_JobGetInfo *r)
187 torture_assert(tctx, *r->out.job_info != NULL, "job info");
188 torture_assert_int_equal(tctx, (*r->out.job_info)->job_time, 84600000, "time");
189 torture_assert_int_equal(tctx, (*r->out.job_info)->days_of_month, 0, "days of month");
190 torture_assert_int_equal(tctx, (*r->out.job_info)->days_of_week, 0x2, "days of week");
191 torture_assert_int_equal(tctx, (*r->out.job_info)->flags, 0x13, "flags");
192 torture_assert_str_equal(tctx, (*r->out.job_info)->command, "foo.exe", "command");
193 return true;
196 struct torture_suite *ndr_atsvc_suite(TALLOC_CTX *ctx)
198 struct torture_suite *suite = torture_suite_create(ctx, "atsvc");
200 torture_suite_add_ndr_pull_fn_test(suite, atsvc_JobEnum, jobenum_in_data, NDR_IN, jobenum_in_check );
201 torture_suite_add_ndr_pull_fn_test(suite, atsvc_JobEnum, jobenum_out_data, NDR_OUT, jobenum_out_check );
203 torture_suite_add_ndr_pull_fn_test(suite, atsvc_JobAdd, jobadd_in_data, NDR_IN, jobadd_in_check );
204 torture_suite_add_ndr_pull_fn_test(suite, atsvc_JobAdd, jobadd_out_data, NDR_OUT, jobadd_out_check );
206 torture_suite_add_ndr_pull_fn_test(suite, atsvc_JobDel, jobdel_in_data, NDR_IN, jobdel_in_check );
207 torture_suite_add_ndr_pull_fn_test(suite, atsvc_JobDel, jobdel_out_data, NDR_OUT, jobdel_out_check );
209 torture_suite_add_ndr_pull_fn_test(suite, atsvc_JobGetInfo, jobgetinfo_in_data, NDR_IN, jobgetinfo_in_check );
210 torture_suite_add_ndr_pull_fn_test(suite, atsvc_JobGetInfo, jobgetinfo_out_data, NDR_OUT, jobgetinfo_out_check );
212 return suite;