summaryrefslogtreecommitdiff
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.c72
1 files changed, 56 insertions, 16 deletions
diff --git a/source/rpc_parse/parse_srv.c b/source/rpc_parse/parse_srv.c
index 3b22054f129..c3a3ba26b8a 100644
--- a/source/rpc_parse/parse_srv.c
+++ b/source/rpc_parse/parse_srv.c
@@ -361,7 +361,7 @@ static BOOL srv_io_share_info502_data(char *desc,
reads or writes a structure.
********************************************************************/
static BOOL srv_io_share_info502(char *desc,
- SHARE_INFO_502 *sh502,
+ SHARE_INFO_502 *sh502, uint32 count,
prs_struct *ps, int depth)
{
if (sh502 == NULL) return False;
@@ -382,6 +382,53 @@ static BOOL srv_io_share_info502(char *desc,
/*******************************************************************
+ reads or writes a structure.
+ ********************************************************************/
+static BOOL srv_io_share_info_ctr(const char *desc,
+ SHARE_INFO_CTR *info,
+ uint32 info_level, uint32 count,
+ prs_struct *ps, int depth)
+{
+ if (info == NULL) return False;
+
+ if (count != 1)
+ {
+ DEBUG(1, ("srv_io_share_info_ctr: count %d != 1\n",
+ count));
+ return False;
+ }
+
+ prs_debug(ps, depth, desc, "srv_io_share_info_ctr");
+ depth++;
+
+ prs_align(ps);
+
+ switch (info_level)
+ {
+ case 502:
+ if (ps->io)
+ {
+ info->info502 = g_new(SHARE_INFO_502, count);
+ if (info->info502 == NULL)
+ {
+ DEBUG(1, ("srv_io_share_info_ctr at level 502: malloc failed\n"));
+ return False;
+ }
+ }
+ return srv_io_share_info502("info",
+ info->info502, count,
+ ps, depth);
+ break;
+ default:
+ DEBUG(1, ("srv_io_share_info_ctr: Unsupported info level %d\n",
+ info_level));
+ return False;
+ break;
+ }
+}
+
+
+/*******************************************************************
reads or writes a structure.
********************************************************************/
static void srv_free_srv_share_info_2(SRV_SHARE_INFO_2 *ctr)
@@ -522,6 +569,7 @@ static BOOL srv_io_srv_share_ctr(char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struc
return True;
}
+
/*******************************************************************
reads or writes a structure.
********************************************************************/
@@ -692,18 +740,12 @@ BOOL srv_io_r_net_share_get_info(char *desc, SRV_R_NET_SHARE_GET_INFO *r_n,
if (r_n->info_ptr)
{
- switch (r_n->info_level)
+ if (!srv_io_share_info_ctr("info_ctr",
+ &(r_n->info),
+ r_n->info_level, 1,
+ ps, depth))
{
- case 502:
- srv_io_share_info502("info",
- &(r_n->info.info502),
- ps, depth);
- break;
- default:
- DEBUG(1, ("srv_io_r_net_share_get_info: Unsupported info level %d\n",
- r_n->info_level));
- return False;
- break;
+ return False;
}
}
@@ -1519,11 +1561,9 @@ static BOOL srv_io_srv_tprt_info_0(char *desc, SRV_TPRT_INFO_0 *tp0, prs_struct
if (ps->io)
{
/* reading */
- tp0->info_0 = (TPRT_INFO_0*)malloc(num_entries *
- sizeof(tp0->info_0[0]));
+ tp0->info_0 = g_new(TPRT_INFO_0, num_entries);
- tp0->info_0_str = (TPRT_INFO_0_STR*)malloc(num_entries *
- sizeof(tp0->info_0_str[0]));
+ tp0->info_0_str = g_new(TPRT_INFO_0_STR, num_entries);
if (tp0->info_0 == NULL || tp0->info_0_str == NULL)
{