1/* parser auto-generated by pidl */ 2 3#include "includes.h" 4#include "../librpc/gen_ndr/ndr_ntlmssp.h" 5 6static enum ndr_err_code ndr_push_ntlmssp_MessageType(struct ndr_push *ndr, int ndr_flags, enum ntlmssp_MessageType r) 7{ 8 NDR_CHECK(ndr_push_enum_uint32(ndr, NDR_SCALARS, r)); 9 return NDR_ERR_SUCCESS; 10} 11 12static enum ndr_err_code ndr_pull_ntlmssp_MessageType(struct ndr_pull *ndr, int ndr_flags, enum ntlmssp_MessageType *r) 13{ 14 uint32_t v; 15 NDR_CHECK(ndr_pull_enum_uint32(ndr, NDR_SCALARS, &v)); 16 *r = v; 17 return NDR_ERR_SUCCESS; 18} 19 20_PUBLIC_ void ndr_print_ntlmssp_MessageType(struct ndr_print *ndr, const char *name, enum ntlmssp_MessageType r) 21{ 22 const char *val = NULL; 23 24 switch (r) { 25 case NtLmNegotiate: val = "NtLmNegotiate"; break; 26 case NtLmChallenge: val = "NtLmChallenge"; break; 27 case NtLmAuthenticate: val = "NtLmAuthenticate"; break; 28 } 29 ndr_print_enum(ndr, name, "ENUM", val, r); 30} 31 32static enum ndr_err_code ndr_push_NEGOTIATE(struct ndr_push *ndr, int ndr_flags, uint32_t r) 33{ 34 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r)); 35 return NDR_ERR_SUCCESS; 36} 37 38static enum ndr_err_code ndr_pull_NEGOTIATE(struct ndr_pull *ndr, int ndr_flags, uint32_t *r) 39{ 40 uint32_t v; 41 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v)); 42 *r = v; 43 return NDR_ERR_SUCCESS; 44} 45 46_PUBLIC_ void ndr_print_NEGOTIATE(struct ndr_print *ndr, const char *name, uint32_t r) 47{ 48 ndr_print_uint32(ndr, name, r); 49 ndr->depth++; 50 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_UNICODE", NTLMSSP_NEGOTIATE_UNICODE, r); 51 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_OEM", NTLMSSP_NEGOTIATE_OEM, r); 52 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_REQUEST_TARGET", NTLMSSP_REQUEST_TARGET, r); 53 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_SIGN", NTLMSSP_NEGOTIATE_SIGN, r); 54 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_SEAL", NTLMSSP_NEGOTIATE_SEAL, r); 55 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_DATAGRAM", NTLMSSP_NEGOTIATE_DATAGRAM, r); 56 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_LM_KEY", NTLMSSP_NEGOTIATE_LM_KEY, r); 57 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_NETWARE", NTLMSSP_NEGOTIATE_NETWARE, r); 58 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_NTLM", NTLMSSP_NEGOTIATE_NTLM, r); 59 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_NT_ONLY", NTLMSSP_NEGOTIATE_NT_ONLY, r); 60 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_ANONYMOUS", NTLMSSP_ANONYMOUS, r); 61 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED", NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED, r); 62 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_OEM_WORKSTATION_SUPPLIED", NTLMSSP_NEGOTIATE_OEM_WORKSTATION_SUPPLIED, r); 63 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_THIS_IS_LOCAL_CALL", NTLMSSP_NEGOTIATE_THIS_IS_LOCAL_CALL, r); 64 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_ALWAYS_SIGN", NTLMSSP_NEGOTIATE_ALWAYS_SIGN, r); 65 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_TARGET_TYPE_DOMAIN", NTLMSSP_TARGET_TYPE_DOMAIN, r); 66 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_TARGET_TYPE_SERVER", NTLMSSP_TARGET_TYPE_SERVER, r); 67 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_TARGET_TYPE_SHARE", NTLMSSP_TARGET_TYPE_SHARE, r); 68 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY", NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY, r); 69 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_IDENTIFY", NTLMSSP_NEGOTIATE_IDENTIFY, r); 70 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_REQUEST_NON_NT_SESSION_KEY", NTLMSSP_REQUEST_NON_NT_SESSION_KEY, r); 71 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_TARGET_INFO", NTLMSSP_NEGOTIATE_TARGET_INFO, r); 72 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_VERSION", NTLMSSP_NEGOTIATE_VERSION, r); 73 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_128", NTLMSSP_NEGOTIATE_128, r); 74 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_KEY_EXCH", NTLMSSP_NEGOTIATE_KEY_EXCH, r); 75 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_NEGOTIATE_56", NTLMSSP_NEGOTIATE_56, r); 76 ndr->depth--; 77} 78 79static enum ndr_err_code ndr_push_ntlmssp_WindowsMajorVersion(struct ndr_push *ndr, int ndr_flags, enum ntlmssp_WindowsMajorVersion r) 80{ 81 NDR_CHECK(ndr_push_enum_uint8(ndr, NDR_SCALARS, r)); 82 return NDR_ERR_SUCCESS; 83} 84 85static enum ndr_err_code ndr_pull_ntlmssp_WindowsMajorVersion(struct ndr_pull *ndr, int ndr_flags, enum ntlmssp_WindowsMajorVersion *r) 86{ 87 uint8_t v; 88 NDR_CHECK(ndr_pull_enum_uint8(ndr, NDR_SCALARS, &v)); 89 *r = v; 90 return NDR_ERR_SUCCESS; 91} 92 93_PUBLIC_ void ndr_print_ntlmssp_WindowsMajorVersion(struct ndr_print *ndr, const char *name, enum ntlmssp_WindowsMajorVersion r) 94{ 95 const char *val = NULL; 96 97 switch (r) { 98 case NTLMSSP_WINDOWS_MAJOR_VERSION_5: val = "NTLMSSP_WINDOWS_MAJOR_VERSION_5"; break; 99 case NTLMSSP_WINDOWS_MAJOR_VERSION_6: val = "NTLMSSP_WINDOWS_MAJOR_VERSION_6"; break; 100 } 101 ndr_print_enum(ndr, name, "ENUM", val, r); 102} 103 104static enum ndr_err_code ndr_push_ntlmssp_WindowsMinorVersion(struct ndr_push *ndr, int ndr_flags, enum ntlmssp_WindowsMinorVersion r) 105{ 106 NDR_CHECK(ndr_push_enum_uint8(ndr, NDR_SCALARS, r)); 107 return NDR_ERR_SUCCESS; 108} 109 110static enum ndr_err_code ndr_pull_ntlmssp_WindowsMinorVersion(struct ndr_pull *ndr, int ndr_flags, enum ntlmssp_WindowsMinorVersion *r) 111{ 112 uint8_t v; 113 NDR_CHECK(ndr_pull_enum_uint8(ndr, NDR_SCALARS, &v)); 114 *r = v; 115 return NDR_ERR_SUCCESS; 116} 117 118_PUBLIC_ void ndr_print_ntlmssp_WindowsMinorVersion(struct ndr_print *ndr, const char *name, enum ntlmssp_WindowsMinorVersion r) 119{ 120 const char *val = NULL; 121 122 switch (r) { 123 case NTLMSSP_WINDOWS_MINOR_VERSION_0: val = "NTLMSSP_WINDOWS_MINOR_VERSION_0"; break; 124 case NTLMSSP_WINDOWS_MINOR_VERSION_1: val = "NTLMSSP_WINDOWS_MINOR_VERSION_1"; break; 125 case NTLMSSP_WINDOWS_MINOR_VERSION_2: val = "NTLMSSP_WINDOWS_MINOR_VERSION_2"; break; 126 } 127 ndr_print_enum(ndr, name, "ENUM", val, r); 128} 129 130static enum ndr_err_code ndr_push_ntlmssp_NTLMRevisionCurrent(struct ndr_push *ndr, int ndr_flags, enum ntlmssp_NTLMRevisionCurrent r) 131{ 132 NDR_CHECK(ndr_push_enum_uint8(ndr, NDR_SCALARS, r)); 133 return NDR_ERR_SUCCESS; 134} 135 136static enum ndr_err_code ndr_pull_ntlmssp_NTLMRevisionCurrent(struct ndr_pull *ndr, int ndr_flags, enum ntlmssp_NTLMRevisionCurrent *r) 137{ 138 uint8_t v; 139 NDR_CHECK(ndr_pull_enum_uint8(ndr, NDR_SCALARS, &v)); 140 *r = v; 141 return NDR_ERR_SUCCESS; 142} 143 144_PUBLIC_ void ndr_print_ntlmssp_NTLMRevisionCurrent(struct ndr_print *ndr, const char *name, enum ntlmssp_NTLMRevisionCurrent r) 145{ 146 const char *val = NULL; 147 148 switch (r) { 149 case NTLMSSP_REVISION_W2K3_RC1: val = "NTLMSSP_REVISION_W2K3_RC1"; break; 150 case NTLMSSP_REVISION_W2K3: val = "NTLMSSP_REVISION_W2K3"; break; 151 } 152 ndr_print_enum(ndr, name, "ENUM", val, r); 153} 154 155static enum ndr_err_code ndr_push_VERSION(struct ndr_push *ndr, int ndr_flags, const struct VERSION *r) 156{ 157 if (ndr_flags & NDR_SCALARS) { 158 NDR_CHECK(ndr_push_align(ndr, 2)); 159 NDR_CHECK(ndr_push_ntlmssp_WindowsMajorVersion(ndr, NDR_SCALARS, r->ProductMajorVersion)); 160 NDR_CHECK(ndr_push_ntlmssp_WindowsMinorVersion(ndr, NDR_SCALARS, r->ProductMinorVersion)); 161 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->ProductBuild)); 162 NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->Reserved, 3)); 163 NDR_CHECK(ndr_push_ntlmssp_NTLMRevisionCurrent(ndr, NDR_SCALARS, r->NTLMRevisionCurrent)); 164 NDR_CHECK(ndr_push_trailer_align(ndr, 2)); 165 } 166 if (ndr_flags & NDR_BUFFERS) { 167 } 168 return NDR_ERR_SUCCESS; 169} 170 171static enum ndr_err_code ndr_pull_VERSION(struct ndr_pull *ndr, int ndr_flags, struct VERSION *r) 172{ 173 if (ndr_flags & NDR_SCALARS) { 174 NDR_CHECK(ndr_pull_align(ndr, 2)); 175 NDR_CHECK(ndr_pull_ntlmssp_WindowsMajorVersion(ndr, NDR_SCALARS, &r->ProductMajorVersion)); 176 NDR_CHECK(ndr_pull_ntlmssp_WindowsMinorVersion(ndr, NDR_SCALARS, &r->ProductMinorVersion)); 177 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->ProductBuild)); 178 NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->Reserved, 3)); 179 NDR_CHECK(ndr_pull_ntlmssp_NTLMRevisionCurrent(ndr, NDR_SCALARS, &r->NTLMRevisionCurrent)); 180 NDR_CHECK(ndr_pull_trailer_align(ndr, 2)); 181 } 182 if (ndr_flags & NDR_BUFFERS) { 183 } 184 return NDR_ERR_SUCCESS; 185} 186 187_PUBLIC_ void ndr_print_VERSION(struct ndr_print *ndr, const char *name, const struct VERSION *r) 188{ 189 ndr_print_struct(ndr, name, "VERSION"); 190 ndr->depth++; 191 ndr_print_ntlmssp_WindowsMajorVersion(ndr, "ProductMajorVersion", r->ProductMajorVersion); 192 ndr_print_ntlmssp_WindowsMinorVersion(ndr, "ProductMinorVersion", r->ProductMinorVersion); 193 ndr_print_uint16(ndr, "ProductBuild", r->ProductBuild); 194 ndr_print_array_uint8(ndr, "Reserved", r->Reserved, 3); 195 ndr_print_ntlmssp_NTLMRevisionCurrent(ndr, "NTLMRevisionCurrent", r->NTLMRevisionCurrent); 196 ndr->depth--; 197} 198 199static enum ndr_err_code ndr_push_ntlmssp_Version(struct ndr_push *ndr, int ndr_flags, const union ntlmssp_Version *r) 200{ 201 if (ndr_flags & NDR_SCALARS) { 202 int level = ndr_push_get_switch_value(ndr, r); 203 NDR_CHECK(ndr_push_union_align(ndr, 2)); 204 switch (level) { 205 case NTLMSSP_NEGOTIATE_VERSION: { 206 NDR_CHECK(ndr_push_VERSION(ndr, NDR_SCALARS, &r->version)); 207 break; } 208 209 default: { 210 break; } 211 212 } 213 } 214 if (ndr_flags & NDR_BUFFERS) { 215 int level = ndr_push_get_switch_value(ndr, r); 216 switch (level) { 217 case NTLMSSP_NEGOTIATE_VERSION: 218 break; 219 220 default: 221 break; 222 223 } 224 } 225 return NDR_ERR_SUCCESS; 226} 227 228static enum ndr_err_code ndr_pull_ntlmssp_Version(struct ndr_pull *ndr, int ndr_flags, union ntlmssp_Version *r) 229{ 230 int level; 231 level = ndr_pull_get_switch_value(ndr, r); 232 if (ndr_flags & NDR_SCALARS) { 233 NDR_CHECK(ndr_pull_union_align(ndr, 2)); 234 switch (level) { 235 case NTLMSSP_NEGOTIATE_VERSION: { 236 NDR_CHECK(ndr_pull_VERSION(ndr, NDR_SCALARS, &r->version)); 237 break; } 238 239 default: { 240 break; } 241 242 } 243 } 244 if (ndr_flags & NDR_BUFFERS) { 245 switch (level) { 246 case NTLMSSP_NEGOTIATE_VERSION: 247 break; 248 249 default: 250 break; 251 252 } 253 } 254 return NDR_ERR_SUCCESS; 255} 256 257_PUBLIC_ enum ndr_err_code ndr_push_NEGOTIATE_MESSAGE(struct ndr_push *ndr, int ndr_flags, const struct NEGOTIATE_MESSAGE *r) 258{ 259 if (ndr_flags & NDR_SCALARS) { 260 NDR_CHECK(ndr_push_align(ndr, 5)); 261 NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, "NTLMSSP", 8, sizeof(uint8_t), CH_DOS)); 262 NDR_CHECK(ndr_push_ntlmssp_MessageType(ndr, NDR_SCALARS, NtLmNegotiate)); 263 NDR_CHECK(ndr_push_NEGOTIATE(ndr, NDR_SCALARS, r->NegotiateFlags)); 264 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, strlen(r->DomainName))); 265 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, strlen(r->DomainName))); 266 { 267 uint32_t _flags_save_string = ndr->flags; 268 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM)); 269 NDR_CHECK(ndr_push_relative_ptr1(ndr, r->DomainName)); 270 ndr->flags = _flags_save_string; 271 } 272 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, strlen(r->Workstation))); 273 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, strlen(r->Workstation))); 274 { 275 uint32_t _flags_save_string = ndr->flags; 276 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM)); 277 NDR_CHECK(ndr_push_relative_ptr1(ndr, r->Workstation)); 278 ndr->flags = _flags_save_string; 279 } 280 NDR_CHECK(ndr_push_set_switch_value(ndr, &r->Version, r->NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION)); 281 NDR_CHECK(ndr_push_ntlmssp_Version(ndr, NDR_SCALARS, &r->Version)); 282 NDR_CHECK(ndr_push_trailer_align(ndr, 5)); 283 } 284 if (ndr_flags & NDR_BUFFERS) { 285 { 286 uint32_t _flags_save_string = ndr->flags; 287 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM)); 288 if (r->DomainName) { 289 NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->DomainName)); 290 { 291 struct ndr_push *_ndr_DomainName; 292 NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_DomainName, 0, strlen(r->DomainName))); 293 NDR_CHECK(ndr_push_string(_ndr_DomainName, NDR_SCALARS, r->DomainName)); 294 NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_DomainName, 0, strlen(r->DomainName))); 295 } 296 NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->DomainName)); 297 } 298 ndr->flags = _flags_save_string; 299 } 300 { 301 uint32_t _flags_save_string = ndr->flags; 302 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM)); 303 if (r->Workstation) { 304 NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->Workstation)); 305 { 306 struct ndr_push *_ndr_Workstation; 307 NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_Workstation, 0, strlen(r->Workstation))); 308 NDR_CHECK(ndr_push_string(_ndr_Workstation, NDR_SCALARS, r->Workstation)); 309 NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_Workstation, 0, strlen(r->Workstation))); 310 } 311 NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->Workstation)); 312 } 313 ndr->flags = _flags_save_string; 314 } 315 NDR_CHECK(ndr_push_ntlmssp_Version(ndr, NDR_BUFFERS, &r->Version)); 316 } 317 return NDR_ERR_SUCCESS; 318} 319 320_PUBLIC_ enum ndr_err_code ndr_pull_NEGOTIATE_MESSAGE(struct ndr_pull *ndr, int ndr_flags, struct NEGOTIATE_MESSAGE *r) 321{ 322 uint32_t _ptr_DomainName; 323 TALLOC_CTX *_mem_save_DomainName_0; 324 uint32_t _ptr_Workstation; 325 TALLOC_CTX *_mem_save_Workstation_0; 326 if (ndr_flags & NDR_SCALARS) { 327 NDR_CHECK(ndr_pull_align(ndr, 5)); 328 NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->Signature, 8, sizeof(uint8_t), CH_DOS)); 329 NDR_CHECK(ndr_pull_ntlmssp_MessageType(ndr, NDR_SCALARS, &r->MessageType)); 330 NDR_CHECK(ndr_pull_NEGOTIATE(ndr, NDR_SCALARS, &r->NegotiateFlags)); 331 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->DomainNameLen)); 332 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->DomainNameMaxLen)); 333 { 334 uint32_t _flags_save_string = ndr->flags; 335 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM)); 336 NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_DomainName)); 337 if (_ptr_DomainName) { 338 NDR_PULL_ALLOC(ndr, r->DomainName); 339 NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->DomainName, _ptr_DomainName)); 340 } else { 341 r->DomainName = NULL; 342 } 343 ndr->flags = _flags_save_string; 344 } 345 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->WorkstationLen)); 346 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->WorkstationMaxLen)); 347 { 348 uint32_t _flags_save_string = ndr->flags; 349 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM)); 350 NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_Workstation)); 351 if (_ptr_Workstation) { 352 NDR_PULL_ALLOC(ndr, r->Workstation); 353 NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->Workstation, _ptr_Workstation)); 354 } else { 355 r->Workstation = NULL; 356 } 357 ndr->flags = _flags_save_string; 358 } 359 NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->Version, r->NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION)); 360 NDR_CHECK(ndr_pull_ntlmssp_Version(ndr, NDR_SCALARS, &r->Version)); 361 NDR_CHECK(ndr_pull_trailer_align(ndr, 5)); 362 } 363 if (ndr_flags & NDR_BUFFERS) { 364 { 365 uint32_t _flags_save_string = ndr->flags; 366 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM)); 367 if (r->DomainName) { 368 uint32_t _relative_save_offset; 369 _relative_save_offset = ndr->offset; 370 NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->DomainName)); 371 _mem_save_DomainName_0 = NDR_PULL_GET_MEM_CTX(ndr); 372 NDR_PULL_SET_MEM_CTX(ndr, r->DomainName, 0); 373 { 374 struct ndr_pull *_ndr_DomainName; 375 NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_DomainName, 0, r->DomainNameLen)); 376 NDR_CHECK(ndr_pull_string(_ndr_DomainName, NDR_SCALARS, &r->DomainName)); 377 NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_DomainName, 0, r->DomainNameLen)); 378 } 379 NDR_PULL_SET_MEM_CTX(ndr, _mem_save_DomainName_0, 0); 380 ndr->offset = _relative_save_offset; 381 } 382 ndr->flags = _flags_save_string; 383 } 384 { 385 uint32_t _flags_save_string = ndr->flags; 386 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM)); 387 if (r->Workstation) { 388 uint32_t _relative_save_offset; 389 _relative_save_offset = ndr->offset; 390 NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->Workstation)); 391 _mem_save_Workstation_0 = NDR_PULL_GET_MEM_CTX(ndr); 392 NDR_PULL_SET_MEM_CTX(ndr, r->Workstation, 0); 393 { 394 struct ndr_pull *_ndr_Workstation; 395 NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_Workstation, 0, r->WorkstationLen)); 396 NDR_CHECK(ndr_pull_string(_ndr_Workstation, NDR_SCALARS, &r->Workstation)); 397 NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_Workstation, 0, r->WorkstationLen)); 398 } 399 NDR_PULL_SET_MEM_CTX(ndr, _mem_save_Workstation_0, 0); 400 ndr->offset = _relative_save_offset; 401 } 402 ndr->flags = _flags_save_string; 403 } 404 NDR_CHECK(ndr_pull_ntlmssp_Version(ndr, NDR_BUFFERS, &r->Version)); 405 } 406 return NDR_ERR_SUCCESS; 407} 408 409_PUBLIC_ void ndr_print_NEGOTIATE_MESSAGE(struct ndr_print *ndr, const char *name, const struct NEGOTIATE_MESSAGE *r) 410{ 411 ndr_print_struct(ndr, name, "NEGOTIATE_MESSAGE"); 412 ndr->depth++; 413 ndr_print_string(ndr, "Signature", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?"NTLMSSP":r->Signature); 414 ndr_print_ntlmssp_MessageType(ndr, "MessageType", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?NtLmNegotiate:r->MessageType); 415 ndr_print_NEGOTIATE(ndr, "NegotiateFlags", r->NegotiateFlags); 416 ndr_print_uint16(ndr, "DomainNameLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?strlen(r->DomainName):r->DomainNameLen); 417 ndr_print_uint16(ndr, "DomainNameMaxLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->DomainNameLen:r->DomainNameMaxLen); 418 ndr_print_ptr(ndr, "DomainName", r->DomainName); 419 ndr->depth++; 420 if (r->DomainName) { 421 ndr_print_string(ndr, "DomainName", r->DomainName); 422 } 423 ndr->depth--; 424 ndr_print_uint16(ndr, "WorkstationLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?strlen(r->Workstation):r->WorkstationLen); 425 ndr_print_uint16(ndr, "WorkstationMaxLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->WorkstationLen:r->WorkstationMaxLen); 426 ndr_print_ptr(ndr, "Workstation", r->Workstation); 427 ndr->depth++; 428 if (r->Workstation) { 429 ndr_print_string(ndr, "Workstation", r->Workstation); 430 } 431 ndr->depth--; 432 ndr_print_set_switch_value(ndr, &r->Version, r->NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION); 433 ndr_print_ntlmssp_Version(ndr, "Version", &r->Version); 434 ndr->depth--; 435} 436 437static enum ndr_err_code ndr_push_ntlmssp_AvId(struct ndr_push *ndr, int ndr_flags, enum ntlmssp_AvId r) 438{ 439 NDR_CHECK(ndr_push_enum_uint1632(ndr, NDR_SCALARS, r)); 440 return NDR_ERR_SUCCESS; 441} 442 443static enum ndr_err_code ndr_pull_ntlmssp_AvId(struct ndr_pull *ndr, int ndr_flags, enum ntlmssp_AvId *r) 444{ 445 uint16_t v; 446 NDR_CHECK(ndr_pull_enum_uint1632(ndr, NDR_SCALARS, &v)); 447 *r = v; 448 return NDR_ERR_SUCCESS; 449} 450 451_PUBLIC_ void ndr_print_ntlmssp_AvId(struct ndr_print *ndr, const char *name, enum ntlmssp_AvId r) 452{ 453 const char *val = NULL; 454 455 switch (r) { 456 case MsvAvEOL: val = "MsvAvEOL"; break; 457 case MsvAvNbComputerName: val = "MsvAvNbComputerName"; break; 458 case MsvAvNbDomainName: val = "MsvAvNbDomainName"; break; 459 case MsvAvDnsComputerName: val = "MsvAvDnsComputerName"; break; 460 case MsvAvDnsDomainName: val = "MsvAvDnsDomainName"; break; 461 case MsvAvDnsTreeName: val = "MsvAvDnsTreeName"; break; 462 case MsvAvFlags: val = "MsvAvFlags"; break; 463 case MsvAvTimestamp: val = "MsvAvTimestamp"; break; 464 case MsAvRestrictions: val = "MsAvRestrictions"; break; 465 case MsvAvTargetName: val = "MsvAvTargetName"; break; 466 case MsvChannelBindings: val = "MsvChannelBindings"; break; 467 } 468 ndr_print_enum(ndr, name, "ENUM", val, r); 469} 470 471static enum ndr_err_code ndr_push_Restriction_Encoding(struct ndr_push *ndr, int ndr_flags, const struct Restriction_Encoding *r) 472{ 473 if (ndr_flags & NDR_SCALARS) { 474 NDR_CHECK(ndr_push_align(ndr, 4)); 475 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->Size)); 476 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0)); 477 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->IntegrityLevel)); 478 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->SubjectIntegrityLevel)); 479 NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->MachineId, 32)); 480 NDR_CHECK(ndr_push_trailer_align(ndr, 4)); 481 } 482 if (ndr_flags & NDR_BUFFERS) { 483 } 484 return NDR_ERR_SUCCESS; 485} 486 487static enum ndr_err_code ndr_pull_Restriction_Encoding(struct ndr_pull *ndr, int ndr_flags, struct Restriction_Encoding *r) 488{ 489 if (ndr_flags & NDR_SCALARS) { 490 NDR_CHECK(ndr_pull_align(ndr, 4)); 491 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->Size)); 492 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->Z4)); 493 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->IntegrityLevel)); 494 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->SubjectIntegrityLevel)); 495 NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->MachineId, 32)); 496 NDR_CHECK(ndr_pull_trailer_align(ndr, 4)); 497 } 498 if (ndr_flags & NDR_BUFFERS) { 499 } 500 return NDR_ERR_SUCCESS; 501} 502 503_PUBLIC_ void ndr_print_Restriction_Encoding(struct ndr_print *ndr, const char *name, const struct Restriction_Encoding *r) 504{ 505 ndr_print_struct(ndr, name, "Restriction_Encoding"); 506 ndr->depth++; 507 ndr_print_uint32(ndr, "Size", r->Size); 508 ndr_print_uint32(ndr, "Z4", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?0:r->Z4); 509 ndr_print_uint32(ndr, "IntegrityLevel", r->IntegrityLevel); 510 ndr_print_uint32(ndr, "SubjectIntegrityLevel", r->SubjectIntegrityLevel); 511 ndr_print_array_uint8(ndr, "MachineId", r->MachineId, 32); 512 ndr->depth--; 513} 514 515static enum ndr_err_code ndr_push_ntlmssp_AvFlags(struct ndr_push *ndr, int ndr_flags, uint32_t r) 516{ 517 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r)); 518 return NDR_ERR_SUCCESS; 519} 520 521static enum ndr_err_code ndr_pull_ntlmssp_AvFlags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r) 522{ 523 uint32_t v; 524 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v)); 525 *r = v; 526 return NDR_ERR_SUCCESS; 527} 528 529_PUBLIC_ void ndr_print_ntlmssp_AvFlags(struct ndr_print *ndr, const char *name, uint32_t r) 530{ 531 ndr_print_uint32(ndr, name, r); 532 ndr->depth++; 533 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_AVFLAG_CONSTRAINTED_ACCOUNT", NTLMSSP_AVFLAG_CONSTRAINTED_ACCOUNT, r); 534 ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NTLMSSP_AVFLAG_MIC_IN_AUTHENTICATE_MESSAGE", NTLMSSP_AVFLAG_MIC_IN_AUTHENTICATE_MESSAGE, r); 535 ndr->depth--; 536} 537 538static enum ndr_err_code ndr_push_ntlmssp_AvValue(struct ndr_push *ndr, int ndr_flags, const union ntlmssp_AvValue *r) 539{ 540 { 541 uint32_t _flags_save_UNION = ndr->flags; 542 ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN); 543 if (ndr_flags & NDR_SCALARS) { 544 int level = ndr_push_get_switch_value(ndr, r); 545 NDR_CHECK(ndr_push_union_align(ndr, 4)); 546 switch (level) { 547 case MsvAvEOL: { 548 break; } 549 550 case MsvAvNbComputerName: { 551 { 552 uint32_t _flags_save_string = ndr->flags; 553 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE)); 554 NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->AvNbComputerName)); 555 ndr->flags = _flags_save_string; 556 } 557 break; } 558 559 case MsvAvNbDomainName: { 560 { 561 uint32_t _flags_save_string = ndr->flags; 562 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE)); 563 NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->AvNbDomainName)); 564 ndr->flags = _flags_save_string; 565 } 566 break; } 567 568 case MsvAvDnsComputerName: { 569 { 570 uint32_t _flags_save_string = ndr->flags; 571 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE)); 572 NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->AvDnsComputerName)); 573 ndr->flags = _flags_save_string; 574 } 575 break; } 576 577 case MsvAvDnsDomainName: { 578 { 579 uint32_t _flags_save_string = ndr->flags; 580 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE)); 581 NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->AvDnsDomainName)); 582 ndr->flags = _flags_save_string; 583 } 584 break; } 585 586 case MsvAvDnsTreeName: { 587 { 588 uint32_t _flags_save_string = ndr->flags; 589 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE)); 590 NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->AvDnsTreeName)); 591 ndr->flags = _flags_save_string; 592 } 593 break; } 594 595 case MsvAvFlags: { 596 NDR_CHECK(ndr_push_ntlmssp_AvFlags(ndr, NDR_SCALARS, r->AvFlags)); 597 break; } 598 599 case MsvAvTimestamp: { 600 NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->AvTimestamp)); 601 break; } 602 603 case MsAvRestrictions: { 604 NDR_CHECK(ndr_push_Restriction_Encoding(ndr, NDR_SCALARS, &r->AvRestrictions)); 605 break; } 606 607 case MsvAvTargetName: { 608 { 609 uint32_t _flags_save_string = ndr->flags; 610 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE)); 611 NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->AvTargetName)); 612 ndr->flags = _flags_save_string; 613 } 614 break; } 615 616 case MsvChannelBindings: { 617 NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->ChannelBindings, 16)); 618 break; } 619 620 default: { 621 { 622 uint32_t _flags_save_DATA_BLOB = ndr->flags; 623 ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING); 624 NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->blob)); 625 ndr->flags = _flags_save_DATA_BLOB; 626 } 627 break; } 628 629 } 630 } 631 if (ndr_flags & NDR_BUFFERS) { 632 int level = ndr_push_get_switch_value(ndr, r); 633 switch (level) { 634 case MsvAvEOL: 635 break; 636 637 case MsvAvNbComputerName: 638 break; 639 640 case MsvAvNbDomainName: 641 break; 642 643 case MsvAvDnsComputerName: 644 break; 645 646 case MsvAvDnsDomainName: 647 break; 648 649 case MsvAvDnsTreeName: 650 break; 651 652 case MsvAvFlags: 653 break; 654 655 case MsvAvTimestamp: 656 break; 657 658 case MsAvRestrictions: 659 break; 660 661 case MsvAvTargetName: 662 break; 663 664 case MsvChannelBindings: 665 break; 666 667 default: 668 break; 669 670 } 671 } 672 ndr->flags = _flags_save_UNION; 673 } 674 return NDR_ERR_SUCCESS; 675} 676 677static enum ndr_err_code ndr_pull_ntlmssp_AvValue(struct ndr_pull *ndr, int ndr_flags, union ntlmssp_AvValue *r) 678{ 679 int level; 680 { 681 uint32_t _flags_save_UNION = ndr->flags; 682 ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN); 683 level = ndr_pull_get_switch_value(ndr, r); 684 if (ndr_flags & NDR_SCALARS) { 685 NDR_CHECK(ndr_pull_union_align(ndr, 4)); 686 switch (level) { 687 case MsvAvEOL: { 688 break; } 689 690 case MsvAvNbComputerName: { 691 { 692 uint32_t _flags_save_string = ndr->flags; 693 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE)); 694 NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->AvNbComputerName)); 695 ndr->flags = _flags_save_string; 696 } 697 break; } 698 699 case MsvAvNbDomainName: { 700 { 701 uint32_t _flags_save_string = ndr->flags; 702 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE)); 703 NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->AvNbDomainName)); 704 ndr->flags = _flags_save_string; 705 } 706 break; } 707 708 case MsvAvDnsComputerName: { 709 { 710 uint32_t _flags_save_string = ndr->flags; 711 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE)); 712 NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->AvDnsComputerName)); 713 ndr->flags = _flags_save_string; 714 } 715 break; } 716 717 case MsvAvDnsDomainName: { 718 { 719 uint32_t _flags_save_string = ndr->flags; 720 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE)); 721 NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->AvDnsDomainName)); 722 ndr->flags = _flags_save_string; 723 } 724 break; } 725 726 case MsvAvDnsTreeName: { 727 { 728 uint32_t _flags_save_string = ndr->flags; 729 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE)); 730 NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->AvDnsTreeName)); 731 ndr->flags = _flags_save_string; 732 } 733 break; } 734 735 case MsvAvFlags: { 736 NDR_CHECK(ndr_pull_ntlmssp_AvFlags(ndr, NDR_SCALARS, &r->AvFlags)); 737 break; } 738 739 case MsvAvTimestamp: { 740 NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->AvTimestamp)); 741 break; } 742 743 case MsAvRestrictions: { 744 NDR_CHECK(ndr_pull_Restriction_Encoding(ndr, NDR_SCALARS, &r->AvRestrictions)); 745 break; } 746 747 case MsvAvTargetName: { 748 { 749 uint32_t _flags_save_string = ndr->flags; 750 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE)); 751 NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->AvTargetName)); 752 ndr->flags = _flags_save_string; 753 } 754 break; } 755 756 case MsvChannelBindings: { 757 NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->ChannelBindings, 16)); 758 break; } 759 760 default: { 761 { 762 uint32_t _flags_save_DATA_BLOB = ndr->flags; 763 ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING); 764 NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->blob)); 765 ndr->flags = _flags_save_DATA_BLOB; 766 } 767 break; } 768 769 } 770 } 771 if (ndr_flags & NDR_BUFFERS) { 772 switch (level) { 773 case MsvAvEOL: 774 break; 775 776 case MsvAvNbComputerName: 777 break; 778 779 case MsvAvNbDomainName: 780 break; 781 782 case MsvAvDnsComputerName: 783 break; 784 785 case MsvAvDnsDomainName: 786 break; 787 788 case MsvAvDnsTreeName: 789 break; 790 791 case MsvAvFlags: 792 break; 793 794 case MsvAvTimestamp: 795 break; 796 797 case MsAvRestrictions: 798 break; 799 800 case MsvAvTargetName: 801 break; 802 803 case MsvChannelBindings: 804 break; 805 806 default: 807 break; 808 809 } 810 } 811 ndr->flags = _flags_save_UNION; 812 } 813 return NDR_ERR_SUCCESS; 814} 815 816_PUBLIC_ void ndr_print_ntlmssp_AvValue(struct ndr_print *ndr, const char *name, const union ntlmssp_AvValue *r) 817{ 818 int level; 819 { 820 uint32_t _flags_save_UNION = ndr->flags; 821 ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN); 822 level = ndr_print_get_switch_value(ndr, r); 823 ndr_print_union(ndr, name, level, "ntlmssp_AvValue"); 824 switch (level) { 825 case MsvAvEOL: 826 break; 827 828 case MsvAvNbComputerName: 829 ndr_print_string(ndr, "AvNbComputerName", r->AvNbComputerName); 830 break; 831 832 case MsvAvNbDomainName: 833 ndr_print_string(ndr, "AvNbDomainName", r->AvNbDomainName); 834 break; 835 836 case MsvAvDnsComputerName: 837 ndr_print_string(ndr, "AvDnsComputerName", r->AvDnsComputerName); 838 break; 839 840 case MsvAvDnsDomainName: 841 ndr_print_string(ndr, "AvDnsDomainName", r->AvDnsDomainName); 842 break; 843 844 case MsvAvDnsTreeName: 845 ndr_print_string(ndr, "AvDnsTreeName", r->AvDnsTreeName); 846 break; 847 848 case MsvAvFlags: 849 ndr_print_ntlmssp_AvFlags(ndr, "AvFlags", r->AvFlags); 850 break; 851 852 case MsvAvTimestamp: 853 ndr_print_NTTIME(ndr, "AvTimestamp", r->AvTimestamp); 854 break; 855 856 case MsAvRestrictions: 857 ndr_print_Restriction_Encoding(ndr, "AvRestrictions", &r->AvRestrictions); 858 break; 859 860 case MsvAvTargetName: 861 ndr_print_string(ndr, "AvTargetName", r->AvTargetName); 862 break; 863 864 case MsvChannelBindings: 865 ndr_print_array_uint8(ndr, "ChannelBindings", r->ChannelBindings, 16); 866 break; 867 868 default: 869 ndr_print_DATA_BLOB(ndr, "blob", r->blob); 870 break; 871 872 } 873 ndr->flags = _flags_save_UNION; 874 } 875} 876 877static size_t ndr_size_ntlmssp_AvValue(const union ntlmssp_AvValue *r, uint32_t level, struct smb_iconv_convenience *ic, int flags) 878{ 879 flags |= LIBNDR_FLAG_NOALIGN; 880 return ndr_size_union(r, flags, level, (ndr_push_flags_fn_t)ndr_push_ntlmssp_AvValue, ic); 881} 882 883_PUBLIC_ enum ndr_err_code ndr_push_AV_PAIR(struct ndr_push *ndr, int ndr_flags, const struct AV_PAIR *r) 884{ 885 { 886 uint32_t _flags_save_STRUCT = ndr->flags; 887 ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN); 888 if (ndr_flags & NDR_SCALARS) { 889 NDR_CHECK(ndr_push_align(ndr, 4)); 890 NDR_CHECK(ndr_push_ntlmssp_AvId(ndr, NDR_SCALARS, r->AvId)); 891 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_size_ntlmssp_AvValue(&r->Value, r->AvId, ndr->iconv_convenience, 0))); 892 { 893 struct ndr_push *_ndr_Value; 894 NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_Value, 0, ndr_size_ntlmssp_AvValue(&r->Value, r->AvId, ndr->iconv_convenience, 0))); 895 NDR_CHECK(ndr_push_set_switch_value(_ndr_Value, &r->Value, r->AvId)); 896 NDR_CHECK(ndr_push_ntlmssp_AvValue(_ndr_Value, NDR_SCALARS|NDR_BUFFERS, &r->Value)); 897 NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_Value, 0, ndr_size_ntlmssp_AvValue(&r->Value, r->AvId, ndr->iconv_convenience, 0))); 898 } 899 NDR_CHECK(ndr_push_trailer_align(ndr, 4)); 900 } 901 if (ndr_flags & NDR_BUFFERS) { 902 } 903 ndr->flags = _flags_save_STRUCT; 904 } 905 return NDR_ERR_SUCCESS; 906} 907 908_PUBLIC_ enum ndr_err_code ndr_pull_AV_PAIR(struct ndr_pull *ndr, int ndr_flags, struct AV_PAIR *r) 909{ 910 { 911 uint32_t _flags_save_STRUCT = ndr->flags; 912 ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN); 913 if (ndr_flags & NDR_SCALARS) { 914 NDR_CHECK(ndr_pull_align(ndr, 4)); 915 NDR_CHECK(ndr_pull_ntlmssp_AvId(ndr, NDR_SCALARS, &r->AvId)); 916 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->AvLen)); 917 { 918 struct ndr_pull *_ndr_Value; 919 NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_Value, 0, r->AvLen)); 920 NDR_CHECK(ndr_pull_set_switch_value(_ndr_Value, &r->Value, r->AvId)); 921 NDR_CHECK(ndr_pull_ntlmssp_AvValue(_ndr_Value, NDR_SCALARS|NDR_BUFFERS, &r->Value)); 922 NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_Value, 0, r->AvLen)); 923 } 924 NDR_CHECK(ndr_pull_trailer_align(ndr, 4)); 925 } 926 if (ndr_flags & NDR_BUFFERS) { 927 } 928 ndr->flags = _flags_save_STRUCT; 929 } 930 return NDR_ERR_SUCCESS; 931} 932 933_PUBLIC_ void ndr_print_AV_PAIR(struct ndr_print *ndr, const char *name, const struct AV_PAIR *r) 934{ 935 ndr_print_struct(ndr, name, "AV_PAIR"); 936 { 937 uint32_t _flags_save_STRUCT = ndr->flags; 938 ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN); 939 ndr->depth++; 940 ndr_print_ntlmssp_AvId(ndr, "AvId", r->AvId); 941 ndr_print_uint16(ndr, "AvLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_ntlmssp_AvValue(&r->Value, r->AvId, ndr->iconv_convenience, 0):r->AvLen); 942 ndr_print_set_switch_value(ndr, &r->Value, r->AvId); 943 ndr_print_ntlmssp_AvValue(ndr, "Value", &r->Value); 944 ndr->depth--; 945 ndr->flags = _flags_save_STRUCT; 946 } 947} 948 949_PUBLIC_ void ndr_print_AV_PAIR_LIST(struct ndr_print *ndr, const char *name, const struct AV_PAIR_LIST *r) 950{ 951 uint32_t cntr_pair_0; 952 ndr_print_struct(ndr, name, "AV_PAIR_LIST"); 953 { 954 uint32_t _flags_save_STRUCT = ndr->flags; 955 ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN); 956 ndr->depth++; 957 ndr_print_uint32(ndr, "count", r->count); 958 ndr->print(ndr, "%s: ARRAY(%d)", "pair", (int)r->count); 959 ndr->depth++; 960 for (cntr_pair_0=0;cntr_pair_0<r->count;cntr_pair_0++) { 961 char *idx_0=NULL; 962 if (asprintf(&idx_0, "[%d]", cntr_pair_0) != -1) { 963 ndr_print_AV_PAIR(ndr, "pair", &r->pair[cntr_pair_0]); 964 free(idx_0); 965 } 966 } 967 ndr->depth--; 968 ndr->depth--; 969 ndr->flags = _flags_save_STRUCT; 970 } 971} 972 973static size_t ndr_size_AV_PAIR_LIST(const struct AV_PAIR_LIST *r, struct smb_iconv_convenience *ic, int flags) 974{ 975 flags |= LIBNDR_FLAG_NOALIGN; 976 return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_AV_PAIR_LIST, ic); 977} 978 979_PUBLIC_ enum ndr_err_code ndr_push_CHALLENGE_MESSAGE(struct ndr_push *ndr, int ndr_flags, const struct CHALLENGE_MESSAGE *r) 980{ 981 { 982 uint32_t _flags_save_STRUCT = ndr->flags; 983 ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX); 984 if (ndr_flags & NDR_SCALARS) { 985 NDR_CHECK(ndr_push_align(ndr, 5)); 986 NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, "NTLMSSP", 8, sizeof(uint8_t), CH_DOS)); 987 NDR_CHECK(ndr_push_ntlmssp_MessageType(ndr, NDR_SCALARS, NtLmChallenge)); 988 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_ntlmssp_string_length(r->NegotiateFlags, r->TargetName))); 989 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_ntlmssp_string_length(r->NegotiateFlags, r->TargetName))); 990 { 991 uint32_t _flags_save_string = ndr->flags; 992 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags)); 993 NDR_CHECK(ndr_push_relative_ptr1(ndr, r->TargetName)); 994 ndr->flags = _flags_save_string; 995 } 996 NDR_CHECK(ndr_push_NEGOTIATE(ndr, NDR_SCALARS, r->NegotiateFlags)); 997 NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->ServerChallenge, 8)); 998 NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->Reserved, 8)); 999 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_size_AV_PAIR_LIST(r->TargetInfo, ndr->iconv_convenience, ndr->flags))); 1000 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_size_AV_PAIR_LIST(r->TargetInfo, ndr->iconv_convenience, ndr->flags))); 1001 NDR_CHECK(ndr_push_relative_ptr1(ndr, r->TargetInfo)); 1002 NDR_CHECK(ndr_push_set_switch_value(ndr, &r->Version, r->NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION)); 1003 NDR_CHECK(ndr_push_ntlmssp_Version(ndr, NDR_SCALARS, &r->Version)); 1004 NDR_CHECK(ndr_push_trailer_align(ndr, 5)); 1005 } 1006 if (ndr_flags & NDR_BUFFERS) { 1007 { 1008 uint32_t _flags_save_string = ndr->flags; 1009 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags)); 1010 if (r->TargetName) { 1011 NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->TargetName)); 1012 { 1013 struct ndr_push *_ndr_TargetName; 1014 NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_TargetName, 0, ndr_ntlmssp_string_length(r->NegotiateFlags, r->TargetName))); 1015 NDR_CHECK(ndr_push_string(_ndr_TargetName, NDR_SCALARS, r->TargetName)); 1016 NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_TargetName, 0, ndr_ntlmssp_string_length(r->NegotiateFlags, r->TargetName))); 1017 } 1018 NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->TargetName)); 1019 } 1020 ndr->flags = _flags_save_string; 1021 } 1022 if (r->TargetInfo) { 1023 NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->TargetInfo)); 1024 { 1025 struct ndr_push *_ndr_TargetInfo; 1026 NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_TargetInfo, 0, ndr_size_AV_PAIR_LIST(r->TargetInfo, ndr->iconv_convenience, ndr->flags))); 1027 NDR_CHECK(ndr_push_AV_PAIR_LIST(_ndr_TargetInfo, NDR_SCALARS|NDR_BUFFERS, r->TargetInfo)); 1028 NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_TargetInfo, 0, ndr_size_AV_PAIR_LIST(r->TargetInfo, ndr->iconv_convenience, ndr->flags))); 1029 } 1030 NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->TargetInfo)); 1031 } 1032 NDR_CHECK(ndr_push_ntlmssp_Version(ndr, NDR_BUFFERS, &r->Version)); 1033 } 1034 ndr->flags = _flags_save_STRUCT; 1035 } 1036 return NDR_ERR_SUCCESS; 1037} 1038 1039_PUBLIC_ enum ndr_err_code ndr_pull_CHALLENGE_MESSAGE(struct ndr_pull *ndr, int ndr_flags, struct CHALLENGE_MESSAGE *r) 1040{ 1041 uint32_t _ptr_TargetName; 1042 TALLOC_CTX *_mem_save_TargetName_0; 1043 uint32_t _ptr_TargetInfo; 1044 TALLOC_CTX *_mem_save_TargetInfo_0; 1045 { 1046 uint32_t _flags_save_STRUCT = ndr->flags; 1047 ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX); 1048 if (ndr_flags & NDR_SCALARS) { 1049 NDR_CHECK(ndr_pull_align(ndr, 5)); 1050 NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->Signature, 8, sizeof(uint8_t), CH_DOS)); 1051 NDR_CHECK(ndr_pull_ntlmssp_MessageType(ndr, NDR_SCALARS, &r->MessageType)); 1052 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->TargetNameLen)); 1053 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->TargetNameMaxLen)); 1054 { 1055 uint32_t _flags_save_string = ndr->flags; 1056 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags)); 1057 NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_TargetName)); 1058 if (_ptr_TargetName) { 1059 NDR_PULL_ALLOC(ndr, r->TargetName); 1060 NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->TargetName, _ptr_TargetName)); 1061 } else { 1062 r->TargetName = NULL; 1063 } 1064 ndr->flags = _flags_save_string; 1065 } 1066 NDR_CHECK(ndr_pull_NEGOTIATE(ndr, NDR_SCALARS, &r->NegotiateFlags)); 1067 NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->ServerChallenge, 8)); 1068 NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->Reserved, 8)); 1069 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->TargetInfoLen)); 1070 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->TargetNameInfoMaxLen)); 1071 NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_TargetInfo)); 1072 if (_ptr_TargetInfo) { 1073 NDR_PULL_ALLOC(ndr, r->TargetInfo); 1074 NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->TargetInfo, _ptr_TargetInfo)); 1075 } else { 1076 r->TargetInfo = NULL; 1077 } 1078 NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->Version, r->NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION)); 1079 NDR_CHECK(ndr_pull_ntlmssp_Version(ndr, NDR_SCALARS, &r->Version)); 1080 NDR_CHECK(ndr_pull_trailer_align(ndr, 5)); 1081 } 1082 if (ndr_flags & NDR_BUFFERS) { 1083 { 1084 uint32_t _flags_save_string = ndr->flags; 1085 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags)); 1086 if (r->TargetName) { 1087 uint32_t _relative_save_offset; 1088 _relative_save_offset = ndr->offset; 1089 NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->TargetName)); 1090 _mem_save_TargetName_0 = NDR_PULL_GET_MEM_CTX(ndr); 1091 NDR_PULL_SET_MEM_CTX(ndr, r->TargetName, 0); 1092 { 1093 struct ndr_pull *_ndr_TargetName; 1094 NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_TargetName, 0, r->TargetNameLen)); 1095 NDR_CHECK(ndr_pull_string(_ndr_TargetName, NDR_SCALARS, &r->TargetName)); 1096 NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_TargetName, 0, r->TargetNameLen)); 1097 } 1098 NDR_PULL_SET_MEM_CTX(ndr, _mem_save_TargetName_0, 0); 1099 ndr->offset = _relative_save_offset; 1100 } 1101 ndr->flags = _flags_save_string; 1102 } 1103 if (r->TargetInfo) { 1104 uint32_t _relative_save_offset; 1105 _relative_save_offset = ndr->offset; 1106 NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->TargetInfo)); 1107 _mem_save_TargetInfo_0 = NDR_PULL_GET_MEM_CTX(ndr); 1108 NDR_PULL_SET_MEM_CTX(ndr, r->TargetInfo, 0); 1109 { 1110 struct ndr_pull *_ndr_TargetInfo; 1111 NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_TargetInfo, 0, r->TargetInfoLen)); 1112 NDR_CHECK(ndr_pull_AV_PAIR_LIST(_ndr_TargetInfo, NDR_SCALARS|NDR_BUFFERS, r->TargetInfo)); 1113 NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_TargetInfo, 0, r->TargetInfoLen)); 1114 } 1115 NDR_PULL_SET_MEM_CTX(ndr, _mem_save_TargetInfo_0, 0); 1116 ndr->offset = _relative_save_offset; 1117 } 1118 NDR_CHECK(ndr_pull_ntlmssp_Version(ndr, NDR_BUFFERS, &r->Version)); 1119 } 1120 ndr->flags = _flags_save_STRUCT; 1121 } 1122 return NDR_ERR_SUCCESS; 1123} 1124 1125_PUBLIC_ void ndr_print_CHALLENGE_MESSAGE(struct ndr_print *ndr, const char *name, const struct CHALLENGE_MESSAGE *r) 1126{ 1127 ndr_print_struct(ndr, name, "CHALLENGE_MESSAGE"); 1128 { 1129 uint32_t _flags_save_STRUCT = ndr->flags; 1130 ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX); 1131 ndr->depth++; 1132 ndr_print_string(ndr, "Signature", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?"NTLMSSP":r->Signature); 1133 ndr_print_ntlmssp_MessageType(ndr, "MessageType", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?NtLmChallenge:r->MessageType); 1134 ndr_print_uint16(ndr, "TargetNameLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_ntlmssp_string_length(r->NegotiateFlags, r->TargetName):r->TargetNameLen); 1135 ndr_print_uint16(ndr, "TargetNameMaxLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->TargetNameLen:r->TargetNameMaxLen); 1136 ndr_print_ptr(ndr, "TargetName", r->TargetName); 1137 ndr->depth++; 1138 if (r->TargetName) { 1139 ndr_print_string(ndr, "TargetName", r->TargetName); 1140 } 1141 ndr->depth--; 1142 ndr_print_NEGOTIATE(ndr, "NegotiateFlags", r->NegotiateFlags); 1143 ndr_print_array_uint8(ndr, "ServerChallenge", r->ServerChallenge, 8); 1144 ndr_print_array_uint8(ndr, "Reserved", r->Reserved, 8); 1145 ndr_print_uint16(ndr, "TargetInfoLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_AV_PAIR_LIST(r->TargetInfo, ndr->iconv_convenience, ndr->flags):r->TargetInfoLen); 1146 ndr_print_uint16(ndr, "TargetNameInfoMaxLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->TargetInfoLen:r->TargetNameInfoMaxLen); 1147 ndr_print_ptr(ndr, "TargetInfo", r->TargetInfo); 1148 ndr->depth++; 1149 if (r->TargetInfo) { 1150 ndr_print_AV_PAIR_LIST(ndr, "TargetInfo", r->TargetInfo); 1151 } 1152 ndr->depth--; 1153 ndr_print_set_switch_value(ndr, &r->Version, r->NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION); 1154 ndr_print_ntlmssp_Version(ndr, "Version", &r->Version); 1155 ndr->depth--; 1156 ndr->flags = _flags_save_STRUCT; 1157 } 1158} 1159 1160_PUBLIC_ enum ndr_err_code ndr_push_LM_RESPONSE(struct ndr_push *ndr, int ndr_flags, const struct LM_RESPONSE *r) 1161{ 1162 { 1163 uint32_t _flags_save_STRUCT = ndr->flags; 1164 ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX); 1165 if (ndr_flags & NDR_SCALARS) { 1166 NDR_CHECK(ndr_push_align(ndr, 1)); 1167 NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->Response, 24)); 1168 NDR_CHECK(ndr_push_trailer_align(ndr, 1)); 1169 } 1170 if (ndr_flags & NDR_BUFFERS) { 1171 } 1172 ndr->flags = _flags_save_STRUCT; 1173 } 1174 return NDR_ERR_SUCCESS; 1175} 1176 1177_PUBLIC_ enum ndr_err_code ndr_pull_LM_RESPONSE(struct ndr_pull *ndr, int ndr_flags, struct LM_RESPONSE *r) 1178{ 1179 { 1180 uint32_t _flags_save_STRUCT = ndr->flags; 1181 ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX); 1182 if (ndr_flags & NDR_SCALARS) { 1183 NDR_CHECK(ndr_pull_align(ndr, 1)); 1184 NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->Response, 24)); 1185 NDR_CHECK(ndr_pull_trailer_align(ndr, 1)); 1186 } 1187 if (ndr_flags & NDR_BUFFERS) { 1188 } 1189 ndr->flags = _flags_save_STRUCT; 1190 } 1191 return NDR_ERR_SUCCESS; 1192} 1193 1194_PUBLIC_ void ndr_print_LM_RESPONSE(struct ndr_print *ndr, const char *name, const struct LM_RESPONSE *r) 1195{ 1196 ndr_print_struct(ndr, name, "LM_RESPONSE"); 1197 { 1198 uint32_t _flags_save_STRUCT = ndr->flags; 1199 ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX); 1200 ndr->depth++; 1201 ndr_print_array_uint8(ndr, "Response", r->Response, 24); 1202 ndr->depth--; 1203 ndr->flags = _flags_save_STRUCT; 1204 } 1205} 1206 1207_PUBLIC_ enum ndr_err_code ndr_push_LMv2_RESPONSE(struct ndr_push *ndr, int ndr_flags, const struct LMv2_RESPONSE *r) 1208{ 1209 { 1210 uint32_t _flags_save_STRUCT = ndr->flags; 1211 ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX); 1212 if (ndr_flags & NDR_SCALARS) { 1213 NDR_CHECK(ndr_push_align(ndr, 1)); 1214 NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->Response, 16)); 1215 NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->ChallengeFromClient, 8)); 1216 NDR_CHECK(ndr_push_trailer_align(ndr, 1)); 1217 } 1218 if (ndr_flags & NDR_BUFFERS) { 1219 } 1220 ndr->flags = _flags_save_STRUCT; 1221 } 1222 return NDR_ERR_SUCCESS; 1223} 1224 1225_PUBLIC_ enum ndr_err_code ndr_pull_LMv2_RESPONSE(struct ndr_pull *ndr, int ndr_flags, struct LMv2_RESPONSE *r) 1226{ 1227 { 1228 uint32_t _flags_save_STRUCT = ndr->flags; 1229 ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX); 1230 if (ndr_flags & NDR_SCALARS) { 1231 NDR_CHECK(ndr_pull_align(ndr, 1)); 1232 NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->Response, 16)); 1233 NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->ChallengeFromClient, 8)); 1234 NDR_CHECK(ndr_pull_trailer_align(ndr, 1)); 1235 } 1236 if (ndr_flags & NDR_BUFFERS) { 1237 } 1238 ndr->flags = _flags_save_STRUCT; 1239 } 1240 return NDR_ERR_SUCCESS; 1241} 1242 1243_PUBLIC_ void ndr_print_LMv2_RESPONSE(struct ndr_print *ndr, const char *name, const struct LMv2_RESPONSE *r) 1244{ 1245 ndr_print_struct(ndr, name, "LMv2_RESPONSE"); 1246 { 1247 uint32_t _flags_save_STRUCT = ndr->flags; 1248 ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX); 1249 ndr->depth++; 1250 ndr_print_array_uint8(ndr, "Response", r->Response, 16); 1251 ndr_print_array_uint8(ndr, "ChallengeFromClient", r->ChallengeFromClient, 8); 1252 ndr->depth--; 1253 ndr->flags = _flags_save_STRUCT; 1254 } 1255} 1256 1257static enum ndr_err_code ndr_push_ntlmssp_LM_RESPONSE(struct ndr_push *ndr, int ndr_flags, const union ntlmssp_LM_RESPONSE *r) 1258{ 1259 if (ndr_flags & NDR_SCALARS) { 1260 int level = ndr_push_get_switch_value(ndr, r); 1261 NDR_CHECK(ndr_push_union_align(ndr, 1)); 1262 switch (level) { 1263 case 24: { 1264 NDR_CHECK(ndr_push_LM_RESPONSE(ndr, NDR_SCALARS, &r->v1)); 1265 break; } 1266 1267 default: { 1268 break; } 1269 1270 } 1271 } 1272 if (ndr_flags & NDR_BUFFERS) { 1273 int level = ndr_push_get_switch_value(ndr, r); 1274 switch (level) { 1275 case 24: 1276 break; 1277 1278 default: 1279 break; 1280 1281 } 1282 } 1283 return NDR_ERR_SUCCESS; 1284} 1285 1286static enum ndr_err_code ndr_pull_ntlmssp_LM_RESPONSE(struct ndr_pull *ndr, int ndr_flags, union ntlmssp_LM_RESPONSE *r) 1287{ 1288 int level; 1289 level = ndr_pull_get_switch_value(ndr, r); 1290 if (ndr_flags & NDR_SCALARS) { 1291 NDR_CHECK(ndr_pull_union_align(ndr, 1)); 1292 switch (level) { 1293 case 24: { 1294 NDR_CHECK(ndr_pull_LM_RESPONSE(ndr, NDR_SCALARS, &r->v1)); 1295 break; } 1296 1297 default: { 1298 break; } 1299 1300 } 1301 } 1302 if (ndr_flags & NDR_BUFFERS) { 1303 switch (level) { 1304 case 24: 1305 break; 1306 1307 default: 1308 break; 1309 1310 } 1311 } 1312 return NDR_ERR_SUCCESS; 1313} 1314 1315_PUBLIC_ void ndr_print_ntlmssp_LM_RESPONSE(struct ndr_print *ndr, const char *name, const union ntlmssp_LM_RESPONSE *r) 1316{ 1317 int level; 1318 level = ndr_print_get_switch_value(ndr, r); 1319 ndr_print_union(ndr, name, level, "ntlmssp_LM_RESPONSE"); 1320 switch (level) { 1321 case 24: 1322 ndr_print_LM_RESPONSE(ndr, "v1", &r->v1); 1323 break; 1324 1325 default: 1326 break; 1327 1328 } 1329} 1330 1331_PUBLIC_ enum ndr_err_code ndr_push_NTLM_RESPONSE(struct ndr_push *ndr, int ndr_flags, const struct NTLM_RESPONSE *r) 1332{ 1333 { 1334 uint32_t _flags_save_STRUCT = ndr->flags; 1335 ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX); 1336 if (ndr_flags & NDR_SCALARS) { 1337 NDR_CHECK(ndr_push_align(ndr, 1)); 1338 NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->Response, 24)); 1339 NDR_CHECK(ndr_push_trailer_align(ndr, 1)); 1340 } 1341 if (ndr_flags & NDR_BUFFERS) { 1342 } 1343 ndr->flags = _flags_save_STRUCT; 1344 } 1345 return NDR_ERR_SUCCESS; 1346} 1347 1348_PUBLIC_ enum ndr_err_code ndr_pull_NTLM_RESPONSE(struct ndr_pull *ndr, int ndr_flags, struct NTLM_RESPONSE *r) 1349{ 1350 { 1351 uint32_t _flags_save_STRUCT = ndr->flags; 1352 ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX); 1353 if (ndr_flags & NDR_SCALARS) { 1354 NDR_CHECK(ndr_pull_align(ndr, 1)); 1355 NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->Response, 24)); 1356 NDR_CHECK(ndr_pull_trailer_align(ndr, 1)); 1357 } 1358 if (ndr_flags & NDR_BUFFERS) { 1359 } 1360 ndr->flags = _flags_save_STRUCT; 1361 } 1362 return NDR_ERR_SUCCESS; 1363} 1364 1365_PUBLIC_ void ndr_print_NTLM_RESPONSE(struct ndr_print *ndr, const char *name, const struct NTLM_RESPONSE *r) 1366{ 1367 ndr_print_struct(ndr, name, "NTLM_RESPONSE"); 1368 { 1369 uint32_t _flags_save_STRUCT = ndr->flags; 1370 ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX); 1371 ndr->depth++; 1372 ndr_print_array_uint8(ndr, "Response", r->Response, 24); 1373 ndr->depth--; 1374 ndr->flags = _flags_save_STRUCT; 1375 } 1376} 1377 1378static enum ndr_err_code ndr_push_NTLMv2_CLIENT_CHALLENGE(struct ndr_push *ndr, int ndr_flags, const struct NTLMv2_CLIENT_CHALLENGE *r) 1379{ 1380 { 1381 uint32_t _flags_save_STRUCT = ndr->flags; 1382 ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX); 1383 if (ndr_flags & NDR_SCALARS) { 1384 NDR_CHECK(ndr_push_align(ndr, 4)); 1385 NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, 1)); 1386 NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, 1)); 1387 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->Reserved1)); 1388 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->Reserved2)); 1389 NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->TimeStamp)); 1390 NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->ChallengeFromClient, 8)); 1391 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->Reserved3)); 1392 { 1393 uint32_t _flags_save_AV_PAIR_LIST = ndr->flags; 1394 ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING); 1395 { 1396 struct ndr_push *_ndr_AvPairs; 1397 NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_AvPairs, 0, -1)); 1398 NDR_CHECK(ndr_push_AV_PAIR_LIST(_ndr_AvPairs, NDR_SCALARS|NDR_BUFFERS, &r->AvPairs)); 1399 NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_AvPairs, 0, -1)); 1400 } 1401 ndr->flags = _flags_save_AV_PAIR_LIST; 1402 } 1403 NDR_CHECK(ndr_push_trailer_align(ndr, 4)); 1404 } 1405 if (ndr_flags & NDR_BUFFERS) { 1406 { 1407 uint32_t _flags_save_AV_PAIR_LIST = ndr->flags; 1408 ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING); 1409 ndr->flags = _flags_save_AV_PAIR_LIST; 1410 } 1411 } 1412 ndr->flags = _flags_save_STRUCT; 1413 } 1414 return NDR_ERR_SUCCESS; 1415} 1416 1417static enum ndr_err_code ndr_pull_NTLMv2_CLIENT_CHALLENGE(struct ndr_pull *ndr, int ndr_flags, struct NTLMv2_CLIENT_CHALLENGE *r) 1418{ 1419 { 1420 uint32_t _flags_save_STRUCT = ndr->flags; 1421 ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX); 1422 if (ndr_flags & NDR_SCALARS) { 1423 NDR_CHECK(ndr_pull_align(ndr, 4)); 1424 NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->RespType)); 1425 NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->HiRespType)); 1426 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->Reserved1)); 1427 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->Reserved2)); 1428 NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->TimeStamp)); 1429 NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->ChallengeFromClient, 8)); 1430 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->Reserved3)); 1431 { 1432 uint32_t _flags_save_AV_PAIR_LIST = ndr->flags; 1433 ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING); 1434 { 1435 struct ndr_pull *_ndr_AvPairs; 1436 NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_AvPairs, 0, -1)); 1437 NDR_CHECK(ndr_pull_AV_PAIR_LIST(_ndr_AvPairs, NDR_SCALARS|NDR_BUFFERS, &r->AvPairs)); 1438 NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_AvPairs, 0, -1)); 1439 } 1440 ndr->flags = _flags_save_AV_PAIR_LIST; 1441 } 1442 NDR_CHECK(ndr_pull_trailer_align(ndr, 4)); 1443 } 1444 if (ndr_flags & NDR_BUFFERS) { 1445 { 1446 uint32_t _flags_save_AV_PAIR_LIST = ndr->flags; 1447 ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING); 1448 ndr->flags = _flags_save_AV_PAIR_LIST; 1449 } 1450 } 1451 ndr->flags = _flags_save_STRUCT; 1452 } 1453 return NDR_ERR_SUCCESS; 1454} 1455 1456_PUBLIC_ void ndr_print_NTLMv2_CLIENT_CHALLENGE(struct ndr_print *ndr, const char *name, const struct NTLMv2_CLIENT_CHALLENGE *r) 1457{ 1458 ndr_print_struct(ndr, name, "NTLMv2_CLIENT_CHALLENGE"); 1459 { 1460 uint32_t _flags_save_STRUCT = ndr->flags; 1461 ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX); 1462 ndr->depth++; 1463 ndr_print_uint8(ndr, "RespType", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?1:r->RespType); 1464 ndr_print_uint8(ndr, "HiRespType", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?1:r->HiRespType); 1465 ndr_print_uint16(ndr, "Reserved1", r->Reserved1); 1466 ndr_print_uint32(ndr, "Reserved2", r->Reserved2); 1467 ndr_print_NTTIME(ndr, "TimeStamp", r->TimeStamp); 1468 ndr_print_array_uint8(ndr, "ChallengeFromClient", r->ChallengeFromClient, 8); 1469 ndr_print_uint32(ndr, "Reserved3", r->Reserved3); 1470 ndr_print_AV_PAIR_LIST(ndr, "AvPairs", &r->AvPairs); 1471 ndr->depth--; 1472 ndr->flags = _flags_save_STRUCT; 1473 } 1474} 1475 1476_PUBLIC_ enum ndr_err_code ndr_push_NTLMv2_RESPONSE(struct ndr_push *ndr, int ndr_flags, const struct NTLMv2_RESPONSE *r) 1477{ 1478 { 1479 uint32_t _flags_save_STRUCT = ndr->flags; 1480 ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX); 1481 if (ndr_flags & NDR_SCALARS) { 1482 NDR_CHECK(ndr_push_align(ndr, 4)); 1483 NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->Response, 16)); 1484 NDR_CHECK(ndr_push_NTLMv2_CLIENT_CHALLENGE(ndr, NDR_SCALARS, &r->Challenge)); 1485 NDR_CHECK(ndr_push_trailer_align(ndr, 4)); 1486 } 1487 if (ndr_flags & NDR_BUFFERS) { 1488 NDR_CHECK(ndr_push_NTLMv2_CLIENT_CHALLENGE(ndr, NDR_BUFFERS, &r->Challenge)); 1489 } 1490 ndr->flags = _flags_save_STRUCT; 1491 } 1492 return NDR_ERR_SUCCESS; 1493} 1494 1495_PUBLIC_ enum ndr_err_code ndr_pull_NTLMv2_RESPONSE(struct ndr_pull *ndr, int ndr_flags, struct NTLMv2_RESPONSE *r) 1496{ 1497 { 1498 uint32_t _flags_save_STRUCT = ndr->flags; 1499 ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX); 1500 if (ndr_flags & NDR_SCALARS) { 1501 NDR_CHECK(ndr_pull_align(ndr, 4)); 1502 NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->Response, 16)); 1503 NDR_CHECK(ndr_pull_NTLMv2_CLIENT_CHALLENGE(ndr, NDR_SCALARS, &r->Challenge)); 1504 NDR_CHECK(ndr_pull_trailer_align(ndr, 4)); 1505 } 1506 if (ndr_flags & NDR_BUFFERS) { 1507 NDR_CHECK(ndr_pull_NTLMv2_CLIENT_CHALLENGE(ndr, NDR_BUFFERS, &r->Challenge)); 1508 } 1509 ndr->flags = _flags_save_STRUCT; 1510 } 1511 return NDR_ERR_SUCCESS; 1512} 1513 1514_PUBLIC_ void ndr_print_NTLMv2_RESPONSE(struct ndr_print *ndr, const char *name, const struct NTLMv2_RESPONSE *r) 1515{ 1516 ndr_print_struct(ndr, name, "NTLMv2_RESPONSE"); 1517 { 1518 uint32_t _flags_save_STRUCT = ndr->flags; 1519 ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX); 1520 ndr->depth++; 1521 ndr_print_array_uint8(ndr, "Response", r->Response, 16); 1522 ndr_print_NTLMv2_CLIENT_CHALLENGE(ndr, "Challenge", &r->Challenge); 1523 ndr->depth--; 1524 ndr->flags = _flags_save_STRUCT; 1525 } 1526} 1527 1528_PUBLIC_ enum ndr_err_code ndr_push_ntlmssp_NTLM_RESPONSE(struct ndr_push *ndr, int ndr_flags, const union ntlmssp_NTLM_RESPONSE *r) 1529{ 1530 if (ndr_flags & NDR_SCALARS) { 1531 int level = ndr_push_get_switch_value(ndr, r); 1532 NDR_CHECK(ndr_push_union_align(ndr, 4)); 1533 switch (level) { 1534 case 0: { 1535 break; } 1536 1537 case 0x18: { 1538 NDR_CHECK(ndr_push_NTLM_RESPONSE(ndr, NDR_SCALARS, &r->v1)); 1539 break; } 1540 1541 default: { 1542 NDR_CHECK(ndr_push_NTLMv2_RESPONSE(ndr, NDR_SCALARS, &r->v2)); 1543 break; } 1544 1545 } 1546 } 1547 if (ndr_flags & NDR_BUFFERS) { 1548 int level = ndr_push_get_switch_value(ndr, r); 1549 switch (level) { 1550 case 0: 1551 break; 1552 1553 case 0x18: 1554 break; 1555 1556 default: 1557 NDR_CHECK(ndr_push_NTLMv2_RESPONSE(ndr, NDR_BUFFERS, &r->v2)); 1558 break; 1559 1560 } 1561 } 1562 return NDR_ERR_SUCCESS; 1563} 1564 1565_PUBLIC_ enum ndr_err_code ndr_pull_ntlmssp_NTLM_RESPONSE(struct ndr_pull *ndr, int ndr_flags, union ntlmssp_NTLM_RESPONSE *r) 1566{ 1567 int level; 1568 level = ndr_pull_get_switch_value(ndr, r); 1569 if (ndr_flags & NDR_SCALARS) { 1570 NDR_CHECK(ndr_pull_union_align(ndr, 4)); 1571 switch (level) { 1572 case 0: { 1573 break; } 1574 1575 case 0x18: { 1576 NDR_CHECK(ndr_pull_NTLM_RESPONSE(ndr, NDR_SCALARS, &r->v1)); 1577 break; } 1578 1579 default: { 1580 NDR_CHECK(ndr_pull_NTLMv2_RESPONSE(ndr, NDR_SCALARS, &r->v2)); 1581 break; } 1582 1583 } 1584 } 1585 if (ndr_flags & NDR_BUFFERS) { 1586 switch (level) { 1587 case 0: 1588 break; 1589 1590 case 0x18: 1591 break; 1592 1593 default: 1594 NDR_CHECK(ndr_pull_NTLMv2_RESPONSE(ndr, NDR_BUFFERS, &r->v2)); 1595 break; 1596 1597 } 1598 } 1599 return NDR_ERR_SUCCESS; 1600} 1601 1602_PUBLIC_ void ndr_print_ntlmssp_NTLM_RESPONSE(struct ndr_print *ndr, const char *name, const union ntlmssp_NTLM_RESPONSE *r) 1603{ 1604 int level; 1605 level = ndr_print_get_switch_value(ndr, r); 1606 ndr_print_union(ndr, name, level, "ntlmssp_NTLM_RESPONSE"); 1607 switch (level) { 1608 case 0: 1609 break; 1610 1611 case 0x18: 1612 ndr_print_NTLM_RESPONSE(ndr, "v1", &r->v1); 1613 break; 1614 1615 default: 1616 ndr_print_NTLMv2_RESPONSE(ndr, "v2", &r->v2); 1617 break; 1618 1619 } 1620} 1621 1622_PUBLIC_ enum ndr_err_code ndr_push_AUTHENTICATE_MESSAGE(struct ndr_push *ndr, int ndr_flags, const struct AUTHENTICATE_MESSAGE *r) 1623{ 1624 { 1625 uint32_t _flags_save_STRUCT = ndr->flags; 1626 ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING); 1627 if (ndr_flags & NDR_SCALARS) { 1628 NDR_CHECK(ndr_push_align(ndr, 5)); 1629 NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, "NTLMSSP", 8, sizeof(uint8_t), CH_DOS)); 1630 NDR_CHECK(ndr_push_ntlmssp_MessageType(ndr, NDR_SCALARS, NtLmAuthenticate)); 1631 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->LmChallengeResponseLen)); 1632 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->LmChallengeResponseLen)); 1633 NDR_CHECK(ndr_push_relative_ptr1(ndr, r->LmChallengeResponse)); 1634 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->NtChallengeResponseLen)); 1635 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->NtChallengeResponseLen)); 1636 NDR_CHECK(ndr_push_relative_ptr1(ndr, r->NtChallengeResponse)); 1637 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_ntlmssp_string_length(r->NegotiateFlags, r->DomainName))); 1638 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_ntlmssp_string_length(r->NegotiateFlags, r->DomainName))); 1639 { 1640 uint32_t _flags_save_string = ndr->flags; 1641 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags)); 1642 NDR_CHECK(ndr_push_relative_ptr1(ndr, r->DomainName)); 1643 ndr->flags = _flags_save_string; 1644 } 1645 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_ntlmssp_string_length(r->NegotiateFlags, r->UserName))); 1646 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_ntlmssp_string_length(r->NegotiateFlags, r->UserName))); 1647 { 1648 uint32_t _flags_save_string = ndr->flags; 1649 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags)); 1650 NDR_CHECK(ndr_push_relative_ptr1(ndr, r->UserName)); 1651 ndr->flags = _flags_save_string; 1652 } 1653 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_ntlmssp_string_length(r->NegotiateFlags, r->Workstation))); 1654 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_ntlmssp_string_length(r->NegotiateFlags, r->Workstation))); 1655 { 1656 uint32_t _flags_save_string = ndr->flags; 1657 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags)); 1658 NDR_CHECK(ndr_push_relative_ptr1(ndr, r->Workstation)); 1659 ndr->flags = _flags_save_string; 1660 } 1661 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->EncryptedRandomSessionKey->length)); 1662 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->EncryptedRandomSessionKey->length)); 1663 NDR_CHECK(ndr_push_relative_ptr1(ndr, r->EncryptedRandomSessionKey)); 1664 NDR_CHECK(ndr_push_NEGOTIATE(ndr, NDR_SCALARS, r->NegotiateFlags)); 1665 NDR_CHECK(ndr_push_set_switch_value(ndr, &r->Version, r->NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION)); 1666 NDR_CHECK(ndr_push_ntlmssp_Version(ndr, NDR_SCALARS, &r->Version)); 1667 NDR_CHECK(ndr_push_trailer_align(ndr, 5)); 1668 } 1669 if (ndr_flags & NDR_BUFFERS) { 1670 if (r->LmChallengeResponse) { 1671 NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->LmChallengeResponse)); 1672 { 1673 struct ndr_push *_ndr_LmChallengeResponse; 1674 NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_LmChallengeResponse, 0, r->LmChallengeResponseLen)); 1675 NDR_CHECK(ndr_push_set_switch_value(_ndr_LmChallengeResponse, r->LmChallengeResponse, r->LmChallengeResponseLen)); 1676 NDR_CHECK(ndr_push_ntlmssp_LM_RESPONSE(_ndr_LmChallengeResponse, NDR_SCALARS|NDR_BUFFERS, r->LmChallengeResponse)); 1677 NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_LmChallengeResponse, 0, r->LmChallengeResponseLen)); 1678 } 1679 NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->LmChallengeResponse)); 1680 } 1681 if (r->NtChallengeResponse) { 1682 NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->NtChallengeResponse)); 1683 { 1684 struct ndr_push *_ndr_NtChallengeResponse; 1685 NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_NtChallengeResponse, 0, r->NtChallengeResponseLen)); 1686 NDR_CHECK(ndr_push_set_switch_value(_ndr_NtChallengeResponse, r->NtChallengeResponse, r->NtChallengeResponseLen)); 1687 NDR_CHECK(ndr_push_ntlmssp_NTLM_RESPONSE(_ndr_NtChallengeResponse, NDR_SCALARS|NDR_BUFFERS, r->NtChallengeResponse)); 1688 NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_NtChallengeResponse, 0, r->NtChallengeResponseLen)); 1689 } 1690 NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->NtChallengeResponse)); 1691 } 1692 { 1693 uint32_t _flags_save_string = ndr->flags; 1694 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags)); 1695 if (r->DomainName) { 1696 NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->DomainName)); 1697 { 1698 struct ndr_push *_ndr_DomainName; 1699 NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_DomainName, 0, ndr_ntlmssp_string_length(r->NegotiateFlags, r->DomainName))); 1700 NDR_CHECK(ndr_push_string(_ndr_DomainName, NDR_SCALARS, r->DomainName)); 1701 NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_DomainName, 0, ndr_ntlmssp_string_length(r->NegotiateFlags, r->DomainName))); 1702 } 1703 NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->DomainName)); 1704 } 1705 ndr->flags = _flags_save_string; 1706 } 1707 { 1708 uint32_t _flags_save_string = ndr->flags; 1709 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags)); 1710 if (r->UserName) { 1711 NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->UserName)); 1712 { 1713 struct ndr_push *_ndr_UserName; 1714 NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_UserName, 0, ndr_ntlmssp_string_length(r->NegotiateFlags, r->UserName))); 1715 NDR_CHECK(ndr_push_string(_ndr_UserName, NDR_SCALARS, r->UserName)); 1716 NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_UserName, 0, ndr_ntlmssp_string_length(r->NegotiateFlags, r->UserName))); 1717 } 1718 NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->UserName)); 1719 } 1720 ndr->flags = _flags_save_string; 1721 } 1722 { 1723 uint32_t _flags_save_string = ndr->flags; 1724 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags)); 1725 if (r->Workstation) { 1726 NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->Workstation)); 1727 { 1728 struct ndr_push *_ndr_Workstation; 1729 NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_Workstation, 0, ndr_ntlmssp_string_length(r->NegotiateFlags, r->Workstation))); 1730 NDR_CHECK(ndr_push_string(_ndr_Workstation, NDR_SCALARS, r->Workstation)); 1731 NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_Workstation, 0, ndr_ntlmssp_string_length(r->NegotiateFlags, r->Workstation))); 1732 } 1733 NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->Workstation)); 1734 } 1735 ndr->flags = _flags_save_string; 1736 } 1737 if (r->EncryptedRandomSessionKey) { 1738 NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->EncryptedRandomSessionKey)); 1739 { 1740 struct ndr_push *_ndr_EncryptedRandomSessionKey; 1741 NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_EncryptedRandomSessionKey, 0, r->EncryptedRandomSessionKey->length)); 1742 NDR_CHECK(ndr_push_DATA_BLOB(_ndr_EncryptedRandomSessionKey, NDR_SCALARS, *r->EncryptedRandomSessionKey)); 1743 NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_EncryptedRandomSessionKey, 0, r->EncryptedRandomSessionKey->length)); 1744 } 1745 NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->EncryptedRandomSessionKey)); 1746 } 1747 NDR_CHECK(ndr_push_ntlmssp_Version(ndr, NDR_BUFFERS, &r->Version)); 1748 } 1749 ndr->flags = _flags_save_STRUCT; 1750 } 1751 return NDR_ERR_SUCCESS; 1752} 1753 1754_PUBLIC_ enum ndr_err_code ndr_pull_AUTHENTICATE_MESSAGE(struct ndr_pull *ndr, int ndr_flags, struct AUTHENTICATE_MESSAGE *r) 1755{ 1756 uint32_t _ptr_LmChallengeResponse; 1757 TALLOC_CTX *_mem_save_LmChallengeResponse_0; 1758 uint32_t _ptr_NtChallengeResponse; 1759 TALLOC_CTX *_mem_save_NtChallengeResponse_0; 1760 uint32_t _ptr_DomainName; 1761 TALLOC_CTX *_mem_save_DomainName_0; 1762 uint32_t _ptr_UserName; 1763 TALLOC_CTX *_mem_save_UserName_0; 1764 uint32_t _ptr_Workstation; 1765 TALLOC_CTX *_mem_save_Workstation_0; 1766 uint32_t _ptr_EncryptedRandomSessionKey; 1767 TALLOC_CTX *_mem_save_EncryptedRandomSessionKey_0; 1768 { 1769 uint32_t _flags_save_STRUCT = ndr->flags; 1770 ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING); 1771 if (ndr_flags & NDR_SCALARS) { 1772 NDR_CHECK(ndr_pull_align(ndr, 5)); 1773 NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->Signature, 8, sizeof(uint8_t), CH_DOS)); 1774 NDR_CHECK(ndr_pull_ntlmssp_MessageType(ndr, NDR_SCALARS, &r->MessageType)); 1775 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->LmChallengeResponseLen)); 1776 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->LmChallengeResponseMaxLen)); 1777 NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_LmChallengeResponse)); 1778 if (_ptr_LmChallengeResponse) { 1779 NDR_PULL_ALLOC(ndr, r->LmChallengeResponse); 1780 NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->LmChallengeResponse, _ptr_LmChallengeResponse)); 1781 } else { 1782 r->LmChallengeResponse = NULL; 1783 } 1784 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->NtChallengeResponseLen)); 1785 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->NtChallengeResponseMaxLen)); 1786 NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_NtChallengeResponse)); 1787 if (_ptr_NtChallengeResponse) { 1788 NDR_PULL_ALLOC(ndr, r->NtChallengeResponse); 1789 NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->NtChallengeResponse, _ptr_NtChallengeResponse)); 1790 } else { 1791 r->NtChallengeResponse = NULL; 1792 } 1793 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->DomainNameLen)); 1794 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->DomainNameMaxLen)); 1795 { 1796 uint32_t _flags_save_string = ndr->flags; 1797 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags)); 1798 NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_DomainName)); 1799 if (_ptr_DomainName) { 1800 NDR_PULL_ALLOC(ndr, r->DomainName); 1801 NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->DomainName, _ptr_DomainName)); 1802 } else { 1803 r->DomainName = NULL; 1804 } 1805 ndr->flags = _flags_save_string; 1806 } 1807 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->UserNameLen)); 1808 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->UserNameMaxLen)); 1809 { 1810 uint32_t _flags_save_string = ndr->flags; 1811 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags)); 1812 NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_UserName)); 1813 if (_ptr_UserName) { 1814 NDR_PULL_ALLOC(ndr, r->UserName); 1815 NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->UserName, _ptr_UserName)); 1816 } else { 1817 r->UserName = NULL; 1818 } 1819 ndr->flags = _flags_save_string; 1820 } 1821 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->WorkstationLen)); 1822 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->WorkstationMaxLen)); 1823 { 1824 uint32_t _flags_save_string = ndr->flags; 1825 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags)); 1826 NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_Workstation)); 1827 if (_ptr_Workstation) { 1828 NDR_PULL_ALLOC(ndr, r->Workstation); 1829 NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->Workstation, _ptr_Workstation)); 1830 } else { 1831 r->Workstation = NULL; 1832 } 1833 ndr->flags = _flags_save_string; 1834 } 1835 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->EncryptedRandomSessionKeyLen)); 1836 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->EncryptedRandomSessionKeyMaxLen)); 1837 NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_EncryptedRandomSessionKey)); 1838 if (_ptr_EncryptedRandomSessionKey) { 1839 NDR_PULL_ALLOC(ndr, r->EncryptedRandomSessionKey); 1840 NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->EncryptedRandomSessionKey, _ptr_EncryptedRandomSessionKey)); 1841 } else { 1842 r->EncryptedRandomSessionKey = NULL; 1843 } 1844 NDR_CHECK(ndr_pull_NEGOTIATE(ndr, NDR_SCALARS, &r->NegotiateFlags)); 1845 NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->Version, r->NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION)); 1846 NDR_CHECK(ndr_pull_ntlmssp_Version(ndr, NDR_SCALARS, &r->Version)); 1847 NDR_CHECK(ndr_pull_trailer_align(ndr, 5)); 1848 } 1849 if (ndr_flags & NDR_BUFFERS) { 1850 if (r->LmChallengeResponse) { 1851 uint32_t _relative_save_offset; 1852 _relative_save_offset = ndr->offset; 1853 NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->LmChallengeResponse)); 1854 _mem_save_LmChallengeResponse_0 = NDR_PULL_GET_MEM_CTX(ndr); 1855 NDR_PULL_SET_MEM_CTX(ndr, r->LmChallengeResponse, 0); 1856 { 1857 struct ndr_pull *_ndr_LmChallengeResponse; 1858 NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_LmChallengeResponse, 0, r->LmChallengeResponseLen)); 1859 NDR_CHECK(ndr_pull_set_switch_value(_ndr_LmChallengeResponse, r->LmChallengeResponse, r->LmChallengeResponseLen)); 1860 NDR_CHECK(ndr_pull_ntlmssp_LM_RESPONSE(_ndr_LmChallengeResponse, NDR_SCALARS|NDR_BUFFERS, r->LmChallengeResponse)); 1861 NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_LmChallengeResponse, 0, r->LmChallengeResponseLen)); 1862 } 1863 NDR_PULL_SET_MEM_CTX(ndr, _mem_save_LmChallengeResponse_0, 0); 1864 ndr->offset = _relative_save_offset; 1865 } 1866 if (r->NtChallengeResponse) { 1867 uint32_t _relative_save_offset; 1868 _relative_save_offset = ndr->offset; 1869 NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->NtChallengeResponse)); 1870 _mem_save_NtChallengeResponse_0 = NDR_PULL_GET_MEM_CTX(ndr); 1871 NDR_PULL_SET_MEM_CTX(ndr, r->NtChallengeResponse, 0); 1872 { 1873 struct ndr_pull *_ndr_NtChallengeResponse; 1874 NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_NtChallengeResponse, 0, r->NtChallengeResponseMaxLen)); 1875 NDR_CHECK(ndr_pull_set_switch_value(_ndr_NtChallengeResponse, r->NtChallengeResponse, r->NtChallengeResponseLen)); 1876 NDR_CHECK(ndr_pull_ntlmssp_NTLM_RESPONSE(_ndr_NtChallengeResponse, NDR_SCALARS|NDR_BUFFERS, r->NtChallengeResponse)); 1877 NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_NtChallengeResponse, 0, r->NtChallengeResponseMaxLen)); 1878 } 1879 NDR_PULL_SET_MEM_CTX(ndr, _mem_save_NtChallengeResponse_0, 0); 1880 ndr->offset = _relative_save_offset; 1881 } 1882 { 1883 uint32_t _flags_save_string = ndr->flags; 1884 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags)); 1885 if (r->DomainName) { 1886 uint32_t _relative_save_offset; 1887 _relative_save_offset = ndr->offset; 1888 NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->DomainName)); 1889 _mem_save_DomainName_0 = NDR_PULL_GET_MEM_CTX(ndr); 1890 NDR_PULL_SET_MEM_CTX(ndr, r->DomainName, 0); 1891 { 1892 struct ndr_pull *_ndr_DomainName; 1893 NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_DomainName, 0, r->DomainNameLen)); 1894 NDR_CHECK(ndr_pull_string(_ndr_DomainName, NDR_SCALARS, &r->DomainName)); 1895 NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_DomainName, 0, r->DomainNameLen)); 1896 } 1897 NDR_PULL_SET_MEM_CTX(ndr, _mem_save_DomainName_0, 0); 1898 ndr->offset = _relative_save_offset; 1899 } 1900 ndr->flags = _flags_save_string; 1901 } 1902 { 1903 uint32_t _flags_save_string = ndr->flags; 1904 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags)); 1905 if (r->UserName) { 1906 uint32_t _relative_save_offset; 1907 _relative_save_offset = ndr->offset; 1908 NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->UserName)); 1909 _mem_save_UserName_0 = NDR_PULL_GET_MEM_CTX(ndr); 1910 NDR_PULL_SET_MEM_CTX(ndr, r->UserName, 0); 1911 { 1912 struct ndr_pull *_ndr_UserName; 1913 NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_UserName, 0, r->UserNameLen)); 1914 NDR_CHECK(ndr_pull_string(_ndr_UserName, NDR_SCALARS, &r->UserName)); 1915 NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_UserName, 0, r->UserNameLen)); 1916 } 1917 NDR_PULL_SET_MEM_CTX(ndr, _mem_save_UserName_0, 0); 1918 ndr->offset = _relative_save_offset; 1919 } 1920 ndr->flags = _flags_save_string; 1921 } 1922 { 1923 uint32_t _flags_save_string = ndr->flags; 1924 ndr_set_flags(&ndr->flags, ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags)); 1925 if (r->Workstation) { 1926 uint32_t _relative_save_offset; 1927 _relative_save_offset = ndr->offset; 1928 NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->Workstation)); 1929 _mem_save_Workstation_0 = NDR_PULL_GET_MEM_CTX(ndr); 1930 NDR_PULL_SET_MEM_CTX(ndr, r->Workstation, 0); 1931 { 1932 struct ndr_pull *_ndr_Workstation; 1933 NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_Workstation, 0, r->WorkstationLen)); 1934 NDR_CHECK(ndr_pull_string(_ndr_Workstation, NDR_SCALARS, &r->Workstation)); 1935 NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_Workstation, 0, r->WorkstationLen)); 1936 } 1937 NDR_PULL_SET_MEM_CTX(ndr, _mem_save_Workstation_0, 0); 1938 ndr->offset = _relative_save_offset; 1939 } 1940 ndr->flags = _flags_save_string; 1941 } 1942 if (r->EncryptedRandomSessionKey) { 1943 uint32_t _relative_save_offset; 1944 _relative_save_offset = ndr->offset; 1945 NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->EncryptedRandomSessionKey)); 1946 _mem_save_EncryptedRandomSessionKey_0 = NDR_PULL_GET_MEM_CTX(ndr); 1947 NDR_PULL_SET_MEM_CTX(ndr, r->EncryptedRandomSessionKey, 0); 1948 { 1949 struct ndr_pull *_ndr_EncryptedRandomSessionKey; 1950 NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_EncryptedRandomSessionKey, 0, r->EncryptedRandomSessionKeyLen)); 1951 NDR_CHECK(ndr_pull_DATA_BLOB(_ndr_EncryptedRandomSessionKey, NDR_SCALARS, r->EncryptedRandomSessionKey)); 1952 NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_EncryptedRandomSessionKey, 0, r->EncryptedRandomSessionKeyLen)); 1953 } 1954 NDR_PULL_SET_MEM_CTX(ndr, _mem_save_EncryptedRandomSessionKey_0, 0); 1955 ndr->offset = _relative_save_offset; 1956 } 1957 NDR_CHECK(ndr_pull_ntlmssp_Version(ndr, NDR_BUFFERS, &r->Version)); 1958 } 1959 ndr->flags = _flags_save_STRUCT; 1960 } 1961 return NDR_ERR_SUCCESS; 1962} 1963 1964_PUBLIC_ void ndr_print_AUTHENTICATE_MESSAGE(struct ndr_print *ndr, const char *name, const struct AUTHENTICATE_MESSAGE *r) 1965{ 1966 ndr_print_struct(ndr, name, "AUTHENTICATE_MESSAGE"); 1967 { 1968 uint32_t _flags_save_STRUCT = ndr->flags; 1969 ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING); 1970 ndr->depth++; 1971 ndr_print_string(ndr, "Signature", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?"NTLMSSP":r->Signature); 1972 ndr_print_ntlmssp_MessageType(ndr, "MessageType", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?NtLmAuthenticate:r->MessageType); 1973 ndr_print_uint16(ndr, "LmChallengeResponseLen", r->LmChallengeResponseLen); 1974 ndr_print_uint16(ndr, "LmChallengeResponseMaxLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->LmChallengeResponseLen:r->LmChallengeResponseMaxLen); 1975 ndr_print_ptr(ndr, "LmChallengeResponse", r->LmChallengeResponse); 1976 ndr->depth++; 1977 if (r->LmChallengeResponse) { 1978 ndr_print_set_switch_value(ndr, r->LmChallengeResponse, r->LmChallengeResponseLen); 1979 ndr_print_ntlmssp_LM_RESPONSE(ndr, "LmChallengeResponse", r->LmChallengeResponse); 1980 } 1981 ndr->depth--; 1982 ndr_print_uint16(ndr, "NtChallengeResponseLen", r->NtChallengeResponseLen); 1983 ndr_print_uint16(ndr, "NtChallengeResponseMaxLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->NtChallengeResponseLen:r->NtChallengeResponseMaxLen); 1984 ndr_print_ptr(ndr, "NtChallengeResponse", r->NtChallengeResponse); 1985 ndr->depth++; 1986 if (r->NtChallengeResponse) { 1987 ndr_print_set_switch_value(ndr, r->NtChallengeResponse, r->NtChallengeResponseLen); 1988 ndr_print_ntlmssp_NTLM_RESPONSE(ndr, "NtChallengeResponse", r->NtChallengeResponse); 1989 } 1990 ndr->depth--; 1991 ndr_print_uint16(ndr, "DomainNameLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_ntlmssp_string_length(r->NegotiateFlags, r->DomainName):r->DomainNameLen); 1992 ndr_print_uint16(ndr, "DomainNameMaxLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->DomainNameLen:r->DomainNameMaxLen); 1993 ndr_print_ptr(ndr, "DomainName", r->DomainName); 1994 ndr->depth++; 1995 if (r->DomainName) { 1996 ndr_print_string(ndr, "DomainName", r->DomainName); 1997 } 1998 ndr->depth--; 1999 ndr_print_uint16(ndr, "UserNameLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_ntlmssp_string_length(r->NegotiateFlags, r->UserName):r->UserNameLen); 2000 ndr_print_uint16(ndr, "UserNameMaxLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->UserNameLen:r->UserNameMaxLen); 2001 ndr_print_ptr(ndr, "UserName", r->UserName); 2002 ndr->depth++; 2003 if (r->UserName) { 2004 ndr_print_string(ndr, "UserName", r->UserName); 2005 } 2006 ndr->depth--; 2007 ndr_print_uint16(ndr, "WorkstationLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_ntlmssp_string_length(r->NegotiateFlags, r->Workstation):r->WorkstationLen); 2008 ndr_print_uint16(ndr, "WorkstationMaxLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->WorkstationLen:r->WorkstationMaxLen); 2009 ndr_print_ptr(ndr, "Workstation", r->Workstation); 2010 ndr->depth++; 2011 if (r->Workstation) { 2012 ndr_print_string(ndr, "Workstation", r->Workstation); 2013 } 2014 ndr->depth--; 2015 ndr_print_uint16(ndr, "EncryptedRandomSessionKeyLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->EncryptedRandomSessionKey->length:r->EncryptedRandomSessionKeyLen); 2016 ndr_print_uint16(ndr, "EncryptedRandomSessionKeyMaxLen", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->EncryptedRandomSessionKeyLen:r->EncryptedRandomSessionKeyMaxLen); 2017 ndr_print_ptr(ndr, "EncryptedRandomSessionKey", r->EncryptedRandomSessionKey); 2018 ndr->depth++; 2019 if (r->EncryptedRandomSessionKey) { 2020 ndr_print_DATA_BLOB(ndr, "EncryptedRandomSessionKey", *r->EncryptedRandomSessionKey); 2021 } 2022 ndr->depth--; 2023 ndr_print_NEGOTIATE(ndr, "NegotiateFlags", r->NegotiateFlags); 2024 ndr_print_set_switch_value(ndr, &r->Version, r->NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION); 2025 ndr_print_ntlmssp_Version(ndr, "Version", &r->Version); 2026 ndr->depth--; 2027 ndr->flags = _flags_save_STRUCT; 2028 } 2029} 2030 2031_PUBLIC_ enum ndr_err_code ndr_push_NTLMSSP_MESSAGE_SIGNATURE(struct ndr_push *ndr, int ndr_flags, const struct NTLMSSP_MESSAGE_SIGNATURE *r) 2032{ 2033 if (ndr_flags & NDR_SCALARS) { 2034 NDR_CHECK(ndr_push_align(ndr, 4)); 2035 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, NTLMSSP_SIGN_VERSION)); 2036 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->RandomPad)); 2037 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->Checksum)); 2038 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->SeqNum)); 2039 NDR_CHECK(ndr_push_trailer_align(ndr, 4)); 2040 } 2041 if (ndr_flags & NDR_BUFFERS) { 2042 } 2043 return NDR_ERR_SUCCESS; 2044} 2045 2046_PUBLIC_ enum ndr_err_code ndr_pull_NTLMSSP_MESSAGE_SIGNATURE(struct ndr_pull *ndr, int ndr_flags, struct NTLMSSP_MESSAGE_SIGNATURE *r) 2047{ 2048 if (ndr_flags & NDR_SCALARS) { 2049 NDR_CHECK(ndr_pull_align(ndr, 4)); 2050 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->Version)); 2051 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->RandomPad)); 2052 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->Checksum)); 2053 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->SeqNum)); 2054 NDR_CHECK(ndr_pull_trailer_align(ndr, 4)); 2055 } 2056 if (ndr_flags & NDR_BUFFERS) { 2057 } 2058 return NDR_ERR_SUCCESS; 2059} 2060 2061_PUBLIC_ void ndr_print_NTLMSSP_MESSAGE_SIGNATURE(struct ndr_print *ndr, const char *name, const struct NTLMSSP_MESSAGE_SIGNATURE *r) 2062{ 2063 ndr_print_struct(ndr, name, "NTLMSSP_MESSAGE_SIGNATURE"); 2064 ndr->depth++; 2065 ndr_print_uint32(ndr, "Version", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?NTLMSSP_SIGN_VERSION:r->Version); 2066 ndr_print_uint32(ndr, "RandomPad", r->RandomPad); 2067 ndr_print_uint32(ndr, "Checksum", r->Checksum); 2068 ndr_print_uint32(ndr, "SeqNum", r->SeqNum); 2069 ndr->depth--; 2070} 2071 2072_PUBLIC_ enum ndr_err_code ndr_push_NTLMSSP_MESSAGE_SIGNATURE_NTLMv2(struct ndr_push *ndr, int ndr_flags, const struct NTLMSSP_MESSAGE_SIGNATURE_NTLMv2 *r) 2073{ 2074 { 2075 uint32_t _flags_save_STRUCT = ndr->flags; 2076 ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX); 2077 if (ndr_flags & NDR_SCALARS) { 2078 NDR_CHECK(ndr_push_align(ndr, 4)); 2079 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, NTLMSSP_SIGN_VERSION)); 2080 NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->Checksum, 8)); 2081 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->SeqNum)); 2082 NDR_CHECK(ndr_push_trailer_align(ndr, 4)); 2083 } 2084 if (ndr_flags & NDR_BUFFERS) { 2085 } 2086 ndr->flags = _flags_save_STRUCT; 2087 } 2088 return NDR_ERR_SUCCESS; 2089} 2090 2091_PUBLIC_ enum ndr_err_code ndr_pull_NTLMSSP_MESSAGE_SIGNATURE_NTLMv2(struct ndr_pull *ndr, int ndr_flags, struct NTLMSSP_MESSAGE_SIGNATURE_NTLMv2 *r) 2092{ 2093 { 2094 uint32_t _flags_save_STRUCT = ndr->flags; 2095 ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX); 2096 if (ndr_flags & NDR_SCALARS) { 2097 NDR_CHECK(ndr_pull_align(ndr, 4)); 2098 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->Version)); 2099 NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->Checksum, 8)); 2100 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->SeqNum)); 2101 NDR_CHECK(ndr_pull_trailer_align(ndr, 4)); 2102 } 2103 if (ndr_flags & NDR_BUFFERS) { 2104 } 2105 ndr->flags = _flags_save_STRUCT; 2106 } 2107 return NDR_ERR_SUCCESS; 2108} 2109 2110_PUBLIC_ void ndr_print_NTLMSSP_MESSAGE_SIGNATURE_NTLMv2(struct ndr_print *ndr, const char *name, const struct NTLMSSP_MESSAGE_SIGNATURE_NTLMv2 *r) 2111{ 2112 ndr_print_struct(ndr, name, "NTLMSSP_MESSAGE_SIGNATURE_NTLMv2"); 2113 { 2114 uint32_t _flags_save_STRUCT = ndr->flags; 2115 ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX); 2116 ndr->depth++; 2117 ndr_print_uint32(ndr, "Version", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?NTLMSSP_SIGN_VERSION:r->Version); 2118 ndr_print_array_uint8(ndr, "Checksum", r->Checksum, 8); 2119 ndr_print_uint32(ndr, "SeqNum", r->SeqNum); 2120 ndr->depth--; 2121 ndr->flags = _flags_save_STRUCT; 2122 } 2123} 2124 2125static enum ndr_err_code ndr_push_decode_NEGOTIATE_MESSAGE(struct ndr_push *ndr, int flags, const struct decode_NEGOTIATE_MESSAGE *r) 2126{ 2127 if (flags & NDR_IN) { 2128 NDR_CHECK(ndr_push_NEGOTIATE_MESSAGE(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.negotiate)); 2129 } 2130 if (flags & NDR_OUT) { 2131 } 2132 return NDR_ERR_SUCCESS; 2133} 2134 2135static enum ndr_err_code ndr_pull_decode_NEGOTIATE_MESSAGE(struct ndr_pull *ndr, int flags, struct decode_NEGOTIATE_MESSAGE *r) 2136{ 2137 if (flags & NDR_IN) { 2138 NDR_CHECK(ndr_pull_NEGOTIATE_MESSAGE(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.negotiate)); 2139 } 2140 if (flags & NDR_OUT) { 2141 } 2142 return NDR_ERR_SUCCESS; 2143} 2144 2145_PUBLIC_ void ndr_print_decode_NEGOTIATE_MESSAGE(struct ndr_print *ndr, const char *name, int flags, const struct decode_NEGOTIATE_MESSAGE *r) 2146{ 2147 ndr_print_struct(ndr, name, "decode_NEGOTIATE_MESSAGE"); 2148 ndr->depth++; 2149 if (flags & NDR_SET_VALUES) { 2150 ndr->flags |= LIBNDR_PRINT_SET_VALUES; 2151 } 2152 if (flags & NDR_IN) { 2153 ndr_print_struct(ndr, "in", "decode_NEGOTIATE_MESSAGE"); 2154 ndr->depth++; 2155 ndr_print_NEGOTIATE_MESSAGE(ndr, "negotiate", &r->in.negotiate); 2156 ndr->depth--; 2157 } 2158 if (flags & NDR_OUT) { 2159 ndr_print_struct(ndr, "out", "decode_NEGOTIATE_MESSAGE"); 2160 ndr->depth++; 2161 ndr->depth--; 2162 } 2163 ndr->depth--; 2164} 2165 2166static enum ndr_err_code ndr_push_decode_CHALLENGE_MESSAGE(struct ndr_push *ndr, int flags, const struct decode_CHALLENGE_MESSAGE *r) 2167{ 2168 if (flags & NDR_IN) { 2169 NDR_CHECK(ndr_push_CHALLENGE_MESSAGE(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.challenge)); 2170 } 2171 if (flags & NDR_OUT) { 2172 } 2173 return NDR_ERR_SUCCESS; 2174} 2175 2176static enum ndr_err_code ndr_pull_decode_CHALLENGE_MESSAGE(struct ndr_pull *ndr, int flags, struct decode_CHALLENGE_MESSAGE *r) 2177{ 2178 if (flags & NDR_IN) { 2179 NDR_CHECK(ndr_pull_CHALLENGE_MESSAGE(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.challenge)); 2180 } 2181 if (flags & NDR_OUT) { 2182 } 2183 return NDR_ERR_SUCCESS; 2184} 2185 2186_PUBLIC_ void ndr_print_decode_CHALLENGE_MESSAGE(struct ndr_print *ndr, const char *name, int flags, const struct decode_CHALLENGE_MESSAGE *r) 2187{ 2188 ndr_print_struct(ndr, name, "decode_CHALLENGE_MESSAGE"); 2189 ndr->depth++; 2190 if (flags & NDR_SET_VALUES) { 2191 ndr->flags |= LIBNDR_PRINT_SET_VALUES; 2192 } 2193 if (flags & NDR_IN) { 2194 ndr_print_struct(ndr, "in", "decode_CHALLENGE_MESSAGE"); 2195 ndr->depth++; 2196 ndr_print_CHALLENGE_MESSAGE(ndr, "challenge", &r->in.challenge); 2197 ndr->depth--; 2198 } 2199 if (flags & NDR_OUT) { 2200 ndr_print_struct(ndr, "out", "decode_CHALLENGE_MESSAGE"); 2201 ndr->depth++; 2202 ndr->depth--; 2203 } 2204 ndr->depth--; 2205} 2206 2207static enum ndr_err_code ndr_push_decode_AUTHENTICATE_MESSAGE(struct ndr_push *ndr, int flags, const struct decode_AUTHENTICATE_MESSAGE *r) 2208{ 2209 if (flags & NDR_IN) { 2210 NDR_CHECK(ndr_push_AUTHENTICATE_MESSAGE(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.authenticate)); 2211 } 2212 if (flags & NDR_OUT) { 2213 } 2214 return NDR_ERR_SUCCESS; 2215} 2216 2217static enum ndr_err_code ndr_pull_decode_AUTHENTICATE_MESSAGE(struct ndr_pull *ndr, int flags, struct decode_AUTHENTICATE_MESSAGE *r) 2218{ 2219 if (flags & NDR_IN) { 2220 NDR_CHECK(ndr_pull_AUTHENTICATE_MESSAGE(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.authenticate)); 2221 } 2222 if (flags & NDR_OUT) { 2223 } 2224 return NDR_ERR_SUCCESS; 2225} 2226 2227_PUBLIC_ void ndr_print_decode_AUTHENTICATE_MESSAGE(struct ndr_print *ndr, const char *name, int flags, const struct decode_AUTHENTICATE_MESSAGE *r) 2228{ 2229 ndr_print_struct(ndr, name, "decode_AUTHENTICATE_MESSAGE"); 2230 ndr->depth++; 2231 if (flags & NDR_SET_VALUES) { 2232 ndr->flags |= LIBNDR_PRINT_SET_VALUES; 2233 } 2234 if (flags & NDR_IN) { 2235 ndr_print_struct(ndr, "in", "decode_AUTHENTICATE_MESSAGE"); 2236 ndr->depth++; 2237 ndr_print_AUTHENTICATE_MESSAGE(ndr, "authenticate", &r->in.authenticate); 2238 ndr->depth--; 2239 } 2240 if (flags & NDR_OUT) { 2241 ndr_print_struct(ndr, "out", "decode_AUTHENTICATE_MESSAGE"); 2242 ndr->depth++; 2243 ndr->depth--; 2244 } 2245 ndr->depth--; 2246} 2247 2248static enum ndr_err_code ndr_push_decode_NTLMv2_CLIENT_CHALLENGE(struct ndr_push *ndr, int flags, const struct decode_NTLMv2_CLIENT_CHALLENGE *r) 2249{ 2250 if (flags & NDR_IN) { 2251 NDR_CHECK(ndr_push_NTLMv2_CLIENT_CHALLENGE(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.challenge)); 2252 } 2253 if (flags & NDR_OUT) { 2254 } 2255 return NDR_ERR_SUCCESS; 2256} 2257 2258static enum ndr_err_code ndr_pull_decode_NTLMv2_CLIENT_CHALLENGE(struct ndr_pull *ndr, int flags, struct decode_NTLMv2_CLIENT_CHALLENGE *r) 2259{ 2260 if (flags & NDR_IN) { 2261 NDR_CHECK(ndr_pull_NTLMv2_CLIENT_CHALLENGE(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.challenge)); 2262 } 2263 if (flags & NDR_OUT) { 2264 } 2265 return NDR_ERR_SUCCESS; 2266} 2267 2268_PUBLIC_ void ndr_print_decode_NTLMv2_CLIENT_CHALLENGE(struct ndr_print *ndr, const char *name, int flags, const struct decode_NTLMv2_CLIENT_CHALLENGE *r) 2269{ 2270 ndr_print_struct(ndr, name, "decode_NTLMv2_CLIENT_CHALLENGE"); 2271 ndr->depth++; 2272 if (flags & NDR_SET_VALUES) { 2273 ndr->flags |= LIBNDR_PRINT_SET_VALUES; 2274 } 2275 if (flags & NDR_IN) { 2276 ndr_print_struct(ndr, "in", "decode_NTLMv2_CLIENT_CHALLENGE"); 2277 ndr->depth++; 2278 ndr_print_NTLMv2_CLIENT_CHALLENGE(ndr, "challenge", &r->in.challenge); 2279 ndr->depth--; 2280 } 2281 if (flags & NDR_OUT) { 2282 ndr_print_struct(ndr, "out", "decode_NTLMv2_CLIENT_CHALLENGE"); 2283 ndr->depth++; 2284 ndr->depth--; 2285 } 2286 ndr->depth--; 2287} 2288 2289static const struct ndr_interface_call ntlmssp_calls[] = { 2290 { 2291 "decode_NEGOTIATE_MESSAGE", 2292 sizeof(struct decode_NEGOTIATE_MESSAGE), 2293 (ndr_push_flags_fn_t) ndr_push_decode_NEGOTIATE_MESSAGE, 2294 (ndr_pull_flags_fn_t) ndr_pull_decode_NEGOTIATE_MESSAGE, 2295 (ndr_print_function_t) ndr_print_decode_NEGOTIATE_MESSAGE, 2296 false, 2297 }, 2298 { 2299 "decode_CHALLENGE_MESSAGE", 2300 sizeof(struct decode_CHALLENGE_MESSAGE), 2301 (ndr_push_flags_fn_t) ndr_push_decode_CHALLENGE_MESSAGE, 2302 (ndr_pull_flags_fn_t) ndr_pull_decode_CHALLENGE_MESSAGE, 2303 (ndr_print_function_t) ndr_print_decode_CHALLENGE_MESSAGE, 2304 false, 2305 }, 2306 { 2307 "decode_AUTHENTICATE_MESSAGE", 2308 sizeof(struct decode_AUTHENTICATE_MESSAGE), 2309 (ndr_push_flags_fn_t) ndr_push_decode_AUTHENTICATE_MESSAGE, 2310 (ndr_pull_flags_fn_t) ndr_pull_decode_AUTHENTICATE_MESSAGE, 2311 (ndr_print_function_t) ndr_print_decode_AUTHENTICATE_MESSAGE, 2312 false, 2313 }, 2314 { 2315 "decode_NTLMv2_CLIENT_CHALLENGE", 2316 sizeof(struct decode_NTLMv2_CLIENT_CHALLENGE), 2317 (ndr_push_flags_fn_t) ndr_push_decode_NTLMv2_CLIENT_CHALLENGE, 2318 (ndr_pull_flags_fn_t) ndr_pull_decode_NTLMv2_CLIENT_CHALLENGE, 2319 (ndr_print_function_t) ndr_print_decode_NTLMv2_CLIENT_CHALLENGE, 2320 false, 2321 }, 2322 { NULL, 0, NULL, NULL, NULL, false } 2323}; 2324 2325static const char * const ntlmssp_endpoint_strings[] = { 2326 "ncacn_np:[\\pipe\\ntlmssp]", 2327}; 2328 2329static const struct ndr_interface_string_array ntlmssp_endpoints = { 2330 .count = 1, 2331 .names = ntlmssp_endpoint_strings 2332}; 2333 2334static const char * const ntlmssp_authservice_strings[] = { 2335 "host", 2336}; 2337 2338static const struct ndr_interface_string_array ntlmssp_authservices = { 2339 .count = 1, 2340 .names = ntlmssp_authservice_strings 2341}; 2342 2343 2344const struct ndr_interface_table ndr_table_ntlmssp = { 2345 .name = "ntlmssp", 2346 .syntax_id = { 2347 {0x6e746c6d,0x7373,0x700a,{0x00,0x00},{0x00,0x00,0x00,0x00}}, 2348 NDR_NTLMSSP_VERSION 2349 }, 2350 .helpstring = NDR_NTLMSSP_HELPSTRING, 2351 .num_calls = 4, 2352 .calls = ntlmssp_calls, 2353 .endpoints = &ntlmssp_endpoints, 2354 .authservices = &ntlmssp_authservices 2355}; 2356 2357