rpc_parse/parse_misc.c : defined a new BUFFER5 struct
[kai/samba-autobuild/.git] / source3 / rpc_parse / parse_rpc.c
index 12e94ace77d650565e07a8f4f799c9abbdb17c16..2f47f06e366d57d27beb5350ab041abe145fc3a0 100644 (file)
@@ -122,6 +122,26 @@ interface/version dce/rpc pipe identification
        }, 0x01                       \
 }                                 \
 
+#define SYNT_ATSVC_V1            \
+{                                 \
+       {                             \
+               0x82, 0x06, 0xf7, 0x1f,   \
+               0x51, 0x0a, 0xe8, 0x30,   \
+               0x07, 0x6d, 0x74, 0x0b,   \
+               0xe8, 0xce, 0xe9, 0x8b    \
+       }, 0x01                       \
+}                                 \
+
+#define SYNT_SPOOLSS_V1           \
+{                                 \
+       {                             \
+               0x78, 0x56, 0x34, 0x12,   \
+               0x34, 0x12, 0xcd, 0xab,   \
+               0xef, 0x00, 0x01, 0x23,   \
+               0x45, 0x67, 0x89, 0xab    \
+       }, 0x01                       \
+}                                 \
+
 #define SYNT_NONE_V0              \
 {                                 \
        {                             \
@@ -142,6 +162,8 @@ struct pipe_id_info pipe_names [] =
        { PIPE_SVCCTL  , SYNT_SVCCTL_V2  , PIPE_NTSVCS   , TRANS_SYNT_V2 },
        { PIPE_WKSSVC  , SYNT_WKSSVC_V1  , PIPE_NTSVCS   , TRANS_SYNT_V2 },
        { PIPE_WINREG  , SYNT_WINREG_V1  , PIPE_WINREG   , TRANS_SYNT_V2 },
+       { PIPE_ATSVC   , SYNT_ATSVC_V1   , PIPE_ATSVC    , TRANS_SYNT_V2 },
+       { PIPE_SPOOLSS , SYNT_SPOOLSS_V1 , PIPE_SPOOLSS  , TRANS_SYNT_V2 },
        { NULL         , SYNT_NONE_V0    , NULL          , SYNT_NONE_V0  }
 };
 
@@ -201,13 +223,22 @@ static void smb_io_rpc_iface(char *desc,  RPC_IFACE *ifc, prs_struct *ps, int de
 
 /*******************************************************************
 creates an RPC_ADDR_STR structure.
+
+The name can be null (RPC Alter-Context)
 ********************************************************************/
 static void make_rpc_addr_str(RPC_ADDR_STR *str, char *name)
 {
-       if (str == NULL || name == NULL) return;
-
-       str->len = strlen(name) + 1;
-       fstrcpy(str->str, name);
+       if (str == NULL ) return;
+       if (name == NULL)
+       {
+               str->len = 1;
+               fstrcpy(str->str, "");
+       }
+       else
+       {
+               str->len = strlen(name) + 1;
+               fstrcpy(str->str, name);
+       }
 }
 
 /*******************************************************************
@@ -338,6 +369,7 @@ static void smb_io_rpc_results(char *desc,  RPC_RESULTS *res, prs_struct *ps, in
 creates an RPC_HDR_BA structure.
 
 lkclXXXX only one reason at the moment!
+jfm: nope two ! The pipe_addr can be NULL !
 
 ********************************************************************/
 void make_rpc_hdr_ba(RPC_HDR_BA *rpc, 
@@ -346,7 +378,7 @@ void make_rpc_hdr_ba(RPC_HDR_BA *rpc,
                                uint8 num_results, uint16 result, uint16 reason,
                                RPC_IFACE *transfer)
 {
-       if (rpc == NULL || transfer == NULL || pipe_addr == NULL) return;
+       if (rpc == NULL || transfer == NULL) return;
 
        make_rpc_hdr_bba (&(rpc->bba ), max_tsize, max_rsize, assoc_gid);
        make_rpc_addr_str(&(rpc->addr), pipe_addr);
@@ -707,9 +739,9 @@ void make_rpc_auth_ntlmssp_resp(RPC_AUTH_NTLMSSP_RESP *rsp,
 
        if (IS_BITS_SET_ALL(neg_flags, NTLMSSP_NEGOTIATE_UNICODE))
        {
-               struni2(rsp->domain, domain);
-               struni2(rsp->user  , user  );
-               struni2(rsp->wks   , wks   );
+               ascii_to_unibuf(rsp->domain, domain, sizeof(rsp->domain)-2);
+               ascii_to_unibuf(rsp->user  , user  , sizeof(rsp->user  )-2);
+               ascii_to_unibuf(rsp->wks   , wks   , sizeof(rsp->wks   )-2);
        }
        else
        {