+ if (r->in.auth_info->auth_blob.size != 0) {
+ auth_blob.length = r->in.auth_info->auth_blob.size;
+ auth_blob.data = r->in.auth_info->auth_blob.data;
+
+ arcfour_crypt_blob(auth_blob.data, auth_blob.length,
+ &p->server_info->user_session_key);
+
+ ndr_err = ndr_pull_struct_blob(&auth_blob, p->mem_ctx,
+ &auth_struct,
+ (ndr_pull_flags_fn_t) ndr_pull_trustDomainPasswords);
+ if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+ return NT_STATUS_UNSUCCESSFUL;
+ }
+
+ ndr_err = ndr_push_struct_blob(&td.trust_auth_incoming, p->mem_ctx,
+ &auth_struct.incoming,
+ (ndr_push_flags_fn_t) ndr_push_trustAuthInOutBlob);
+ if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+ return NT_STATUS_UNSUCCESSFUL;
+ }
+
+ ndr_err = ndr_push_struct_blob(&td.trust_auth_outgoing, p->mem_ctx,
+ &auth_struct.outgoing,
+ (ndr_push_flags_fn_t) ndr_push_trustAuthInOutBlob);
+ if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+ return NT_STATUS_UNSUCCESSFUL;
+ }
+ } else {
+ td.trust_auth_incoming.data = NULL;
+ td.trust_auth_incoming.length = 0;
+ td.trust_auth_outgoing.data = NULL;
+ td.trust_auth_outgoing.length = 0;
+ }
+