_PUBLIC_ enum ndr_err_code ndr_push_PAC_BUFFER_RAW(struct ndr_push *ndr, int ndr_flags, const struct PAC_BUFFER_RAW *r) { if (ndr_flags & NDR_SCALARS) { NDR_CHECK(ndr_push_align(ndr, 4)); NDR_CHECK(ndr_push_PAC_TYPE(ndr, NDR_SCALARS, r->type)); NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->ndr_size)); { uint32_t _flags_save_DATA_BLOB_REM = ndr->flags; ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN8); NDR_CHECK(ndr_push_relative_ptr1(ndr, r->info)); ndr->flags = _flags_save_DATA_BLOB_REM; } NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0)); } if (ndr_flags & NDR_BUFFERS) { { uint32_t _flags_save_DATA_BLOB_REM = ndr->flags; ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN8); if (r->info) { NDR_CHECK(ndr_push_relative_ptr2(ndr, r->info)); { struct ndr_push *_ndr_info; NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_info, 0, NDR_ROUND(r->ndr_size, 8))); NDR_CHECK(ndr_push_DATA_BLOB_REM(_ndr_info, NDR_SCALARS, r->info)); NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_info, 0, NDR_ROUND(r->ndr_size, 8))); } } ndr->flags = _flags_save_DATA_BLOB_REM; } } return NDR_ERR_SUCCESS; }
enum ndr_err_code ndr_push_PAC_BUFFER(struct ndr_push *ndr, int ndr_flags, const struct PAC_BUFFER *r) { if (ndr_flags & NDR_SCALARS) { NDR_CHECK(ndr_push_align(ndr, 4)); NDR_CHECK(ndr_push_PAC_TYPE(ndr, NDR_SCALARS, r->type)); NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, _ndr_size_PAC_INFO(r->info,r->type,ndr->iconv_convenience,0))); { uint32_t _flags_save_PAC_INFO = ndr->flags; ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN8); NDR_CHECK(ndr_push_relative_ptr1(ndr, r->info)); ndr->flags = _flags_save_PAC_INFO; } NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0)); } if (ndr_flags & NDR_BUFFERS) { { uint32_t _flags_save_PAC_INFO = ndr->flags; ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN8); if (r->info) { NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->info)); { struct ndr_push *_ndr_info; NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_info, 0, _subcontext_size_PAC_INFO(r->info,r->type,ndr->iconv_convenience, 0))); NDR_CHECK(ndr_push_set_switch_value(_ndr_info, r->info, r->type)); NDR_CHECK(ndr_push_PAC_INFO(_ndr_info, NDR_SCALARS|NDR_BUFFERS, r->info)); NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_info, 0, _subcontext_size_PAC_INFO(r->info,r->type,ndr->iconv_convenience,0))); } NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->info)); } ndr->flags = _flags_save_PAC_INFO; } } return NDR_ERR_SUCCESS; }
_PUBLIC_ enum ndr_err_code ndr_push_security_descriptor(struct ndr_push *ndr, int ndr_flags, const struct security_descriptor *r) { { uint32_t _flags_save_STRUCT = ndr->flags; ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN); if (ndr_flags & NDR_SCALARS) { NDR_CHECK(ndr_push_align(ndr, 5)); NDR_CHECK(ndr_push_security_descriptor_revision(ndr, NDR_SCALARS, r->revision)); NDR_CHECK(ndr_push_security_descriptor_type(ndr, NDR_SCALARS, r->type)); NDR_CHECK(ndr_push_relative_ptr1(ndr, r->owner_sid)); NDR_CHECK(ndr_push_relative_ptr1(ndr, r->group_sid)); NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sacl)); NDR_CHECK(ndr_push_relative_ptr1(ndr, r->dacl)); NDR_CHECK(ndr_push_trailer_align(ndr, 5)); } if (ndr_flags & NDR_BUFFERS) { if (r->owner_sid) { NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->owner_sid)); NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, r->owner_sid)); NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->owner_sid)); } if (r->group_sid) { NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->group_sid)); NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, r->group_sid)); NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->group_sid)); } if (r->sacl) { NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sacl)); NDR_CHECK(ndr_push_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->sacl)); NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sacl)); } if (r->dacl) { NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->dacl)); NDR_CHECK(ndr_push_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->dacl)); NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->dacl)); } } ndr->flags = _flags_save_STRUCT; } return NDR_ERR_SUCCESS; }
/* Modified to call AuthenticationInformationArray with 'count' specified */ _PUBLIC_ enum ndr_err_code ndr_push_trustAuthInOutBlob(struct ndr_push *ndr, int ndr_flags, const struct trustAuthInOutBlob *r) { if (ndr_flags & NDR_SCALARS) { NDR_CHECK(ndr_push_align(ndr, 4)); NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count)); NDR_CHECK(ndr_push_relative_ptr1(ndr, r->current)); NDR_CHECK(ndr_push_relative_ptr1(ndr, r->previous)); } if (ndr_flags & NDR_BUFFERS) { if (r->current) { NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->current)); NDR_CHECK(ndr_push_AuthenticationInformationArray_with_count(ndr, NDR_SCALARS|NDR_BUFFERS, r->count, r->current)); NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->current)); } if (r->previous) { NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->previous)); NDR_CHECK(ndr_push_AuthenticationInformationArray_with_count(ndr, NDR_SCALARS|NDR_BUFFERS, r->count, r->previous)); NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->previous)); } } return NDR_ERR_SUCCESS; }
NTSTATUS ndr_push_security_descriptor(struct ndr_push *ndr, int ndr_flags, const struct security_descriptor *r) { { uint32_t _flags_save_STRUCT = ndr->flags; ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN); if (ndr_flags & NDR_SCALARS) { NDR_CHECK(ndr_push_align(ndr, 4)); NDR_CHECK(ndr_push_security_descriptor_revision(ndr, NDR_SCALARS, r->revision)); NDR_CHECK(ndr_push_security_descriptor_type(ndr, NDR_SCALARS, r->type)); NDR_CHECK(ndr_push_relative_ptr1(ndr, r->owner_sid)); NDR_CHECK(ndr_push_relative_ptr1(ndr, r->group_sid)); NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sacl)); NDR_CHECK(ndr_push_relative_ptr1(ndr, r->dacl)); } if (ndr_flags & NDR_BUFFERS) { if (r->owner_sid) { NDR_CHECK(ndr_push_relative_ptr2(ndr, r->owner_sid)); NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, r->owner_sid)); } if (r->group_sid) { NDR_CHECK(ndr_push_relative_ptr2(ndr, r->group_sid)); NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, r->group_sid)); } if (r->sacl) { NDR_CHECK(ndr_push_relative_ptr2(ndr, r->sacl)); NDR_CHECK(ndr_push_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->sacl)); } if (r->dacl) { NDR_CHECK(ndr_push_relative_ptr2(ndr, r->dacl)); NDR_CHECK(ndr_push_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->dacl)); } } ndr->flags = _flags_save_STRUCT; } return NT_STATUS_OK; }
_PUBLIC_ NTSTATUS ndr_push_WbemQualifier(struct ndr_push *ndr, int ndr_flags, const struct WbemQualifier *r) { if (ndr_flags & NDR_SCALARS) { NDR_CHECK(ndr_push_align(ndr, 4)); NDR_CHECK(ndr_push_relative_ptr1(ndr, r->name)); NDR_CHECK(ndr_push_WBEM_FLAVOR_TYPE(ndr, NDR_SCALARS, r->flavors)); NDR_CHECK(ndr_push_CIMTYPE_ENUMERATION(ndr, NDR_SCALARS, r->cimtype)); NDR_CHECK(ndr_push_set_switch_value(ndr, &r->value, r->cimtype & CIM_TYPEMASK)); NDR_CHECK(ndr_push_CIMVAR(ndr, NDR_SCALARS, &r->value)); } if (ndr_flags & NDR_BUFFERS) { if (r->name) { uint32_t ofs; int32_t i; for (i = 0; i < arr_sizeof(qualifier_keys); ++i) if (qualifier_keys[i] && !strcmp(r->name, qualifier_keys[i])) break; if (i == arr_sizeof(qualifier_keys)) { if (!strncmp(qn_unknown, r->name, sizeof(qn_unknown) - 1)) i = atoi(r->name + sizeof(qn_unknown) - 1); else i = -1; } if (i >= 0) { ofs = ndr->offset; NDR_CHECK(ndr_token_retrieve(&ndr->relative_list, r->name, &ndr->offset)); NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0x80000000 | i)); ndr->offset = ofs; } else { NDR_CHECK(ndr_push_relative_ptr2(ndr, r->name)); NDR_CHECK(ndr_push_CIMSTRING(ndr, NDR_SCALARS, &r->name)); } } NDR_CHECK(ndr_push_CIMVAR(ndr, NDR_BUFFERS, &r->value)); } return NT_STATUS_OK; }