summaryrefslogtreecommitdiffstats
path: root/source/rpc_parse/parse_srv.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/rpc_parse/parse_srv.c')
-rw-r--r--source/rpc_parse/parse_srv.c187
1 files changed, 151 insertions, 36 deletions
diff --git a/source/rpc_parse/parse_srv.c b/source/rpc_parse/parse_srv.c
index fa52b244956..3a1c13c7ea0 100644
--- a/source/rpc_parse/parse_srv.c
+++ b/source/rpc_parse/parse_srv.c
@@ -119,33 +119,34 @@ void init_srv_share_info2_str(SH_INFO_2_STR *sh2,
Reads or writes a structure.
********************************************************************/
-static BOOL srv_io_share_info2_str(char *desc, SH_INFO_2_STR *sh2, prs_struct *ps, int depth)
+static BOOL srv_io_share_info2_str(char *desc, SH_INFO_2 *sh, SH_INFO_2_STR *sh2, prs_struct *ps, int depth)
{
if (sh2 == NULL)
return False;
+ if (UNMARSHALLING(ps))
+ ZERO_STRUCTP(sh2);
+
prs_debug(ps, depth, desc, "srv_io_share_info2_str");
depth++;
if(!prs_align(ps))
return False;
- if(!smb_io_unistr2("", &sh2->uni_netname, True, ps, depth))
- return False;
+ if (sh->ptr_netname)
+ if(!smb_io_unistr2("", &sh2->uni_netname, True, ps, depth))
+ return False;
- if(!prs_align(ps))
- return False;
- if(!smb_io_unistr2("", &sh2->uni_remark, True, ps, depth))
- return False;
+ if (sh->ptr_remark)
+ if(!smb_io_unistr2("", &sh2->uni_remark, True, ps, depth))
+ return False;
- if(!prs_align(ps))
- return False;
- if(!smb_io_unistr2("", &sh2->uni_path, True, ps, depth))
- return False;
+ if (sh->ptr_netname)
+ if(!smb_io_unistr2("", &sh2->uni_path, True, ps, depth))
+ return False;
- if(!prs_align(ps))
- return False;
- if(!smb_io_unistr2("", &sh2->uni_passwd, True, ps, depth))
- return False;
+ if (sh->ptr_passwd)
+ if(!smb_io_unistr2("", &sh2->uni_passwd, True, ps, depth))
+ return False;
return True;
}
@@ -208,6 +209,87 @@ static BOOL srv_io_share_info2(char *desc, SH_INFO_2 *sh2, prs_struct *ps, int d
}
/*******************************************************************
+ Inits a SH_INFO_2 structure
+*******************************************************************/
+
+void init_srv_share_info501(SH_INFO_501 *sh501, char *net_name, uint32 type, char *remark, uint32 csc_policy)
+{
+ DEBUG(5,("init_srv_share_info501: %s %8x %s %08x\n", net_name, type,
+ remark, csc_policy));
+
+ ZERO_STRUCTP(sh501);
+
+ sh501->ptr_netname = (net_name != NULL) ? 1 : 0;
+ sh501->type = type;
+ sh501->ptr_remark = (remark != NULL) ? 1 : 0;
+ sh501->csc_policy = csc_policy;
+}
+
+/*******************************************************************
+ Reads of writes a structure.
+*******************************************************************/
+
+static BOOL srv_io_share_info501(char *desc, SH_INFO_501 *sh501, prs_struct *ps, int depth)
+{
+ if (sh501 == NULL)
+ return False;
+
+ prs_debug(ps, depth, desc, "srv_io_share_info501");
+ depth++;
+
+ if (!prs_align(ps))
+ return False;
+
+ if (!prs_uint32("ptr_netname", ps, depth, &sh501->ptr_netname))
+ return False;
+ if (!prs_uint32("type ", ps, depth, &sh501->type))
+ return False;
+ if (!prs_uint32("ptr_remark ", ps, depth, &sh501->ptr_remark))
+ return False;
+ if (!prs_uint32("csc_policy ", ps, depth, &sh501->csc_policy))
+ return False;
+
+ return True;
+}
+
+/********************************************************************
+ Inits a SH_INFO_501_STR structure
+********************************************************************/
+
+void init_srv_share_info501_str(SH_INFO_501_STR *sh501, char *net_name, char *remark)
+{
+ DEBUG(5,("init_srv_share_info501_str\n"));
+
+ init_unistr2(&sh501->uni_netname, net_name, strlen(net_name)+1);
+ init_unistr2(&sh501->uni_remark, remark, strlen(remark)+1);
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_share_info501_str(char *desc, SH_INFO_501_STR *sh501, prs_struct *ps, int depth)
+{
+ if (sh501 == NULL)
+ return False;
+
+ prs_debug(ps, depth, desc, "srv_io_share_info501_str");
+ depth++;
+
+ if(!prs_align(ps))
+ return False;
+ if(!smb_io_unistr2("", &sh501->uni_netname, True, ps, depth))
+ return False;
+
+ if(!prs_align(ps))
+ return False;
+ if(!smb_io_unistr2("", &sh501->uni_remark, True, ps, depth))
+ return False;
+
+ return True;
+}
+
+/*******************************************************************
Inits a SH_INFO_502 structure
********************************************************************/
@@ -372,7 +454,7 @@ static BOOL srv_io_share_info1005(char* desc, SRV_SHARE_INFO_1005* sh1005,
if(!prs_align(ps))
return False;
- if(!prs_uint32("dfs_root_flag", ps, depth, &sh1005->dfs_root_flag))
+ if(!prs_uint32("misc_flags", ps, depth, &sh1005->misc_flags))
return False;
return True;
@@ -495,7 +577,33 @@ static BOOL srv_io_srv_share_ctr(char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct
}
for (i = 0; i < num_entries; i++) {
- if(!srv_io_share_info2_str("", &info2[i].info_2_str, ps, depth))
+ if(!srv_io_share_info2_str("", &info2[i].info_2, &info2[i].info_2_str, ps, depth))
+ return False;
+ }
+
+ break;
+ }
+
+ case 501:
+ {
+ SRV_SHARE_INFO_501 *info501 = ctr->share.info501;
+ int num_entries = ctr->num_entries;
+ int i;
+
+ if (UNMARSHALLING(ps)) {
+ if (!(info501 = (SRV_SHARE_INFO_501 *) prs_alloc_mem(ps, num_entries *
+ sizeof (SRV_SHARE_INFO_501))))
+ return False;
+ ctr->share.info501 = info501;
+ }
+
+ for (i = 0; i < num_entries; i++) {
+ if (!srv_io_share_info501("", &info501[i].info_501, ps, depth))
+ return False;
+ }
+
+ for (i = 0; i < num_entries; i++) {
+ if (!srv_io_share_info501_str("", &info501[i].info_501_str, ps, depth))
return False;
}
@@ -614,7 +722,7 @@ BOOL srv_io_r_net_share_enum(char *desc, SRV_R_NET_SHARE_ENUM *r_n, prs_struct *
return False;
if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
return False;
- if(!prs_ntstatus("status ", ps, depth, &r_n->status))
+ if(!prs_werror("status ", ps, depth, &r_n->status))
return False;
return True;
@@ -687,10 +795,17 @@ static BOOL srv_io_srv_share_info(char *desc, prs_struct *ps, int depth, SRV_SHA
if(!srv_io_share_info2("", &r_n->share.info2.info_2, ps, depth))
return False;
- if(!srv_io_share_info2_str("", &r_n->share.info2.info_2_str, ps, depth))
+ if(!srv_io_share_info2_str("", &r_n->share.info2.info_2, &r_n->share.info2.info_2_str, ps, depth))
return False;
break;
+ case 501:
+ if (!srv_io_share_info501("", &r_n->share.info501.info_501, ps, depth))
+ return False;
+ if (!srv_io_share_info501_str("", &r_n->share.info501.info_501_str, ps, depth))
+ return False;
+ break;
+
case 502:
if(!srv_io_share_info502("", &r_n->share.info502.info_502, ps, depth))
return False;
@@ -739,7 +854,7 @@ BOOL srv_io_r_net_share_get_info(char *desc, SRV_R_NET_SHARE_GET_INFO *r_n, prs_
if(!prs_align(ps))
return False;
- if(!prs_ntstatus("status", ps, depth, &r_n->status))
+ if(!prs_werror("status", ps, depth, &r_n->status))
return False;
return True;
@@ -800,7 +915,7 @@ BOOL srv_io_r_net_share_set_info(char *desc, SRV_R_NET_SHARE_SET_INFO *q_n, prs_
if(!prs_uint32("switch_value ", ps, depth, &q_n->switch_value))
return False;
- if(!prs_ntstatus("status ", ps, depth, &q_n->status))
+ if(!prs_werror("status ", ps, depth, &q_n->status))
return False;
return True;
@@ -858,7 +973,7 @@ BOOL srv_io_r_net_share_add(char *desc, SRV_R_NET_SHARE_ADD *q_n, prs_struct *ps
if(!prs_uint32("switch_value ", ps, depth, &q_n->switch_value))
return False;
- if(!prs_ntstatus("status ", ps, depth, &q_n->status))
+ if(!prs_werror("status ", ps, depth, &q_n->status))
return False;
return True;
@@ -905,7 +1020,7 @@ BOOL srv_io_r_net_share_del(char *desc, SRV_R_NET_SHARE_DEL *q_n, prs_struct *ps
if(!prs_align(ps))
return False;
- if(!prs_ntstatus("status ", ps, depth, &q_n->status))
+ if(!prs_werror("status ", ps, depth, &q_n->status))
return False;
return True;
@@ -1308,7 +1423,7 @@ BOOL srv_io_r_net_sess_enum(char *desc, SRV_R_NET_SESS_ENUM *r_n, prs_struct *ps
return False;
if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
return False;
- if(!prs_ntstatus("status ", ps, depth, &r_n->status))
+ if(!prs_werror("status ", ps, depth, &r_n->status))
return False;
return True;
@@ -1673,7 +1788,7 @@ BOOL srv_io_r_net_conn_enum(char *desc, SRV_R_NET_CONN_ENUM *r_n, prs_struct *p
return False;
if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
return False;
- if(!prs_ntstatus("status ", ps, depth, &r_n->status))
+ if(!prs_werror("status ", ps, depth, &r_n->status))
return False;
return True;
@@ -1951,7 +2066,7 @@ BOOL srv_io_r_net_file_enum(char *desc, SRV_R_NET_FILE_ENUM *r_n, prs_struct *ps
return False;
if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
return False;
- if(!prs_ntstatus("status ", ps, depth, &r_n->status))
+ if(!prs_werror("status ", ps, depth, &r_n->status))
return False;
return True;
@@ -2237,13 +2352,13 @@ BOOL srv_io_q_net_srv_get_info(char *desc, SRV_Q_NET_SRV_GET_INFO *q_n, prs_stru
********************************************************************/
void init_srv_r_net_srv_get_info(SRV_R_NET_SRV_GET_INFO *srv,
- uint32 switch_value, SRV_INFO_CTR *ctr, NTSTATUS status)
+ uint32 switch_value, SRV_INFO_CTR *ctr, WERROR status)
{
DEBUG(5,("init_srv_r_net_srv_get_info\n"));
srv->ctr = ctr;
- if (NT_STATUS_IS_OK(status)) {
+ if (W_ERROR_IS_OK(status)) {
srv->ctr->switch_value = switch_value;
srv->ctr->ptr_srv_ctr = 1;
} else {
@@ -2259,7 +2374,7 @@ void init_srv_r_net_srv_get_info(SRV_R_NET_SRV_GET_INFO *srv,
********************************************************************/
void init_srv_r_net_srv_set_info(SRV_R_NET_SRV_SET_INFO *srv,
- uint32 switch_value, NTSTATUS status)
+ uint32 switch_value, WERROR status)
{
DEBUG(5,("init_srv_r_net_srv_set_info\n"));
@@ -2323,7 +2438,7 @@ BOOL srv_io_r_net_srv_get_info(char *desc, SRV_R_NET_SRV_GET_INFO *r_n, prs_stru
if(!srv_io_info_ctr("ctr", r_n->ctr, ps, depth))
return False;
- if(!prs_ntstatus("status ", ps, depth, &r_n->status))
+ if(!prs_werror("status ", ps, depth, &r_n->status))
return False;
return True;
@@ -2345,7 +2460,7 @@ BOOL srv_io_r_net_srv_set_info(char *desc, SRV_R_NET_SRV_SET_INFO *r_n,
if(!prs_uint32("switch_value ", ps, depth, &r_n->switch_value))
return False;
- if(!prs_ntstatus("status ", ps, depth, &r_n->status))
+ if(!prs_werror("status ", ps, depth, &r_n->status))
return False;
return True;
@@ -2464,7 +2579,7 @@ BOOL srv_io_r_net_remote_tod(char *desc, SRV_R_NET_REMOTE_TOD *r_n, prs_struct *
if(!srv_io_time_of_day_info("tod", r_n->tod, ps, depth))
return False;
- if(!prs_ntstatus("status ", ps, depth, &r_n->status))
+ if(!prs_werror("status ", ps, depth, &r_n->status))
return False;
return True;
@@ -2563,7 +2678,7 @@ BOOL srv_io_r_net_disk_enum(char *desc, SRV_R_NET_DISK_ENUM *r_n, prs_struct *ps
if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
return False;
- if(!prs_ntstatus("status", ps, depth, &r_n->status))
+ if(!prs_werror("status", ps, depth, &r_n->status))
return False;
return True;
@@ -2623,7 +2738,7 @@ BOOL srv_io_r_net_name_validate(char *desc, SRV_R_NET_NAME_VALIDATE *r_n, prs_st
if(!prs_align(ps))
return False;
- if(!prs_ntstatus("status", ps, depth, &r_n->status))
+ if(!prs_werror("status", ps, depth, &r_n->status))
return False;
return True;
@@ -2710,7 +2825,7 @@ BOOL srv_io_r_net_file_query_secdesc(char *desc, SRV_R_NET_FILE_QUERY_SECDESC *r
if(!prs_align(ps))
return False;
- if(!prs_ntstatus("status", ps, depth, &r_n->status))
+ if(!prs_werror("status", ps, depth, &r_n->status))
return False;
return True;
@@ -2788,7 +2903,7 @@ BOOL srv_io_r_net_file_set_secdesc(char *desc, SRV_R_NET_FILE_SET_SECDESC *r_n,
if(!prs_align(ps))
return False;
- if(!prs_ntstatus("status", ps, depth, &r_n->status))
+ if(!prs_werror("status", ps, depth, &r_n->status))
return False;
return True;