2 * Unix SMB/CIFS implementation.
3 * RPC Pipe client / server routines
4 * Copyright (C) Andrew Tridgell 1992-1997,
5 * Copyright (C) Luke Kenneth Casson Leighton 1996-1997,
6 * Copyright (C) Paul Ashton 1997.
7 * Copyright (C) Jean Francois Micouleau 2002.
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 3 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, see <http://www.gnu.org/licenses/>.
26 #define DBGC_CLASS DBGC_RPC_PARSE
28 /*******************************************************************
29 Reads or writes a structure.
30 ********************************************************************/
32 static BOOL
net_io_neg_flags(const char *desc
, NEG_FLAGS
*neg
, prs_struct
*ps
, int depth
)
37 prs_debug(ps
, depth
, desc
, "net_io_neg_flags");
43 if(!prs_uint32("neg_flags", ps
, depth
, &neg
->neg_flags
))
49 /*******************************************************************
50 Inits a NETLOGON_INFO_3 structure.
51 ********************************************************************/
53 static void init_netinfo_3(NETLOGON_INFO_3
*info
, uint32 flags
, uint32 logon_attempts
)
56 info
->logon_attempts
= logon_attempts
;
57 info
->reserved_1
= 0x0;
58 info
->reserved_2
= 0x0;
59 info
->reserved_3
= 0x0;
60 info
->reserved_4
= 0x0;
61 info
->reserved_5
= 0x0;
64 /*******************************************************************
65 Reads or writes a NETLOGON_INFO_3 structure.
66 ********************************************************************/
68 static BOOL
net_io_netinfo_3(const char *desc
, NETLOGON_INFO_3
*info
, prs_struct
*ps
, int depth
)
73 prs_debug(ps
, depth
, desc
, "net_io_netinfo_3");
79 if(!prs_uint32("flags ", ps
, depth
, &info
->flags
))
81 if(!prs_uint32("logon_attempts", ps
, depth
, &info
->logon_attempts
))
83 if(!prs_uint32("reserved_1 ", ps
, depth
, &info
->reserved_1
))
85 if(!prs_uint32("reserved_2 ", ps
, depth
, &info
->reserved_2
))
87 if(!prs_uint32("reserved_3 ", ps
, depth
, &info
->reserved_3
))
89 if(!prs_uint32("reserved_4 ", ps
, depth
, &info
->reserved_4
))
91 if(!prs_uint32("reserved_5 ", ps
, depth
, &info
->reserved_5
))
98 /*******************************************************************
99 Inits a NETLOGON_INFO_1 structure.
100 ********************************************************************/
102 static void init_netinfo_1(NETLOGON_INFO_1
*info
, uint32 flags
, uint32 pdc_status
)
105 info
->pdc_status
= pdc_status
;
108 /*******************************************************************
109 Reads or writes a NETLOGON_INFO_1 structure.
110 ********************************************************************/
112 static BOOL
net_io_netinfo_1(const char *desc
, NETLOGON_INFO_1
*info
, prs_struct
*ps
, int depth
)
117 prs_debug(ps
, depth
, desc
, "net_io_netinfo_1");
123 if(!prs_uint32("flags ", ps
, depth
, &info
->flags
))
125 if(!prs_uint32("pdc_status", ps
, depth
, &info
->pdc_status
))
131 /*******************************************************************
132 Inits a NETLOGON_INFO_2 structure.
133 ********************************************************************/
135 static void init_netinfo_2(NETLOGON_INFO_2
*info
, uint32 flags
, uint32 pdc_status
,
136 uint32 tc_status
, const char *trusted_dc_name
)
139 info
->pdc_status
= pdc_status
;
140 info
->ptr_trusted_dc_name
= 1;
141 info
->tc_status
= tc_status
;
143 if (trusted_dc_name
!= NULL
)
144 init_unistr2(&info
->uni_trusted_dc_name
, trusted_dc_name
, UNI_STR_TERMINATE
);
146 init_unistr2(&info
->uni_trusted_dc_name
, "", UNI_STR_TERMINATE
);
149 /*******************************************************************
150 Reads or writes a NETLOGON_INFO_2 structure.
151 ********************************************************************/
153 static BOOL
net_io_netinfo_2(const char *desc
, NETLOGON_INFO_2
*info
, prs_struct
*ps
, int depth
)
158 prs_debug(ps
, depth
, desc
, "net_io_netinfo_2");
164 if(!prs_uint32("flags ", ps
, depth
, &info
->flags
))
166 if(!prs_uint32("pdc_status ", ps
, depth
, &info
->pdc_status
))
168 if(!prs_uint32("ptr_trusted_dc_name", ps
, depth
, &info
->ptr_trusted_dc_name
))
170 if(!prs_uint32("tc_status ", ps
, depth
, &info
->tc_status
))
173 if (info
->ptr_trusted_dc_name
!= 0) {
174 if(!smb_io_unistr2("unistr2", &info
->uni_trusted_dc_name
, info
->ptr_trusted_dc_name
, ps
, depth
))
184 static BOOL
net_io_ctrl_data_info_5(const char *desc
, CTRL_DATA_INFO_5
*info
, prs_struct
*ps
, int depth
)
189 prs_debug(ps
, depth
, desc
, "net_io_ctrl_data_info_5");
192 if ( !prs_uint32( "function_code", ps
, depth
, &info
->function_code
) )
195 if(!prs_uint32("ptr_domain", ps
, depth
, &info
->ptr_domain
))
198 if ( info
->ptr_domain
) {
199 if(!smb_io_unistr2("domain", &info
->domain
, info
->ptr_domain
, ps
, depth
))
206 static BOOL
net_io_ctrl_data_info_6(const char *desc
, CTRL_DATA_INFO_6
*info
, prs_struct
*ps
, int depth
)
211 prs_debug(ps
, depth
, desc
, "net_io_ctrl_data_info_6");
214 if ( !prs_uint32( "function_code", ps
, depth
, &info
->function_code
) )
217 if(!prs_uint32("ptr_domain", ps
, depth
, &info
->ptr_domain
))
220 if ( info
->ptr_domain
) {
221 if(!smb_io_unistr2("domain", &info
->domain
, info
->ptr_domain
, ps
, depth
))
228 /*******************************************************************
229 Reads or writes an NET_Q_LOGON_CTRL2 structure.
230 ********************************************************************/
232 BOOL
net_io_q_logon_ctrl2(const char *desc
, NET_Q_LOGON_CTRL2
*q_l
, prs_struct
*ps
, int depth
)
237 prs_debug(ps
, depth
, desc
, "net_io_q_logon_ctrl2");
243 if(!prs_uint32("ptr ", ps
, depth
, &q_l
->ptr
))
246 if(!smb_io_unistr2 ("", &q_l
->uni_server_name
, q_l
->ptr
, ps
, depth
))
252 if(!prs_uint32("function_code", ps
, depth
, &q_l
->function_code
))
254 if(!prs_uint32("query_level ", ps
, depth
, &q_l
->query_level
))
256 switch ( q_l
->function_code
) {
257 case NETLOGON_CONTROL_REDISCOVER
:
258 if ( !net_io_ctrl_data_info_5( "ctrl_data_info5", &q_l
->info
.info5
, ps
, depth
) )
262 case NETLOGON_CONTROL_TC_QUERY
:
263 if ( !net_io_ctrl_data_info_6( "ctrl_data_info6", &q_l
->info
.info6
, ps
, depth
) )
268 DEBUG(0,("net_io_q_logon_ctrl2: unknown function_code [%d]\n",
269 q_l
->function_code
));
276 /*******************************************************************
277 Inits an NET_Q_LOGON_CTRL2 structure.
278 ********************************************************************/
280 void init_net_q_logon_ctrl2(NET_Q_LOGON_CTRL2
*q_l
, const char *srv_name
,
283 DEBUG(5,("init_q_logon_ctrl2\n"));
285 q_l
->function_code
= 0x01;
286 q_l
->query_level
= query_level
;
288 init_unistr2(&q_l
->uni_server_name
, srv_name
, UNI_STR_TERMINATE
);
291 /*******************************************************************
292 Inits an NET_R_LOGON_CTRL2 structure.
293 ********************************************************************/
295 void init_net_r_logon_ctrl2(NET_R_LOGON_CTRL2
*r_l
, uint32 query_level
,
296 uint32 flags
, uint32 pdc_status
,
297 uint32 logon_attempts
, uint32 tc_status
,
298 const char *trusted_domain_name
)
300 r_l
->switch_value
= query_level
;
302 switch (query_level
) {
304 r_l
->ptr
= 1; /* undocumented pointer */
305 init_netinfo_1(&r_l
->logon
.info1
, flags
, pdc_status
);
306 r_l
->status
= NT_STATUS_OK
;
309 r_l
->ptr
= 1; /* undocumented pointer */
310 init_netinfo_2(&r_l
->logon
.info2
, flags
, pdc_status
,
311 tc_status
, trusted_domain_name
);
312 r_l
->status
= NT_STATUS_OK
;
315 r_l
->ptr
= 1; /* undocumented pointer */
316 init_netinfo_3(&r_l
->logon
.info3
, flags
, logon_attempts
);
317 r_l
->status
= NT_STATUS_OK
;
320 DEBUG(2,("init_r_logon_ctrl2: unsupported switch value %d\n",
322 r_l
->ptr
= 0; /* undocumented pointer */
324 /* take a guess at an error code... */
325 r_l
->status
= NT_STATUS_INVALID_INFO_CLASS
;
330 /*******************************************************************
331 Reads or writes an NET_R_LOGON_CTRL2 structure.
332 ********************************************************************/
334 BOOL
net_io_r_logon_ctrl2(const char *desc
, NET_R_LOGON_CTRL2
*r_l
, prs_struct
*ps
, int depth
)
339 prs_debug(ps
, depth
, desc
, "net_io_r_logon_ctrl2");
342 if(!prs_uint32("switch_value ", ps
, depth
, &r_l
->switch_value
))
344 if(!prs_uint32("ptr ", ps
, depth
, &r_l
->ptr
))
348 switch (r_l
->switch_value
) {
350 if(!net_io_netinfo_1("", &r_l
->logon
.info1
, ps
, depth
))
354 if(!net_io_netinfo_2("", &r_l
->logon
.info2
, ps
, depth
))
358 if(!net_io_netinfo_3("", &r_l
->logon
.info3
, ps
, depth
))
362 DEBUG(2,("net_io_r_logon_ctrl2: unsupported switch value %d\n",
368 if(!prs_ntstatus("status ", ps
, depth
, &r_l
->status
))
374 /*******************************************************************
375 Reads or writes an NET_Q_LOGON_CTRL structure.
376 ********************************************************************/
378 BOOL
net_io_q_logon_ctrl(const char *desc
, NET_Q_LOGON_CTRL
*q_l
, prs_struct
*ps
,
381 prs_debug(ps
, depth
, desc
, "net_io_q_logon_ctrl");
387 if(!prs_uint32("ptr ", ps
, depth
, &q_l
->ptr
))
390 if(!smb_io_unistr2 ("", &q_l
->uni_server_name
, q_l
->ptr
, ps
, depth
))
396 if(!prs_uint32("function_code", ps
, depth
, &q_l
->function_code
))
398 if(!prs_uint32("query_level ", ps
, depth
, &q_l
->query_level
))
404 /*******************************************************************
405 Inits an NET_Q_LOGON_CTRL structure.
406 ********************************************************************/
408 void init_net_q_logon_ctrl(NET_Q_LOGON_CTRL
*q_l
, const char *srv_name
,
411 DEBUG(5,("init_q_logon_ctrl\n"));
413 q_l
->function_code
= 0x01; /* ??? */
414 q_l
->query_level
= query_level
;
416 init_unistr2(&q_l
->uni_server_name
, srv_name
, UNI_STR_TERMINATE
);
419 /*******************************************************************
420 Inits an NET_R_LOGON_CTRL structure.
421 ********************************************************************/
423 void init_net_r_logon_ctrl(NET_R_LOGON_CTRL
*r_l
, uint32 query_level
,
424 uint32 flags
, uint32 pdc_status
)
426 DEBUG(5,("init_r_logon_ctrl\n"));
428 r_l
->switch_value
= query_level
; /* should only be 0x1 */
430 switch (query_level
) {
432 r_l
->ptr
= 1; /* undocumented pointer */
433 init_netinfo_1(&r_l
->logon
.info1
, flags
, pdc_status
);
434 r_l
->status
= NT_STATUS_OK
;
437 DEBUG(2,("init_r_logon_ctrl: unsupported switch value %d\n",
439 r_l
->ptr
= 0; /* undocumented pointer */
441 /* take a guess at an error code... */
442 r_l
->status
= NT_STATUS_INVALID_INFO_CLASS
;
447 /*******************************************************************
448 Reads or writes an NET_R_LOGON_CTRL structure.
449 ********************************************************************/
451 BOOL
net_io_r_logon_ctrl(const char *desc
, NET_R_LOGON_CTRL
*r_l
, prs_struct
*ps
,
454 prs_debug(ps
, depth
, desc
, "net_io_r_logon_ctrl");
457 if(!prs_uint32("switch_value ", ps
, depth
, &r_l
->switch_value
))
459 if(!prs_uint32("ptr ", ps
, depth
, &r_l
->ptr
))
463 switch (r_l
->switch_value
) {
465 if(!net_io_netinfo_1("", &r_l
->logon
.info1
, ps
, depth
))
469 DEBUG(2,("net_io_r_logon_ctrl: unsupported switch value %d\n",
475 if(!prs_ntstatus("status ", ps
, depth
, &r_l
->status
))
481 /*******************************************************************
482 Inits an NET_R_GETANYDCNAME structure.
483 ********************************************************************/
484 void init_net_q_getanydcname(NET_Q_GETANYDCNAME
*r_t
, const char *logon_server
,
485 const char *domainname
)
487 DEBUG(5,("init_q_getanydcname\n"));
489 r_t
->ptr_logon_server
= (logon_server
!= NULL
);
490 init_unistr2(&r_t
->uni_logon_server
, logon_server
, UNI_STR_TERMINATE
);
491 r_t
->ptr_domainname
= (domainname
!= NULL
);
492 init_unistr2(&r_t
->uni_domainname
, domainname
, UNI_STR_TERMINATE
);
495 /*******************************************************************
496 Reads or writes an NET_Q_GETANYDCNAME structure.
497 ********************************************************************/
499 BOOL
net_io_q_getanydcname(const char *desc
, NET_Q_GETANYDCNAME
*r_t
, prs_struct
*ps
,
505 prs_debug(ps
, depth
, desc
, "net_io_q_getanydcname");
508 if (!prs_uint32("ptr_logon_server", ps
, depth
, &r_t
->ptr_logon_server
))
511 if (!smb_io_unistr2("logon_server", &r_t
->uni_logon_server
,
512 r_t
->ptr_logon_server
, ps
, depth
))
518 if (!prs_uint32("ptr_domainname", ps
, depth
, &r_t
->ptr_domainname
))
521 if (!smb_io_unistr2("domainname", &r_t
->uni_domainname
,
522 r_t
->ptr_domainname
, ps
, depth
))
529 /*******************************************************************
530 Inits an NET_R_GETANYDCNAME structure.
531 ********************************************************************/
532 void init_net_r_getanydcname(NET_R_GETANYDCNAME
*r_t
, const char *dcname
)
534 DEBUG(5,("init_r_getanydcname\n"));
536 init_unistr2(&r_t
->uni_dcname
, dcname
, UNI_STR_TERMINATE
);
539 /*******************************************************************
540 Reads or writes an NET_R_GETANYDCNAME structure.
541 ********************************************************************/
543 BOOL
net_io_r_getanydcname(const char *desc
, NET_R_GETANYDCNAME
*r_t
, prs_struct
*ps
,
549 prs_debug(ps
, depth
, desc
, "net_io_r_getanydcname");
552 if (!prs_uint32("ptr_dcname", ps
, depth
, &r_t
->ptr_dcname
))
555 if (!smb_io_unistr2("dcname", &r_t
->uni_dcname
,
556 r_t
->ptr_dcname
, ps
, depth
))
562 if (!prs_werror("status", ps
, depth
, &r_t
->status
))
569 /*******************************************************************
570 Inits an NET_R_GETDCNAME structure.
571 ********************************************************************/
572 void init_net_q_getdcname(NET_Q_GETDCNAME
*r_t
, const char *logon_server
,
573 const char *domainname
)
575 DEBUG(5,("init_q_getdcname\n"));
577 init_unistr2(&r_t
->uni_logon_server
, logon_server
, UNI_STR_TERMINATE
);
578 r_t
->ptr_domainname
= (domainname
!= NULL
);
579 init_unistr2(&r_t
->uni_domainname
, domainname
, UNI_STR_TERMINATE
);
582 /*******************************************************************
583 Reads or writes an NET_Q_GETDCNAME structure.
584 ********************************************************************/
586 BOOL
net_io_q_getdcname(const char *desc
, NET_Q_GETDCNAME
*r_t
, prs_struct
*ps
,
592 prs_debug(ps
, depth
, desc
, "net_io_q_getdcname");
595 if (!smb_io_unistr2("logon_server", &r_t
->uni_logon_server
,
602 if (!prs_uint32("ptr_domainname", ps
, depth
, &r_t
->ptr_domainname
))
605 if (!smb_io_unistr2("domainname", &r_t
->uni_domainname
,
606 r_t
->ptr_domainname
, ps
, depth
))
613 /*******************************************************************
614 Inits an NET_R_GETDCNAME structure.
615 ********************************************************************/
616 void init_net_r_getdcname(NET_R_GETDCNAME
*r_t
, const char *dcname
)
618 DEBUG(5,("init_r_getdcname\n"));
620 init_unistr2(&r_t
->uni_dcname
, dcname
, UNI_STR_TERMINATE
);
623 /*******************************************************************
624 Reads or writes an NET_R_GETDCNAME structure.
625 ********************************************************************/
627 BOOL
net_io_r_getdcname(const char *desc
, NET_R_GETDCNAME
*r_t
, prs_struct
*ps
,
633 prs_debug(ps
, depth
, desc
, "net_io_r_getdcname");
636 if (!prs_uint32("ptr_dcname", ps
, depth
, &r_t
->ptr_dcname
))
639 if (!smb_io_unistr2("dcname", &r_t
->uni_dcname
,
640 r_t
->ptr_dcname
, ps
, depth
))
646 if (!prs_werror("status", ps
, depth
, &r_t
->status
))
652 /*******************************************************************
653 Inits an NET_R_TRUST_DOM_LIST structure.
654 ********************************************************************/
656 void init_r_trust_dom(NET_R_TRUST_DOM_LIST
*r_t
,
657 uint32 num_doms
, const char *dom_name
)
661 DEBUG(5,("init_r_trust_dom\n"));
663 for (i
= 0; i
< MAX_TRUST_DOMS
; i
++) {
664 r_t
->uni_trust_dom_name
[i
].uni_str_len
= 0;
665 r_t
->uni_trust_dom_name
[i
].uni_max_len
= 0;
667 if (num_doms
> MAX_TRUST_DOMS
)
668 num_doms
= MAX_TRUST_DOMS
;
670 for (i
= 0; i
< num_doms
; i
++) {
672 fstrcpy(domain_name
, dom_name
);
673 strupper_m(domain_name
);
674 init_unistr2(&r_t
->uni_trust_dom_name
[i
], domain_name
, UNI_STR_TERMINATE
);
675 /* the use of UNISTR2 here is non-standard. */
676 r_t
->uni_trust_dom_name
[i
].offset
= 0x1;
679 r_t
->status
= NT_STATUS_OK
;
682 /*******************************************************************
683 Reads or writes an NET_R_TRUST_DOM_LIST structure.
684 ********************************************************************/
686 BOOL
net_io_r_trust_dom(const char *desc
, NET_R_TRUST_DOM_LIST
*r_t
, prs_struct
*ps
, int depth
)
693 prs_debug(ps
, depth
, desc
, "net_io_r_trust_dom");
696 /* temporary code to give a valid response */
698 if(!prs_uint32("status", ps
, depth
, &value
))
702 if(!prs_uint32("status", ps
, depth
, &value
))
705 if(!prs_uint32("status", ps
, depth
, &value
))
709 if(!prs_uint32("status", ps
, depth
, &value
))
713 if(!prs_uint32("status", ps
, depth
, &value
))
716 /* old non working code */
720 for (i
= 0; i
< MAX_TRUST_DOMS
; i
++) {
721 if (r_t
->uni_trust_dom_name
[i
].uni_str_len
== 0)
723 if(!smb_io_unistr2("", &r_t
->uni_trust_dom_name
[i
], True
, ps
, depth
))
727 if(!prs_ntstatus("status", ps
, depth
, &r_t
->status
))
734 /*******************************************************************
735 Reads or writes an NET_Q_TRUST_DOM_LIST structure.
736 ********************************************************************/
738 BOOL
net_io_q_trust_dom(const char *desc
, NET_Q_TRUST_DOM_LIST
*q_l
, prs_struct
*ps
, int depth
)
743 prs_debug(ps
, depth
, desc
, "net_io_q_trust_dom");
746 if(!prs_uint32("ptr ", ps
, depth
, &q_l
->ptr
))
748 if(!smb_io_unistr2 ("", &q_l
->uni_server_name
, q_l
->ptr
, ps
, depth
))
754 /*******************************************************************
755 Inits an NET_Q_REQ_CHAL structure.
756 ********************************************************************/
758 void init_q_req_chal(NET_Q_REQ_CHAL
*q_c
,
759 const char *logon_srv
, const char *logon_clnt
,
760 const DOM_CHAL
*clnt_chal
)
762 DEBUG(5,("init_q_req_chal: %d\n", __LINE__
));
764 q_c
->undoc_buffer
= 1; /* don't know what this buffer is */
766 init_unistr2(&q_c
->uni_logon_srv
, logon_srv
, UNI_STR_TERMINATE
);
767 init_unistr2(&q_c
->uni_logon_clnt
, logon_clnt
, UNI_STR_TERMINATE
);
769 memcpy(q_c
->clnt_chal
.data
, clnt_chal
->data
, sizeof(clnt_chal
->data
));
771 DEBUG(5,("init_q_req_chal: %d\n", __LINE__
));
774 /*******************************************************************
775 Reads or writes an NET_Q_REQ_CHAL structure.
776 ********************************************************************/
778 BOOL
net_io_q_req_chal(const char *desc
, NET_Q_REQ_CHAL
*q_c
, prs_struct
*ps
, int depth
)
783 prs_debug(ps
, depth
, desc
, "net_io_q_req_chal");
789 if(!prs_uint32("undoc_buffer", ps
, depth
, &q_c
->undoc_buffer
))
792 if(!smb_io_unistr2("", &q_c
->uni_logon_srv
, True
, ps
, depth
)) /* logon server unicode string */
794 if(!smb_io_unistr2("", &q_c
->uni_logon_clnt
, True
, ps
, depth
)) /* logon client unicode string */
797 if(!smb_io_chal("", &q_c
->clnt_chal
, ps
, depth
))
803 /*******************************************************************
804 Reads or writes a structure.
805 ********************************************************************/
807 BOOL
net_io_r_req_chal(const char *desc
, NET_R_REQ_CHAL
*r_c
, prs_struct
*ps
, int depth
)
812 prs_debug(ps
, depth
, desc
, "net_io_r_req_chal");
818 if(!smb_io_chal("", &r_c
->srv_chal
, ps
, depth
)) /* server challenge */
821 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
828 /*******************************************************************
829 Reads or writes a structure.
830 ********************************************************************/
832 BOOL
net_io_q_auth(const char *desc
, NET_Q_AUTH
*q_a
, prs_struct
*ps
, int depth
)
837 prs_debug(ps
, depth
, desc
, "net_io_q_auth");
843 if(!smb_io_log_info ("", &q_a
->clnt_id
, ps
, depth
)) /* client identification info */
845 if(!smb_io_chal("", &q_a
->clnt_chal
, ps
, depth
))
851 /*******************************************************************
852 Reads or writes a structure.
853 ********************************************************************/
855 BOOL
net_io_r_auth(const char *desc
, NET_R_AUTH
*r_a
, prs_struct
*ps
, int depth
)
860 prs_debug(ps
, depth
, desc
, "net_io_r_auth");
866 if(!smb_io_chal("", &r_a
->srv_chal
, ps
, depth
)) /* server challenge */
869 if(!prs_ntstatus("status", ps
, depth
, &r_a
->status
))
875 /*******************************************************************
876 Inits a NET_Q_AUTH_2 struct.
877 ********************************************************************/
879 void init_q_auth_2(NET_Q_AUTH_2
*q_a
,
880 const char *logon_srv
, const char *acct_name
, uint16 sec_chan
, const char *comp_name
,
881 const DOM_CHAL
*clnt_chal
, uint32 clnt_flgs
)
883 DEBUG(5,("init_q_auth_2: %d\n", __LINE__
));
885 init_log_info(&q_a
->clnt_id
, logon_srv
, acct_name
, sec_chan
, comp_name
);
886 memcpy(q_a
->clnt_chal
.data
, clnt_chal
->data
, sizeof(clnt_chal
->data
));
887 q_a
->clnt_flgs
.neg_flags
= clnt_flgs
;
889 DEBUG(5,("init_q_auth_2: %d\n", __LINE__
));
892 /*******************************************************************
893 Reads or writes a structure.
894 ********************************************************************/
896 BOOL
net_io_q_auth_2(const char *desc
, NET_Q_AUTH_2
*q_a
, prs_struct
*ps
, int depth
)
901 prs_debug(ps
, depth
, desc
, "net_io_q_auth_2");
907 if(!smb_io_log_info ("", &q_a
->clnt_id
, ps
, depth
)) /* client identification info */
909 if(!smb_io_chal("", &q_a
->clnt_chal
, ps
, depth
))
911 if(!net_io_neg_flags("", &q_a
->clnt_flgs
, ps
, depth
))
917 /*******************************************************************
918 Reads or writes a structure.
919 ********************************************************************/
921 BOOL
net_io_r_auth_2(const char *desc
, NET_R_AUTH_2
*r_a
, prs_struct
*ps
, int depth
)
926 prs_debug(ps
, depth
, desc
, "net_io_r_auth_2");
932 if(!smb_io_chal("", &r_a
->srv_chal
, ps
, depth
)) /* server challenge */
934 if(!net_io_neg_flags("", &r_a
->srv_flgs
, ps
, depth
))
937 if(!prs_ntstatus("status", ps
, depth
, &r_a
->status
))
943 /*******************************************************************
944 Inits a NET_Q_AUTH_3 struct.
945 ********************************************************************/
947 void init_q_auth_3(NET_Q_AUTH_3
*q_a
,
948 const char *logon_srv
, const char *acct_name
, uint16 sec_chan
, const char *comp_name
,
949 const DOM_CHAL
*clnt_chal
, uint32 clnt_flgs
)
951 DEBUG(5,("init_q_auth_3: %d\n", __LINE__
));
953 init_log_info(&q_a
->clnt_id
, logon_srv
, acct_name
, sec_chan
, comp_name
);
954 memcpy(q_a
->clnt_chal
.data
, clnt_chal
->data
, sizeof(clnt_chal
->data
));
955 q_a
->clnt_flgs
.neg_flags
= clnt_flgs
;
957 DEBUG(5,("init_q_auth_3: %d\n", __LINE__
));
960 /*******************************************************************
961 Reads or writes a structure.
962 ********************************************************************/
964 BOOL
net_io_q_auth_3(const char *desc
, NET_Q_AUTH_3
*q_a
, prs_struct
*ps
, int depth
)
969 prs_debug(ps
, depth
, desc
, "net_io_q_auth_3");
975 if(!smb_io_log_info ("", &q_a
->clnt_id
, ps
, depth
)) /* client identification info */
977 if(!smb_io_chal("", &q_a
->clnt_chal
, ps
, depth
))
979 if(!net_io_neg_flags("", &q_a
->clnt_flgs
, ps
, depth
))
985 /*******************************************************************
986 Reads or writes a structure.
987 ********************************************************************/
989 BOOL
net_io_r_auth_3(const char *desc
, NET_R_AUTH_3
*r_a
, prs_struct
*ps
, int depth
)
994 prs_debug(ps
, depth
, desc
, "net_io_r_auth_3");
1000 if(!smb_io_chal("srv_chal", &r_a
->srv_chal
, ps
, depth
)) /* server challenge */
1002 if(!net_io_neg_flags("srv_flgs", &r_a
->srv_flgs
, ps
, depth
))
1004 if (!prs_uint32("unknown", ps
, depth
, &r_a
->unknown
))
1007 if(!prs_ntstatus("status", ps
, depth
, &r_a
->status
))
1014 /*******************************************************************
1015 Inits a NET_Q_SRV_PWSET.
1016 ********************************************************************/
1018 void init_q_srv_pwset(NET_Q_SRV_PWSET
*q_s
,
1019 const char *logon_srv
, const char *sess_key
, const char *acct_name
,
1020 uint16 sec_chan
, const char *comp_name
,
1021 DOM_CRED
*cred
, const uchar hashed_mach_pwd
[16])
1023 unsigned char nt_cypher
[16];
1025 DEBUG(5,("init_q_srv_pwset\n"));
1027 /* Process the new password. */
1028 cred_hash3( nt_cypher
, hashed_mach_pwd
, (const unsigned char *)sess_key
, 1);
1030 init_clnt_info(&q_s
->clnt_id
, logon_srv
, acct_name
, sec_chan
, comp_name
, cred
);
1032 memcpy(q_s
->pwd
, nt_cypher
, sizeof(q_s
->pwd
));
1035 /*******************************************************************
1036 Reads or writes a structure.
1037 ********************************************************************/
1039 BOOL
net_io_q_srv_pwset(const char *desc
, NET_Q_SRV_PWSET
*q_s
, prs_struct
*ps
, int depth
)
1044 prs_debug(ps
, depth
, desc
, "net_io_q_srv_pwset");
1050 if(!smb_io_clnt_info("", &q_s
->clnt_id
, ps
, depth
)) /* client identification/authentication info */
1052 if(!prs_uint8s (False
, "pwd", ps
, depth
, q_s
->pwd
, 16)) /* new password - undocumented */
1058 /*******************************************************************
1059 Reads or writes a structure.
1060 ********************************************************************/
1062 BOOL
net_io_r_srv_pwset(const char *desc
, NET_R_SRV_PWSET
*r_s
, prs_struct
*ps
, int depth
)
1067 prs_debug(ps
, depth
, desc
, "net_io_r_srv_pwset");
1073 if(!smb_io_cred("", &r_s
->srv_cred
, ps
, depth
)) /* server challenge */
1076 if(!prs_ntstatus("status", ps
, depth
, &r_s
->status
))
1082 /*************************************************************************
1083 Init DOM_SID2 array from a string containing multiple sids
1084 *************************************************************************/
1086 static int init_dom_sid2s(TALLOC_CTX
*ctx
, const char *sids_str
, DOM_SID2
**ppsids
)
1092 DEBUG(4,("init_dom_sid2s: %s\n", sids_str
? sids_str
:""));
1100 /* Count the number of valid SIDs. */
1101 for (count
= 0, ptr
= sids_str
; next_token(&ptr
, s2
, NULL
, sizeof(s2
)); ) {
1103 if (string_to_sid(&tmpsid
, s2
))
1107 /* Now allocate space for them. */
1109 *ppsids
= TALLOC_ZERO_ARRAY(ctx
, DOM_SID2
, count
);
1110 if (*ppsids
== NULL
)
1118 for (number
= 0, ptr
= sids_str
; next_token(&ptr
, s2
, NULL
, sizeof(s2
)); ) {
1120 if (string_to_sid(&tmpsid
, s2
)) {
1121 /* count only valid sids */
1122 init_dom_sid2(&sids
[number
], &tmpsid
);
1131 /*******************************************************************
1132 Inits a NET_ID_INFO_1 structure.
1133 ********************************************************************/
1135 void init_id_info1(NET_ID_INFO_1
*id
, const char *domain_name
,
1136 uint32 param_ctrl
, uint32 log_id_low
, uint32 log_id_high
,
1137 const char *user_name
, const char *wksta_name
,
1138 const char *sess_key
,
1139 unsigned char lm_cypher
[16], unsigned char nt_cypher
[16])
1141 unsigned char lm_owf
[16];
1142 unsigned char nt_owf
[16];
1144 DEBUG(5,("init_id_info1: %d\n", __LINE__
));
1146 id
->ptr_id_info1
= 1;
1148 id
->param_ctrl
= param_ctrl
;
1149 init_logon_id(&id
->logon_id
, log_id_low
, log_id_high
);
1152 if (lm_cypher
&& nt_cypher
) {
1153 unsigned char key
[16];
1154 #ifdef DEBUG_PASSWORD
1155 DEBUG(100,("lm cypher:"));
1156 dump_data(100, lm_cypher
, 16);
1158 DEBUG(100,("nt cypher:"));
1159 dump_data(100, nt_cypher
, 16);
1163 memcpy(key
, sess_key
, 8);
1165 memcpy(lm_owf
, lm_cypher
, 16);
1166 SamOEMhash(lm_owf
, key
, 16);
1167 memcpy(nt_owf
, nt_cypher
, 16);
1168 SamOEMhash(nt_owf
, key
, 16);
1170 #ifdef DEBUG_PASSWORD
1171 DEBUG(100,("encrypt of lm owf password:"));
1172 dump_data(100, lm_owf
, 16);
1174 DEBUG(100,("encrypt of nt owf password:"));
1175 dump_data(100, nt_owf
, 16);
1177 /* set up pointers to cypher blocks */
1182 init_owf_info(&id
->lm_owf
, lm_cypher
);
1183 init_owf_info(&id
->nt_owf
, nt_cypher
);
1185 init_unistr2(&id
->uni_domain_name
, domain_name
, UNI_FLAGS_NONE
);
1186 init_uni_hdr(&id
->hdr_domain_name
, &id
->uni_domain_name
);
1187 init_unistr2(&id
->uni_user_name
, user_name
, UNI_FLAGS_NONE
);
1188 init_uni_hdr(&id
->hdr_user_name
, &id
->uni_user_name
);
1189 init_unistr2(&id
->uni_wksta_name
, wksta_name
, UNI_FLAGS_NONE
);
1190 init_uni_hdr(&id
->hdr_wksta_name
, &id
->uni_wksta_name
);
1193 /*******************************************************************
1194 Reads or writes an NET_ID_INFO_1 structure.
1195 ********************************************************************/
1197 static BOOL
net_io_id_info1(const char *desc
, NET_ID_INFO_1
*id
, prs_struct
*ps
, int depth
)
1202 prs_debug(ps
, depth
, desc
, "net_io_id_info1");
1208 if(!prs_uint32("ptr_id_info1", ps
, depth
, &id
->ptr_id_info1
))
1211 if (id
->ptr_id_info1
!= 0) {
1212 if(!smb_io_unihdr("unihdr", &id
->hdr_domain_name
, ps
, depth
))
1215 if(!prs_uint32("param_ctrl", ps
, depth
, &id
->param_ctrl
))
1217 if(!smb_io_logon_id("", &id
->logon_id
, ps
, depth
))
1220 if(!smb_io_unihdr("unihdr", &id
->hdr_user_name
, ps
, depth
))
1222 if(!smb_io_unihdr("unihdr", &id
->hdr_wksta_name
, ps
, depth
))
1225 if(!smb_io_owf_info("", &id
->lm_owf
, ps
, depth
))
1227 if(!smb_io_owf_info("", &id
->nt_owf
, ps
, depth
))
1230 if(!smb_io_unistr2("unistr2", &id
->uni_domain_name
,
1231 id
->hdr_domain_name
.buffer
, ps
, depth
))
1233 if(!smb_io_unistr2("unistr2", &id
->uni_user_name
,
1234 id
->hdr_user_name
.buffer
, ps
, depth
))
1236 if(!smb_io_unistr2("unistr2", &id
->uni_wksta_name
,
1237 id
->hdr_wksta_name
.buffer
, ps
, depth
))
1244 /*******************************************************************
1245 Inits a NET_ID_INFO_2 structure.
1247 This is a network logon packet. The log_id parameters
1248 are what an NT server would generate for LUID once the
1249 user is logged on. I don't think we care about them.
1251 Note that this has no access to the NT and LM hashed passwords,
1252 so it forwards the challenge, and the NT and LM responses (24
1253 bytes each) over the secure channel to the Domain controller
1254 for it to say yea or nay. This is the preferred method of
1255 checking for a logon as it doesn't export the password
1256 hashes to anyone who has compromised the secure channel. JRA.
1257 ********************************************************************/
1259 void init_id_info2(NET_ID_INFO_2
* id
, const char *domain_name
,
1261 uint32 log_id_low
, uint32 log_id_high
,
1262 const char *user_name
, const char *wksta_name
,
1263 const uchar lm_challenge
[8],
1264 const uchar
* lm_chal_resp
, size_t lm_chal_resp_len
,
1265 const uchar
* nt_chal_resp
, size_t nt_chal_resp_len
)
1268 DEBUG(5,("init_id_info2: %d\n", __LINE__
));
1270 id
->ptr_id_info2
= 1;
1272 id
->param_ctrl
= param_ctrl
;
1273 init_logon_id(&id
->logon_id
, log_id_low
, log_id_high
);
1275 memcpy(id
->lm_chal
, lm_challenge
, sizeof(id
->lm_chal
));
1276 init_str_hdr(&id
->hdr_nt_chal_resp
, nt_chal_resp_len
, nt_chal_resp_len
, (nt_chal_resp
!= NULL
) ? 1 : 0);
1277 init_str_hdr(&id
->hdr_lm_chal_resp
, lm_chal_resp_len
, lm_chal_resp_len
, (lm_chal_resp
!= NULL
) ? 1 : 0);
1279 init_unistr2(&id
->uni_domain_name
, domain_name
, UNI_FLAGS_NONE
);
1280 init_uni_hdr(&id
->hdr_domain_name
, &id
->uni_domain_name
);
1281 init_unistr2(&id
->uni_user_name
, user_name
, UNI_FLAGS_NONE
);
1282 init_uni_hdr(&id
->hdr_user_name
, &id
->uni_user_name
);
1283 init_unistr2(&id
->uni_wksta_name
, wksta_name
, UNI_FLAGS_NONE
);
1284 init_uni_hdr(&id
->hdr_wksta_name
, &id
->uni_wksta_name
);
1286 init_string2(&id
->nt_chal_resp
, (const char *)nt_chal_resp
, nt_chal_resp_len
, nt_chal_resp_len
);
1287 init_string2(&id
->lm_chal_resp
, (const char *)lm_chal_resp
, lm_chal_resp_len
, lm_chal_resp_len
);
1291 /*******************************************************************
1292 Reads or writes an NET_ID_INFO_2 structure.
1293 ********************************************************************/
1295 static BOOL
net_io_id_info2(const char *desc
, NET_ID_INFO_2
*id
, prs_struct
*ps
, int depth
)
1300 prs_debug(ps
, depth
, desc
, "net_io_id_info2");
1306 if(!prs_uint32("ptr_id_info2", ps
, depth
, &id
->ptr_id_info2
))
1309 if (id
->ptr_id_info2
!= 0) {
1310 if(!smb_io_unihdr("unihdr", &id
->hdr_domain_name
, ps
, depth
))
1313 if(!prs_uint32("param_ctrl", ps
, depth
, &id
->param_ctrl
))
1315 if(!smb_io_logon_id("", &id
->logon_id
, ps
, depth
))
1318 if(!smb_io_unihdr("unihdr", &id
->hdr_user_name
, ps
, depth
))
1320 if(!smb_io_unihdr("unihdr", &id
->hdr_wksta_name
, ps
, depth
))
1323 if(!prs_uint8s (False
, "lm_chal", ps
, depth
, id
->lm_chal
, 8)) /* lm 8 byte challenge */
1326 if(!smb_io_strhdr("hdr_nt_chal_resp", &id
->hdr_nt_chal_resp
, ps
, depth
))
1328 if(!smb_io_strhdr("hdr_lm_chal_resp", &id
->hdr_lm_chal_resp
, ps
, depth
))
1331 if(!smb_io_unistr2("uni_domain_name", &id
->uni_domain_name
,
1332 id
->hdr_domain_name
.buffer
, ps
, depth
))
1334 if(!smb_io_unistr2("uni_user_name ", &id
->uni_user_name
,
1335 id
->hdr_user_name
.buffer
, ps
, depth
))
1337 if(!smb_io_unistr2("uni_wksta_name ", &id
->uni_wksta_name
,
1338 id
->hdr_wksta_name
.buffer
, ps
, depth
))
1340 if(!smb_io_string2("nt_chal_resp", &id
->nt_chal_resp
,
1341 id
->hdr_nt_chal_resp
.buffer
, ps
, depth
))
1343 if(!smb_io_string2("lm_chal_resp", &id
->lm_chal_resp
,
1344 id
->hdr_lm_chal_resp
.buffer
, ps
, depth
))
1352 /*******************************************************************
1353 Inits a DOM_SAM_INFO structure.
1354 ********************************************************************/
1356 void init_sam_info(DOM_SAM_INFO
*sam
,
1357 const char *logon_srv
, const char *comp_name
,
1358 DOM_CRED
*clnt_cred
,
1359 DOM_CRED
*rtn_cred
, uint16 logon_level
,
1360 NET_ID_INFO_CTR
*ctr
)
1362 DEBUG(5,("init_sam_info: %d\n", __LINE__
));
1364 init_clnt_info2(&sam
->client
, logon_srv
, comp_name
, clnt_cred
);
1366 if (rtn_cred
!= NULL
) {
1367 sam
->ptr_rtn_cred
= 1;
1368 memcpy(&sam
->rtn_cred
, rtn_cred
, sizeof(sam
->rtn_cred
));
1370 sam
->ptr_rtn_cred
= 0;
1373 sam
->logon_level
= logon_level
;
1377 /*******************************************************************
1378 Inits a DOM_SAM_INFO structure.
1379 ********************************************************************/
1381 void init_sam_info_ex(DOM_SAM_INFO_EX
*sam
,
1382 const char *logon_srv
, const char *comp_name
,
1383 uint16 logon_level
, NET_ID_INFO_CTR
*ctr
)
1385 DEBUG(5,("init_sam_info_ex: %d\n", __LINE__
));
1387 init_clnt_srv(&sam
->client
, logon_srv
, comp_name
);
1388 sam
->logon_level
= logon_level
;
1392 /*******************************************************************
1393 Reads or writes a DOM_SAM_INFO structure.
1394 ********************************************************************/
1396 static BOOL
net_io_id_info_ctr(const char *desc
, NET_ID_INFO_CTR
**pp_ctr
, prs_struct
*ps
, int depth
)
1398 NET_ID_INFO_CTR
*ctr
= *pp_ctr
;
1400 prs_debug(ps
, depth
, desc
, "smb_io_sam_info_ctr");
1403 if (UNMARSHALLING(ps
)) {
1404 ctr
= *pp_ctr
= PRS_ALLOC_MEM(ps
, NET_ID_INFO_CTR
, 1);
1412 /* don't 4-byte align here! */
1414 if(!prs_uint16("switch_value ", ps
, depth
, &ctr
->switch_value
))
1417 switch (ctr
->switch_value
) {
1419 if(!net_io_id_info1("", &ctr
->auth
.id1
, ps
, depth
))
1423 if(!net_io_id_info2("", &ctr
->auth
.id2
, ps
, depth
))
1428 DEBUG(4,("smb_io_sam_info_ctr: unknown switch_value!\n"));
1435 /*******************************************************************
1436 Reads or writes a DOM_SAM_INFO structure.
1437 ********************************************************************/
1439 static BOOL
smb_io_sam_info(const char *desc
, DOM_SAM_INFO
*sam
, prs_struct
*ps
, int depth
)
1444 prs_debug(ps
, depth
, desc
, "smb_io_sam_info");
1450 if(!smb_io_clnt_info2("", &sam
->client
, ps
, depth
))
1453 if(!prs_uint32("ptr_rtn_cred ", ps
, depth
, &sam
->ptr_rtn_cred
))
1455 if (sam
->ptr_rtn_cred
) {
1456 if(!smb_io_cred("", &sam
->rtn_cred
, ps
, depth
))
1460 if(!prs_uint16("logon_level ", ps
, depth
, &sam
->logon_level
))
1463 if (sam
->logon_level
!= 0) {
1464 if(!net_io_id_info_ctr("logon_info", &sam
->ctr
, ps
, depth
))
1471 /*******************************************************************
1472 Reads or writes a DOM_SAM_INFO_EX structure.
1473 ********************************************************************/
1475 static BOOL
smb_io_sam_info_ex(const char *desc
, DOM_SAM_INFO_EX
*sam
, prs_struct
*ps
, int depth
)
1480 prs_debug(ps
, depth
, desc
, "smb_io_sam_info_ex");
1486 if(!smb_io_clnt_srv("", &sam
->client
, ps
, depth
))
1489 if(!prs_uint16("logon_level ", ps
, depth
, &sam
->logon_level
))
1492 if (sam
->logon_level
!= 0) {
1493 if(!net_io_id_info_ctr("logon_info", &sam
->ctr
, ps
, depth
))
1500 /*************************************************************************
1501 Inits a NET_USER_INFO_3 structure.
1503 This is a network logon reply packet, and contains much information about
1504 the user. This information is passed as a (very long) paramater list
1505 to avoid having to link in the PASSDB code to every program that deals
1507 *************************************************************************/
1509 void init_net_user_info3(TALLOC_CTX
*ctx
, NET_USER_INFO_3
*usr
,
1513 const char* user_name
,
1514 const char* full_name
,
1515 const char* home_dir
,
1516 const char* dir_drive
,
1517 const char* logon_script
,
1518 const char* profile_path
,
1520 time_t unix_logon_time
,
1521 time_t unix_logoff_time
,
1522 time_t unix_kickoff_time
,
1523 time_t unix_pass_last_set_time
,
1524 time_t unix_pass_can_change_time
,
1525 time_t unix_pass_must_change_time
,
1527 uint16 logon_count
, uint16 bad_pw_count
,
1528 uint32 num_groups
, const DOM_GID
*gids
,
1529 uint32 user_flgs
, uint32 acct_flags
,
1530 uchar user_session_key
[16],
1531 uchar lm_session_key
[16],
1532 const char *logon_srv
, const char *logon_dom
,
1533 const DOM_SID
*dom_sid
)
1535 /* only cope with one "other" sid, right now. */
1536 /* need to count the number of space-delimited sids */
1538 int num_other_sids
= 0;
1540 NTTIME logon_time
, logoff_time
, kickoff_time
,
1541 pass_last_set_time
, pass_can_change_time
,
1542 pass_must_change_time
;
1546 usr
->ptr_user_info
= 1; /* yes, we're bothering to put USER_INFO data here */
1548 /* Create NTTIME structs */
1549 unix_to_nt_time (&logon_time
, unix_logon_time
);
1550 unix_to_nt_time (&logoff_time
, unix_logoff_time
);
1551 unix_to_nt_time (&kickoff_time
, unix_kickoff_time
);
1552 unix_to_nt_time (&pass_last_set_time
, unix_pass_last_set_time
);
1553 unix_to_nt_time (&pass_can_change_time
, unix_pass_can_change_time
);
1554 unix_to_nt_time (&pass_must_change_time
, unix_pass_must_change_time
);
1556 usr
->logon_time
= logon_time
;
1557 usr
->logoff_time
= logoff_time
;
1558 usr
->kickoff_time
= kickoff_time
;
1559 usr
->pass_last_set_time
= pass_last_set_time
;
1560 usr
->pass_can_change_time
= pass_can_change_time
;
1561 usr
->pass_must_change_time
= pass_must_change_time
;
1563 usr
->logon_count
= logon_count
;
1564 usr
->bad_pw_count
= bad_pw_count
;
1566 usr
->user_rid
= user_rid
;
1567 usr
->group_rid
= group_rid
;
1568 usr
->num_groups
= num_groups
;
1570 usr
->buffer_groups
= 1; /* indicates fill in groups, below, even if there are none */
1571 usr
->user_flgs
= user_flgs
;
1572 usr
->acct_flags
= acct_flags
;
1574 if (user_session_key
!= NULL
)
1575 memcpy(usr
->user_sess_key
, user_session_key
, sizeof(usr
->user_sess_key
));
1577 memset((char *)usr
->user_sess_key
, '\0', sizeof(usr
->user_sess_key
));
1579 usr
->buffer_dom_id
= dom_sid
? 1 : 0; /* yes, we're bothering to put a domain SID in */
1581 memset((char *)usr
->lm_sess_key
, '\0', sizeof(usr
->lm_sess_key
));
1583 for (i
=0; i
<7; i
++) {
1584 memset(&usr
->unknown
[i
], '\0', sizeof(usr
->unknown
));
1587 if (lm_session_key
!= NULL
) {
1588 memcpy(usr
->lm_sess_key
, lm_session_key
, sizeof(usr
->lm_sess_key
));
1591 num_other_sids
= init_dom_sid2s(ctx
, NULL
, &usr
->other_sids
);
1593 usr
->num_other_sids
= num_other_sids
;
1594 usr
->buffer_other_sids
= (num_other_sids
!= 0) ? 1 : 0;
1596 init_unistr2(&usr
->uni_user_name
, user_name
, UNI_FLAGS_NONE
);
1597 init_uni_hdr(&usr
->hdr_user_name
, &usr
->uni_user_name
);
1598 init_unistr2(&usr
->uni_full_name
, full_name
, UNI_FLAGS_NONE
);
1599 init_uni_hdr(&usr
->hdr_full_name
, &usr
->uni_full_name
);
1600 init_unistr2(&usr
->uni_logon_script
, logon_script
, UNI_FLAGS_NONE
);
1601 init_uni_hdr(&usr
->hdr_logon_script
, &usr
->uni_logon_script
);
1602 init_unistr2(&usr
->uni_profile_path
, profile_path
, UNI_FLAGS_NONE
);
1603 init_uni_hdr(&usr
->hdr_profile_path
, &usr
->uni_profile_path
);
1604 init_unistr2(&usr
->uni_home_dir
, home_dir
, UNI_FLAGS_NONE
);
1605 init_uni_hdr(&usr
->hdr_home_dir
, &usr
->uni_home_dir
);
1606 init_unistr2(&usr
->uni_dir_drive
, dir_drive
, UNI_FLAGS_NONE
);
1607 init_uni_hdr(&usr
->hdr_dir_drive
, &usr
->uni_dir_drive
);
1609 usr
->num_groups2
= num_groups
;
1612 usr
->gids
= TALLOC_ZERO_ARRAY(ctx
,DOM_GID
,num_groups
);
1613 if (usr
->gids
== NULL
)
1619 for (i
= 0; i
< num_groups
; i
++)
1620 usr
->gids
[i
] = gids
[i
];
1622 init_unistr2(&usr
->uni_logon_srv
, logon_srv
, UNI_FLAGS_NONE
);
1623 init_uni_hdr(&usr
->hdr_logon_srv
, &usr
->uni_logon_srv
);
1624 init_unistr2(&usr
->uni_logon_dom
, logon_dom
, UNI_FLAGS_NONE
);
1625 init_uni_hdr(&usr
->hdr_logon_dom
, &usr
->uni_logon_dom
);
1627 init_dom_sid2(&usr
->dom_sid
, dom_sid
);
1628 /* "other" sids are set up above */
1631 static void dump_acct_flags(uint32 acct_flags
) {
1634 DEBUG(lvl
,("dump_acct_flags\n"));
1635 if (acct_flags
& ACB_NORMAL
) {
1636 DEBUGADD(lvl
,("\taccount has ACB_NORMAL\n"));
1638 if (acct_flags
& ACB_PWNOEXP
) {
1639 DEBUGADD(lvl
,("\taccount has ACB_PWNOEXP\n"));
1641 if (acct_flags
& ACB_ENC_TXT_PWD_ALLOWED
) {
1642 DEBUGADD(lvl
,("\taccount has ACB_ENC_TXT_PWD_ALLOWED\n"));
1644 if (acct_flags
& ACB_NOT_DELEGATED
) {
1645 DEBUGADD(lvl
,("\taccount has ACB_NOT_DELEGATED\n"));
1647 if (acct_flags
& ACB_USE_DES_KEY_ONLY
) {
1648 DEBUGADD(lvl
,("\taccount has ACB_USE_DES_KEY_ONLY set, sig verify wont work\n"));
1650 if (acct_flags
& ACB_NO_AUTH_DATA_REQD
) {
1651 DEBUGADD(lvl
,("\taccount has ACB_NO_AUTH_DATA_REQD set\n"));
1653 if (acct_flags
& ACB_PWEXPIRED
) {
1654 DEBUGADD(lvl
,("\taccount has ACB_PWEXPIRED set\n"));
1658 static void dump_user_flgs(uint32 user_flags
) {
1661 DEBUG(lvl
,("dump_user_flgs\n"));
1662 if (user_flags
& LOGON_EXTRA_SIDS
) {
1663 DEBUGADD(lvl
,("\taccount has LOGON_EXTRA_SIDS\n"));
1665 if (user_flags
& LOGON_RESOURCE_GROUPS
) {
1666 DEBUGADD(lvl
,("\taccount has LOGON_RESOURCE_GROUPS\n"));
1668 if (user_flags
& LOGON_NTLMV2_ENABLED
) {
1669 DEBUGADD(lvl
,("\taccount has LOGON_NTLMV2_ENABLED\n"));
1671 if (user_flags
& LOGON_CACHED_ACCOUNT
) {
1672 DEBUGADD(lvl
,("\taccount has LOGON_CACHED_ACCOUNT\n"));
1674 if (user_flags
& LOGON_PROFILE_PATH_RETURNED
) {
1675 DEBUGADD(lvl
,("\taccount has LOGON_PROFILE_PATH_RETURNED\n"));
1677 if (user_flags
& LOGON_SERVER_TRUST_ACCOUNT
) {
1678 DEBUGADD(lvl
,("\taccount has LOGON_SERVER_TRUST_ACCOUNT\n"));
1684 /*******************************************************************
1685 This code has been modified to cope with a NET_USER_INFO_2 - which is
1686 exactly the same as a NET_USER_INFO_3, minus the other sids parameters.
1687 We use validation level to determine if we're marshalling a info 2 or
1688 INFO_3 - be we always return an INFO_3. Based on code donated by Marc
1689 Jacobsen at HP. JRA.
1690 ********************************************************************/
1692 BOOL
net_io_user_info3(const char *desc
, NET_USER_INFO_3
*usr
, prs_struct
*ps
,
1693 int depth
, uint16 validation_level
, BOOL kerb_validation_level
)
1700 prs_debug(ps
, depth
, desc
, "net_io_user_info3");
1703 if (UNMARSHALLING(ps
))
1709 if(!prs_uint32("ptr_user_info ", ps
, depth
, &usr
->ptr_user_info
))
1712 if (usr
->ptr_user_info
== 0)
1715 if(!smb_io_time("logon time", &usr
->logon_time
, ps
, depth
)) /* logon time */
1717 if(!smb_io_time("logoff time", &usr
->logoff_time
, ps
, depth
)) /* logoff time */
1719 if(!smb_io_time("kickoff time", &usr
->kickoff_time
, ps
, depth
)) /* kickoff time */
1721 if(!smb_io_time("last set time", &usr
->pass_last_set_time
, ps
, depth
)) /* password last set time */
1723 if(!smb_io_time("can change time", &usr
->pass_can_change_time
, ps
, depth
)) /* password can change time */
1725 if(!smb_io_time("must change time", &usr
->pass_must_change_time
, ps
, depth
)) /* password must change time */
1728 if(!smb_io_unihdr("hdr_user_name", &usr
->hdr_user_name
, ps
, depth
)) /* username unicode string header */
1730 if(!smb_io_unihdr("hdr_full_name", &usr
->hdr_full_name
, ps
, depth
)) /* user's full name unicode string header */
1732 if(!smb_io_unihdr("hdr_logon_script", &usr
->hdr_logon_script
, ps
, depth
)) /* logon script unicode string header */
1734 if(!smb_io_unihdr("hdr_profile_path", &usr
->hdr_profile_path
, ps
, depth
)) /* profile path unicode string header */
1736 if(!smb_io_unihdr("hdr_home_dir", &usr
->hdr_home_dir
, ps
, depth
)) /* home directory unicode string header */
1738 if(!smb_io_unihdr("hdr_dir_drive", &usr
->hdr_dir_drive
, ps
, depth
)) /* home directory drive unicode string header */
1741 if(!prs_uint16("logon_count ", ps
, depth
, &usr
->logon_count
)) /* logon count */
1743 if(!prs_uint16("bad_pw_count ", ps
, depth
, &usr
->bad_pw_count
)) /* bad password count */
1746 if(!prs_uint32("user_rid ", ps
, depth
, &usr
->user_rid
)) /* User RID */
1748 if(!prs_uint32("group_rid ", ps
, depth
, &usr
->group_rid
)) /* Group RID */
1750 if(!prs_uint32("num_groups ", ps
, depth
, &usr
->num_groups
)) /* num groups */
1752 if(!prs_uint32("buffer_groups ", ps
, depth
, &usr
->buffer_groups
)) /* undocumented buffer pointer to groups. */
1754 if(!prs_uint32("user_flgs ", ps
, depth
, &usr
->user_flgs
)) /* user flags */
1756 dump_user_flgs(usr
->user_flgs
);
1757 if(!prs_uint8s(False
, "user_sess_key", ps
, depth
, usr
->user_sess_key
, 16)) /* user session key */
1760 if(!smb_io_unihdr("hdr_logon_srv", &usr
->hdr_logon_srv
, ps
, depth
)) /* logon server unicode string header */
1762 if(!smb_io_unihdr("hdr_logon_dom", &usr
->hdr_logon_dom
, ps
, depth
)) /* logon domain unicode string header */
1765 if(!prs_uint32("buffer_dom_id ", ps
, depth
, &usr
->buffer_dom_id
)) /* undocumented logon domain id pointer */
1768 if(!prs_uint8s(False
, "lm_sess_key", ps
, depth
, usr
->lm_sess_key
, 8)) /* lm session key */
1771 if(!prs_uint32("acct_flags ", ps
, depth
, &usr
->acct_flags
)) /* Account flags */
1773 dump_acct_flags(usr
->acct_flags
);
1774 for (i
= 0; i
< 7; i
++)
1776 if (!prs_uint32("unkown", ps
, depth
, &usr
->unknown
[i
])) /* unknown */
1780 if (validation_level
== 3) {
1781 if(!prs_uint32("num_other_sids", ps
, depth
, &usr
->num_other_sids
)) /* 0 - num_sids */
1783 if(!prs_uint32("buffer_other_sids", ps
, depth
, &usr
->buffer_other_sids
)) /* NULL - undocumented pointer to SIDs. */
1786 if (UNMARSHALLING(ps
)) {
1787 usr
->num_other_sids
= 0;
1788 usr
->buffer_other_sids
= 0;
1792 /* get kerb validation info (not really part of user_info_3) - Guenther */
1794 if (kerb_validation_level
) {
1796 if(!prs_uint32("ptr_res_group_dom_sid", ps
, depth
, &usr
->ptr_res_group_dom_sid
))
1798 if(!prs_uint32("res_group_count", ps
, depth
, &usr
->res_group_count
))
1800 if(!prs_uint32("ptr_res_groups", ps
, depth
, &usr
->ptr_res_groups
))
1804 if(!smb_io_unistr2("uni_user_name", &usr
->uni_user_name
, usr
->hdr_user_name
.buffer
, ps
, depth
)) /* username unicode string */
1806 if(!smb_io_unistr2("uni_full_name", &usr
->uni_full_name
, usr
->hdr_full_name
.buffer
, ps
, depth
)) /* user's full name unicode string */
1808 if(!smb_io_unistr2("uni_logon_script", &usr
->uni_logon_script
, usr
->hdr_logon_script
.buffer
, ps
, depth
)) /* logon script unicode string */
1810 if(!smb_io_unistr2("uni_profile_path", &usr
->uni_profile_path
, usr
->hdr_profile_path
.buffer
, ps
, depth
)) /* profile path unicode string */
1812 if(!smb_io_unistr2("uni_home_dir", &usr
->uni_home_dir
, usr
->hdr_home_dir
.buffer
, ps
, depth
)) /* home directory unicode string */
1814 if(!smb_io_unistr2("uni_dir_drive", &usr
->uni_dir_drive
, usr
->hdr_dir_drive
.buffer
, ps
, depth
)) /* home directory drive unicode string */
1820 if(!prs_uint32("num_groups2 ", ps
, depth
, &usr
->num_groups2
)) /* num groups2 */
1823 if (usr
->num_groups
!= usr
->num_groups2
) {
1824 DEBUG(3,("net_io_user_info3: num_groups mismatch! (%d != %d)\n",
1825 usr
->num_groups
, usr
->num_groups2
));
1829 if (UNMARSHALLING(ps
)) {
1830 if (usr
->num_groups
) {
1831 usr
->gids
= PRS_ALLOC_MEM(ps
, DOM_GID
, usr
->num_groups
);
1832 if (usr
->gids
== NULL
)
1839 for (i
= 0; i
< usr
->num_groups
; i
++) {
1840 if(!smb_io_gid("", &usr
->gids
[i
], ps
, depth
)) /* group info */
1844 if(!smb_io_unistr2("uni_logon_srv", &usr
->uni_logon_srv
, usr
->hdr_logon_srv
.buffer
, ps
, depth
)) /* logon server unicode string */
1846 if(!smb_io_unistr2("uni_logon_dom", &usr
->uni_logon_dom
, usr
->hdr_logon_dom
.buffer
, ps
, depth
)) /* logon domain unicode string */
1849 if(!smb_io_dom_sid2("", &usr
->dom_sid
, ps
, depth
)) /* domain SID */
1852 if (validation_level
== 3 && usr
->buffer_other_sids
) {
1854 uint32 num_other_sids
= usr
->num_other_sids
;
1856 if (!(usr
->user_flgs
& LOGON_EXTRA_SIDS
)) {
1857 DEBUG(10,("net_io_user_info3: user_flgs attribute does not have LOGON_EXTRA_SIDS\n"));
1861 if (!prs_uint32("num_other_sids", ps
, depth
,
1865 if (num_other_sids
!= usr
->num_other_sids
)
1868 if (UNMARSHALLING(ps
)) {
1869 if (usr
->num_other_sids
) {
1870 usr
->other_sids
= PRS_ALLOC_MEM(ps
, DOM_SID2
, usr
->num_other_sids
);
1871 usr
->other_sids_attrib
=
1872 PRS_ALLOC_MEM(ps
, uint32
, usr
->num_other_sids
);
1874 usr
->other_sids
= NULL
;
1875 usr
->other_sids_attrib
= NULL
;
1878 if ((num_other_sids
!= 0) &&
1879 ((usr
->other_sids
== NULL
) ||
1880 (usr
->other_sids_attrib
== NULL
)))
1884 /* First the pointers to the SIDS and attributes */
1888 for (i
=0; i
<usr
->num_other_sids
; i
++) {
1891 if (!prs_uint32("sid_ptr", ps
, depth
, &ptr
))
1894 if (UNMARSHALLING(ps
) && (ptr
== 0))
1897 if (!prs_uint32("attribute", ps
, depth
,
1898 &usr
->other_sids_attrib
[i
]))
1902 for (i
= 0; i
< usr
->num_other_sids
; i
++) {
1903 if(!smb_io_dom_sid2("", &usr
->other_sids
[i
], ps
, depth
)) /* other domain SIDs */
1913 /*******************************************************************
1914 Reads or writes a structure.
1915 ********************************************************************/
1917 BOOL
net_io_q_sam_logon(const char *desc
, NET_Q_SAM_LOGON
*q_l
, prs_struct
*ps
, int depth
)
1922 prs_debug(ps
, depth
, desc
, "net_io_q_sam_logon");
1928 if(!smb_io_sam_info("", &q_l
->sam_id
, ps
, depth
))
1931 if(!prs_align_uint16(ps
))
1934 if(!prs_uint16("validation_level", ps
, depth
, &q_l
->validation_level
))
1940 /*******************************************************************
1941 Reads or writes a structure.
1942 ********************************************************************/
1944 BOOL
net_io_r_sam_logon(const char *desc
, NET_R_SAM_LOGON
*r_l
, prs_struct
*ps
, int depth
)
1949 prs_debug(ps
, depth
, desc
, "net_io_r_sam_logon");
1952 if(!prs_uint32("buffer_creds", ps
, depth
, &r_l
->buffer_creds
)) /* undocumented buffer pointer */
1954 if (&r_l
->buffer_creds
) {
1955 if(!smb_io_cred("", &r_l
->srv_creds
, ps
, depth
)) /* server credentials. server time stamp appears to be ignored. */
1959 if(!prs_uint16("switch_value", ps
, depth
, &r_l
->switch_value
))
1964 #if 1 /* W2k always needs this - even for bad passwd. JRA */
1965 if(!net_io_user_info3("", r_l
->user
, ps
, depth
, r_l
->switch_value
, False
))
1968 if (r_l
->switch_value
!= 0) {
1969 if(!net_io_user_info3("", r_l
->user
, ps
, depth
, r_l
->switch_value
, False
))
1974 if(!prs_uint32("auth_resp ", ps
, depth
, &r_l
->auth_resp
)) /* 1 - Authoritative response; 0 - Non-Auth? */
1977 if(!prs_ntstatus("status ", ps
, depth
, &r_l
->status
))
1986 /*******************************************************************
1987 Reads or writes a structure.
1988 ********************************************************************/
1990 BOOL
net_io_q_sam_logon_ex(const char *desc
, NET_Q_SAM_LOGON_EX
*q_l
, prs_struct
*ps
, int depth
)
1995 prs_debug(ps
, depth
, desc
, "net_io_q_sam_logon_ex");
2001 if(!smb_io_sam_info_ex("", &q_l
->sam_id
, ps
, depth
))
2004 if(!prs_align_uint16(ps
))
2007 if(!prs_uint16("validation_level", ps
, depth
, &q_l
->validation_level
))
2013 if(!prs_uint32("flags ", ps
, depth
, &q_l
->flags
))
2019 /*******************************************************************
2020 Reads or writes a structure.
2021 ********************************************************************/
2023 BOOL
net_io_r_sam_logon_ex(const char *desc
, NET_R_SAM_LOGON_EX
*r_l
, prs_struct
*ps
, int depth
)
2028 prs_debug(ps
, depth
, desc
, "net_io_r_sam_logon_ex");
2031 if(!prs_uint16("switch_value", ps
, depth
, &r_l
->switch_value
))
2036 #if 1 /* W2k always needs this - even for bad passwd. JRA */
2037 if(!net_io_user_info3("", r_l
->user
, ps
, depth
, r_l
->switch_value
, False
))
2040 if (r_l
->switch_value
!= 0) {
2041 if(!net_io_user_info3("", r_l
->user
, ps
, depth
, r_l
->switch_value
, False
))
2046 if(!prs_uint32("auth_resp ", ps
, depth
, &r_l
->auth_resp
)) /* 1 - Authoritative response; 0 - Non-Auth? */
2049 if(!prs_uint32("flags ", ps
, depth
, &r_l
->flags
))
2052 if(!prs_ntstatus("status ", ps
, depth
, &r_l
->status
))
2062 /*******************************************************************
2063 Reads or writes a structure.
2064 ********************************************************************/
2066 BOOL
net_io_q_sam_logoff(const char *desc
, NET_Q_SAM_LOGOFF
*q_l
, prs_struct
*ps
, int depth
)
2071 prs_debug(ps
, depth
, desc
, "net_io_q_sam_logoff");
2077 if(!smb_io_sam_info("", &q_l
->sam_id
, ps
, depth
)) /* domain SID */
2083 /*******************************************************************
2084 Reads or writes a structure.
2085 ********************************************************************/
2087 BOOL
net_io_r_sam_logoff(const char *desc
, NET_R_SAM_LOGOFF
*r_l
, prs_struct
*ps
, int depth
)
2092 prs_debug(ps
, depth
, desc
, "net_io_r_sam_logoff");
2098 if(!prs_uint32("buffer_creds", ps
, depth
, &r_l
->buffer_creds
)) /* undocumented buffer pointer */
2100 if(!smb_io_cred("", &r_l
->srv_creds
, ps
, depth
)) /* server credentials. server time stamp appears to be ignored. */
2103 if(!prs_ntstatus("status ", ps
, depth
, &r_l
->status
))
2109 /*******************************************************************
2110 makes a NET_Q_SAM_SYNC structure.
2111 ********************************************************************/
2112 BOOL
init_net_q_sam_sync(NET_Q_SAM_SYNC
* q_s
, const char *srv_name
,
2113 const char *cli_name
, DOM_CRED
*cli_creds
,
2114 DOM_CRED
*ret_creds
, uint32 database_id
,
2117 DEBUG(5, ("init_q_sam_sync\n"));
2119 init_unistr2(&q_s
->uni_srv_name
, srv_name
, UNI_STR_TERMINATE
);
2120 init_unistr2(&q_s
->uni_cli_name
, cli_name
, UNI_STR_TERMINATE
);
2123 memcpy(&q_s
->cli_creds
, cli_creds
, sizeof(q_s
->cli_creds
));
2126 memcpy(&q_s
->ret_creds
, ret_creds
, sizeof(q_s
->ret_creds
));
2128 memset(&q_s
->ret_creds
, 0, sizeof(q_s
->ret_creds
));
2130 q_s
->database_id
= database_id
;
2131 q_s
->restart_state
= 0;
2132 q_s
->sync_context
= next_rid
;
2133 q_s
->max_size
= 0xffff;
2138 /*******************************************************************
2139 reads or writes a structure.
2140 ********************************************************************/
2141 BOOL
net_io_q_sam_sync(const char *desc
, NET_Q_SAM_SYNC
* q_s
, prs_struct
*ps
,
2144 prs_debug(ps
, depth
, desc
, "net_io_q_sam_sync");
2147 if (!smb_io_unistr2("", &q_s
->uni_srv_name
, True
, ps
, depth
))
2149 if (!smb_io_unistr2("", &q_s
->uni_cli_name
, True
, ps
, depth
))
2152 if (!smb_io_cred("", &q_s
->cli_creds
, ps
, depth
))
2154 if (!smb_io_cred("", &q_s
->ret_creds
, ps
, depth
))
2157 if (!prs_uint32("database_id ", ps
, depth
, &q_s
->database_id
))
2159 if (!prs_uint32("restart_state", ps
, depth
, &q_s
->restart_state
))
2161 if (!prs_uint32("sync_context ", ps
, depth
, &q_s
->sync_context
))
2164 if (!prs_uint32("max_size", ps
, depth
, &q_s
->max_size
))
2170 /*******************************************************************
2171 reads or writes a structure.
2172 ********************************************************************/
2173 static BOOL
net_io_sam_delta_hdr(const char *desc
, SAM_DELTA_HDR
* delta
,
2174 prs_struct
*ps
, int depth
)
2176 prs_debug(ps
, depth
, desc
, "net_io_sam_delta_hdr");
2179 if (!prs_uint16("type", ps
, depth
, &delta
->type
))
2181 if (!prs_uint16("type2", ps
, depth
, &delta
->type2
))
2183 if (!prs_uint32("target_rid", ps
, depth
, &delta
->target_rid
))
2186 if (!prs_uint32("type3", ps
, depth
, &delta
->type3
))
2189 /* Not sure why we need this but it seems to be necessary to get
2190 sam deltas working. */
2192 if (delta
->type
!= 0x16) {
2193 if (!prs_uint32("ptr_delta", ps
, depth
, &delta
->ptr_delta
))
2200 /*******************************************************************
2201 reads or writes a structure.
2202 ********************************************************************/
2203 static BOOL
net_io_sam_delta_mod_count(const char *desc
, SAM_DELTA_MOD_COUNT
*info
,
2204 prs_struct
*ps
, int depth
)
2206 prs_debug(ps
, depth
, desc
, "net_io_sam_delta_stamp");
2209 if (!prs_uint32("seqnum", ps
, depth
, &info
->seqnum
))
2211 if (!prs_uint32("dom_mod_count_ptr", ps
, depth
,
2212 &info
->dom_mod_count_ptr
))
2215 if (info
->dom_mod_count_ptr
) {
2216 if (!prs_uint64("dom_mod_count", ps
, depth
,
2217 &info
->dom_mod_count
))
2224 /*******************************************************************
2225 reads or writes a structure.
2226 ********************************************************************/
2227 static BOOL
net_io_sam_domain_info(const char *desc
, SAM_DOMAIN_INFO
* info
,
2228 prs_struct
*ps
, int depth
)
2230 prs_debug(ps
, depth
, desc
, "net_io_sam_domain_info");
2233 if (!smb_io_unihdr("hdr_dom_name", &info
->hdr_dom_name
, ps
, depth
))
2235 if (!smb_io_unihdr("hdr_oem_info", &info
->hdr_oem_info
, ps
, depth
))
2238 if (!prs_uint64("force_logoff", ps
, depth
, &info
->force_logoff
))
2240 if (!prs_uint16("min_pwd_len", ps
, depth
, &info
->min_pwd_len
))
2242 if (!prs_uint16("pwd_history_len", ps
, depth
, &info
->pwd_history_len
))
2244 if (!prs_uint64("max_pwd_age", ps
, depth
, &info
->max_pwd_age
))
2246 if (!prs_uint64("min_pwd_age", ps
, depth
, &info
->min_pwd_age
))
2248 if (!prs_uint64("dom_mod_count", ps
, depth
, &info
->dom_mod_count
))
2250 if (!smb_io_time("creation_time", &info
->creation_time
, ps
, depth
))
2252 if (!prs_uint32("security_information", ps
, depth
, &info
->security_information
))
2254 if (!smb_io_bufhdr4("hdr_sec_desc", &info
->hdr_sec_desc
, ps
, depth
))
2256 if (!smb_io_lockout_string_hdr("hdr_account_lockout_string", &info
->hdr_account_lockout
, ps
, depth
))
2258 if (!smb_io_unihdr("hdr_unknown2", &info
->hdr_unknown2
, ps
, depth
))
2260 if (!smb_io_unihdr("hdr_unknown3", &info
->hdr_unknown3
, ps
, depth
))
2262 if (!smb_io_unihdr("hdr_unknown4", &info
->hdr_unknown4
, ps
, depth
))
2264 if (!prs_uint32("logon_chgpass", ps
, depth
, &info
->logon_chgpass
))
2266 if (!prs_uint32("unknown6", ps
, depth
, &info
->unknown6
))
2268 if (!prs_uint32("unknown7", ps
, depth
, &info
->unknown7
))
2270 if (!prs_uint32("unknown8", ps
, depth
, &info
->unknown8
))
2273 if (!smb_io_unistr2("uni_dom_name", &info
->uni_dom_name
,
2274 info
->hdr_dom_name
.buffer
, ps
, depth
))
2276 if (!smb_io_unistr2("buf_oem_info", &info
->buf_oem_info
,
2277 info
->hdr_oem_info
.buffer
, ps
, depth
))
2280 if (!smb_io_rpc_blob("buf_sec_desc", &info
->buf_sec_desc
, ps
, depth
))
2283 if (!smb_io_account_lockout_str("account_lockout", &info
->account_lockout
,
2284 info
->hdr_account_lockout
.buffer
, ps
, depth
))
2287 if (!smb_io_unistr2("buf_unknown2", &info
->buf_unknown2
,
2288 info
->hdr_unknown2
.buffer
, ps
, depth
))
2290 if (!smb_io_unistr2("buf_unknown3", &info
->buf_unknown3
,
2291 info
->hdr_unknown3
.buffer
, ps
, depth
))
2293 if (!smb_io_unistr2("buf_unknown4", &info
->buf_unknown4
,
2294 info
->hdr_unknown4
.buffer
, ps
, depth
))
2300 /*******************************************************************
2301 reads or writes a structure.
2302 ********************************************************************/
2303 static BOOL
net_io_sam_group_info(const char *desc
, SAM_GROUP_INFO
* info
,
2304 prs_struct
*ps
, int depth
)
2306 prs_debug(ps
, depth
, desc
, "net_io_sam_group_info");
2309 if (!smb_io_unihdr("hdr_grp_name", &info
->hdr_grp_name
, ps
, depth
))
2311 if (!smb_io_gid("gid", &info
->gid
, ps
, depth
))
2313 if (!smb_io_unihdr("hdr_grp_desc", &info
->hdr_grp_desc
, ps
, depth
))
2315 if (!smb_io_bufhdr2("hdr_sec_desc", &info
->hdr_sec_desc
, ps
, depth
))
2318 if (ps
->data_offset
+ 48 > ps
->buffer_size
)
2320 ps
->data_offset
+= 48;
2322 if (!smb_io_unistr2("uni_grp_name", &info
->uni_grp_name
,
2323 info
->hdr_grp_name
.buffer
, ps
, depth
))
2325 if (!smb_io_unistr2("uni_grp_desc", &info
->uni_grp_desc
,
2326 info
->hdr_grp_desc
.buffer
, ps
, depth
))
2328 if (!smb_io_rpc_blob("buf_sec_desc", &info
->buf_sec_desc
, ps
, depth
))
2334 /*******************************************************************
2335 reads or writes a structure.
2336 ********************************************************************/
2337 static BOOL
net_io_sam_passwd_info(const char *desc
, SAM_PWD
* pwd
,
2338 prs_struct
*ps
, int depth
)
2340 prs_debug(ps
, depth
, desc
, "net_io_sam_passwd_info");
2343 if (!prs_uint32("unk_0 ", ps
, depth
, &pwd
->unk_0
))
2346 if (!smb_io_unihdr("hdr_lm_pwd", &pwd
->hdr_lm_pwd
, ps
, depth
))
2348 if (!prs_uint8s(False
, "buf_lm_pwd", ps
, depth
, pwd
->buf_lm_pwd
, 16))
2351 if (!smb_io_unihdr("hdr_nt_pwd", &pwd
->hdr_nt_pwd
, ps
, depth
))
2353 if (!prs_uint8s(False
, "buf_nt_pwd", ps
, depth
, pwd
->buf_nt_pwd
, 16))
2356 if (!smb_io_unihdr("", &pwd
->hdr_empty_lm
, ps
, depth
))
2358 if (!smb_io_unihdr("", &pwd
->hdr_empty_nt
, ps
, depth
))
2364 /*******************************************************************
2365 reads or writes a structure.
2366 ********************************************************************/
2367 static BOOL
net_io_sam_account_info(const char *desc
, SAM_ACCOUNT_INFO
*info
,
2368 prs_struct
*ps
, int depth
)
2370 BUFHDR2 hdr_priv_data
;
2373 prs_debug(ps
, depth
, desc
, "net_io_sam_account_info");
2376 if (!smb_io_unihdr("hdr_acct_name", &info
->hdr_acct_name
, ps
, depth
))
2378 if (!smb_io_unihdr("hdr_full_name", &info
->hdr_full_name
, ps
, depth
))
2381 if (!prs_uint32("user_rid ", ps
, depth
, &info
->user_rid
))
2383 if (!prs_uint32("group_rid", ps
, depth
, &info
->group_rid
))
2386 if (!smb_io_unihdr("hdr_home_dir ", &info
->hdr_home_dir
, ps
, depth
))
2388 if (!smb_io_unihdr("hdr_dir_drive", &info
->hdr_dir_drive
, ps
, depth
))
2390 if (!smb_io_unihdr("hdr_logon_script", &info
->hdr_logon_script
, ps
,
2394 if (!smb_io_unihdr("hdr_acct_desc", &info
->hdr_acct_desc
, ps
, depth
))
2396 if (!smb_io_unihdr("hdr_workstations", &info
->hdr_workstations
, ps
,
2400 if (!smb_io_time("logon_time", &info
->logon_time
, ps
, depth
))
2402 if (!smb_io_time("logoff_time", &info
->logoff_time
, ps
, depth
))
2405 if (!prs_uint32("logon_divs ", ps
, depth
, &info
->logon_divs
))
2407 if (!prs_uint32("ptr_logon_hrs", ps
, depth
, &info
->ptr_logon_hrs
))
2410 if (!prs_uint16("bad_pwd_count", ps
, depth
, &info
->bad_pwd_count
))
2412 if (!prs_uint16("logon_count", ps
, depth
, &info
->logon_count
))
2414 if (!smb_io_time("pwd_last_set_time", &info
->pwd_last_set_time
, ps
,
2417 if (!smb_io_time("acct_expiry_time", &info
->acct_expiry_time
, ps
,
2421 if (!prs_uint32("acb_info", ps
, depth
, &info
->acb_info
))
2423 if (!prs_uint8s(False
, "nt_pwd", ps
, depth
, info
->nt_pwd
, 16))
2425 if (!prs_uint8s(False
, "lm_pwd", ps
, depth
, info
->lm_pwd
, 16))
2427 if (!prs_uint8("lm_pwd_present", ps
, depth
, &info
->lm_pwd_present
))
2429 if (!prs_uint8("nt_pwd_present", ps
, depth
, &info
->nt_pwd_present
))
2431 if (!prs_uint8("pwd_expired", ps
, depth
, &info
->pwd_expired
))
2434 if (!smb_io_unihdr("hdr_comment", &info
->hdr_comment
, ps
, depth
))
2436 if (!smb_io_unihdr("hdr_parameters", &info
->hdr_parameters
, ps
,
2439 if (!prs_uint16("country", ps
, depth
, &info
->country
))
2441 if (!prs_uint16("codepage", ps
, depth
, &info
->codepage
))
2444 if (!smb_io_bufhdr2("hdr_priv_data", &hdr_priv_data
, ps
, depth
))
2446 if (!smb_io_bufhdr2("hdr_sec_desc", &info
->hdr_sec_desc
, ps
, depth
))
2448 if (!smb_io_unihdr("hdr_profile", &info
->hdr_profile
, ps
, depth
))
2451 for (i
= 0; i
< 3; i
++)
2453 if (!smb_io_unihdr("hdr_reserved", &info
->hdr_reserved
[i
],
2458 for (i
= 0; i
< 4; i
++)
2460 if (!prs_uint32("dw_reserved", ps
, depth
,
2461 &info
->dw_reserved
[i
]))
2465 if (!smb_io_unistr2("uni_acct_name", &info
->uni_acct_name
,
2466 info
->hdr_acct_name
.buffer
, ps
, depth
))
2469 if (!smb_io_unistr2("uni_full_name", &info
->uni_full_name
,
2470 info
->hdr_full_name
.buffer
, ps
, depth
))
2473 if (!smb_io_unistr2("uni_home_dir ", &info
->uni_home_dir
,
2474 info
->hdr_home_dir
.buffer
, ps
, depth
))
2477 if (!smb_io_unistr2("uni_dir_drive", &info
->uni_dir_drive
,
2478 info
->hdr_dir_drive
.buffer
, ps
, depth
))
2481 if (!smb_io_unistr2("uni_logon_script", &info
->uni_logon_script
,
2482 info
->hdr_logon_script
.buffer
, ps
, depth
))
2485 if (!smb_io_unistr2("uni_acct_desc", &info
->uni_acct_desc
,
2486 info
->hdr_acct_desc
.buffer
, ps
, depth
))
2489 if (!smb_io_unistr2("uni_workstations", &info
->uni_workstations
,
2490 info
->hdr_workstations
.buffer
, ps
, depth
))
2494 if (!prs_uint32("unknown1", ps
, depth
, &info
->unknown1
))
2496 if (!prs_uint32("unknown2", ps
, depth
, &info
->unknown2
))
2499 if (!smb_io_rpc_blob("buf_logon_hrs", &info
->buf_logon_hrs
, ps
, depth
))
2502 if (!smb_io_unistr2("uni_comment", &info
->uni_comment
,
2503 info
->hdr_comment
.buffer
, ps
, depth
))
2506 if (!smb_io_unistr2("uni_parameters", &info
->uni_parameters
,
2507 info
->hdr_parameters
.buffer
, ps
, depth
))
2510 if (hdr_priv_data
.buffer
!= 0)
2514 if (!prs_uint32("pwd_len", ps
, depth
, &len
))
2516 old_offset
= ps
->data_offset
;
2522 if (!prs_hash1(ps
, ps
->data_offset
, len
))
2525 if (!net_io_sam_passwd_info("pass", &info
->pass
,
2532 if (!prs_hash1(ps
, old_offset
, len
))
2536 if (old_offset
+ len
> ps
->buffer_size
)
2538 ps
->data_offset
= old_offset
+ len
;
2540 if (!smb_io_rpc_blob("buf_sec_desc", &info
->buf_sec_desc
, ps
, depth
))
2543 if (!smb_io_unistr2("uni_profile", &info
->uni_profile
,
2544 info
->hdr_profile
.buffer
, ps
, depth
))
2552 /*******************************************************************
2553 reads or writes a structure.
2554 ********************************************************************/
2555 static BOOL
net_io_sam_group_mem_info(const char *desc
, SAM_GROUP_MEM_INFO
* info
,
2556 prs_struct
*ps
, int depth
)
2561 prs_debug(ps
, depth
, desc
, "net_io_sam_group_mem_info");
2565 if (!prs_uint32("ptr_rids ", ps
, depth
, &info
->ptr_rids
))
2567 if (!prs_uint32("ptr_attribs", ps
, depth
, &info
->ptr_attribs
))
2569 if (!prs_uint32("num_members", ps
, depth
, &info
->num_members
))
2572 if (ps
->data_offset
+ 16 > ps
->buffer_size
)
2574 ps
->data_offset
+= 16;
2576 if (info
->ptr_rids
!= 0)
2578 if (!prs_uint32("num_members2", ps
, depth
,
2579 &info
->num_members2
))
2582 if (info
->num_members2
!= info
->num_members
)
2588 if (UNMARSHALLING(ps
)) {
2589 if (info
->num_members2
) {
2590 info
->rids
= TALLOC_ARRAY(ps
->mem_ctx
, uint32
, info
->num_members2
);
2592 if (info
->rids
== NULL
) {
2593 DEBUG(0, ("out of memory allocating %d rids\n",
2594 info
->num_members2
));
2602 for (i
= 0; i
< info
->num_members2
; i
++)
2604 slprintf(tmp
, sizeof(tmp
) - 1, "rids[%02d]", i
);
2605 if (!prs_uint32(tmp
, ps
, depth
, &info
->rids
[i
]))
2610 if (info
->ptr_attribs
!= 0)
2612 if (!prs_uint32("num_members3", ps
, depth
,
2613 &info
->num_members3
))
2615 if (info
->num_members3
!= info
->num_members
)
2621 if (UNMARSHALLING(ps
)) {
2622 if (info
->num_members3
) {
2623 info
->attribs
= TALLOC_ARRAY(ps
->mem_ctx
, uint32
, info
->num_members3
);
2625 if (info
->attribs
== NULL
) {
2626 DEBUG(0, ("out of memory allocating %d attribs\n",
2627 info
->num_members3
));
2631 info
->attribs
= NULL
;
2635 for (i
= 0; i
< info
->num_members3
; i
++)
2637 slprintf(tmp
, sizeof(tmp
) - 1, "attribs[%02d]", i
);
2638 if (!prs_uint32(tmp
, ps
, depth
, &info
->attribs
[i
]))
2646 /*******************************************************************
2647 reads or writes a structure.
2648 ********************************************************************/
2649 static BOOL
net_io_sam_alias_info(const char *desc
, SAM_ALIAS_INFO
* info
,
2650 prs_struct
*ps
, int depth
)
2652 prs_debug(ps
, depth
, desc
, "net_io_sam_alias_info");
2655 if (!smb_io_unihdr("hdr_als_name", &info
->hdr_als_name
, ps
, depth
))
2657 if (!prs_uint32("als_rid", ps
, depth
, &info
->als_rid
))
2659 if (!smb_io_bufhdr2("hdr_sec_desc", &info
->hdr_sec_desc
, ps
, depth
))
2661 if (!smb_io_unihdr("hdr_als_desc", &info
->hdr_als_desc
, ps
, depth
))
2664 if (ps
->data_offset
+ 40 > ps
->buffer_size
)
2666 ps
->data_offset
+= 40;
2668 if (!smb_io_unistr2("uni_als_name", &info
->uni_als_name
,
2669 info
->hdr_als_name
.buffer
, ps
, depth
))
2671 if (!smb_io_rpc_blob("buf_sec_desc", &info
->buf_sec_desc
, ps
, depth
))
2674 if (!smb_io_unistr2("uni_als_desc", &info
->uni_als_desc
,
2675 info
->hdr_als_desc
.buffer
, ps
, depth
))
2681 /*******************************************************************
2682 reads or writes a structure.
2683 ********************************************************************/
2684 static BOOL
net_io_sam_alias_mem_info(const char *desc
, SAM_ALIAS_MEM_INFO
* info
,
2685 prs_struct
*ps
, int depth
)
2690 prs_debug(ps
, depth
, desc
, "net_io_sam_alias_mem_info");
2694 if (!prs_uint32("num_members", ps
, depth
, &info
->num_members
))
2696 if (!prs_uint32("ptr_members", ps
, depth
, &info
->ptr_members
))
2699 if (ps
->data_offset
+ 16 > ps
->buffer_size
)
2701 ps
->data_offset
+= 16;
2703 if (info
->ptr_members
!= 0)
2705 if (!prs_uint32("num_sids", ps
, depth
, &info
->num_sids
))
2707 if (info
->num_sids
!= info
->num_members
)
2713 if (UNMARSHALLING(ps
)) {
2714 if (info
->num_sids
) {
2715 info
->ptr_sids
= TALLOC_ARRAY(ps
->mem_ctx
, uint32
, info
->num_sids
);
2717 if (info
->ptr_sids
== NULL
) {
2718 DEBUG(0, ("out of memory allocating %d ptr_sids\n",
2723 info
->ptr_sids
= NULL
;
2727 for (i
= 0; i
< info
->num_sids
; i
++)
2729 slprintf(tmp
, sizeof(tmp
) - 1, "ptr_sids[%02d]", i
);
2730 if (!prs_uint32(tmp
, ps
, depth
, &info
->ptr_sids
[i
]))
2734 if (UNMARSHALLING(ps
)) {
2735 if (info
->num_sids
) {
2736 info
->sids
= TALLOC_ARRAY(ps
->mem_ctx
, DOM_SID2
, info
->num_sids
);
2738 if (info
->sids
== NULL
) {
2739 DEBUG(0, ("error allocating %d sids\n",
2748 for (i
= 0; i
< info
->num_sids
; i
++)
2750 if (info
->ptr_sids
[i
] != 0)
2752 slprintf(tmp
, sizeof(tmp
) - 1, "sids[%02d]",
2754 if (!smb_io_dom_sid2(tmp
, &info
->sids
[i
],
2764 /*******************************************************************
2765 reads or writes a structure.
2766 ********************************************************************/
2767 static BOOL
net_io_sam_policy_info(const char *desc
, SAM_DELTA_POLICY
*info
,
2768 prs_struct
*ps
, int depth
)
2771 prs_debug(ps
, depth
, desc
, "net_io_sam_policy_info");
2777 if (!prs_uint32("max_log_size", ps
, depth
, &info
->max_log_size
))
2779 if (!prs_uint64("audit_retention_period", ps
, depth
,
2780 &info
->audit_retention_period
))
2782 if (!prs_uint32("auditing_mode", ps
, depth
, &info
->auditing_mode
))
2784 if (!prs_uint32("num_events", ps
, depth
, &info
->num_events
))
2786 if (!prs_uint32("ptr_events", ps
, depth
, &info
->ptr_events
))
2789 if (!smb_io_unihdr("hdr_dom_name", &info
->hdr_dom_name
, ps
, depth
))
2792 if (!prs_uint32("sid_ptr", ps
, depth
, &info
->sid_ptr
))
2795 if (!prs_uint32("paged_pool_limit", ps
, depth
, &info
->paged_pool_limit
))
2797 if (!prs_uint32("non_paged_pool_limit", ps
, depth
,
2798 &info
->non_paged_pool_limit
))
2800 if (!prs_uint32("min_workset_size", ps
, depth
, &info
->min_workset_size
))
2802 if (!prs_uint32("max_workset_size", ps
, depth
, &info
->max_workset_size
))
2804 if (!prs_uint32("page_file_limit", ps
, depth
, &info
->page_file_limit
))
2806 if (!prs_uint64("time_limit", ps
, depth
, &info
->time_limit
))
2808 if (!smb_io_time("modify_time", &info
->modify_time
, ps
, depth
))
2810 if (!smb_io_time("create_time", &info
->create_time
, ps
, depth
))
2812 if (!smb_io_bufhdr2("hdr_sec_desc", &info
->hdr_sec_desc
, ps
, depth
))
2815 for (i
=0; i
<4; i
++) {
2817 if (!smb_io_unihdr("dummy", &dummy
, ps
, depth
))
2821 for (i
=0; i
<4; i
++) {
2823 if (!prs_uint32("reserved", ps
, depth
, &reserved
))
2827 if (!prs_uint32("num_event_audit_options", ps
, depth
,
2828 &info
->num_event_audit_options
))
2831 for (i
=0; i
<info
->num_event_audit_options
; i
++)
2832 if (!prs_uint32("event_audit_option", ps
, depth
,
2833 &info
->event_audit_option
))
2836 if (!smb_io_unistr2("domain_name", &info
->domain_name
, True
, ps
, depth
))
2839 if(!smb_io_dom_sid2("domain_sid", &info
->domain_sid
, ps
, depth
))
2842 if (!smb_io_rpc_blob("buf_sec_desc", &info
->buf_sec_desc
, ps
, depth
))
2851 /* This function is pretty broken - see bug #334 */
2853 /*******************************************************************
2854 reads or writes a structure.
2855 ********************************************************************/
2856 static BOOL
net_io_sam_trustdoms_info(const char *desc
, SAM_DELTA_TRUSTDOMS
*info
,
2857 prs_struct
*ps
, int depth
)
2861 prs_debug(ps
, depth
, desc
, "net_io_sam_trustdoms_info");
2867 if(!prs_uint32("buf_size", ps
, depth
, &info
->buf_size
))
2870 if(!sec_io_desc("sec_desc", &info
->sec_desc
, ps
, depth
))
2873 if(!smb_io_dom_sid2("sid", &info
->sid
, ps
, depth
))
2876 if(!smb_io_unihdr("hdr_domain", &info
->hdr_domain
, ps
, depth
))
2879 if(!prs_uint32("unknown0", ps
, depth
, &info
->unknown0
))
2881 if(!prs_uint32("unknown1", ps
, depth
, &info
->unknown1
))
2883 if(!prs_uint32("unknown2", ps
, depth
, &info
->unknown2
))
2886 if(!prs_uint32("buf_size2", ps
, depth
, &info
->buf_size2
))
2888 if(!prs_uint32("ptr", ps
, depth
, &info
->ptr
))
2891 for (i
=0; i
<12; i
++)
2892 if(!prs_uint32("unknown3", ps
, depth
, &info
->unknown3
))
2895 if (!smb_io_unistr2("domain", &info
->domain
, True
, ps
, depth
))
2905 /* This function doesn't work - see bug #334 */
2907 /*******************************************************************
2908 reads or writes a structure.
2909 ********************************************************************/
2910 static BOOL
net_io_sam_secret_info(const char *desc
, SAM_DELTA_SECRET
*info
,
2911 prs_struct
*ps
, int depth
)
2915 prs_debug(ps
, depth
, desc
, "net_io_sam_secret_info");
2921 if(!prs_uint32("buf_size", ps
, depth
, &info
->buf_size
))
2924 if(!sec_io_desc("sec_desc", &info
->sec_desc
, ps
, depth
))
2927 if (!smb_io_unistr2("secret", &info
->secret
, True
, ps
, depth
))
2933 if(!prs_uint32("count1", ps
, depth
, &info
->count1
))
2935 if(!prs_uint32("count2", ps
, depth
, &info
->count2
))
2937 if(!prs_uint32("ptr", ps
, depth
, &info
->ptr
))
2941 if(!smb_io_time("time1", &info
->time1
, ps
, depth
)) /* logon time */
2943 if(!prs_uint32("count3", ps
, depth
, &info
->count3
))
2945 if(!prs_uint32("count4", ps
, depth
, &info
->count4
))
2947 if(!prs_uint32("ptr2", ps
, depth
, &info
->ptr2
))
2949 if(!smb_io_time("time2", &info
->time2
, ps
, depth
)) /* logon time */
2951 if(!prs_uint32("unknow1", ps
, depth
, &info
->unknow1
))
2955 if(!prs_uint32("buf_size2", ps
, depth
, &info
->buf_size2
))
2957 if(!prs_uint32("ptr3", ps
, depth
, &info
->ptr3
))
2960 if(!prs_uint32("unknow2", ps
, depth
, &info
->unknow2
))
2963 if(!prs_uint32("chal_len", ps
, depth
, &info
->chal_len
))
2965 if(!prs_uint32("reserved1", ps
, depth
, &info
->reserved1
))
2967 if(!prs_uint32("chal_len2", ps
, depth
, &info
->chal_len2
))
2970 if(!prs_uint8s (False
, "chal", ps
, depth
, info
->chal
, info
->chal_len2
))
2973 if(!prs_uint32("key_len", ps
, depth
, &info
->key_len
))
2975 if(!prs_uint32("reserved2", ps
, depth
, &info
->reserved2
))
2977 if(!prs_uint32("key_len2", ps
, depth
, &info
->key_len2
))
2980 if(!prs_uint8s (False
, "key", ps
, depth
, info
->key
, info
->key_len2
))
2984 if(!prs_uint32("buf_size3", ps
, depth
, &info
->buf_size3
))
2987 if(!sec_io_desc("sec_desc2", &info
->sec_desc2
, ps
, depth
))
2996 /*******************************************************************
2997 reads or writes a structure.
2998 ********************************************************************/
2999 static BOOL
net_io_sam_privs_info(const char *desc
, SAM_DELTA_PRIVS
*info
,
3000 prs_struct
*ps
, int depth
)
3004 prs_debug(ps
, depth
, desc
, "net_io_sam_privs_info");
3010 if(!smb_io_dom_sid2("sid", &info
->sid
, ps
, depth
))
3013 if(!prs_uint32("priv_count", ps
, depth
, &info
->priv_count
))
3015 if(!prs_uint32("priv_control", ps
, depth
, &info
->priv_control
))
3018 if(!prs_uint32("priv_attr_ptr", ps
, depth
, &info
->priv_attr_ptr
))
3020 if(!prs_uint32("priv_name_ptr", ps
, depth
, &info
->priv_name_ptr
))
3023 if (!prs_uint32("paged_pool_limit", ps
, depth
, &info
->paged_pool_limit
))
3025 if (!prs_uint32("non_paged_pool_limit", ps
, depth
,
3026 &info
->non_paged_pool_limit
))
3028 if (!prs_uint32("min_workset_size", ps
, depth
, &info
->min_workset_size
))
3030 if (!prs_uint32("max_workset_size", ps
, depth
, &info
->max_workset_size
))
3032 if (!prs_uint32("page_file_limit", ps
, depth
, &info
->page_file_limit
))
3034 if (!prs_uint64("time_limit", ps
, depth
, &info
->time_limit
))
3036 if (!prs_uint32("system_flags", ps
, depth
, &info
->system_flags
))
3038 if (!smb_io_bufhdr2("hdr_sec_desc", &info
->hdr_sec_desc
, ps
, depth
))
3041 for (i
=0; i
<4; i
++) {
3043 if (!smb_io_unihdr("dummy", &dummy
, ps
, depth
))
3047 for (i
=0; i
<4; i
++) {
3049 if (!prs_uint32("reserved", ps
, depth
, &reserved
))
3053 if(!prs_uint32("attribute_count", ps
, depth
, &info
->attribute_count
))
3056 if (UNMARSHALLING(ps
)) {
3057 if (info
->attribute_count
) {
3058 info
->attributes
= TALLOC_ARRAY(ps
->mem_ctx
, uint32
, info
->attribute_count
);
3059 if (!info
->attributes
) {
3063 info
->attributes
= NULL
;
3067 for (i
=0; i
<info
->attribute_count
; i
++)
3068 if(!prs_uint32("attributes", ps
, depth
, &info
->attributes
[i
]))
3071 if(!prs_uint32("privlist_count", ps
, depth
, &info
->privlist_count
))
3074 if (UNMARSHALLING(ps
)) {
3075 if (info
->privlist_count
) {
3076 info
->hdr_privslist
= TALLOC_ARRAY(ps
->mem_ctx
, UNIHDR
, info
->privlist_count
);
3077 info
->uni_privslist
= TALLOC_ARRAY(ps
->mem_ctx
, UNISTR2
, info
->privlist_count
);
3078 if (!info
->hdr_privslist
) {
3081 if (!info
->uni_privslist
) {
3085 info
->hdr_privslist
= NULL
;
3086 info
->uni_privslist
= NULL
;
3090 for (i
=0; i
<info
->privlist_count
; i
++)
3091 if(!smb_io_unihdr("hdr_privslist", &info
->hdr_privslist
[i
], ps
, depth
))
3094 for (i
=0; i
<info
->privlist_count
; i
++)
3095 if (!smb_io_unistr2("uni_privslist", &info
->uni_privslist
[i
], True
, ps
, depth
))
3098 if (!smb_io_rpc_blob("buf_sec_desc", &info
->buf_sec_desc
, ps
, depth
))
3104 /*******************************************************************
3105 reads or writes a structure.
3106 ********************************************************************/
3107 static BOOL
net_io_sam_delta_ctr(const char *desc
,
3108 SAM_DELTA_CTR
* delta
, uint16 type
,
3109 prs_struct
*ps
, int depth
)
3111 prs_debug(ps
, depth
, desc
, "net_io_sam_delta_ctr");
3115 /* Seen in sam deltas */
3116 case SAM_DELTA_MODIFIED_COUNT
:
3117 if (!net_io_sam_delta_mod_count("", &delta
->mod_count
, ps
, depth
))
3121 case SAM_DELTA_DOMAIN_INFO
:
3122 if (!net_io_sam_domain_info("", &delta
->domain_info
, ps
, depth
))
3126 case SAM_DELTA_GROUP_INFO
:
3127 if (!net_io_sam_group_info("", &delta
->group_info
, ps
, depth
))
3131 case SAM_DELTA_ACCOUNT_INFO
:
3132 if (!net_io_sam_account_info("", &delta
->account_info
, ps
, depth
))
3136 case SAM_DELTA_GROUP_MEM
:
3137 if (!net_io_sam_group_mem_info("", &delta
->grp_mem_info
, ps
, depth
))
3141 case SAM_DELTA_ALIAS_INFO
:
3142 if (!net_io_sam_alias_info("", &delta
->alias_info
, ps
, depth
))
3146 case SAM_DELTA_POLICY_INFO
:
3147 if (!net_io_sam_policy_info("", &delta
->policy_info
, ps
, depth
))
3151 case SAM_DELTA_ALIAS_MEM
:
3152 if (!net_io_sam_alias_mem_info("", &delta
->als_mem_info
, ps
, depth
))
3156 case SAM_DELTA_PRIVS_INFO
:
3157 if (!net_io_sam_privs_info("", &delta
->privs_info
, ps
, depth
))
3161 /* These guys are implemented but broken */
3163 case SAM_DELTA_TRUST_DOMS
:
3164 case SAM_DELTA_SECRET_INFO
:
3167 /* These guys are not implemented yet */
3169 case SAM_DELTA_RENAME_GROUP
:
3170 case SAM_DELTA_RENAME_USER
:
3171 case SAM_DELTA_RENAME_ALIAS
:
3172 case SAM_DELTA_DELETE_GROUP
:
3173 case SAM_DELTA_DELETE_USER
:
3175 DEBUG(0, ("Replication error: Unknown delta type 0x%x\n", type
));
3182 /*******************************************************************
3183 reads or writes a structure.
3184 ********************************************************************/
3185 BOOL
net_io_r_sam_sync(const char *desc
,
3186 NET_R_SAM_SYNC
* r_s
, prs_struct
*ps
, int depth
)
3190 prs_debug(ps
, depth
, desc
, "net_io_r_sam_sync");
3193 if (!smb_io_cred("srv_creds", &r_s
->srv_creds
, ps
, depth
))
3195 if (!prs_uint32("sync_context", ps
, depth
, &r_s
->sync_context
))
3198 if (!prs_uint32("ptr_deltas", ps
, depth
, &r_s
->ptr_deltas
))
3200 if (r_s
->ptr_deltas
!= 0)
3202 if (!prs_uint32("num_deltas ", ps
, depth
, &r_s
->num_deltas
))
3204 if (!prs_uint32("ptr_deltas2", ps
, depth
, &r_s
->ptr_deltas2
))
3206 if (r_s
->ptr_deltas2
!= 0)
3208 if (!prs_uint32("num_deltas2", ps
, depth
,
3212 if (r_s
->num_deltas2
!= r_s
->num_deltas
)
3218 if (UNMARSHALLING(ps
)) {
3219 if (r_s
->num_deltas2
) {
3220 r_s
->hdr_deltas
= TALLOC_ARRAY(ps
->mem_ctx
, SAM_DELTA_HDR
, r_s
->num_deltas2
);
3221 if (r_s
->hdr_deltas
== NULL
) {
3222 DEBUG(0, ("error tallocating memory "
3223 "for %d delta headers\n",
3228 r_s
->hdr_deltas
= NULL
;
3232 for (i
= 0; i
< r_s
->num_deltas2
; i
++)
3234 if (!net_io_sam_delta_hdr("",
3235 &r_s
->hdr_deltas
[i
],
3240 if (UNMARSHALLING(ps
)) {
3241 if (r_s
->num_deltas2
) {
3242 r_s
->deltas
= TALLOC_ARRAY(ps
->mem_ctx
, SAM_DELTA_CTR
, r_s
->num_deltas2
);
3243 if (r_s
->deltas
== NULL
) {
3244 DEBUG(0, ("error tallocating memory "
3254 for (i
= 0; i
< r_s
->num_deltas2
; i
++)
3256 if (!net_io_sam_delta_ctr(
3257 "", &r_s
->deltas
[i
],
3258 r_s
->hdr_deltas
[i
].type3
,
3260 DEBUG(0, ("hmm, failed on i=%d\n", i
));
3268 if (!prs_ntstatus("status", ps
, depth
, &(r_s
->status
)))
3274 /*******************************************************************
3275 makes a NET_Q_SAM_DELTAS structure.
3276 ********************************************************************/
3277 BOOL
init_net_q_sam_deltas(NET_Q_SAM_DELTAS
*q_s
, const char *srv_name
,
3278 const char *cli_name
, DOM_CRED
*cli_creds
,
3279 uint32 database_id
, uint64 dom_mod_count
)
3281 DEBUG(5, ("init_net_q_sam_deltas\n"));
3283 init_unistr2(&q_s
->uni_srv_name
, srv_name
, UNI_STR_TERMINATE
);
3284 init_unistr2(&q_s
->uni_cli_name
, cli_name
, UNI_STR_TERMINATE
);
3286 memcpy(&q_s
->cli_creds
, cli_creds
, sizeof(q_s
->cli_creds
));
3287 memset(&q_s
->ret_creds
, 0, sizeof(q_s
->ret_creds
));
3289 q_s
->database_id
= database_id
;
3290 q_s
->dom_mod_count
= dom_mod_count
;
3291 q_s
->max_size
= 0xffff;
3296 /*******************************************************************
3297 reads or writes a structure.
3298 ********************************************************************/
3299 BOOL
net_io_q_sam_deltas(const char *desc
, NET_Q_SAM_DELTAS
*q_s
, prs_struct
*ps
,
3302 prs_debug(ps
, depth
, desc
, "net_io_q_sam_deltas");
3305 if (!smb_io_unistr2("", &q_s
->uni_srv_name
, True
, ps
, depth
))
3307 if (!smb_io_unistr2("", &q_s
->uni_cli_name
, True
, ps
, depth
))
3310 if (!smb_io_cred("", &q_s
->cli_creds
, ps
, depth
))
3312 if (!smb_io_cred("", &q_s
->ret_creds
, ps
, depth
))
3315 if (!prs_uint32("database_id ", ps
, depth
, &q_s
->database_id
))
3317 if (!prs_uint64("dom_mod_count", ps
, depth
, &q_s
->dom_mod_count
))
3319 if (!prs_uint32("max_size", ps
, depth
, &q_s
->max_size
))
3325 /*******************************************************************
3326 reads or writes a structure.
3327 ********************************************************************/
3328 BOOL
net_io_r_sam_deltas(const char *desc
,
3329 NET_R_SAM_DELTAS
*r_s
, prs_struct
*ps
, int depth
)
3333 prs_debug(ps
, depth
, desc
, "net_io_r_sam_deltas");
3336 if (!smb_io_cred("srv_creds", &r_s
->srv_creds
, ps
, depth
))
3338 if (!prs_uint64("dom_mod_count", ps
, depth
, &r_s
->dom_mod_count
))
3341 if (!prs_uint32("ptr_deltas", ps
, depth
, &r_s
->ptr_deltas
))
3343 if (!prs_uint32("num_deltas", ps
, depth
, &r_s
->num_deltas
))
3345 if (!prs_uint32("ptr_deltas2", ps
, depth
, &r_s
->num_deltas2
))
3348 if (r_s
->num_deltas2
!= 0)
3350 if (!prs_uint32("num_deltas2 ", ps
, depth
, &r_s
->num_deltas2
))
3353 if (r_s
->ptr_deltas
!= 0)
3355 if (UNMARSHALLING(ps
)) {
3356 if (r_s
->num_deltas
) {
3357 r_s
->hdr_deltas
= TALLOC_ARRAY(ps
->mem_ctx
, SAM_DELTA_HDR
, r_s
->num_deltas
);
3358 if (r_s
->hdr_deltas
== NULL
) {
3359 DEBUG(0, ("error tallocating memory "
3360 "for %d delta headers\n",
3365 r_s
->hdr_deltas
= NULL
;
3369 for (i
= 0; i
< r_s
->num_deltas
; i
++)
3371 net_io_sam_delta_hdr("", &r_s
->hdr_deltas
[i
],
3375 if (UNMARSHALLING(ps
)) {
3376 if (r_s
->num_deltas
) {
3377 r_s
->deltas
= TALLOC_ARRAY(ps
->mem_ctx
, SAM_DELTA_CTR
, r_s
->num_deltas
);
3378 if (r_s
->deltas
== NULL
) {
3379 DEBUG(0, ("error tallocating memory "
3389 for (i
= 0; i
< r_s
->num_deltas
; i
++)
3391 if (!net_io_sam_delta_ctr(
3394 r_s
->hdr_deltas
[i
].type2
,
3403 if (!prs_ntstatus("status", ps
, depth
, &r_s
->status
))
3409 /*******************************************************************
3410 Inits a NET_Q_DSR_GETDCNAME structure.
3411 ********************************************************************/
3413 void init_net_q_dsr_getdcname(NET_Q_DSR_GETDCNAME
*r_t
, const char *server_unc
,
3414 const char *domain_name
,
3415 struct GUID
*domain_guid
,
3416 struct GUID
*site_guid
,
3419 DEBUG(5, ("init_net_q_dsr_getdcname\n"));
3421 r_t
->ptr_server_unc
= (server_unc
!= NULL
);
3422 init_unistr2(&r_t
->uni_server_unc
, server_unc
, UNI_STR_TERMINATE
);
3424 r_t
->ptr_domain_name
= (domain_name
!= NULL
);
3425 init_unistr2(&r_t
->uni_domain_name
, domain_name
, UNI_STR_TERMINATE
);
3427 r_t
->ptr_domain_guid
= (domain_guid
!= NULL
);
3428 r_t
->domain_guid
= domain_guid
;
3430 r_t
->ptr_site_guid
= (site_guid
!= NULL
);
3431 r_t
->site_guid
= site_guid
;
3436 /*******************************************************************
3437 Inits a NET_Q_DSR_GETDCNAMEEX structure.
3438 ********************************************************************/
3440 void init_net_q_dsr_getdcnameex(NET_Q_DSR_GETDCNAMEEX
*r_t
, const char *server_unc
,
3441 const char *domain_name
,
3442 struct GUID
*domain_guid
,
3443 const char *site_name
,
3446 DEBUG(5, ("init_net_q_dsr_getdcnameex\n"));
3448 r_t
->ptr_server_unc
= (server_unc
!= NULL
);
3449 init_unistr2(&r_t
->uni_server_unc
, server_unc
, UNI_STR_TERMINATE
);
3451 r_t
->ptr_domain_name
= (domain_name
!= NULL
);
3452 init_unistr2(&r_t
->uni_domain_name
, domain_name
, UNI_STR_TERMINATE
);
3454 r_t
->ptr_domain_guid
= (domain_guid
!= NULL
);
3455 r_t
->domain_guid
= domain_guid
;
3457 r_t
->ptr_site_name
= (site_name
!= NULL
);
3458 init_unistr2(&r_t
->uni_site_name
, site_name
, UNI_STR_TERMINATE
);
3463 /*******************************************************************
3464 Inits a NET_Q_DSR_GETDCNAMEEX2 structure.
3465 ********************************************************************/
3467 void init_net_q_dsr_getdcnameex2(NET_Q_DSR_GETDCNAMEEX2
*r_t
, const char *server_unc
,
3468 const char *domain_name
,
3469 const char *client_account
,
3471 struct GUID
*domain_guid
,
3472 const char *site_name
,
3475 DEBUG(5, ("init_net_q_dsr_getdcnameex2\n"));
3477 r_t
->ptr_server_unc
= (server_unc
!= NULL
);
3478 init_unistr2(&r_t
->uni_server_unc
, server_unc
, UNI_STR_TERMINATE
);
3480 r_t
->ptr_client_account
= (client_account
!= NULL
);
3481 init_unistr2(&r_t
->uni_client_account
, client_account
, UNI_STR_TERMINATE
);
3485 r_t
->ptr_domain_name
= (domain_name
!= NULL
);
3486 init_unistr2(&r_t
->uni_domain_name
, domain_name
, UNI_STR_TERMINATE
);
3488 r_t
->ptr_domain_guid
= (domain_guid
!= NULL
);
3489 r_t
->domain_guid
= domain_guid
;
3491 r_t
->ptr_site_name
= (site_name
!= NULL
);
3492 init_unistr2(&r_t
->uni_site_name
, site_name
, UNI_STR_TERMINATE
);
3497 /*******************************************************************
3498 Reads or writes an NET_Q_DSR_GETDCNAME structure.
3499 ********************************************************************/
3501 BOOL
net_io_q_dsr_getdcname(const char *desc
, NET_Q_DSR_GETDCNAME
*r_t
,
3502 prs_struct
*ps
, int depth
)
3507 prs_debug(ps
, depth
, desc
, "net_io_q_dsr_getdcname");
3510 if (!prs_uint32("ptr_server_unc", ps
, depth
, &r_t
->ptr_server_unc
))
3513 if (!smb_io_unistr2("server_unc", &r_t
->uni_server_unc
,
3514 r_t
->ptr_server_unc
, ps
, depth
))
3520 if (!prs_uint32("ptr_domain_name", ps
, depth
, &r_t
->ptr_domain_name
))
3523 if (!smb_io_unistr2("domain_name", &r_t
->uni_domain_name
,
3524 r_t
->ptr_domain_name
, ps
, depth
))
3530 if (!prs_uint32("ptr_domain_guid", ps
, depth
, &r_t
->ptr_domain_guid
))
3533 if (UNMARSHALLING(ps
) && (r_t
->ptr_domain_guid
)) {
3534 r_t
->domain_guid
= PRS_ALLOC_MEM(ps
, struct GUID
, 1);
3535 if (r_t
->domain_guid
== NULL
)
3539 if ((r_t
->ptr_domain_guid
) &&
3540 (!smb_io_uuid("domain_guid", r_t
->domain_guid
, ps
, depth
)))
3546 if (!prs_uint32("ptr_site_guid", ps
, depth
, &r_t
->ptr_site_guid
))
3549 if (UNMARSHALLING(ps
) && (r_t
->ptr_site_guid
)) {
3550 r_t
->site_guid
= PRS_ALLOC_MEM(ps
, struct GUID
, 1);
3551 if (r_t
->site_guid
== NULL
)
3555 if ((r_t
->ptr_site_guid
) &&
3556 (!smb_io_uuid("site_guid", r_t
->site_guid
, ps
, depth
)))
3562 if (!prs_uint32("flags", ps
, depth
, &r_t
->flags
))
3568 /*******************************************************************
3569 Reads or writes an NET_Q_DSR_GETDCNAMEEX structure.
3570 ********************************************************************/
3572 BOOL
net_io_q_dsr_getdcnameex(const char *desc
, NET_Q_DSR_GETDCNAMEEX
*r_t
,
3573 prs_struct
*ps
, int depth
)
3578 prs_debug(ps
, depth
, desc
, "net_io_q_dsr_getdcnameex");
3581 if (!prs_uint32("ptr_server_unc", ps
, depth
, &r_t
->ptr_server_unc
))
3584 if (!smb_io_unistr2("server_unc", &r_t
->uni_server_unc
,
3585 r_t
->ptr_server_unc
, ps
, depth
))
3591 if (!prs_uint32("ptr_domain_name", ps
, depth
, &r_t
->ptr_domain_name
))
3594 if (!smb_io_unistr2("domain_name", &r_t
->uni_domain_name
,
3595 r_t
->ptr_domain_name
, ps
, depth
))
3601 if (!prs_uint32("ptr_domain_guid", ps
, depth
, &r_t
->ptr_domain_guid
))
3604 if (UNMARSHALLING(ps
) && (r_t
->ptr_domain_guid
)) {
3605 r_t
->domain_guid
= PRS_ALLOC_MEM(ps
, struct GUID
, 1);
3606 if (r_t
->domain_guid
== NULL
)
3610 if ((r_t
->ptr_domain_guid
) &&
3611 (!smb_io_uuid("domain_guid", r_t
->domain_guid
, ps
, depth
)))
3617 if (!prs_uint32("ptr_site_name", ps
, depth
, &r_t
->ptr_site_name
))
3620 if (!smb_io_unistr2("site_name", &r_t
->uni_site_name
,
3621 r_t
->ptr_site_name
, ps
, depth
))
3627 if (!prs_uint32("flags", ps
, depth
, &r_t
->flags
))
3633 /*******************************************************************
3634 Reads or writes an NET_Q_DSR_GETDCNAMEEX2 structure.
3635 ********************************************************************/
3637 BOOL
net_io_q_dsr_getdcnameex2(const char *desc
, NET_Q_DSR_GETDCNAMEEX2
*r_t
,
3638 prs_struct
*ps
, int depth
)
3643 prs_debug(ps
, depth
, desc
, "net_io_q_dsr_getdcnameex2");
3646 if (!prs_uint32("ptr_server_unc", ps
, depth
, &r_t
->ptr_server_unc
))
3649 if (!smb_io_unistr2("server_unc", &r_t
->uni_server_unc
,
3650 r_t
->ptr_server_unc
, ps
, depth
))
3656 if (!prs_uint32("ptr_client_account", ps
, depth
, &r_t
->ptr_client_account
))
3659 if (!smb_io_unistr2("client_account", &r_t
->uni_client_account
,
3660 r_t
->ptr_client_account
, ps
, depth
))
3666 if (!prs_uint32("mask", ps
, depth
, &r_t
->mask
))
3672 if (!prs_uint32("ptr_domain_name", ps
, depth
, &r_t
->ptr_domain_name
))
3675 if (!smb_io_unistr2("domain_name", &r_t
->uni_domain_name
,
3676 r_t
->ptr_domain_name
, ps
, depth
))
3682 if (!prs_uint32("ptr_domain_guid", ps
, depth
, &r_t
->ptr_domain_guid
))
3685 if (UNMARSHALLING(ps
) && (r_t
->ptr_domain_guid
)) {
3686 r_t
->domain_guid
= PRS_ALLOC_MEM(ps
, struct GUID
, 1);
3687 if (r_t
->domain_guid
== NULL
)
3691 if ((r_t
->ptr_domain_guid
) &&
3692 (!smb_io_uuid("domain_guid", r_t
->domain_guid
, ps
, depth
)))
3698 if (!prs_uint32("ptr_site_name", ps
, depth
, &r_t
->ptr_site_name
))
3701 if (!smb_io_unistr2("site_name", &r_t
->uni_site_name
,
3702 r_t
->ptr_site_name
, ps
, depth
))
3708 if (!prs_uint32("flags", ps
, depth
, &r_t
->flags
))
3716 /*******************************************************************
3717 Inits a NET_R_DSR_GETDCNAME structure.
3718 ********************************************************************/
3719 void init_net_r_dsr_getdcname(NET_R_DSR_GETDCNAME
*r_t
, const char *dc_unc
,
3720 const char *dc_address
, int32 dc_address_type
,
3721 struct GUID domain_guid
, const char *domain_name
,
3722 const char *forest_name
, uint32 dc_flags
,
3723 const char *dc_site_name
,
3724 const char *client_site_name
)
3726 DEBUG(5, ("init_net_q_dsr_getdcname\n"));
3728 r_t
->ptr_dc_unc
= (dc_unc
!= NULL
);
3729 init_unistr2(&r_t
->uni_dc_unc
, dc_unc
, UNI_STR_TERMINATE
);
3731 r_t
->ptr_dc_address
= (dc_address
!= NULL
);
3732 init_unistr2(&r_t
->uni_dc_address
, dc_address
, UNI_STR_TERMINATE
);
3734 r_t
->dc_address_type
= dc_address_type
;
3735 r_t
->domain_guid
= domain_guid
;
3737 r_t
->ptr_domain_name
= (domain_name
!= NULL
);
3738 init_unistr2(&r_t
->uni_domain_name
, domain_name
, UNI_STR_TERMINATE
);
3740 r_t
->ptr_forest_name
= (forest_name
!= NULL
);
3741 init_unistr2(&r_t
->uni_forest_name
, forest_name
, UNI_STR_TERMINATE
);
3743 r_t
->dc_flags
= dc_flags
;
3745 r_t
->ptr_dc_site_name
= (dc_site_name
!= NULL
);
3746 init_unistr2(&r_t
->uni_dc_site_name
, dc_site_name
, UNI_STR_TERMINATE
);
3748 r_t
->ptr_client_site_name
= (client_site_name
!= NULL
);
3749 init_unistr2(&r_t
->uni_client_site_name
, client_site_name
,
3753 /*******************************************************************
3754 Reads or writes an NET_R_DSR_GETDCNAME structure.
3755 ********************************************************************/
3757 BOOL
net_io_r_dsr_getdcname(const char *desc
, NET_R_DSR_GETDCNAME
*r_t
,
3758 prs_struct
*ps
, int depth
)
3760 uint32 info_ptr
= 1;
3765 prs_debug(ps
, depth
, desc
, "net_io_r_dsr_getdcname");
3768 /* The reply contains *just* an info struct, this is the ptr to it */
3769 if (!prs_uint32("info_ptr", ps
, depth
, &info_ptr
))
3775 if (!prs_uint32("ptr_dc_unc", ps
, depth
, &r_t
->ptr_dc_unc
))
3778 if (!prs_uint32("ptr_dc_address", ps
, depth
, &r_t
->ptr_dc_address
))
3781 if (!prs_int32("dc_address_type", ps
, depth
, &r_t
->dc_address_type
))
3784 if (!smb_io_uuid("domain_guid", &r_t
->domain_guid
, ps
, depth
))
3787 if (!prs_uint32("ptr_domain_name", ps
, depth
, &r_t
->ptr_domain_name
))
3790 if (!prs_uint32("ptr_forest_name", ps
, depth
, &r_t
->ptr_forest_name
))
3793 if (!prs_uint32("dc_flags", ps
, depth
, &r_t
->dc_flags
))
3796 if (!prs_uint32("ptr_dc_site_name", ps
, depth
, &r_t
->ptr_dc_site_name
))
3799 if (!prs_uint32("ptr_client_site_name", ps
, depth
,
3800 &r_t
->ptr_client_site_name
))
3806 if (!smb_io_unistr2("dc_unc", &r_t
->uni_dc_unc
,
3807 r_t
->ptr_dc_unc
, ps
, depth
))
3813 if (!smb_io_unistr2("dc_address", &r_t
->uni_dc_address
,
3814 r_t
->ptr_dc_address
, ps
, depth
))
3820 if (!smb_io_unistr2("domain_name", &r_t
->uni_domain_name
,
3821 r_t
->ptr_domain_name
, ps
, depth
))
3827 if (!smb_io_unistr2("forest_name", &r_t
->uni_forest_name
,
3828 r_t
->ptr_forest_name
, ps
, depth
))
3834 if (!smb_io_unistr2("dc_site_name", &r_t
->uni_dc_site_name
,
3835 r_t
->ptr_dc_site_name
, ps
, depth
))
3841 if (!smb_io_unistr2("client_site_name", &r_t
->uni_client_site_name
,
3842 r_t
->ptr_client_site_name
, ps
, depth
))
3848 if (!prs_werror("result", ps
, depth
, &r_t
->result
))
3854 /*******************************************************************
3855 Inits a NET_Q_DSR_GETSITENAME structure.
3856 ********************************************************************/
3858 void init_net_q_dsr_getsitename(NET_Q_DSR_GETSITENAME
*r_t
, const char *computer_name
)
3860 DEBUG(5, ("init_net_q_dsr_getsitename\n"));
3862 r_t
->ptr_computer_name
= (computer_name
!= NULL
);
3863 init_unistr2(&r_t
->uni_computer_name
, computer_name
, UNI_STR_TERMINATE
);
3866 /*******************************************************************
3867 Reads or writes an NET_Q_DSR_GETSITENAME structure.
3868 ********************************************************************/
3870 BOOL
net_io_q_dsr_getsitename(const char *desc
, NET_Q_DSR_GETSITENAME
*r_t
,
3871 prs_struct
*ps
, int depth
)
3876 prs_debug(ps
, depth
, desc
, "net_io_q_dsr_getsitename");
3879 if (!prs_uint32("ptr_computer_name", ps
, depth
, &r_t
->ptr_computer_name
))
3882 if (!smb_io_unistr2("computer_name", &r_t
->uni_computer_name
,
3883 r_t
->ptr_computer_name
, ps
, depth
))
3892 /*******************************************************************
3893 Reads or writes an NET_R_DSR_GETSITENAME structure.
3894 ********************************************************************/
3896 BOOL
net_io_r_dsr_getsitename(const char *desc
, NET_R_DSR_GETSITENAME
*r_t
,
3897 prs_struct
*ps
, int depth
)
3902 prs_debug(ps
, depth
, desc
, "net_io_r_dsr_getsitename");
3905 if (!prs_uint32("ptr_site_name", ps
, depth
, &r_t
->ptr_site_name
))
3911 if (!smb_io_unistr2("site_name", &r_t
->uni_site_name
,
3912 r_t
->ptr_site_name
, ps
, depth
))
3918 if (!prs_werror("result", ps
, depth
, &r_t
->result
))