summaryrefslogtreecommitdiff
path: root/source3/rpc_server
diff options
context:
space:
mode:
Diffstat (limited to 'source3/rpc_server')
-rw-r--r--source3/rpc_server/srv_pipe.c8
-rw-r--r--source3/rpc_server/srv_pipe_hnd.c4
-rw-r--r--source3/rpc_server/srv_samr.c5
3 files changed, 11 insertions, 6 deletions
diff --git a/source3/rpc_server/srv_pipe.c b/source3/rpc_server/srv_pipe.c
index 345664a396..5f6a1d479c 100644
--- a/source3/rpc_server/srv_pipe.c
+++ b/source3/rpc_server/srv_pipe.c
@@ -93,7 +93,7 @@ BOOL create_next_pdu(pipes_struct *p)
*/
if(p->fault_state) {
- setup_fault_pdu(p);
+ setup_fault_pdu(p, 0x1c010002);
return True;
}
@@ -617,7 +617,7 @@ static BOOL setup_bind_nak(pipes_struct *p)
Marshall a fault pdu.
*******************************************************************/
-BOOL setup_fault_pdu(pipes_struct *p)
+BOOL setup_fault_pdu(pipes_struct *p, uint32 status)
{
prs_struct outgoing_pdu;
RPC_HDR fault_hdr;
@@ -649,7 +649,7 @@ BOOL setup_fault_pdu(pipes_struct *p)
memset((char *)&hdr_resp, '\0', sizeof(hdr_resp));
- fault_resp.status = 0x1c010002;
+ fault_resp.status = status;
fault_resp.reserved = 0;
/*
@@ -1195,7 +1195,7 @@ BOOL api_rpcTNP(pipes_struct *p, char *rpc_name,
* and not put the pipe into fault state. JRA.
*/
DEBUG(4, ("unknown\n"));
- setup_fault_pdu(p);
+ setup_fault_pdu(p, 0x1c010002);
return True;
}
diff --git a/source3/rpc_server/srv_pipe_hnd.c b/source3/rpc_server/srv_pipe_hnd.c
index 893bc8cb88..f91df7c4ef 100644
--- a/source3/rpc_server/srv_pipe_hnd.c
+++ b/source3/rpc_server/srv_pipe_hnd.c
@@ -570,7 +570,7 @@ static ssize_t process_complete_pdu(pipes_struct *p)
DEBUG(10,("process_complete_pdu: pipe %s in fault state.\n",
p->name ));
set_incoming_fault(p);
- setup_fault_pdu(p);
+ setup_fault_pdu(p, 0x1c010002);
return (ssize_t)data_len;
}
@@ -619,7 +619,7 @@ static ssize_t process_complete_pdu(pipes_struct *p)
if (!reply) {
DEBUG(3,("process_complete_pdu: DCE/RPC fault sent on pipe %s\n", p->pipe_srv_name));
set_incoming_fault(p);
- setup_fault_pdu(p);
+ setup_fault_pdu(p, 0x1c010002);
prs_mem_free(&rpc_in);
} else {
/*
diff --git a/source3/rpc_server/srv_samr.c b/source3/rpc_server/srv_samr.c
index 9ab8ad5d15..6cd0f3b854 100644
--- a/source3/rpc_server/srv_samr.c
+++ b/source3/rpc_server/srv_samr.c
@@ -725,6 +725,11 @@ static BOOL api_samr_set_userinfo(pipes_struct *p)
if (!samr_io_q_set_userinfo("", &q_u, data, 0)) {
DEBUG(0,("api_samr_set_userinfo: Unable to unmarshall SAMR_Q_SET_USERINFO.\n"));
+ /* Fix for W2K SP2 */
+ if (q_u.switch_value == 0x1a) {
+ setup_fault_pdu(p, 0x1c000006);
+ return True;
+ }
return False;
}