{
size_t count = 0;
+ if (!s) {
+ return 0;
+ }
+
while (*s && !(((unsigned char)s[0]) & 0x7F)) {
s++;
count++;
}
- if (!*s)
- return;
+ if (!*s) {
+ return count;
+ }
push_ucs2(NULL,tmpbuf,s, sizeof(tmpbuf), STR_TERMINATE);
return count + strlen_w(tmpbuf);
typedef struct {
samr_Name comment;
- uint32 unknown1;
- uint32 unknown2;
+ samr_Name unknown; /* settable, but doesn't stick. probably obsolete */
uint16 country_code;
uint16 code_page;
} samr_UserInfo2;
}
}
NDR_ALLOC_N_SIZE(ndr, r->first_entry, r->entries_read, sizeof(r->first_entry[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->first_entry, sizeof(r->first_entry[0]), r->entries_read, (ndr_pull_flags_fn_t)ndr_pull_atsvc_JobEnumInfo));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->stores, r->num_stores, sizeof(r->stores[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->stores, sizeof(r->stores[0]), r->num_stores, (ndr_pull_flags_fn_t)ndr_pull_dfs_StorageInfo));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->stores, r->num_stores, sizeof(r->stores[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->stores, sizeof(r->stores[0]), r->num_stores, (ndr_pull_flags_fn_t)ndr_pull_dfs_StorageInfo));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->s, r->count, sizeof(r->s[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->s, sizeof(r->s[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_dfs_Info1));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->s, r->count, sizeof(r->s[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->s, sizeof(r->s[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_dfs_Info2));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->s, r->count, sizeof(r->s[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->s, sizeof(r->s[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_dfs_Info3));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->s, r->count, sizeof(r->s[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->s, sizeof(r->s[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_dfs_Info4));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->s, r->count, sizeof(r->s[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->s, sizeof(r->s[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_dfs_Info200));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->s, r->count, sizeof(r->s[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->s, sizeof(r->s[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_dfs_Info300));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->out.out_data, r->in.len, sizeof(r->out.out_data[0]));
+ {
NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.out_data, r->in.len));
}
+ }
return NT_STATUS_OK;
}
return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should be %u", _array_size, r->in.len);
}
}
+ {
NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.data, r->in.len));
}
+ }
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->privs, r->count, sizeof(r->privs[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->privs, sizeof(r->privs[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_lsa_PrivEntry));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->settings, r->count, sizeof(r->settings[0]));
+ {
NDR_CHECK(ndr_pull_array_uint32(ndr, NDR_SCALARS|NDR_BUFFERS, r->settings, r->count));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->sids, r->num_sids, sizeof(r->sids[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->sids, sizeof(r->sids[0]), r->num_sids, (ndr_pull_flags_fn_t)ndr_pull_lsa_SidPtr));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->domains, r->count, sizeof(r->domains[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->domains, sizeof(r->domains[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_lsa_DomainInformation));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->sids, r->count, sizeof(r->sids[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->sids, sizeof(r->sids[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_lsa_TranslatedSid));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->domains, r->count, sizeof(r->domains[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->domains, sizeof(r->domains[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_lsa_TrustInformation));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->names, r->count, sizeof(r->names[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->names, sizeof(r->names[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_lsa_TranslatedName));
}
+ }
done:
return NT_STATUS_OK;
}
return ndr_pull_error(ndr, NDR_ERR_CONFORMANT_SIZE, "Bad conformant size %u should be %u", _conformant_size, r->count);
}
NDR_ALLOC_N_SIZE(ndr, r->set, _conformant_size, sizeof(r->set[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->set, sizeof(r->set[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_lsa_LUIDAttribute));
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->names, r->count, sizeof(r->names[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->names, sizeof(r->names[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_lsa_Name));
}
+ }
done:
return NT_STATUS_OK;
}
NDR_CHECK(ndr_pull_align(ndr, 4));
NDR_CHECK(ndr_pull_uint8(ndr, &r->sid_rev_num));
NDR_CHECK(ndr_pull_uint8(ndr, &r->num_auths));
+ {
NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->id_auth, 6));
+ }
NDR_ALLOC_N_SIZE(ndr, r->sub_auths, r->num_auths, sizeof(r->sub_auths[0]));
+ {
NDR_CHECK(ndr_pull_array_uint32(ndr, NDR_SCALARS, r->sub_auths, r->num_auths));
+ }
ndr_pull_struct_end(ndr);
buffers:
if (!(ndr_flags & NDR_BUFFERS)) goto done;
+ {
NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_BUFFERS, r->id_auth, 6));
+ }
+ {
NDR_CHECK(ndr_pull_array_uint32(ndr, NDR_BUFFERS, r->sub_auths, r->num_auths));
+ }
done:
return NT_STATUS_OK;
}
NDR_CHECK(ndr_pull_uint16(ndr, &r->revision));
NDR_CHECK(ndr_pull_uint32(ndr, &r->num_aces));
NDR_ALLOC_N_SIZE(ndr, r->aces, r->num_aces, sizeof(r->aces[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS, (void **)r->aces, sizeof(r->aces[0]), r->num_aces, (ndr_pull_flags_fn_t)ndr_pull_security_ace));
+ }
ndr_pull_struct_end(ndr);
buffers:
if (!(ndr_flags & NDR_BUFFERS)) goto done;
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_BUFFERS, (void **)r->aces, sizeof(r->aces[0]), r->num_aces, (ndr_pull_flags_fn_t)ndr_pull_security_ace));
+ }
done:
return NT_STATUS_OK;
}
NDR_CHECK(ndr_push_struct_start(ndr));
NDR_CHECK(ndr_push_align(ndr, 4));
NDR_CHECK(ndr_push_samr_Name(ndr, NDR_SCALARS, &r->comment));
- NDR_CHECK(ndr_push_uint32(ndr, r->unknown1));
- NDR_CHECK(ndr_push_uint32(ndr, r->unknown2));
+ NDR_CHECK(ndr_push_samr_Name(ndr, NDR_SCALARS, &r->unknown));
NDR_CHECK(ndr_push_uint16(ndr, r->country_code));
NDR_CHECK(ndr_push_uint16(ndr, r->code_page));
ndr_push_struct_end(ndr);
buffers:
if (!(ndr_flags & NDR_BUFFERS)) goto done;
NDR_CHECK(ndr_push_samr_Name(ndr, NDR_BUFFERS, &r->comment));
+ NDR_CHECK(ndr_push_samr_Name(ndr, NDR_BUFFERS, &r->unknown));
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->entries, r->count, sizeof(r->entries[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->entries, sizeof(r->entries[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_samr_SamEntry));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->ids, r->count, sizeof(r->ids[0]));
+ {
NDR_CHECK(ndr_pull_array_uint32(ndr, NDR_SCALARS|NDR_BUFFERS, r->ids, r->count));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->names, r->count, sizeof(r->names[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->names, sizeof(r->names[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_samr_Name));
}
+ }
done:
return NT_STATUS_OK;
}
if (!(ndr_flags & NDR_SCALARS)) goto buffers;
NDR_CHECK(ndr_pull_align(ndr, 4));
NDR_CHECK(ndr_pull_samr_Name(ndr, NDR_SCALARS, &r->comment));
- NDR_CHECK(ndr_pull_uint32(ndr, &r->unknown1));
- NDR_CHECK(ndr_pull_uint32(ndr, &r->unknown2));
+ NDR_CHECK(ndr_pull_samr_Name(ndr, NDR_SCALARS, &r->unknown));
NDR_CHECK(ndr_pull_uint16(ndr, &r->country_code));
NDR_CHECK(ndr_pull_uint16(ndr, &r->code_page));
ndr_pull_struct_end(ndr);
buffers:
if (!(ndr_flags & NDR_BUFFERS)) goto done;
NDR_CHECK(ndr_pull_samr_Name(ndr, NDR_BUFFERS, &r->comment));
+ NDR_CHECK(ndr_pull_samr_Name(ndr, NDR_BUFFERS, &r->unknown));
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->logon_hours, 1260, sizeof(r->logon_hours[0]));
+ {
uint32 _offset, _length;
NDR_CHECK(ndr_pull_uint32(ndr, &_offset));
NDR_CHECK(ndr_pull_uint32(ndr, &_length));
if (_offset != 0) return ndr_pull_error(ndr, NDR_ERR_OFFSET, "Bad array offset 0x%08x", _offset);
if (_length > 1260 || _length != r->units_per_week/8) return ndr_pull_error(ndr, NDR_ERR_LENGTH, "Bad array length 0x%08x > size 0x%08x", _offset, 1260);
+
NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS|NDR_BUFFERS, r->logon_hours, _length));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->logon_hours, 1260, sizeof(r->logon_hours[0]));
+ {
uint32 _offset, _length;
NDR_CHECK(ndr_pull_uint32(ndr, &_offset));
NDR_CHECK(ndr_pull_uint32(ndr, &_length));
if (_offset != 0) return ndr_pull_error(ndr, NDR_ERR_OFFSET, "Bad array offset 0x%08x", _offset);
if (_length > 1260 || _length != r->units_per_week/8) return ndr_pull_error(ndr, NDR_ERR_LENGTH, "Bad array length 0x%08x > size 0x%08x", _offset, 1260);
+
NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS|NDR_BUFFERS, r->logon_hours, _length));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->logon_hours, 1260, sizeof(r->logon_hours[0]));
+ {
uint32 _offset, _length;
NDR_CHECK(ndr_pull_uint32(ndr, &_offset));
NDR_CHECK(ndr_pull_uint32(ndr, &_length));
if (_offset != 0) return ndr_pull_error(ndr, NDR_ERR_OFFSET, "Bad array offset 0x%08x", _offset);
if (_length > 1260 || _length != r->units_per_week/8) return ndr_pull_error(ndr, NDR_ERR_LENGTH, "Bad array length 0x%08x > size 0x%08x", _offset, 1260);
+
NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS|NDR_BUFFERS, r->logon_hours, _length));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->buffer, r->buf_count, sizeof(r->buffer[0]));
+ {
NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS|NDR_BUFFERS, r->buffer, r->buf_count));
}
+ }
if (r->logon_hours) {
{
uint32 _array_size;
}
}
NDR_ALLOC_N_SIZE(ndr, r->logon_hours, 1260, sizeof(r->logon_hours[0]));
+ {
uint32 _offset, _length;
NDR_CHECK(ndr_pull_uint32(ndr, &_offset));
NDR_CHECK(ndr_pull_uint32(ndr, &_length));
if (_offset != 0) return ndr_pull_error(ndr, NDR_ERR_OFFSET, "Bad array offset 0x%08x", _offset);
if (_length > 1260 || _length != r->units_per_week/8) return ndr_pull_error(ndr, NDR_ERR_LENGTH, "Bad array length 0x%08x > size 0x%08x", _offset, 1260);
+
NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS|NDR_BUFFERS, r->logon_hours, _length));
}
+ }
done:
return NT_STATUS_OK;
}
ndr_print_struct(ndr, name, "samr_UserInfo2");
ndr->depth++;
ndr_print_samr_Name(ndr, "comment", &r->comment);
- ndr_print_uint32(ndr, "unknown1", r->unknown1);
- ndr_print_uint32(ndr, "unknown2", r->unknown2);
+ ndr_print_samr_Name(ndr, "unknown", &r->unknown);
ndr_print_uint16(ndr, "country_code", r->country_code);
ndr_print_uint16(ndr, "code_page", r->code_page);
ndr->depth--;
struct samr_UserInfo2 {
struct samr_Name comment;
- uint32 unknown1;
- uint32 unknown2;
+ struct samr_Name unknown;
uint16 country_code;
uint16 code_page;
};
NDR_CHECK(ndr_pull_uint32(ndr, &r->panningwidth));
NDR_CHECK(ndr_pull_uint32(ndr, &r->panningheight));
NDR_ALLOC_N_SIZE(ndr, r->private, r->driverextra, sizeof(r->private[0]));
+ {
NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->private, r->driverextra));
+ }
ndr_pull_struct_end(ndr);
buffers:
if (!(ndr_flags & NDR_BUFFERS)) goto done;
NDR_CHECK(ndr_pull_nstring(ndr, NDR_BUFFERS, &r->devicename));
NDR_CHECK(ndr_pull_nstring(ndr, NDR_BUFFERS, &r->formname));
+ {
NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_BUFFERS, r->private, r->driverextra));
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->array, r->count, sizeof(r->array[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->array, sizeof(r->array[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_srvsvc_NetConn0));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->array, r->count, sizeof(r->array[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->array, sizeof(r->array[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_srvsvc_NetConn1));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->array, r->count, sizeof(r->array[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->array, sizeof(r->array[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_srvsvc_NetFile2));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->array, r->count, sizeof(r->array[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->array, sizeof(r->array[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_srvsvc_NetFile3));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->array, r->count, sizeof(r->array[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->array, sizeof(r->array[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_srvsvc_NetSess0));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->array, r->count, sizeof(r->array[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->array, sizeof(r->array[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_srvsvc_NetSess1));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->array, r->count, sizeof(r->array[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->array, sizeof(r->array[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_srvsvc_NetSess2));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->array, r->count, sizeof(r->array[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->array, sizeof(r->array[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_srvsvc_NetSess10));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->array, r->count, sizeof(r->array[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->array, sizeof(r->array[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_srvsvc_NetSess502));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->array, r->count, sizeof(r->array[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->array, sizeof(r->array[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_srvsvc_NetShare0));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->array, r->count, sizeof(r->array[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->array, sizeof(r->array[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_srvsvc_NetShare1));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->array, r->count, sizeof(r->array[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->array, sizeof(r->array[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_srvsvc_NetShare2));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->array, r->count, sizeof(r->array[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->array, sizeof(r->array[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_srvsvc_NetShare501));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->array, r->count, sizeof(r->array[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->array, sizeof(r->array[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_srvsvc_NetShare502));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->disk, r->size, sizeof(r->disk[0]));
+ {
NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS|NDR_BUFFERS, r->disk, r->size));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->array, r->count, sizeof(r->array[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->array, sizeof(r->array[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_srvsvc_NetDisk0));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->addr, r->count, sizeof(r->addr[0]));
+ {
NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS|NDR_BUFFERS, r->addr, r->count));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->array, r->count, sizeof(r->array[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->array, sizeof(r->array[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_srvsvc_NetTransport0));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->array, r->count, sizeof(r->array[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->array, sizeof(r->array[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_srvsvc_NetTransport1));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->array, r->count, sizeof(r->array[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->array, sizeof(r->array[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_srvsvc_NetTransport2));
}
+ }
done:
return NT_STATUS_OK;
}
}
}
NDR_ALLOC_N_SIZE(ndr, r->transports, r->count, sizeof(r->transports[0]));
+ {
NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->transports, sizeof(r->transports[0]), r->count, (ndr_pull_flags_fn_t)ndr_pull_wkssvc_TransportInfo0));
}
+ }
done:
return NT_STATUS_OK;
}
*/
static void init_samr_Name(struct samr_Name *name, const char *s)
{
- name->name = s;
name->name_len = strlen_m(s)*2;
name->name_size = name->name_len;
+ if (name->name_len == 0) {
+ name->name = NULL;
+ } else {
+ name->name = s;
+ }
}
static BOOL test_Close(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
struct policy_handle *handle)
{
NTSTATUS status;
- struct samr_SetUserInfo r;
+ struct samr_SetUserInfo s;
+ struct samr_QueryUserInfo q;
union samr_UserInfo u;
BOOL ret = True;
- r.in.handle = handle;
- r.in.level = 13;
- r.in.info = &u;
+ s.in.handle = handle;
+ s.in.info = &u;
+ q.in.handle = handle;
+ q.out.info = &u;
+
+#define TESTCALL(call, r) \
+ status = dcerpc_samr_ ##call(p, mem_ctx, &r); \
+ if (!NT_STATUS_IS_OK(status)) { \
+ printf(#call " level %u failed - %s (line %d)\n", \
+ r.in.level, nt_errstr(status), __LINE__); \
+ ret = False; \
+ break; \
+ }
+
+#define STRING_EQUAL(s1, s2, field) \
+ if ((s1 && !s2) || (s2 && !s1) || strcmp(s1, s2)) { \
+ printf("Failed to set %s to '%s' (line %d)\n", \
+ #field, s2, __LINE__); \
+ ret = False; \
+ break; \
+ }
- printf("Testing SetUserInfo level %u\n", r.in.level);
+#define INT_EQUAL(i1, i2, field) \
+ if (i1 != i2) { \
+ printf("Failed to set %s to %u (line %d)\n", \
+ #field, i2, __LINE__); \
+ ret = False; \
+ break; \
+ }
- init_samr_Name(&u.info13.description, "my description");
+#define TEST_USERINFO_NAME(lvl1, field1, lvl2, field2, value) do { \
+ printf("field test %d/%s vs %d/%s\n", lvl1, #field1, lvl2, #field2); \
+ q.in.level = lvl1; \
+ TESTCALL(QueryUserInfo, q) \
+ s.in.level = lvl1; \
+ u = *q.out.info; \
+ init_samr_Name(&u.info ## lvl1.field1, value); \
+ TESTCALL(SetUserInfo, s) \
+ init_samr_Name(&u.info ## lvl1.field1, ""); \
+ TESTCALL(QueryUserInfo, q); \
+ u = *q.out.info; \
+ STRING_EQUAL(u.info ## lvl1.field1.name, value, field1); \
+ q.in.level = lvl2; \
+ TESTCALL(QueryUserInfo, q) \
+ u = *q.out.info; \
+ STRING_EQUAL(u.info ## lvl2.field2.name, value, field2); \
+ } while (0)
+
+#define TEST_USERINFO_INT(lvl1, field1, lvl2, field2) do { \
+ printf("field test %d/%s vs %d/%s\n", lvl1, #field1, lvl2, #field2); \
+ q.in.level = lvl1; \
+ TESTCALL(QueryUserInfo, q) \
+ s.in.level = lvl1; \
+ u = *q.out.info; \
+ u.info ## lvl1.field1 = __LINE__; \
+ TESTCALL(SetUserInfo, s) \
+ u.info ## lvl1.field1 = 0; \
+ TESTCALL(QueryUserInfo, q); \
+ u = *q.out.info; \
+ INT_EQUAL(u.info ## lvl1.field1, __LINE__, field1); \
+ q.in.level = lvl2; \
+ TESTCALL(QueryUserInfo, q) \
+ u = *q.out.info; \
+ INT_EQUAL(u.info ## lvl2.field2, __LINE__, field1); \
+ } while (0)
- status = dcerpc_samr_SetUserInfo(p, mem_ctx, &r);
- if (!NT_STATUS_IS_OK(status)) {
- printf("SetUserInfo level %u failed - %s\n",
- r.in.level, nt_errstr(status));
- ret = False;
- }
+ TEST_USERINFO_NAME(2, comment, 1, comment, "xx2-1 comment");
+ TEST_USERINFO_NAME(2, comment, 21, comment, "xx2-21 comment");
+
+ TEST_USERINFO_NAME(6, full_name, 1, full_name, "xx6-1 full_name");
+ TEST_USERINFO_NAME(6, full_name, 3, full_name, "xx6-3 full_name");
+ TEST_USERINFO_NAME(6, full_name, 5, full_name, "xx6-5 full_name");
+ TEST_USERINFO_NAME(6, full_name, 6, full_name, "xx6-6 full_name");
+ TEST_USERINFO_NAME(6, full_name, 8, full_name, "xx6-8 full_name");
+ TEST_USERINFO_NAME(6, full_name, 21, full_name, "xx6-21 full_name");
+ TEST_USERINFO_NAME(8, full_name, 21, full_name, "xx7-21 full_name");
+
+ TEST_USERINFO_NAME(11, logon_script, 21, logon_script, "xx11-21 logon_script");
+ TEST_USERINFO_NAME(12, profile, 21, profile, "xx12-21 profile");
+ TEST_USERINFO_NAME(13, description, 21, description, "xx13-21 description");
+ TEST_USERINFO_NAME(14, workstations, 21, workstations, "testworkstation");
+ TEST_USERINFO_NAME(20, callback, 21, callback, "xx20-21 callback");
+
+ TEST_USERINFO_INT(2, country_code, 21, country_code);
+ TEST_USERINFO_INT(2, code_page, 21, code_page);
+ TEST_USERINFO_INT(4, logon_hours[3], 5, logon_hours[3]);
+
return ret;
}