root/source4/torture/ndr/atsvc.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. jobenum_in_check
  2. jobenum_out_check
  3. jobadd_in_check
  4. jobadd_out_check
  5. jobdel_in_check
  6. jobdel_out_check
  7. jobgetinfo_in_check
  8. jobgetinfo_out_check
  9. ndr_atsvc_suite

   1 /* 
   2    Unix SMB/CIFS implementation.
   3    test suite for atsvc ndr operations
   4 
   5    Copyright (C) Jelmer Vernooij 2007
   6    
   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.
  11    
  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.
  16    
  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/>.
  19 */
  20 
  21 #include "includes.h"
  22 #include "torture/ndr/ndr.h"
  23 #include "librpc/gen_ndr/ndr_atsvc.h"
  24 
  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
  31 };
  32 
  33 static bool jobenum_in_check(struct torture_context *tctx, 
     /* [<][>][^][v][top][bottom][index][help] */
  34                                                          struct atsvc_JobEnum *r)
  35 {
  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;
  44 }
  45 
  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
  78 };
  79 
  80 static bool jobenum_out_check(struct torture_context *tctx, 
     /* [<][>][^][v][top][bottom][index][help] */
  81                                                          struct atsvc_JobEnum *r)
  82 {
  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");
  95 
  96         return true;
  97 }
  98 
  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
 107 };
 108 
 109 static bool jobadd_in_check(struct torture_context *tctx, 
     /* [<][>][^][v][top][bottom][index][help] */
 110                                                          struct atsvc_JobAdd *r)
 111 {
 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");
 118 
 119         return true;
 120 }
 121 
 122 static const uint8_t jobadd_out_data[] = {
 123   0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 124 };
 125 
 126 static bool jobadd_out_check(struct torture_context *tctx, 
     /* [<][>][^][v][top][bottom][index][help] */
 127                                                          struct atsvc_JobAdd *r)
 128 {
 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;
 132 }
 133 
 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
 139 };
 140 
 141 static bool jobdel_in_check(struct torture_context *tctx, 
     /* [<][>][^][v][top][bottom][index][help] */
 142                                                          struct atsvc_JobDel *r)
 143 {
 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;
 148 }
 149 
 150 static const uint8_t jobdel_out_data[] = {
 151   0xde, 0x0e, 0x00, 0x00
 152 };
 153 
 154 static bool jobdel_out_check(struct torture_context *tctx, 
     /* [<][>][^][v][top][bottom][index][help] */
 155                                                          struct atsvc_JobDel *r)
 156 {
 157         /* FIXME: Check for unknown code 0x00000ede */
 158         return true;
 159 }
 160 
 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
 166 };
 167 
 168 static bool jobgetinfo_in_check(struct torture_context *tctx, 
     /* [<][>][^][v][top][bottom][index][help] */
 169                                                                 struct atsvc_JobGetInfo *r)
 170 {
 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;
 174 }
 175 
 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
 182 };
 183 
 184 static bool jobgetinfo_out_check(struct torture_context *tctx, 
     /* [<][>][^][v][top][bottom][index][help] */
 185                                                                 struct atsvc_JobGetInfo *r)
 186 {
 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;
 194 }
 195 
 196 struct torture_suite *ndr_atsvc_suite(TALLOC_CTX *ctx)
     /* [<][>][^][v][top][bottom][index][help] */
 197 {
 198         struct torture_suite *suite = torture_suite_create(ctx, "atsvc");
 199 
 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 );
 202 
 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 );
 205 
 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 );
 208 
 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 );
 211 
 212         return suite;
 213 }
 214 

/* [<][>][^][v][top][bottom][index][help] */