summaryrefslogtreecommitdiff
path: root/source/rpc_parse/parse_shutdown.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/rpc_parse/parse_shutdown.c')
-rw-r--r--source/rpc_parse/parse_shutdown.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/source/rpc_parse/parse_shutdown.c b/source/rpc_parse/parse_shutdown.c
index 00daeaaaee7..62c23a243c6 100644
--- a/source/rpc_parse/parse_shutdown.c
+++ b/source/rpc_parse/parse_shutdown.c
@@ -34,8 +34,16 @@ void init_shutdown_q_init(SHUTDOWN_Q_INIT *q_s, const char *msg,
q_s->server = TALLOC_P( get_talloc_ctx(), uint16 );
*q_s->server = 0x1;
- q_s->message = TALLOC_P( get_talloc_ctx(), UNISTR4 );
- init_unistr4( q_s->message, msg, UNI_FLAGS_NONE );
+ if ( msg && *msg ) {
+ q_s->message = TALLOC_P( get_talloc_ctx(), UNISTR4 );
+ init_unistr4( q_s->message, msg, UNI_FLAGS_NONE );
+
+ /* Win2000 is apparently very sensitive to these lengths */
+ /* do a special case here */
+
+ q_s->message->string->uni_max_len++;
+ q_s->message->size += 2;
+ }
q_s->timeout = timeout;
@@ -84,6 +92,8 @@ BOOL shutdown_io_q_init(const char *desc, SHUTDOWN_Q_INIT *q_s, prs_struct *ps,
if (!prs_pointer("server", ps, depth, (void**)&q_s->server, sizeof(uint16), (PRS_POINTER_CAST)prs_uint16))
return False;
+ if (!prs_align(ps))
+ return False;
if (!prs_pointer("message", ps, depth, (void**)&q_s->message, sizeof(UNISTR4), (PRS_POINTER_CAST)prs_unistr4))
return False;
@@ -142,6 +152,8 @@ BOOL shutdown_io_q_init_ex(const char *desc, SHUTDOWN_Q_INIT_EX * q_s, prs_struc
if (!prs_pointer("server", ps, depth, (void**)&q_s->server, sizeof(uint16), (PRS_POINTER_CAST)prs_uint16))
return False;
+ if (!prs_align(ps))
+ return False;
if (!prs_pointer("message", ps, depth, (void**)&q_s->message, sizeof(UNISTR4), (PRS_POINTER_CAST)prs_unistr4))
return False;
@@ -214,6 +226,8 @@ BOOL shutdown_io_q_abort(const char *desc, SHUTDOWN_Q_ABORT *q_s,
if (!prs_pointer("server", ps, depth, (void**)&q_s->server, sizeof(uint16), (PRS_POINTER_CAST)prs_uint16))
return False;
+ if (!prs_align(ps))
+ return False;
return True;
}