Remove more redundant lsa parsing functions.
[bbaumbach/samba-autobuild/.git] / source / rpc_parse / parse_srv.c
index 531267c308c822ab82815be311a409cb66e6275d..954aa806000ff92c4fc4837822c774ae4779716b 100644 (file)
@@ -7,10 +7,11 @@
  *  Copyright (C) Jeremy Allison                   1999,
  *  Copyright (C) Nigel Williams                   2001,
  *  Copyright (C) Jim McDonough (jmcd@us.ibm.com)   2002.
+ *  Copyright (C) Gerald (Jerry) Carter             2006.
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
+ *  the Free Software Foundation; either version 3 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -19,8 +20,7 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "includes.h"
  Inits a SH_INFO_0_STR structure
 ********************************************************************/
 
-void init_srv_share_info0_str(SH_INFO_0_STR *sh0, char *net_name)
+void init_srv_share_info0_str(SH_INFO_0_STR *sh0, const char *net_name)
 {
        DEBUG(5,("init_srv_share_info0_str\n"));
 
-       if(net_name)
-               init_unistr2(&sh0->uni_netname, net_name, strlen(net_name)+1);
+       init_unistr2(&sh0->uni_netname, net_name, UNI_STR_TERMINATE);
 }
 
 /*******************************************************************
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_share_info0_str(char *desc, SH_INFO_0_STR *sh0, prs_struct *ps, int depth)
+static bool srv_io_share_info0_str(const char *desc, SH_INFO_0_STR *sh0, prs_struct *ps, int depth)
 {
        if (sh0 == NULL)
                return False;
@@ -65,7 +64,7 @@ static BOOL srv_io_share_info0_str(char *desc, SH_INFO_0_STR *sh0, prs_struct *p
  makes a SH_INFO_0 structure
 ********************************************************************/
 
-void init_srv_share_info0(SH_INFO_0 *sh0, char *net_name)
+void init_srv_share_info0(SH_INFO_0 *sh0, const char *net_name)
 {
        DEBUG(5,("init_srv_share_info0: %s\n", net_name));
 
@@ -76,7 +75,7 @@ void init_srv_share_info0(SH_INFO_0 *sh0, char *net_name)
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_share_info0(char *desc, SH_INFO_0 *sh0, prs_struct *ps, int depth)
+static bool srv_io_share_info0(const char *desc, SH_INFO_0 *sh0, prs_struct *ps, int depth)
 {
        if (sh0 == NULL)
                return False;
@@ -97,21 +96,19 @@ static BOOL srv_io_share_info0(char *desc, SH_INFO_0 *sh0, prs_struct *ps, int d
  Inits a SH_INFO_1_STR structure
 ********************************************************************/
 
-void init_srv_share_info1_str(SH_INFO_1_STR *sh1, char *net_name, char *remark)
+void init_srv_share_info1_str(SH_INFO_1_STR *sh1, const char *net_name, const char *remark)
 {
        DEBUG(5,("init_srv_share_info1_str\n"));
 
-       if(net_name)
-               init_unistr2(&sh1->uni_netname, net_name, strlen(net_name)+1);
-       if(remark)
-               init_unistr2(&sh1->uni_remark, remark, strlen(remark)+1);
+       init_unistr2(&sh1->uni_netname, net_name, UNI_STR_TERMINATE);
+       init_unistr2(&sh1->uni_remark, remark, UNI_STR_TERMINATE);
 }
 
 /*******************************************************************
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_share_info1_str(char *desc, SH_INFO_1_STR *sh1, prs_struct *ps, int depth)
+static bool srv_io_share_info1_str(const char *desc, SH_INFO_1_STR *sh1, prs_struct *ps, int depth)
 {
        if (sh1 == NULL)
                return False;
@@ -140,7 +137,7 @@ static BOOL srv_io_share_info1_str(char *desc, SH_INFO_1_STR *sh1, prs_struct *p
  makes a SH_INFO_1 structure
 ********************************************************************/
 
-void init_srv_share_info1(SH_INFO_1 *sh1, char *net_name, uint32 type, char *remark)
+void init_srv_share_info1(SH_INFO_1 *sh1, const char *net_name, uint32 type, const char *remark)
 {
        DEBUG(5,("init_srv_share_info1: %s %8x %s\n", net_name, type, remark));
        
@@ -153,7 +150,7 @@ void init_srv_share_info1(SH_INFO_1 *sh1, char *net_name, uint32 type, char *rem
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_share_info1(char *desc, SH_INFO_1 *sh1, prs_struct *ps, int depth)
+static bool srv_io_share_info1(const char *desc, SH_INFO_1 *sh1, prs_struct *ps, int depth)
 {
        if (sh1 == NULL)
                return False;
@@ -179,26 +176,22 @@ static BOOL srv_io_share_info1(char *desc, SH_INFO_1 *sh1, prs_struct *ps, int d
 ********************************************************************/
 
 void init_srv_share_info2_str(SH_INFO_2_STR *sh2,
-                               char *net_name, char *remark,
-                               char *path, char *passwd)
+                               const char *net_name, const char *remark,
+                               const char *path, const char *passwd)
 {
        DEBUG(5,("init_srv_share_info2_str\n"));
 
-       if (net_name)
-               init_unistr2(&sh2->uni_netname, net_name, strlen(net_name)+1);
-       if (remark)
-               init_unistr2(&sh2->uni_remark, remark, strlen(remark)+1);
-       if (path)
-               init_unistr2(&sh2->uni_path, path, strlen(path)+1);
-       if (passwd)
-               init_unistr2(&sh2->uni_passwd, passwd, strlen(passwd)+1);
+       init_unistr2(&sh2->uni_netname, net_name, UNI_STR_TERMINATE);
+       init_unistr2(&sh2->uni_remark, remark, UNI_STR_TERMINATE);
+       init_unistr2(&sh2->uni_path, path, UNI_STR_TERMINATE);
+       init_unistr2(&sh2->uni_passwd, passwd, UNI_STR_TERMINATE);
 }
 
 /*******************************************************************
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_share_info2_str(char *desc, SH_INFO_2 *sh, SH_INFO_2_STR *sh2, prs_struct *ps, int depth)
+static bool srv_io_share_info2_str(const char *desc, SH_INFO_2 *sh, SH_INFO_2_STR *sh2, prs_struct *ps, int depth)
 {
        if (sh2 == NULL)
                return False;
@@ -236,9 +229,9 @@ static BOOL srv_io_share_info2_str(char *desc, SH_INFO_2 *sh, SH_INFO_2_STR *sh2
 ********************************************************************/
 
 void init_srv_share_info2(SH_INFO_2 *sh2,
-                               char *net_name, uint32 type, char *remark,
+                               const char *net_name, uint32 type, const char *remark,
                                uint32 perms, uint32 max_uses, uint32 num_uses,
-                               char *path, char *passwd)
+                               const char *path, const char *passwd)
 {
        DEBUG(5,("init_srv_share_info2: %s %8x %s\n", net_name, type, remark));
 
@@ -256,7 +249,7 @@ void init_srv_share_info2(SH_INFO_2 *sh2,
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_share_info2(char *desc, SH_INFO_2 *sh2, prs_struct *ps, int depth)
+static bool srv_io_share_info2(const char *desc, SH_INFO_2 *sh2, prs_struct *ps, int depth)
 {
        if (sh2 == NULL)
                return False;
@@ -292,21 +285,19 @@ static BOOL srv_io_share_info2(char *desc, SH_INFO_2 *sh2, prs_struct *ps, int d
 ********************************************************************/
 
 void init_srv_share_info501_str(SH_INFO_501_STR *sh501,
-                               char *net_name, char *remark)
+                               const char *net_name, const char *remark)
 {
        DEBUG(5,("init_srv_share_info501_str\n"));
 
-       if(net_name)
-               init_unistr2(&sh501->uni_netname, net_name, strlen(net_name)+1);
-       if(remark)
-               init_unistr2(&sh501->uni_remark, remark, strlen(remark)+1);
+       init_unistr2(&sh501->uni_netname, net_name, UNI_STR_TERMINATE);
+       init_unistr2(&sh501->uni_remark, remark, UNI_STR_TERMINATE);
 }
 
 /*******************************************************************
  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)
+void init_srv_share_info501(SH_INFO_501 *sh501, const char *net_name, uint32 type, const char *remark, uint32 csc_policy)
 {
        DEBUG(5,("init_srv_share_info501: %s %8x %s %08x\n", net_name, type,
                remark, csc_policy));
@@ -323,7 +314,7 @@ void init_srv_share_info501(SH_INFO_501 *sh501, char *net_name, uint32 type, cha
  Reads of writes a structure.
 *******************************************************************/
 
-static BOOL srv_io_share_info501(char *desc, SH_INFO_501 *sh501, prs_struct *ps, int depth)
+static bool srv_io_share_info501(const char *desc, SH_INFO_501 *sh501, prs_struct *ps, int depth)
 {
        if (sh501 == NULL)
                return False;
@@ -350,7 +341,7 @@ static BOOL srv_io_share_info501(char *desc, SH_INFO_501 *sh501, prs_struct *ps,
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_share_info501_str(char *desc, SH_INFO_501_STR *sh501, prs_struct *ps, int depth)
+static bool srv_io_share_info501_str(const char *desc, SH_INFO_501_STR *sh501, prs_struct *ps, int depth)
 {
        if (sh501 == NULL)
                return False;
@@ -376,9 +367,9 @@ static BOOL srv_io_share_info501_str(char *desc, SH_INFO_501_STR *sh501, prs_str
 ********************************************************************/
 
 void init_srv_share_info502(SH_INFO_502 *sh502,
-                               const char *net_name, uint32 type, char *remark,
+                               const char *net_name, uint32 type, const char *remark,
                                uint32 perms, uint32 max_uses, uint32 num_uses,
-                               char *path, char *passwd, SEC_DESC *psd, size_t sd_size)
+                               const char *path, const char *passwd, SEC_DESC *psd, size_t sd_size)
 {
        DEBUG(5,("init_srv_share_info502: %s %8x %s\n", net_name, type, remark));
 
@@ -401,7 +392,7 @@ void init_srv_share_info502(SH_INFO_502 *sh502,
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_share_info502(char *desc, SH_INFO_502 *sh502, prs_struct *ps, int depth)
+static bool srv_io_share_info502(const char *desc, SH_INFO_502 *sh502, prs_struct *ps, int depth)
 {
        if (sh502 == NULL)
                return False;
@@ -441,29 +432,25 @@ static BOOL srv_io_share_info502(char *desc, SH_INFO_502 *sh502, prs_struct *ps,
 ********************************************************************/
 
 void init_srv_share_info502_str(SH_INFO_502_STR *sh502str,
-                               char *net_name, char *remark,
-                               char *path, char *passwd, SEC_DESC *psd, size_t sd_size)
+                               const char *net_name, const char *remark,
+                               const char *path, const char *passwd, SEC_DESC *psd, size_t sd_size)
 {
        DEBUG(5,("init_srv_share_info502_str\n"));
 
-       if(net_name)
-               init_unistr2(&sh502str->uni_netname, net_name, strlen(net_name)+1);
-       if(remark)
-               init_unistr2(&sh502str->uni_remark, remark, strlen(remark)+1);
-       if(path)
-               init_unistr2(&sh502str->uni_path, path, strlen(path)+1);
-       if(passwd)
-               init_unistr2(&sh502str->uni_passwd, passwd, strlen(passwd)+1);
-               sh502str->sd = psd;
+       init_unistr2(&sh502str->uni_netname, net_name, UNI_STR_TERMINATE);
+       init_unistr2(&sh502str->uni_remark, remark, UNI_STR_TERMINATE);
+       init_unistr2(&sh502str->uni_path, path, UNI_STR_TERMINATE);
+       init_unistr2(&sh502str->uni_passwd, passwd, UNI_STR_TERMINATE);
+       sh502str->sd = psd;
        sh502str->reserved = 0;
-               sh502str->sd_size = sd_size;
+       sh502str->sd_size = sd_size;
 }
 
 /*******************************************************************
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_share_info502_str(char *desc, SH_INFO_502_STR *sh502, prs_struct *ps, int depth)
+static bool srv_io_share_info502_str(const char *desc, SH_INFO_502_STR *sh502, prs_struct *ps, int depth)
 {
        if (sh502 == NULL)
                return False;
@@ -520,7 +507,8 @@ static BOOL srv_io_share_info502_str(char *desc, SH_INFO_502_STR *sh502, prs_str
 
                if(UNMARSHALLING(ps)) {
 
-                       sh502->ptrs->sd_size = sh502->sd_size = sec_desc_size(sh502->sd);
+                       sh502->ptrs->sd_size = sh502->sd_size =
+                               ndr_size_security_descriptor(sh502->sd, 0);
 
                        prs_set_offset(ps, old_offset + sh502->reserved);
                }
@@ -547,19 +535,18 @@ static BOOL srv_io_share_info502_str(char *desc, SH_INFO_502_STR *sh502, prs_str
  Inits a SH_INFO_1004_STR structure
 ********************************************************************/
 
-void init_srv_share_info1004_str(SH_INFO_1004_STR *sh1004, char *remark)
+void init_srv_share_info1004_str(SH_INFO_1004_STR *sh1004, const char *remark)
 {
        DEBUG(5,("init_srv_share_info1004_str\n"));
 
-       if(remark)
-               init_unistr2(&sh1004->uni_remark, remark, strlen(remark)+1);
+       init_unistr2(&sh1004->uni_remark, remark, UNI_STR_TERMINATE);
 }
 
 /*******************************************************************
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_share_info1004_str(char *desc, SH_INFO_1004_STR *sh1004, prs_struct *ps, int depth)
+static bool srv_io_share_info1004_str(const char *desc, SH_INFO_1004_STR *sh1004, prs_struct *ps, int depth)
 {
        if (sh1004 == NULL)
                return False;
@@ -580,7 +567,7 @@ static BOOL srv_io_share_info1004_str(char *desc, SH_INFO_1004_STR *sh1004, prs_
  makes a SH_INFO_1004 structure
 ********************************************************************/
 
-void init_srv_share_info1004(SH_INFO_1004 *sh1004, char *remark)
+void init_srv_share_info1004(SH_INFO_1004 *sh1004, const char *remark)
 {
        DEBUG(5,("init_srv_share_info1004: %s\n", remark));
 
@@ -591,7 +578,7 @@ void init_srv_share_info1004(SH_INFO_1004 *sh1004, char *remark)
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_share_info1004(char *desc, SH_INFO_1004 *sh1004, prs_struct *ps, int depth)
+static bool srv_io_share_info1004(const char *desc, SH_INFO_1004 *sh1004, prs_struct *ps, int depth)
 {
        if (sh1004 == NULL)
                return False;
@@ -612,7 +599,7 @@ static BOOL srv_io_share_info1004(char *desc, SH_INFO_1004 *sh1004, prs_struct *
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_share_info1005(char* desc, SRV_SHARE_INFO_1005* sh1005, prs_struct* ps, int depth)
+static bool srv_io_share_info1005(const char* desc, SRV_SHARE_INFO_1005* sh1005, prs_struct* ps, int depth)
 {
        if(sh1005 == NULL)
                return False;
@@ -623,7 +610,8 @@ static BOOL srv_io_share_info1005(char* desc, SRV_SHARE_INFO_1005* sh1005, prs_s
        if(!prs_align(ps))
                return False;
 
-       if(!prs_uint32("dfs_root_flag", ps, depth, &sh1005->dfs_root_flag))
+       if(!prs_uint32("share_info_flags", ps, depth, 
+                      &sh1005->share_info_flags))
                return False;
 
        return True;
@@ -633,7 +621,7 @@ static BOOL srv_io_share_info1005(char* desc, SRV_SHARE_INFO_1005* sh1005, prs_s
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_share_info1006(char* desc, SRV_SHARE_INFO_1006* sh1006, prs_struct* ps, int depth)
+static bool srv_io_share_info1006(const char* desc, SRV_SHARE_INFO_1006* sh1006, prs_struct* ps, int depth)
 {
        if(sh1006 == NULL)
                return False;
@@ -658,15 +646,14 @@ void init_srv_share_info1007_str(SH_INFO_1007_STR *sh1007, const char *alternate
 {
        DEBUG(5,("init_srv_share_info1007_str\n"));
 
-       if(alternate_directory_name)
-               init_unistr2(&sh1007->uni_AlternateDirectoryName, alternate_directory_name, strlen(alternate_directory_name)+1);
+       init_unistr2(&sh1007->uni_AlternateDirectoryName, alternate_directory_name, UNI_STR_TERMINATE);
 }
 
 /*******************************************************************
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_share_info1007_str(char *desc, SH_INFO_1007_STR *sh1007, prs_struct *ps, int depth)
+static bool srv_io_share_info1007_str(const char *desc, SH_INFO_1007_STR *sh1007, prs_struct *ps, int depth)
 {
        if (sh1007 == NULL)
                return False;
@@ -699,7 +686,7 @@ void init_srv_share_info1007(SH_INFO_1007 *sh1007, uint32 flags, const char *alt
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_share_info1007(char *desc, SH_INFO_1007 *sh1007, prs_struct *ps, int depth)
+static bool srv_io_share_info1007(const char *desc, SH_INFO_1007 *sh1007, prs_struct *ps, int depth)
 {
        if (sh1007 == NULL)
                return False;
@@ -722,7 +709,7 @@ static BOOL srv_io_share_info1007(char *desc, SH_INFO_1007 *sh1007, prs_struct *
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_share_info1501(char* desc, SRV_SHARE_INFO_1501* sh1501,
+static bool srv_io_share_info1501(const char* desc, SRV_SHARE_INFO_1501* sh1501,
                                  prs_struct* ps, int depth)
 {
        if(sh1501 == NULL)
@@ -744,7 +731,7 @@ static BOOL srv_io_share_info1501(char* desc, SRV_SHARE_INFO_1501* sh1501,
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_srv_share_ctr(char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct *ps, int depth)
+static bool srv_io_srv_share_ctr(const char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct *ps, int depth)
 {
        if (ctr == NULL)
                return False;
@@ -796,8 +783,8 @@ static BOOL srv_io_srv_share_ctr(char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct
                int num_entries = ctr->num_entries;
                int i;
 
-               if (UNMARSHALLING(ps)) {
-                       if (!(info0 = (SRV_SHARE_INFO_0 *)prs_alloc_mem(ps, num_entries * sizeof(SRV_SHARE_INFO_0))))
+               if (UNMARSHALLING(ps) && num_entries) {
+                       if (!(info0 = PRS_ALLOC_MEM(ps, SRV_SHARE_INFO_0, num_entries)))
                                return False;
                        ctr->share.info0 = info0;
                }
@@ -822,8 +809,8 @@ static BOOL srv_io_srv_share_ctr(char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct
                int num_entries = ctr->num_entries;
                int i;
 
-               if (UNMARSHALLING(ps)) {
-                       if (!(info1 = (SRV_SHARE_INFO_1 *)prs_alloc_mem(ps, num_entries * sizeof(SRV_SHARE_INFO_1))))
+               if (UNMARSHALLING(ps) && num_entries) {
+                       if (!(info1 = PRS_ALLOC_MEM(ps, SRV_SHARE_INFO_1, num_entries)))
                                return False;
                        ctr->share.info1 = info1;
                }
@@ -848,8 +835,8 @@ static BOOL srv_io_srv_share_ctr(char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct
                int num_entries = ctr->num_entries;
                int i;
 
-               if (UNMARSHALLING(ps)) {
-                       if (!(info2 = (SRV_SHARE_INFO_2 *)prs_alloc_mem(ps,num_entries * sizeof(SRV_SHARE_INFO_2))))
+               if (UNMARSHALLING(ps) && num_entries) {
+                       if (!(info2 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_2,num_entries)))
                                return False;
                        ctr->share.info2 = info2;
                }
@@ -873,9 +860,8 @@ static BOOL srv_io_srv_share_ctr(char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct
                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))))
+               if (UNMARSHALLING(ps) && num_entries) {
+                       if (!(info501 = PRS_ALLOC_MEM(ps, SRV_SHARE_INFO_501, num_entries)))
                                return False;
                        ctr->share.info501 = info501;
                }
@@ -899,8 +885,8 @@ static BOOL srv_io_srv_share_ctr(char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct
                int num_entries = ctr->num_entries;
                int i;
 
-               if (UNMARSHALLING(ps)) {
-                       if (!(info502 = (SRV_SHARE_INFO_502 *)prs_alloc_mem(ps,num_entries * sizeof(SRV_SHARE_INFO_502))))
+               if (UNMARSHALLING(ps) && num_entries) {
+                       if (!(info502 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_502,num_entries)))
                                return False;
                        ctr->share.info502 = info502;
                }
@@ -925,8 +911,8 @@ static BOOL srv_io_srv_share_ctr(char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct
                int num_entries = ctr->num_entries;
                int i;
 
-               if (UNMARSHALLING(ps)) {
-                       if (!(info1004 = (SRV_SHARE_INFO_1004 *)prs_alloc_mem(ps,num_entries * sizeof(SRV_SHARE_INFO_1004))))
+               if (UNMARSHALLING(ps) && num_entries) {
+                       if (!(info1004 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1004,num_entries)))
                                return False;
                        ctr->share.info1004 = info1004;
                }
@@ -951,8 +937,8 @@ static BOOL srv_io_srv_share_ctr(char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct
                int num_entries = ctr->num_entries;
                int i;
 
-               if (UNMARSHALLING(ps)) {
-                       if (!(info1005 = (SRV_SHARE_INFO_1005 *)prs_alloc_mem(ps,num_entries * sizeof(SRV_SHARE_INFO_1005))))
+               if (UNMARSHALLING(ps) && num_entries) {
+                       if (!(info1005 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1005,num_entries)))
                                return False;
                        ctr->share.info1005 = info1005;
                }
@@ -971,8 +957,8 @@ static BOOL srv_io_srv_share_ctr(char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct
                int num_entries = ctr->num_entries;
                int i;
 
-               if (UNMARSHALLING(ps)) {
-                       if (!(info1006 = (SRV_SHARE_INFO_1006 *)prs_alloc_mem(ps,num_entries * sizeof(SRV_SHARE_INFO_1006))))
+               if (UNMARSHALLING(ps) && num_entries) {
+                       if (!(info1006 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1006,num_entries)))
                                return False;
                        ctr->share.info1006 = info1006;
                }
@@ -991,8 +977,8 @@ static BOOL srv_io_srv_share_ctr(char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct
                int num_entries = ctr->num_entries;
                int i;
 
-               if (UNMARSHALLING(ps)) {
-                       if (!(info1007 = (SRV_SHARE_INFO_1007 *)prs_alloc_mem(ps,num_entries * sizeof(SRV_SHARE_INFO_1007))))
+               if (UNMARSHALLING(ps) && num_entries) {
+                       if (!(info1007 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1007,num_entries)))
                                return False;
                        ctr->share.info1007 = info1007;
                }
@@ -1017,8 +1003,8 @@ static BOOL srv_io_srv_share_ctr(char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct
                int num_entries = ctr->num_entries;
                int i;
 
-               if (UNMARSHALLING(ps)) {
-                       if (!(info1501 = (SRV_SHARE_INFO_1501 *)prs_alloc_mem(ps,num_entries * sizeof(SRV_SHARE_INFO_1501))))
+               if (UNMARSHALLING(ps) && num_entries) {
+                       if (!(info1501 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1501,num_entries)))
                                return False;
                        ctr->share.info1501 = info1501;
                }
@@ -1033,7 +1019,7 @@ static BOOL srv_io_srv_share_ctr(char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct
 
        default:
                DEBUG(5,("%s no share info at switch_value %d\n",
-                        tab_depth(depth), ctr->switch_value));
+                        tab_depth(5,depth), ctr->switch_value));
                break;
        }
 
@@ -1045,7 +1031,7 @@ static BOOL srv_io_srv_share_ctr(char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct
 ********************************************************************/
 
 void init_srv_q_net_share_enum(SRV_Q_NET_SHARE_ENUM *q_n, 
-                               char *srv_name, uint32 info_level,
+                               const char *srv_name, uint32 info_level,
                                uint32 preferred_len, ENUM_HND *hnd)
 {
 
@@ -1067,7 +1053,7 @@ void init_srv_q_net_share_enum(SRV_Q_NET_SHARE_ENUM *q_n,
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_q_net_share_enum(char *desc, SRV_Q_NET_SHARE_ENUM *q_n, prs_struct *ps, int depth)
+bool srv_io_q_net_share_enum(const char *desc, SRV_Q_NET_SHARE_ENUM *q_n, prs_struct *ps, int depth)
 {
        if (q_n == NULL)
                return False;
@@ -1102,7 +1088,7 @@ BOOL srv_io_q_net_share_enum(char *desc, SRV_Q_NET_SHARE_ENUM *q_n, prs_struct *
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_r_net_share_enum(char *desc, SRV_R_NET_SHARE_ENUM *r_n, prs_struct *ps, int depth)
+bool srv_io_r_net_share_enum(const char *desc, SRV_R_NET_SHARE_ENUM *r_n, prs_struct *ps, int depth)
 {
        if (r_n == NULL)
                return False;
@@ -1119,10 +1105,8 @@ BOOL srv_io_r_net_share_enum(char *desc, SRV_R_NET_SHARE_ENUM *r_n, prs_struct *
        if(!prs_uint32("total_entries", ps, depth, &r_n->total_entries))
                return False;
 
-       if(r_n->total_entries != 0) {
-               if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
-                       return False;
-       }
+       if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
+               return False;
 
        if(!prs_werror("status", ps, depth, &r_n->status))
                return False;
@@ -1134,7 +1118,7 @@ BOOL srv_io_r_net_share_enum(char *desc, SRV_R_NET_SHARE_ENUM *r_n, prs_struct *
  initialises a structure.
 ********************************************************************/
 
-BOOL init_srv_q_net_share_get_info(SRV_Q_NET_SHARE_GET_INFO *q_n, const char *srv_name, const char *share_name, uint32 info_level)
+bool init_srv_q_net_share_get_info(SRV_Q_NET_SHARE_GET_INFO *q_n, const char *srv_name, const char *share_name, uint32 info_level)
 {
 
        uint32 ptr_share_name;
@@ -1153,7 +1137,7 @@ BOOL init_srv_q_net_share_get_info(SRV_Q_NET_SHARE_GET_INFO *q_n, const char *sr
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_q_net_share_get_info(char *desc, SRV_Q_NET_SHARE_GET_INFO *q_n, prs_struct *ps, int depth)
+bool srv_io_q_net_share_get_info(const char *desc, SRV_Q_NET_SHARE_GET_INFO *q_n, prs_struct *ps, int depth)
 {
        if (q_n == NULL)
                return False;
@@ -1185,7 +1169,7 @@ BOOL srv_io_q_net_share_get_info(char *desc, SRV_Q_NET_SHARE_GET_INFO *q_n, prs_
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_srv_share_info(char *desc, prs_struct *ps, int depth, SRV_SHARE_INFO *r_n)
+static bool srv_io_srv_share_info(const char *desc, prs_struct *ps, int depth, SRV_SHARE_INFO *r_n)
 {
        if (r_n == NULL)
                return False;
@@ -1284,7 +1268,7 @@ static BOOL srv_io_srv_share_info(char *desc, prs_struct *ps, int depth, SRV_SHA
                                return False;
                default:
                        DEBUG(5,("%s no share info at switch_value %d\n",
-                                tab_depth(depth), r_n->switch_value));
+                                tab_depth(5,depth), r_n->switch_value));
                        break;
                }
        }
@@ -1296,7 +1280,7 @@ static BOOL srv_io_srv_share_info(char *desc, prs_struct *ps, int depth, SRV_SHA
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_r_net_share_get_info(char *desc, SRV_R_NET_SHARE_GET_INFO *r_n, prs_struct *ps, int depth)
+bool srv_io_r_net_share_get_info(const char *desc, SRV_R_NET_SHARE_GET_INFO *r_n, prs_struct *ps, int depth)
 {
        if (r_n == NULL)
                return False;
@@ -1323,7 +1307,7 @@ BOOL srv_io_r_net_share_get_info(char *desc, SRV_R_NET_SHARE_GET_INFO *r_n, prs_
  intialises a structure.
 ********************************************************************/
 
-BOOL init_srv_q_net_share_set_info(SRV_Q_NET_SHARE_SET_INFO *q_n, 
+bool init_srv_q_net_share_set_info(SRV_Q_NET_SHARE_SET_INFO *q_n, 
                                   const char *srv_name, 
                                   const char *share_name, 
                                   uint32 info_level, 
@@ -1351,7 +1335,7 @@ BOOL init_srv_q_net_share_set_info(SRV_Q_NET_SHARE_SET_INFO *q_n,
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_q_net_share_set_info(char *desc, SRV_Q_NET_SHARE_SET_INFO *q_n, prs_struct *ps, int depth)
+bool srv_io_q_net_share_set_info(const char *desc, SRV_Q_NET_SHARE_SET_INFO *q_n, prs_struct *ps, int depth)
 {
        if (q_n == NULL)
                return False;
@@ -1398,7 +1382,7 @@ BOOL srv_io_q_net_share_set_info(char *desc, SRV_Q_NET_SHARE_SET_INFO *q_n, prs_
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_r_net_share_set_info(char *desc, SRV_R_NET_SHARE_SET_INFO *r_n, prs_struct *ps, int depth)
+bool srv_io_r_net_share_set_info(const char *desc, SRV_R_NET_SHARE_SET_INFO *r_n, prs_struct *ps, int depth)
 {
        if (r_n == NULL)
                return False;
@@ -1429,7 +1413,7 @@ BOOL srv_io_r_net_share_set_info(char *desc, SRV_R_NET_SHARE_SET_INFO *r_n, prs_
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_q_net_share_add(char *desc, SRV_Q_NET_SHARE_ADD *q_n, prs_struct *ps, int depth)
+bool srv_io_q_net_share_add(const char *desc, SRV_Q_NET_SHARE_ADD *q_n, prs_struct *ps, int depth)
 {
        if (q_n == NULL)
                return False;
@@ -1469,22 +1453,41 @@ BOOL srv_io_q_net_share_add(char *desc, SRV_Q_NET_SHARE_ADD *q_n, prs_struct *ps
        return True;
 }
 
-void init_srv_q_net_share_add(SRV_Q_NET_SHARE_ADD *q, char *srvname,
-                             char *netname, uint32 type, char *remark, 
+void init_srv_q_net_share_add(SRV_Q_NET_SHARE_ADD *q, const char *srvname,
+                             const char *netname, uint32 type, const char *remark, 
                              uint32 perms, uint32 max_uses, uint32 num_uses,
-                             char *path, char *passwd)
-{
-       q->ptr_srv_name = 1;
-       init_unistr2(&q->uni_srv_name, srvname, strlen(srvname) +1);
-       q->info.switch_value = q->info_level = 2;
-
-       q->info.ptr_share_ctr = 1;
-       init_srv_share_info2(&q->info.share.info2.info_2, netname, type,
-                            remark, perms, max_uses, num_uses, path, passwd);
-       init_srv_share_info2_str(&q->info.share.info2.info_2_str, netname,
-                                remark, path, passwd);
-       q->ptr_err_index = 1;
-       q->err_index = 0;
+                             const char *path, const char *passwd, 
+                             int level, SEC_DESC *sd)
+{
+       switch(level) {
+       case 502: {
+               size_t sd_size = ndr_size_security_descriptor(sd, 0);
+               q->ptr_srv_name = 1;
+               init_unistr2(&q->uni_srv_name, srvname, UNI_STR_TERMINATE);
+               q->info.switch_value = q->info_level = level;
+               q->info.ptr_share_ctr = 1;
+               init_srv_share_info502(&q->info.share.info502.info_502, netname, type,
+                                    remark, perms, max_uses, num_uses, path, passwd, sd, sd_size);
+               init_srv_share_info502_str(&q->info.share.info502.info_502_str, netname,
+                                        remark, path, passwd, sd, sd_size);
+               q->ptr_err_index = 1;
+               q->err_index = 0;
+               }
+               break;
+       case 2:
+       default:
+               q->ptr_srv_name = 1;
+               init_unistr2(&q->uni_srv_name, srvname, UNI_STR_TERMINATE);
+               q->info.switch_value = q->info_level = level;
+               q->info.ptr_share_ctr = 1;
+               init_srv_share_info2(&q->info.share.info2.info_2, netname, type,
+                                    remark, perms, max_uses, num_uses, path, passwd);
+               init_srv_share_info2_str(&q->info.share.info2.info_2_str, netname,
+                                        remark, path, passwd);
+               q->ptr_err_index = 1;
+               q->err_index = 0;
+               break;
+       }
 }
 
 
@@ -1492,7 +1495,7 @@ void init_srv_q_net_share_add(SRV_Q_NET_SHARE_ADD *q, char *srvname,
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_r_net_share_add(char *desc, SRV_R_NET_SHARE_ADD *r_n, prs_struct *ps, int depth)
+bool srv_io_r_net_share_add(const char *desc, SRV_R_NET_SHARE_ADD *r_n, prs_struct *ps, int depth)
 {
        if (r_n == NULL)
                return False;
@@ -1526,15 +1529,15 @@ void init_srv_q_net_share_del(SRV_Q_NET_SHARE_DEL *del, const char *srvname,
                              const char *sharename)
 {
        del->ptr_srv_name = 1;
-       init_unistr2(&del->uni_srv_name, srvname, strlen(srvname) +1 );
-       init_unistr2(&del->uni_share_name, sharename, strlen(sharename) + 1);
+       init_unistr2(&del->uni_srv_name, srvname, UNI_STR_TERMINATE);
+       init_unistr2(&del->uni_share_name, sharename, UNI_STR_TERMINATE);
 }
 
 /*******************************************************************
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_q_net_share_del(char *desc, SRV_Q_NET_SHARE_DEL *q_n, prs_struct *ps, int depth)
+bool srv_io_q_net_share_del(const char *desc, SRV_Q_NET_SHARE_DEL *q_n, prs_struct *ps, int depth)
 {
        if (q_n == NULL)
                return False;
@@ -1565,7 +1568,7 @@ BOOL srv_io_q_net_share_del(char *desc, SRV_Q_NET_SHARE_DEL *q_n, prs_struct *ps
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_r_net_share_del(char *desc, SRV_R_NET_SHARE_DEL *q_n, prs_struct *ps, int depth)
+bool srv_io_r_net_share_del(const char *desc, SRV_R_NET_SHARE_DEL *q_n, prs_struct *ps, int depth)
 {
        if (q_n == NULL)
                return False;
@@ -1586,71 +1589,24 @@ BOOL srv_io_r_net_share_del(char *desc, SRV_R_NET_SHARE_DEL *q_n, prs_struct *ps
  Inits a SESS_INFO_0_STR structure
 ********************************************************************/
 
-void init_srv_sess_info0_str(SESS_INFO_0_STR *ss0, char *name)
-{
-       DEBUG(5,("init_srv_sess_info0_str\n"));
-
-       init_unistr2(&ss0->uni_name, name, strlen(name)+1);
-}
-
-/*******************************************************************
- Reads or writes a structure.
-********************************************************************/
-
-static BOOL srv_io_sess_info0_str(char *desc,  SESS_INFO_0_STR *ss0, prs_struct *ps, int depth)
-{
-       if (ss0 == NULL)
-               return False;
-
-       prs_debug(ps, depth, desc, "srv_io_sess_info0_str");
-       depth++;
-
-       if(!prs_align(ps))
-               return False;
-
-       if(!smb_io_unistr2("", &ss0->uni_name, True, ps, depth))
-               return False;
-
-       return True;
-}
-
-/*******************************************************************
- Inits a SESS_INFO_0 structure
-********************************************************************/
-
-void init_srv_sess_info0(SESS_INFO_0 *ss0, char *name)
-{
-       DEBUG(5,("init_srv_sess_info0: %s\n", name));
-
-       ss0->ptr_name = (name != NULL) ? 1 : 0;
-}
-
-/*******************************************************************
- Reads or writes a structure.
-********************************************************************/
-
-static BOOL srv_io_sess_info0(char *desc, SESS_INFO_0 *ss0, prs_struct *ps, int depth)
+void init_srv_sess_info0( SESS_INFO_0 *ss0, const char *name )
 {
-       if (ss0 == NULL)
-               return False;
+       ZERO_STRUCTP( ss0 );
 
-       prs_debug(ps, depth, desc, "srv_io_sess_info0");
-       depth++;
-
-       if(!prs_align(ps))
-               return False;
-
-       if(!prs_uint32("ptr_name", ps, depth, &ss0->ptr_name))
-               return False;
-
-       return True;
+       if ( name ) {
+               if ( (ss0->sharename = TALLOC_P( talloc_tos(), UNISTR2 )) == NULL ) {
+                       DEBUG(0,("init_srv_sess_info0: talloc failed!\n"));
+                       return;
+               }
+               init_unistr2( ss0->sharename, name, UNI_STR_TERMINATE );
+       }
 }
 
 /*******************************************************************
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_srv_sess_info_0(char *desc, SRV_SESS_INFO_0 *ss0, prs_struct *ps, int depth)
+static bool srv_io_srv_sess_info_0(const char *desc, SRV_SESS_INFO_0 *ss0, prs_struct *ps, int depth)
 {
        if (ss0 == NULL)
                return False;
@@ -1667,8 +1623,8 @@ static BOOL srv_io_srv_sess_info_0(char *desc, SRV_SESS_INFO_0 *ss0, prs_struct
                return False;
 
        if (ss0->ptr_sess_info != 0) {
-               int i;
-               int num_entries = ss0->num_entries_read;
+               uint32 i;
+               uint32 num_entries = ss0->num_entries_read;
 
                if (num_entries > MAX_SESS_ENTRIES) {
                        num_entries = MAX_SESS_ENTRIES; /* report this! */
@@ -1679,13 +1635,15 @@ static BOOL srv_io_srv_sess_info_0(char *desc, SRV_SESS_INFO_0 *ss0, prs_struct
 
                SMB_ASSERT_ARRAY(ss0->info_0, num_entries);
 
+               /* first the pointers */
                for (i = 0; i < num_entries; i++) {
-                       if(!srv_io_sess_info0("", &ss0->info_0[i], ps, depth))
+                       if ( !prs_io_unistr2_p("", ps, depth, &ss0->info_0[i].sharename ) )
                                return False;
                }
 
+               /* now the strings */
                for (i = 0; i < num_entries; i++) {
-                       if(!srv_io_sess_info0_str("", &ss0->info_0_str[i], ps, depth))
+                       if ( !prs_io_unistr2("sharename", ps, depth, ss0->info_0[i].sharename ))
                                return False;
                }
 
@@ -1696,54 +1654,33 @@ static BOOL srv_io_srv_sess_info_0(char *desc, SRV_SESS_INFO_0 *ss0, prs_struct
        return True;
 }
 
-/*******************************************************************
- Inits a SESS_INFO_1_STR structure
-********************************************************************/
-
-void init_srv_sess_info1_str(SESS_INFO_1_STR *ss1, char *name, char *user)
-{
-       DEBUG(5,("init_srv_sess_info1_str\n"));
-
-       init_unistr2(&ss1->uni_name, name, strlen(name)+1);
-       init_unistr2(&ss1->uni_user, user, strlen(user)+1);
-}
-
-/*******************************************************************
- Reads or writes a structure.
-********************************************************************/
-
-static BOOL srv_io_sess_info1_str(char *desc, SESS_INFO_1_STR *ss1, prs_struct *ps, int depth)
-{
-       if (ss1 == NULL)
-               return False;
-
-       prs_debug(ps, depth, desc, "srv_io_sess_info1_str");
-       depth++;
-
-       if(!prs_align(ps))
-               return False;
-
-       if(!smb_io_unistr2("", &ss1->uni_name, True, ps, depth))
-               return False;
-       if(!smb_io_unistr2("", &(ss1->uni_user), True, ps, depth))
-               return False;
-
-       return True;
-}
-
 /*******************************************************************
  Inits a SESS_INFO_1 structure
 ********************************************************************/
 
-void init_srv_sess_info1(SESS_INFO_1 *ss1, 
-                               char *name, char *user,
-                               uint32 num_opens, uint32 open_time, uint32 idle_time,
-                               uint32 user_flags)
+void init_srv_sess_info1( SESS_INFO_1 *ss1, const char *name, const char *user,
+                          uint32 num_opens, uint32 open_time, uint32 idle_time,
+                          uint32 user_flags)
 {
        DEBUG(5,("init_srv_sess_info1: %s\n", name));
 
-       ss1->ptr_name = (name != NULL) ? 1 : 0;
-       ss1->ptr_user = (user != NULL) ? 1 : 0;
+       ZERO_STRUCTP( ss1 );
+
+       if ( name ) {
+               if ( (ss1->sharename = TALLOC_P( talloc_tos(), UNISTR2 )) == NULL ) {
+                       DEBUG(0,("init_srv_sess_info0: talloc failed!\n"));
+                       return;
+               }
+               init_unistr2( ss1->sharename, name, UNI_STR_TERMINATE );
+       }
+
+       if ( user ) {
+               if ( (ss1->username = TALLOC_P( talloc_tos(), UNISTR2 )) == NULL ) {
+                       DEBUG(0,("init_srv_sess_info0: talloc failed!\n"));
+                       return;
+               }
+               init_unistr2( ss1->username, user, UNI_STR_TERMINATE );
+       }
 
        ss1->num_opens  = num_opens;
        ss1->open_time  = open_time;
@@ -1751,43 +1688,12 @@ void init_srv_sess_info1(SESS_INFO_1 *ss1,
        ss1->user_flags = user_flags;
 }
 
-/*******************************************************************
-reads or writes a structure.
-********************************************************************/
-
-static BOOL srv_io_sess_info1(char *desc, SESS_INFO_1 *ss1, prs_struct *ps, int depth)
-{
-       if (ss1 == NULL)
-               return False;
-
-       prs_debug(ps, depth, desc, "srv_io_sess_info1");
-       depth++;
-
-       if(!prs_align(ps))
-               return False;
-
-       if(!prs_uint32("ptr_name  ", ps, depth, &ss1->ptr_name))
-               return False;
-       if(!prs_uint32("ptr_user  ", ps, depth, &ss1->ptr_user))
-               return False;
-
-       if(!prs_uint32("num_opens ", ps, depth, &ss1->num_opens))
-               return False;
-       if(!prs_uint32("open_time ", ps, depth, &ss1->open_time))
-               return False;
-       if(!prs_uint32("idle_time ", ps, depth, &ss1->idle_time))
-               return False;
-       if(!prs_uint32("user_flags", ps, depth, &ss1->user_flags))
-               return False;
-
-       return True;
-}
 
 /*******************************************************************
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_srv_sess_info_1(char *desc, SRV_SESS_INFO_1 *ss1, prs_struct *ps, int depth)
+static bool srv_io_srv_sess_info_1(const char *desc, SRV_SESS_INFO_1 *ss1, prs_struct *ps, int depth)
 {
        if (ss1 == NULL)
                return False;
@@ -1804,8 +1710,8 @@ static BOOL srv_io_srv_sess_info_1(char *desc, SRV_SESS_INFO_1 *ss1, prs_struct
                return False;
 
        if (ss1->ptr_sess_info != 0) {
-               int i;
-               int num_entries = ss1->num_entries_read;
+               uint32 i;
+               uint32 num_entries = ss1->num_entries_read;
 
                if (num_entries > MAX_SESS_ENTRIES) {
                        num_entries = MAX_SESS_ENTRIES; /* report this! */
@@ -1816,13 +1722,31 @@ static BOOL srv_io_srv_sess_info_1(char *desc, SRV_SESS_INFO_1 *ss1, prs_struct
 
                SMB_ASSERT_ARRAY(ss1->info_1, num_entries);
 
+               /* first the pointers and flags */
+
                for (i = 0; i < num_entries; i++) {
-                       if(!srv_io_sess_info1("", &ss1->info_1[i], ps, depth))
+
+                       if ( !prs_io_unistr2_p("", ps, depth, &ss1->info_1[i].sharename ))
+                               return False;
+                       if ( !prs_io_unistr2_p("", ps, depth, &ss1->info_1[i].username ))
+                               return False;
+
+                       if(!prs_uint32("num_opens ", ps, depth, &ss1->info_1[i].num_opens))
+                               return False;
+                       if(!prs_uint32("open_time ", ps, depth, &ss1->info_1[i].open_time))
+                               return False;
+                       if(!prs_uint32("idle_time ", ps, depth, &ss1->info_1[i].idle_time))
+                               return False;
+                       if(!prs_uint32("user_flags", ps, depth, &ss1->info_1[i].user_flags))
                                return False;
                }
 
+               /* now the strings */
+
                for (i = 0; i < num_entries; i++) {
-                       if(!srv_io_sess_info1_str("", &ss1->info_1_str[i], ps, depth))
+                       if ( !prs_io_unistr2("", ps, depth, ss1->info_1[i].sharename ))
+                               return False;
+                       if ( !prs_io_unistr2("", ps, depth, ss1->info_1[i].username ))
                                return False;
                }
 
@@ -1837,7 +1761,7 @@ static BOOL srv_io_srv_sess_info_1(char *desc, SRV_SESS_INFO_1 *ss1, prs_struct
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_srv_sess_ctr(char *desc, SRV_SESS_INFO_CTR **pp_ctr, prs_struct *ps, int depth)
+static bool srv_io_srv_sess_ctr(const char *desc, SRV_SESS_INFO_CTR **pp_ctr, prs_struct *ps, int depth)
 {
        SRV_SESS_INFO_CTR *ctr = *pp_ctr;
 
@@ -1845,7 +1769,7 @@ static BOOL srv_io_srv_sess_ctr(char *desc, SRV_SESS_INFO_CTR **pp_ctr, prs_stru
        depth++;
 
        if(UNMARSHALLING(ps)) {
-               ctr = *pp_ctr = (SRV_SESS_INFO_CTR *)prs_alloc_mem(ps, sizeof(SRV_SESS_INFO_CTR));
+               ctr = *pp_ctr = PRS_ALLOC_MEM(ps, SRV_SESS_INFO_CTR, 1);
                if (ctr == NULL)
                        return False;
        }
@@ -1873,7 +1797,7 @@ static BOOL srv_io_srv_sess_ctr(char *desc, SRV_SESS_INFO_CTR **pp_ctr, prs_stru
                        break;
                default:
                        DEBUG(5,("%s no session info at switch_value %d\n",
-                                tab_depth(depth), ctr->switch_value));
+                                tab_depth(5,depth), ctr->switch_value));
                        break;
                }
        }
@@ -1881,37 +1805,13 @@ static BOOL srv_io_srv_sess_ctr(char *desc, SRV_SESS_INFO_CTR **pp_ctr, prs_stru
        return True;
 }
 
-/*******************************************************************
- Inits a SRV_Q_NET_SESS_ENUM structure.
-********************************************************************/
-
-void init_srv_q_net_sess_enum(SRV_Q_NET_SESS_ENUM *q_n, 
-                             char *srv_name, char *qual_name,
-                             char *user_name, uint32 sess_level, 
-                             SRV_SESS_INFO_CTR *ctr, uint32 preferred_len,
-                             ENUM_HND *hnd)
-{
-       q_n->ctr = ctr;
-
-       DEBUG(5,("init_q_net_sess_enum\n"));
-
-       init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name);
-       init_buf_unistr2(&q_n->uni_qual_name, &q_n->ptr_qual_name, qual_name);
-       init_buf_unistr2(&q_n->uni_user_name, &q_n->ptr_user_name, user_name);
-
-       q_n->sess_level    = sess_level;
-       q_n->preferred_len = preferred_len;
-
-       memcpy(&q_n->enum_hnd, hnd, sizeof(*hnd));
-}
-
 /*******************************************************************
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_q_net_sess_enum(char *desc, SRV_Q_NET_SESS_ENUM *q_n, prs_struct *ps, int depth)
+bool srv_io_q_net_sess_enum(const char *desc, SRV_Q_NET_SESS_ENUM *q_u, prs_struct *ps, int depth)
 {
-       if (q_n == NULL)
+       if (q_u == NULL)
                return False;
 
        prs_debug(ps, depth, desc, "srv_io_q_net_sess_enum");
@@ -1920,41 +1820,39 @@ BOOL srv_io_q_net_sess_enum(char *desc, SRV_Q_NET_SESS_ENUM *q_n, prs_struct *ps
        if(!prs_align(ps))
                return False;
 
-       if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
-               return False;
-       if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
+       if(!prs_pointer("servername", ps, depth, (void*)&q_u->servername,
+                       sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
                return False;
 
        if(!prs_align(ps))
                return False;
 
-       if(!prs_uint32("ptr_qual_name", ps, depth, &q_n->ptr_qual_name))
-               return False;
-       if(!smb_io_unistr2("", &q_n->uni_qual_name, q_n->ptr_qual_name, ps, depth))
+       if(!prs_pointer("qualifier", ps, depth, (void*)&q_u->qualifier,
+                       sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
                return False;
 
        if(!prs_align(ps))
                return False;
-       if(!prs_uint32("ptr_user_name", ps, depth, &q_n->ptr_user_name))
-               return False;
-       if(!smb_io_unistr2("", &q_n->uni_user_name, q_n->ptr_user_name, ps, depth))
+
+       if(!prs_pointer("username", ps, depth, (void*)&q_u->username,
+                       sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
                return False;
 
        if(!prs_align(ps))
                return False;
 
-       if(!prs_uint32("sess_level", ps, depth, &q_n->sess_level))
+       if(!prs_uint32("sess_level", ps, depth, &q_u->sess_level))
                return False;
        
-       if (q_n->sess_level != -1) {
-               if(!srv_io_srv_sess_ctr("sess_ctr", &q_n->ctr, ps, depth))
+       if (q_u->sess_level != (uint32)-1) {
+               if(!srv_io_srv_sess_ctr("sess_ctr", &q_u->ctr, ps, depth))
                        return False;
        }
 
-       if(!prs_uint32("preferred_len", ps, depth, &q_n->preferred_len))
+       if(!prs_uint32("preferred_len", ps, depth, &q_u->preferred_len))
                return False;
 
-       if(!smb_io_enum_hnd("enum_hnd", &q_n->enum_hnd, ps, depth))
+       if(!smb_io_enum_hnd("enum_hnd", &q_u->enum_hnd, ps, depth))
                return False;
 
        return True;
@@ -1964,7 +1862,7 @@ BOOL srv_io_q_net_sess_enum(char *desc, SRV_Q_NET_SESS_ENUM *q_n, prs_struct *ps
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_r_net_sess_enum(char *desc, SRV_R_NET_SESS_ENUM *r_n, prs_struct *ps, int depth)
+bool srv_io_r_net_sess_enum(const char *desc, SRV_R_NET_SESS_ENUM *r_n, prs_struct *ps, int depth)
 {
        if (r_n == NULL)
                return False;
@@ -1978,7 +1876,7 @@ BOOL srv_io_r_net_sess_enum(char *desc, SRV_R_NET_SESS_ENUM *r_n, prs_struct *ps
        if(!prs_uint32("sess_level", ps, depth, &r_n->sess_level))
                return False;
 
-       if (r_n->sess_level != -1) {
+       if (r_n->sess_level != (uint32)-1) {
                if(!srv_io_srv_sess_ctr("sess_ctr", &r_n->ctr, ps, depth))
                        return False;
        }
@@ -1993,6 +1891,79 @@ BOOL srv_io_r_net_sess_enum(char *desc, SRV_R_NET_SESS_ENUM *r_n, prs_struct *ps
        return True;
 }
 
+/*******************************************************************
+ Inits a SRV_Q_NET_SESS_DEL structure.
+********************************************************************/
+
+void init_srv_q_net_sess_del(SRV_Q_NET_SESS_DEL *q_n, const char *srv_name,
+                             const char *cli_name, const char *user_name)
+{
+       DEBUG(5,("init_q_net_sess_enum\n"));
+
+       init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name);
+       init_buf_unistr2(&q_n->uni_cli_name, &q_n->ptr_cli_name, cli_name);
+       init_buf_unistr2(&q_n->uni_user_name, &q_n->ptr_user_name, user_name);
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+bool srv_io_q_net_sess_del(const char *desc, SRV_Q_NET_SESS_DEL *q_n, prs_struct *ps, int depth)
+{
+       if (q_n == NULL)
+               return False;
+
+       prs_debug(ps, depth, desc, "srv_io_q_net_sess_del");
+       depth++;
+
+       if(!prs_align(ps))
+               return False;
+
+       if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
+               return False;
+       if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
+               return False;
+
+       if(!prs_align(ps))
+               return False;
+
+       if(!prs_uint32("ptr_cli_name", ps, depth, &q_n->ptr_cli_name))
+               return False;
+       if(!smb_io_unistr2("", &q_n->uni_cli_name, q_n->ptr_cli_name, ps, depth))
+               return False;
+
+       if(!prs_align(ps))
+               return False;
+       if(!prs_uint32("ptr_user_name", ps, depth, &q_n->ptr_user_name))
+               return False;
+       if(!smb_io_unistr2("", &q_n->uni_user_name, q_n->ptr_user_name, ps, depth))
+               return False;
+
+       return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+bool srv_io_r_net_sess_del(const char *desc, SRV_R_NET_SESS_DEL *r_n, prs_struct *ps, int depth)
+{
+       if (r_n == NULL)
+               return False;
+
+       prs_debug(ps, depth, desc, "srv_io_r_net_sess_del");
+       depth++;
+
+       if(!prs_align(ps))
+               return False;
+
+       if(!prs_werror("status", ps, depth, &r_n->status))
+               return False;
+
+       return True;
+}
+
 /*******************************************************************
  Inits a CONN_INFO_0 structure
 ********************************************************************/
@@ -2008,7 +1979,7 @@ void init_srv_conn_info0(CONN_INFO_0 *ss0, uint32 id)
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_conn_info0(char *desc, CONN_INFO_0 *ss0, prs_struct *ps, int depth)
+static bool srv_io_conn_info0(const char *desc, CONN_INFO_0 *ss0, prs_struct *ps, int depth)
 {
        if (ss0 == NULL)
                return False;
@@ -2029,7 +2000,7 @@ static BOOL srv_io_conn_info0(char *desc, CONN_INFO_0 *ss0, prs_struct *ps, int
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_srv_conn_info_0(char *desc, SRV_CONN_INFO_0 *ss0, prs_struct *ps, int depth)
+static bool srv_io_srv_conn_info_0(const char *desc, SRV_CONN_INFO_0 *ss0, prs_struct *ps, int depth)
 {
        if (ss0 == NULL)
                return False;
@@ -2072,19 +2043,19 @@ static BOOL srv_io_srv_conn_info_0(char *desc, SRV_CONN_INFO_0 *ss0, prs_struct
  Inits a CONN_INFO_1_STR structure
 ********************************************************************/
 
-void init_srv_conn_info1_str(CONN_INFO_1_STR *ss1, char *usr_name, char *net_name)
+void init_srv_conn_info1_str(CONN_INFO_1_STR *ss1, const char *usr_name, const char *net_name)
 {
        DEBUG(5,("init_srv_conn_info1_str\n"));
 
-       init_unistr2(&ss1->uni_usr_name, usr_name, strlen(usr_name)+1);
-       init_unistr2(&ss1->uni_net_name, net_name, strlen(net_name)+1);
+       init_unistr2(&ss1->uni_usr_name, usr_name, UNI_STR_TERMINATE);
+       init_unistr2(&ss1->uni_net_name, net_name, UNI_STR_TERMINATE);
 }
 
 /*******************************************************************
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_conn_info1_str(char *desc, CONN_INFO_1_STR *ss1, prs_struct *ps, int depth)
+static bool srv_io_conn_info1_str(const char *desc, CONN_INFO_1_STR *ss1, prs_struct *ps, int depth)
 {
        if (ss1 == NULL)
                return False;
@@ -2110,7 +2081,7 @@ static BOOL srv_io_conn_info1_str(char *desc, CONN_INFO_1_STR *ss1, prs_struct *
 void init_srv_conn_info1(CONN_INFO_1 *ss1, 
                                uint32 id, uint32 type,
                                uint32 num_opens, uint32 num_users, uint32 open_time,
-                               char *usr_name, char *net_name)
+                               const char *usr_name, const char *net_name)
 {
        DEBUG(5,("init_srv_conn_info1: %s %s\n", usr_name, net_name));
 
@@ -2128,7 +2099,7 @@ void init_srv_conn_info1(CONN_INFO_1 *ss1,
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_conn_info1(char *desc, CONN_INFO_1 *ss1, prs_struct *ps, int depth)
+static bool srv_io_conn_info1(const char *desc, CONN_INFO_1 *ss1, prs_struct *ps, int depth)
 {
        if (ss1 == NULL)
                return False;
@@ -2162,7 +2133,7 @@ static BOOL srv_io_conn_info1(char *desc, CONN_INFO_1 *ss1, prs_struct *ps, int
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_srv_conn_info_1(char *desc, SRV_CONN_INFO_1 *ss1, prs_struct *ps, int depth)
+static bool srv_io_srv_conn_info_1(const char *desc, SRV_CONN_INFO_1 *ss1, prs_struct *ps, int depth)
 {
        if (ss1 == NULL)
                return False;
@@ -2210,7 +2181,7 @@ static BOOL srv_io_srv_conn_info_1(char *desc, SRV_CONN_INFO_1 *ss1, prs_struct
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_srv_conn_ctr(char *desc, SRV_CONN_INFO_CTR **pp_ctr, prs_struct *ps, int depth)
+static bool srv_io_srv_conn_ctr(const char *desc, SRV_CONN_INFO_CTR **pp_ctr, prs_struct *ps, int depth)
 {
        SRV_CONN_INFO_CTR *ctr = *pp_ctr;
 
@@ -2218,7 +2189,7 @@ static BOOL srv_io_srv_conn_ctr(char *desc, SRV_CONN_INFO_CTR **pp_ctr, prs_stru
        depth++;
 
        if (UNMARSHALLING(ps)) {
-               ctr = *pp_ctr = (SRV_CONN_INFO_CTR *)prs_alloc_mem(ps, sizeof(SRV_CONN_INFO_CTR));
+               ctr = *pp_ctr = PRS_ALLOC_MEM(ps, SRV_CONN_INFO_CTR, 1);
                if (ctr == NULL)
                        return False;
        }
@@ -2246,7 +2217,7 @@ static BOOL srv_io_srv_conn_ctr(char *desc, SRV_CONN_INFO_CTR **pp_ctr, prs_stru
                        break;
                default:
                        DEBUG(5,("%s no connection info at switch_value %d\n",
-                                tab_depth(depth), ctr->switch_value));
+                                tab_depth(5,depth), ctr->switch_value));
                        break;
                }
        }
@@ -2259,7 +2230,7 @@ static BOOL srv_io_srv_conn_ctr(char *desc, SRV_CONN_INFO_CTR **pp_ctr, prs_stru
 ********************************************************************/
 
 void init_srv_q_net_conn_enum(SRV_Q_NET_CONN_ENUM *q_n, 
-                               char *srv_name, char *qual_name,
+                               const char *srv_name, const char *qual_name,
                                uint32 conn_level, SRV_CONN_INFO_CTR *ctr,
                                uint32 preferred_len,
                                ENUM_HND *hnd)
@@ -2281,7 +2252,7 @@ void init_srv_q_net_conn_enum(SRV_Q_NET_CONN_ENUM *q_n,
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_q_net_conn_enum(char *desc, SRV_Q_NET_CONN_ENUM *q_n, prs_struct *ps, int depth)
+bool srv_io_q_net_conn_enum(const char *desc, SRV_Q_NET_CONN_ENUM *q_n, prs_struct *ps, int depth)
 {
        if (q_n == NULL)
                return False;
@@ -2311,7 +2282,7 @@ BOOL srv_io_q_net_conn_enum(char *desc, SRV_Q_NET_CONN_ENUM *q_n, prs_struct *ps
        if(!prs_uint32("conn_level", ps, depth, &q_n->conn_level))
                return False;
        
-       if (q_n->conn_level != -1) {
+       if (q_n->conn_level != (uint32)-1) {
                if(!srv_io_srv_conn_ctr("conn_ctr", &q_n->ctr, ps, depth))
                        return False;
        }
@@ -2329,7 +2300,7 @@ BOOL srv_io_q_net_conn_enum(char *desc, SRV_Q_NET_CONN_ENUM *q_n, prs_struct *ps
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_r_net_conn_enum(char *desc,  SRV_R_NET_CONN_ENUM *r_n, prs_struct *ps, int depth)
+bool srv_io_r_net_conn_enum(const char *desc,  SRV_R_NET_CONN_ENUM *r_n, prs_struct *ps, int depth)
 {
        if (r_n == NULL)
                return False;
@@ -2343,7 +2314,7 @@ BOOL srv_io_r_net_conn_enum(char *desc,  SRV_R_NET_CONN_ENUM *r_n, prs_struct *p
        if(!prs_uint32("conn_level", ps, depth, &r_n->conn_level))
                return False;
 
-       if (r_n->conn_level != -1) {
+       if (r_n->conn_level != (uint32)-1) {
                if(!srv_io_srv_conn_ctr("conn_ctr", &r_n->ctr, ps, depth))
                        return False;
        }
@@ -2358,23 +2329,11 @@ BOOL srv_io_r_net_conn_enum(char *desc,  SRV_R_NET_CONN_ENUM *r_n, prs_struct *p
        return True;
 }
 
-/*******************************************************************
- Inits a FILE_INFO_3_STR structure
-********************************************************************/
-
-void init_srv_file_info3_str(FILE_INFO_3_STR *fi3, char *user_name, char *path_name)
-{
-       DEBUG(5,("init_srv_file_info3_str\n"));
-
-       init_unistr2(&fi3->uni_path_name, path_name, strlen(path_name)+1);
-       init_unistr2(&fi3->uni_user_name, user_name, strlen(user_name)+1);
-}
-
 /*******************************************************************
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_file_info3_str(char *desc, FILE_INFO_3_STR *sh1, prs_struct *ps, int depth)
+static bool srv_io_file_info3_str(const char *desc, FILE_INFO_3 *sh1, prs_struct *ps, int depth)
 {
        if (sh1 == NULL)
                return False;
@@ -2385,10 +2344,15 @@ static BOOL srv_io_file_info3_str(char *desc, FILE_INFO_3_STR *sh1, prs_struct *
        if(!prs_align(ps))
                return False;
 
-       if(!smb_io_unistr2("", &sh1->uni_path_name, True, ps, depth))
-               return False;
-       if(!smb_io_unistr2("", &sh1->uni_user_name, True, ps, depth))
-               return False;
+       if ( sh1->path ) {
+               if(!smb_io_unistr2("", sh1->path, True, ps, depth))
+                       return False;
+       }
+
+       if ( sh1->user ) {
+               if(!smb_io_unistr2("", sh1->user, True, ps, depth))
+                       return False;
+       }
 
        return True;
 }
@@ -2397,26 +2361,36 @@ static BOOL srv_io_file_info3_str(char *desc, FILE_INFO_3_STR *sh1, prs_struct *
  Inits a FILE_INFO_3 structure
 ********************************************************************/
 
-void init_srv_file_info3(FILE_INFO_3 *fl3,
-                        uint32 id, uint32 perms, uint32 num_locks,
-                        char *path_name, char *user_name)
+void init_srv_file_info3( FILE_INFO_3 *fl3, uint32 id, uint32 perms, uint32 num_locks,
+                          const char *user_name, const char *path_name )
 {
-       DEBUG(5,("init_srv_file_info3: %s %s\n", path_name, user_name));
-
        fl3->id        = id;    
        fl3->perms     = perms;
        fl3->num_locks = num_locks;
 
-       fl3->ptr_path_name = (path_name != NULL) ? 1 : 0;
-       fl3->ptr_user_name = (user_name != NULL) ? 1 : 0;
+        if ( path_name ) {
+                if ( (fl3->path = TALLOC_P( talloc_tos(), UNISTR2 )) == NULL )
+                        return;
+                init_unistr2(fl3->path, path_name, UNI_STR_TERMINATE);
+        }
+
+        if ( user_name ) {
+                if ( (fl3->user = TALLOC_P( talloc_tos(), UNISTR2 )) == NULL )
+                        return;
+                init_unistr2(fl3->user, user_name, UNI_STR_TERMINATE);
+        }
+
+       return;
 }
 
 /*******************************************************************
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_file_info3(char *desc, FILE_INFO_3 *fl3, prs_struct *ps, int depth)
+static bool srv_io_file_info3(const char *desc, FILE_INFO_3 *fl3, prs_struct *ps, int depth)
 {
+       uint32 uni_p;
+
        if (fl3 == NULL)
                return False;
 
@@ -2432,10 +2406,24 @@ static BOOL srv_io_file_info3(char *desc, FILE_INFO_3 *fl3, prs_struct *ps, int
                return False;
        if(!prs_uint32("num_locks    ", ps, depth, &fl3->num_locks))
                return False;
-       if(!prs_uint32("ptr_path_name", ps, depth, &fl3->ptr_path_name))
+
+       uni_p = fl3->path ? 1 : 0;
+       if(!prs_uint32("ptr", ps, depth, &uni_p))
                return False;
-       if(!prs_uint32("ptr_user_name", ps, depth, &fl3->ptr_user_name))
+       if (UNMARSHALLING(ps)) {
+               if ( (fl3->path = PRS_ALLOC_MEM( ps, UNISTR2, 1)) == NULL ) {
+                       return False;
+               }
+       }
+
+       uni_p = fl3->user ? 1 : 0;
+       if(!prs_uint32("ptr", ps, depth, &uni_p))
                return False;
+       if (UNMARSHALLING(ps)) {
+               if ( (fl3->user = PRS_ALLOC_MEM( ps, UNISTR2, 1)) == NULL ) {
+                       return False;
+               }
+       }
 
        return True;
 }
@@ -2444,7 +2432,7 @@ static BOOL srv_io_file_info3(char *desc, FILE_INFO_3 *fl3, prs_struct *ps, int
  Reads or writes a structure.
 ********************************************************************/
 
-static BOOL srv_io_srv_file_ctr(char *desc, SRV_FILE_INFO_CTR *ctr, prs_struct *ps, int depth)
+static bool srv_io_srv_file_ctr(const char *desc, SRV_FILE_INFO_CTR *ctr, prs_struct *ps, int depth)
 {
        if (ctr == NULL)
                return False;
@@ -2453,55 +2441,53 @@ static BOOL srv_io_srv_file_ctr(char *desc, SRV_FILE_INFO_CTR *ctr, prs_struct *
        depth++;
 
        if (UNMARSHALLING(ps)) {
-               memset(ctr, '\0', sizeof(SRV_FILE_INFO_CTR));
+               ZERO_STRUCTP(ctr);
        }
 
        if(!prs_align(ps))
                return False;
 
-       if(!prs_uint32("switch_value", ps, depth, &ctr->switch_value))
+       if(!prs_uint32("level", ps, depth, &ctr->level))
                return False;
-       if (ctr->switch_value != 3) {
-               DEBUG(5,("%s File info %d level not supported\n",
-                        tab_depth(depth), ctr->switch_value));
-       }
+
        if(!prs_uint32("ptr_file_info", ps, depth, &ctr->ptr_file_info))
                return False;
        if(!prs_uint32("num_entries", ps, depth, &ctr->num_entries))
                return False;
        if(!prs_uint32("ptr_entries", ps, depth, &ctr->ptr_entries))
                return False;
+
        if (ctr->ptr_entries == 0)
                return True;
-       if(!prs_uint32("num_entries2", ps, depth, 
-                      &ctr->num_entries2))
+
+       if(!prs_uint32("num_entries2", ps, depth, &ctr->num_entries2))
                return False;
 
-       switch (ctr->switch_value) {
+       switch (ctr->level) {
        case 3: {
-               SRV_FILE_INFO_3 *info3 = ctr->file.info3;
+               FILE_INFO_3 *info3 = ctr->file.info3;
                int num_entries = ctr->num_entries;
                int i;
 
-               if (UNMARSHALLING(ps)) {
-                       if (!(info3 = (SRV_FILE_INFO_3 *)prs_alloc_mem(ps, num_entries * sizeof(SRV_FILE_INFO_3))))
+               if (UNMARSHALLING(ps) && num_entries) {
+                       if (!(info3 = PRS_ALLOC_MEM(ps, FILE_INFO_3, num_entries)))
                                return False;
                        ctr->file.info3 = info3;
                }
 
                for (i = 0; i < num_entries; i++) {
-                       if(!srv_io_file_info3("", &ctr->file.info3[i].info_3, ps, depth))
+                       if(!srv_io_file_info3("", &ctr->file.info3[i], ps, depth)) 
                                return False;
                }
+
                for (i = 0; i < num_entries; i++) {
-                       if(!srv_io_file_info3_str("", &ctr->file.info3[i].info_3_str, ps, depth))
+                       if(!srv_io_file_info3_str("", &ctr->file.info3[i], ps, depth))
                                return False;
                }
                break;
        }
        default:
-               DEBUG(5,("%s no file info at switch_value %d\n",
-                        tab_depth(depth), ctr->switch_value));
+               DEBUG(5,("%s no file info at switch_value %d\n", tab_depth(5,depth), ctr->level));
                break;
        }
                        
@@ -2519,13 +2505,28 @@ void init_srv_q_net_file_enum(SRV_Q_NET_FILE_ENUM *q_n,
                              uint32 preferred_len,
                              ENUM_HND *hnd)
 {
-       DEBUG(5,("init_q_net_file_enum\n"));
+       uint32 ptr;
 
-       init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name);
-       init_buf_unistr2(&q_n->uni_qual_name, &q_n->ptr_qual_name, qual_name);
-       init_buf_unistr2(&q_n->uni_user_name, &q_n->ptr_user_name, user_name);
+       if ( srv_name ) {
+               if ( (q_n->servername = TALLOC_P( talloc_tos(), UNISTR2 )) == NULL )
+                       return;
+               init_buf_unistr2(q_n->servername, &ptr, srv_name);
+       }
+
+       if ( qual_name ) {
+               if ( (q_n->qualifier = TALLOC_P( talloc_tos(), UNISTR2 )) == NULL )
+                       return;
+               init_buf_unistr2(q_n->qualifier,  &ptr, qual_name);
+       }
+
+       if ( user_name ) {
+               if ( (q_n->username = TALLOC_P( talloc_tos(), UNISTR2 )) == NULL )
+                       return;
+               init_buf_unistr2(q_n->username,   &ptr, user_name);
+       }
+
+       q_n->level = q_n->ctr.level = file_level;
 
-       q_n->file_level    = q_n->ctr.switch_value = file_level;
        q_n->preferred_len = preferred_len;
        q_n->ctr.ptr_file_info = 1;
        q_n->ctr.num_entries = 0;
@@ -2538,9 +2539,9 @@ void init_srv_q_net_file_enum(SRV_Q_NET_FILE_ENUM *q_n,
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_q_net_file_enum(char *desc, SRV_Q_NET_FILE_ENUM *q_n, prs_struct *ps, int depth)
+bool srv_io_q_net_file_enum(const char *desc, SRV_Q_NET_FILE_ENUM *q_u, prs_struct *ps, int depth)
 {
-       if (q_n == NULL)
+       if (q_u == NULL)
                return False;
 
        prs_debug(ps, depth, desc, "srv_io_q_net_file_enum");
@@ -2549,41 +2550,36 @@ BOOL srv_io_q_net_file_enum(char *desc, SRV_Q_NET_FILE_ENUM *q_n, prs_struct *ps
        if(!prs_align(ps))
                return False;
 
-       if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
+       if(!prs_pointer("servername", ps, depth, (void*)&q_u->servername,
+                       sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
                return False;
-       if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
-               return False;
-
        if(!prs_align(ps))
                return False;
 
-       if(!prs_uint32("ptr_qual_name", ps, depth, &q_n->ptr_qual_name))
-               return False;
-       if(!smb_io_unistr2("", &q_n->uni_qual_name, q_n->ptr_qual_name, ps, depth))
+       if(!prs_pointer("qualifier", ps, depth, (void*)&q_u->qualifier,
+                       sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
                return False;
-
        if(!prs_align(ps))
                return False;
 
-       if(!prs_uint32("ptr_user_name", ps, depth, &q_n->ptr_user_name))
+       if(!prs_pointer("username", ps, depth, (void*)&q_u->username,
+                       sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
                return False;
-       if(!smb_io_unistr2("", &q_n->uni_user_name, q_n->ptr_user_name, ps, depth))
-               return False;
-
        if(!prs_align(ps))
                return False;
-       if(!prs_uint32("file_level", ps, depth, &q_n->file_level))
+
+       if(!prs_uint32("level", ps, depth, &q_u->level))
                return False;
 
-       if (q_n->file_level != -1) {
-               if(!srv_io_srv_file_ctr("file_ctr", &q_n->ctr, ps, depth))
+       if (q_u->level != (uint32)-1) {
+               if(!srv_io_srv_file_ctr("file_ctr", &q_u->ctr, ps, depth))
                        return False;
        }
 
-       if(!prs_uint32("preferred_len", ps, depth, &q_n->preferred_len))
+       if(!prs_uint32("preferred_len", ps, depth, &q_u->preferred_len))
                return False;
 
-       if(!smb_io_enum_hnd("enum_hnd", &q_n->enum_hnd, ps, depth))
+       if(!smb_io_enum_hnd("enum_hnd", &q_u->enum_hnd, ps, depth))
                return False;
 
        return True;
@@ -2593,7 +2589,7 @@ BOOL srv_io_q_net_file_enum(char *desc, SRV_Q_NET_FILE_ENUM *q_n, prs_struct *ps
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_r_net_file_enum(char *desc, SRV_R_NET_FILE_ENUM *r_n, prs_struct *ps, int depth)
+bool srv_io_r_net_file_enum(const char *desc, SRV_R_NET_FILE_ENUM *r_n, prs_struct *ps, int depth)
 {
        if (r_n == NULL)
                return False;
@@ -2604,10 +2600,10 @@ BOOL srv_io_r_net_file_enum(char *desc, SRV_R_NET_FILE_ENUM *r_n, prs_struct *ps
        if(!prs_align(ps))
                return False;
 
-       if(!prs_uint32("file_level", ps, depth, &r_n->file_level))
+       if(!prs_uint32("level", ps, depth, &r_n->level))
                return False;
 
-       if (r_n->file_level != 0) {
+       if (r_n->level != 0) {
                if(!srv_io_srv_file_ctr("file_ctr", &r_n->ctr, ps, depth))
                        return False;
        }
@@ -2622,73 +2618,11 @@ BOOL srv_io_r_net_file_enum(char *desc, SRV_R_NET_FILE_ENUM *r_n, prs_struct *ps
        return True;
 }
 
-/*******************************************************************
- Initialize a net file close request
-********************************************************************/
-void init_srv_q_net_file_close(SRV_Q_NET_FILE_CLOSE *q_n, char *server,
-                              uint32 file_id)
-{
-       q_n->ptr_srv_name = 1;
-       init_unistr2(&q_n->uni_srv_name, server, strlen(server) + 1);
-       q_n->file_id = file_id;
-}
-
-/*******************************************************************
- Reads or writes a structure.
-********************************************************************/
-BOOL srv_io_q_net_file_close(char *desc, SRV_Q_NET_FILE_CLOSE *q_n,
-                            prs_struct *ps, int depth)
-{
-       if (q_n == NULL)
-               return False;
-
-       prs_debug(ps, depth, desc, "srv_io_q_net_file_close");
-       depth++;
-
-       if(!prs_align(ps))
-               return False;
-
-       if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
-               return False;
-       if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
-               return False;
-
-       if(!prs_align(ps))
-               return False;
-
-       if(!prs_uint32("file_id", ps, depth, &q_n->file_id))
-               return False;
-
-       return True;
-}
-
-/*******************************************************************
- Reads or writes a structure.
-********************************************************************/
-
-BOOL srv_io_r_net_file_close(char *desc, SRV_R_NET_FILE_CLOSE *q_n, 
-                            prs_struct *ps, int depth)
-{
-       if (q_n == NULL)
-               return False;
-
-       prs_debug(ps, depth, desc, "srv_io_r_net_file_close");
-       depth++;
-
-       if(!prs_align(ps))
-               return False;
-
-       if(!prs_werror("status", ps, depth, &q_n->status))
-               return False;
-
-       return True;
-}      
-
 /*******************************************************************
  Inits a SRV_INFO_100 structure.
  ********************************************************************/
 
-void init_srv_info_100(SRV_INFO_100 *sv100, uint32 platform_id, char *name)
+void init_srv_info_100(SRV_INFO_100 *sv100, uint32 platform_id, const char *name)
 {
        DEBUG(5,("init_srv_info_100\n"));
 
@@ -2700,7 +2634,7 @@ void init_srv_info_100(SRV_INFO_100 *sv100, uint32 platform_id, char *name)
  Reads or writes a SRV_INFO_101 structure.
  ********************************************************************/
 
-static BOOL srv_io_info_100(char *desc, SRV_INFO_100 *sv100, prs_struct *ps, int depth)
+static bool srv_io_info_100(const char *desc, SRV_INFO_100 *sv100, prs_struct *ps, int depth)
 {
        if (sv100 == NULL)
                return False;
@@ -2727,9 +2661,9 @@ static BOOL srv_io_info_100(char *desc, SRV_INFO_100 *sv100, prs_struct *ps, int
  Inits a SRV_INFO_101 structure.
  ********************************************************************/
 
-void init_srv_info_101(SRV_INFO_101 *sv101, uint32 platform_id, char *name,
+void init_srv_info_101(SRV_INFO_101 *sv101, uint32 platform_id, const char *name,
                                uint32 ver_major, uint32 ver_minor,
-                               uint32 srv_type, char *comment)
+                               uint32 srv_type, const char *comment)
 {
        DEBUG(5,("init_srv_info_101\n"));
 
@@ -2745,7 +2679,7 @@ void init_srv_info_101(SRV_INFO_101 *sv101, uint32 platform_id, char *name,
  Reads or writes a SRV_INFO_101 structure.
  ********************************************************************/
 
-static BOOL srv_io_info_101(char *desc, SRV_INFO_101 *sv101, prs_struct *ps, int depth)
+static bool srv_io_info_101(const char *desc, SRV_INFO_101 *sv101, prs_struct *ps, int depth)
 {
        if (sv101 == NULL)
                return False;
@@ -2784,11 +2718,11 @@ static BOOL srv_io_info_101(char *desc, SRV_INFO_101 *sv101, prs_struct *ps, int
  Inits a SRV_INFO_102 structure.
  ********************************************************************/
 
-void init_srv_info_102(SRV_INFO_102 *sv102, uint32 platform_id, char *name,
-                               char *comment, uint32 ver_major, uint32 ver_minor,
+void init_srv_info_102(SRV_INFO_102 *sv102, uint32 platform_id, const char *name,
+                               const char *comment, uint32 ver_major, uint32 ver_minor,
                                uint32 srv_type, uint32 users, uint32 disc, uint32 hidden,
                                uint32 announce, uint32 ann_delta, uint32 licenses,
-                               char *usr_path)
+                               const char *usr_path)
 {
        DEBUG(5,("init_srv_info_102\n"));
 
@@ -2815,7 +2749,7 @@ void init_srv_info_102(SRV_INFO_102 *sv102, uint32 platform_id, char *name,
  Reads or writes a SRV_INFO_102 structure.
  ********************************************************************/
 
-static BOOL srv_io_info_102(char *desc, SRV_INFO_102 *sv102, prs_struct *ps, int depth)
+static bool srv_io_info_102(const char *desc, SRV_INFO_102 *sv102, prs_struct *ps, int depth)
 {
        if (sv102 == NULL)
                return False;
@@ -2874,7 +2808,7 @@ static BOOL srv_io_info_102(char *desc, SRV_INFO_102 *sv102, prs_struct *ps, int
  Reads or writes a SRV_INFO_102 structure.
  ********************************************************************/
 
-static BOOL srv_io_info_ctr(char *desc, SRV_INFO_CTR *ctr, prs_struct *ps, int depth)
+static bool srv_io_info_ctr(const char *desc, SRV_INFO_CTR *ctr, prs_struct *ps, int depth)
 {
        if (ctr == NULL)
                return False;
@@ -2906,7 +2840,7 @@ static BOOL srv_io_info_ctr(char *desc, SRV_INFO_CTR *ctr, prs_struct *ps, int d
                        break;
                default:
                        DEBUG(5,("%s no server info at switch_value %d\n",
-                                        tab_depth(depth), ctr->switch_value));
+                                        tab_depth(5,depth), ctr->switch_value));
                        break;
                }
                if(!prs_align(ps))
@@ -2921,7 +2855,7 @@ static BOOL srv_io_info_ctr(char *desc, SRV_INFO_CTR *ctr, prs_struct *ps, int d
  ********************************************************************/
 
 void init_srv_q_net_srv_get_info(SRV_Q_NET_SRV_GET_INFO *srv,
-                               char *server_name, uint32 switch_value)
+                               const char *server_name, uint32 switch_value)
 {
        DEBUG(5,("init_srv_q_net_srv_get_info\n"));
 
@@ -2934,7 +2868,7 @@ void init_srv_q_net_srv_get_info(SRV_Q_NET_SRV_GET_INFO *srv,
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_q_net_srv_get_info(char *desc, SRV_Q_NET_SRV_GET_INFO *q_n, prs_struct *ps, int depth)
+bool srv_io_q_net_srv_get_info(const char *desc, SRV_Q_NET_SRV_GET_INFO *q_n, prs_struct *ps, int depth)
 {
        if (q_n == NULL)
                return False;
@@ -2998,7 +2932,7 @@ void init_srv_r_net_srv_set_info(SRV_R_NET_SRV_SET_INFO *srv,
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_q_net_srv_set_info(char *desc, SRV_Q_NET_SRV_SET_INFO *q_n, 
+bool srv_io_q_net_srv_set_info(const char *desc, SRV_Q_NET_SRV_SET_INFO *q_n, 
                               prs_struct *ps, int depth)
 {
        prs_debug(ps, depth, desc, "srv_io_q_net_srv_set_info");
@@ -3019,8 +2953,7 @@ BOOL srv_io_q_net_srv_set_info(char *desc, SRV_Q_NET_SRV_SET_INFO *q_n,
                return False;
 
        if (UNMARSHALLING(ps)) {
-               q_n->ctr = (SRV_INFO_CTR *)
-                       prs_alloc_mem(ps, sizeof(SRV_INFO_CTR));
+               q_n->ctr = PRS_ALLOC_MEM(ps, SRV_INFO_CTR, 1);
 
                if (!q_n->ctr)
                        return False;
@@ -3036,7 +2969,7 @@ BOOL srv_io_q_net_srv_set_info(char *desc, SRV_Q_NET_SRV_SET_INFO *q_n,
  Reads or writes a structure.
  ********************************************************************/
 
-BOOL srv_io_r_net_srv_get_info(char *desc, SRV_R_NET_SRV_GET_INFO *r_n, prs_struct *ps, int depth)
+bool srv_io_r_net_srv_get_info(const char *desc, SRV_R_NET_SRV_GET_INFO *r_n, prs_struct *ps, int depth)
 {
        if (r_n == NULL)
                return False;
@@ -3060,7 +2993,7 @@ BOOL srv_io_r_net_srv_get_info(char *desc, SRV_R_NET_SRV_GET_INFO *r_n, prs_stru
  Reads or writes a structure.
  ********************************************************************/
 
-BOOL srv_io_r_net_srv_set_info(char *desc, SRV_R_NET_SRV_SET_INFO *r_n, 
+bool srv_io_r_net_srv_set_info(const char *desc, SRV_R_NET_SRV_SET_INFO *r_n, 
                               prs_struct *ps, int depth)
 {
        prs_debug(ps, depth, desc, "srv_io_r_net_srv_set_info");
@@ -3082,7 +3015,7 @@ BOOL srv_io_r_net_srv_set_info(char *desc, SRV_R_NET_SRV_SET_INFO *r_n,
  Reads or writes a structure.
  ********************************************************************/
 
-BOOL srv_io_q_net_remote_tod(char *desc, SRV_Q_NET_REMOTE_TOD *q_n, prs_struct *ps, int depth)
+bool srv_io_q_net_remote_tod(const char *desc, SRV_Q_NET_REMOTE_TOD *q_n, prs_struct *ps, int depth)
 {
        if (q_n == NULL)
                return False;
@@ -3105,7 +3038,7 @@ BOOL srv_io_q_net_remote_tod(char *desc, SRV_Q_NET_REMOTE_TOD *q_n, prs_struct *
  Reads or writes a TIME_OF_DAY_INFO structure.
  ********************************************************************/
 
-static BOOL srv_io_time_of_day_info(char *desc, TIME_OF_DAY_INFO *tod, prs_struct *ps, int depth)
+static bool srv_io_time_of_day_info(const char *desc, TIME_OF_DAY_INFO *tod, prs_struct *ps, int depth)
 {
        if (tod == NULL)
                return False;
@@ -3174,7 +3107,7 @@ void init_time_of_day_info(TIME_OF_DAY_INFO *tod, uint32 elapsedt, uint32 msecs,
  Reads or writes a structure.
  ********************************************************************/
 
-BOOL srv_io_r_net_remote_tod(char *desc, SRV_R_NET_REMOTE_TOD *r_n, prs_struct *ps, int depth)
+bool srv_io_r_net_remote_tod(const char *desc, SRV_R_NET_REMOTE_TOD *r_n, prs_struct *ps, int depth)
 {
        if (r_n == NULL)
                return False;
@@ -3201,7 +3134,7 @@ BOOL srv_io_r_net_remote_tod(char *desc, SRV_R_NET_REMOTE_TOD *r_n, prs_struct *
  initialises a structure.
  ********************************************************************/
 
-BOOL init_srv_q_net_disk_enum(SRV_Q_NET_DISK_ENUM *q_n,
+bool init_srv_q_net_disk_enum(SRV_Q_NET_DISK_ENUM *q_n,
                              const char *srv_name,
                              uint32 preferred_len,
                              ENUM_HND *enum_hnd
@@ -3226,7 +3159,7 @@ BOOL init_srv_q_net_disk_enum(SRV_Q_NET_DISK_ENUM *q_n,
  Reads or writes a structure.
  ********************************************************************/
 
-BOOL srv_io_q_net_disk_enum(char *desc, SRV_Q_NET_DISK_ENUM *q_n, prs_struct *ps, int depth)
+bool srv_io_q_net_disk_enum(const char *desc, SRV_Q_NET_DISK_ENUM *q_n, prs_struct *ps, int depth)
 {
        if (q_n == NULL)
                return False;
@@ -3270,10 +3203,10 @@ BOOL srv_io_q_net_disk_enum(char *desc, SRV_Q_NET_DISK_ENUM *q_n, prs_struct *ps
  Reads or writes a structure.
  ********************************************************************/
 
-BOOL srv_io_r_net_disk_enum(char *desc, SRV_R_NET_DISK_ENUM *r_n, prs_struct *ps, int depth)
+bool srv_io_r_net_disk_enum(const char *desc, SRV_R_NET_DISK_ENUM *r_n, prs_struct *ps, int depth)
 {
 
-       int i;
+       unsigned int i;
        uint32 entries_read, entries_read2, entries_read3;
 
        if (r_n == NULL)
@@ -3303,16 +3236,16 @@ BOOL srv_io_r_net_disk_enum(char *desc, SRV_R_NET_DISK_ENUM *r_n, prs_struct *ps
 
        r_n->disk_enum_ctr.entries_read = entries_read3;
 
-       if(UNMARSHALLING(ps)) {
+       if(UNMARSHALLING(ps) && entries_read3) {
 
                DISK_INFO *dinfo;
 
-               if(!(dinfo = (DISK_INFO *)prs_alloc_mem(ps, sizeof(*dinfo) * entries_read3)))
-               return False;
+               if(!(dinfo = PRS_ALLOC_MEM(ps, DISK_INFO, entries_read3)))
+                       return False;
                r_n->disk_enum_ctr.disk_info = dinfo;
        }
 
-       for(i=0; i < r_n->disk_enum_ctr.entries_read; i++) {
+       for(i=0; i < entries_read3; i++) {
 
                if(!prs_uint32("unknown", ps, depth, &r_n->disk_enum_ctr.disk_info[i].unknown))
                        return False;
@@ -3336,30 +3269,11 @@ BOOL srv_io_r_net_disk_enum(char *desc, SRV_R_NET_DISK_ENUM *r_n, prs_struct *ps
        return True;
 }
 
-/*******************************************************************
- initialises a structure.
- ********************************************************************/
-
-BOOL init_srv_q_net_name_validate(SRV_Q_NET_NAME_VALIDATE *q_n, const char *srv_name, const char *share_name, int type) 
-{
-       uint32 ptr_share_name;
-
-       DEBUG(5,("init_srv_q_net_name_validate\n"));
-  
-       init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name);
-       init_buf_unistr2(&q_n->uni_name,     &ptr_share_name,    share_name);
-
-       q_n->type  = type;
-       q_n->flags = 0;
-
-       return True;
-}
-
 /*******************************************************************
  Reads or writes a structure.
  ********************************************************************/
 
-BOOL srv_io_q_net_name_validate(char *desc, SRV_Q_NET_NAME_VALIDATE *q_n, prs_struct *ps, int depth)
+bool srv_io_q_net_name_validate(const char *desc, SRV_Q_NET_NAME_VALIDATE *q_n, prs_struct *ps, int depth)
 {
        if (q_n == NULL)
                return False;
@@ -3370,16 +3284,14 @@ BOOL srv_io_q_net_name_validate(char *desc, SRV_Q_NET_NAME_VALIDATE *q_n, prs_st
        if(!prs_align(ps))
                return False;
 
-       if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
-               return False;
-
-       if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
+       if(!prs_pointer("servername", ps, depth, (void*)&q_n->servername,
+                       sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
                return False;
 
        if(!prs_align(ps))
                return False;
 
-       if(!smb_io_unistr2("", &q_n->uni_name, True, ps, depth))
+       if(!smb_io_unistr2("", &q_n->sharename, True, ps, depth))
                return False;
 
        if(!prs_align(ps))
@@ -3398,7 +3310,7 @@ BOOL srv_io_q_net_name_validate(char *desc, SRV_Q_NET_NAME_VALIDATE *q_n, prs_st
  Reads or writes a structure.
  ********************************************************************/
 
-BOOL srv_io_r_net_name_validate(char *desc, SRV_R_NET_NAME_VALIDATE *r_n, prs_struct *ps, int depth)
+bool srv_io_r_net_name_validate(const char *desc, SRV_R_NET_NAME_VALIDATE *r_n, prs_struct *ps, int depth)
 {
        if (r_n == NULL)
                return False;
@@ -3419,7 +3331,7 @@ BOOL srv_io_r_net_name_validate(char *desc, SRV_R_NET_NAME_VALIDATE *r_n, prs_st
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_q_net_file_query_secdesc(char *desc, SRV_Q_NET_FILE_QUERY_SECDESC *q_n, prs_struct *ps, int depth)
+bool srv_io_q_net_file_query_secdesc(const char *desc, SRV_Q_NET_FILE_QUERY_SECDESC *q_n, prs_struct *ps, int depth)
 {
        if (q_n == NULL)
                return False;
@@ -3467,7 +3379,7 @@ BOOL srv_io_q_net_file_query_secdesc(char *desc, SRV_Q_NET_FILE_QUERY_SECDESC *q
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_r_net_file_query_secdesc(char *desc, SRV_R_NET_FILE_QUERY_SECDESC *r_n, prs_struct *ps, int depth)
+bool srv_io_r_net_file_query_secdesc(const char *desc, SRV_R_NET_FILE_QUERY_SECDESC *r_n, prs_struct *ps, int depth)
 {
        if (r_n == NULL)
                return False;
@@ -3506,7 +3418,7 @@ BOOL srv_io_r_net_file_query_secdesc(char *desc, SRV_R_NET_FILE_QUERY_SECDESC *r
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_q_net_file_set_secdesc(char *desc, SRV_Q_NET_FILE_SET_SECDESC *q_n, prs_struct *ps, int depth)
+bool srv_io_q_net_file_set_secdesc(const char *desc, SRV_Q_NET_FILE_SET_SECDESC *q_n, prs_struct *ps, int depth)
 {
        if (q_n == NULL)
                return False;
@@ -3563,7 +3475,7 @@ BOOL srv_io_q_net_file_set_secdesc(char *desc, SRV_Q_NET_FILE_SET_SECDESC *q_n,
  Reads or writes a structure.
 ********************************************************************/
 
-BOOL srv_io_r_net_file_set_secdesc(char *desc, SRV_R_NET_FILE_SET_SECDESC *r_n, prs_struct *ps, int depth)
+bool srv_io_r_net_file_set_secdesc(const char *desc, SRV_R_NET_FILE_SET_SECDESC *r_n, prs_struct *ps, int depth)
 {
        if (r_n == NULL)
                return False;
@@ -3584,9 +3496,9 @@ BOOL srv_io_r_net_file_set_secdesc(char *desc, SRV_R_NET_FILE_SET_SECDESC *r_n,
  Inits a structure
 ********************************************************************/
 
-void init_srv_q_net_remote_tod(SRV_Q_NET_REMOTE_TOD *q_u, char *server)
+void init_srv_q_net_remote_tod(SRV_Q_NET_REMOTE_TOD *q_u, const char *server)
 {
        q_u->ptr_srv_name = 1;
-       init_unistr2(&q_u->uni_srv_name, server, strlen(server) + 1);
+       init_unistr2(&q_u->uni_srv_name, server, UNI_STR_TERMINATE);
 }