summaryrefslogtreecommitdiff
path: root/source4/librpc/rpc/dcerpc.c
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2006-05-07 19:55:14 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:05:43 -0500
commit7f0a396e3b4f02aea24d6e6d8d6123c5aa737248 (patch)
tree09883421ee80e52bda061bf9bd84b6e1d5f8b9f8 /source4/librpc/rpc/dcerpc.c
parente9c7016699c61b4d21341b639bbe4291dcd21872 (diff)
downloadsamba-7f0a396e3b4f02aea24d6e6d8d6123c5aa737248.tar.gz
samba-7f0a396e3b4f02aea24d6e6d8d6123c5aa737248.tar.bz2
samba-7f0a396e3b4f02aea24d6e6d8d6123c5aa737248.zip
r15504: Revert -r 15500 and -r 15503 until I'm awake, and can get my head
around the mess that is composite functions... Async might be all the rage, but it's bloody painful to debug. Andrew Bartlett (This used to be commit 756e1dad7ce54b83f8170db3434bfcfc4afe7e65)
Diffstat (limited to 'source4/librpc/rpc/dcerpc.c')
-rw-r--r--source4/librpc/rpc/dcerpc.c60
1 files changed, 20 insertions, 40 deletions
diff --git a/source4/librpc/rpc/dcerpc.c b/source4/librpc/rpc/dcerpc.c
index adf67a7ba1..cd33d3d14b 100644
--- a/source4/librpc/rpc/dcerpc.c
+++ b/source4/librpc/rpc/dcerpc.c
@@ -490,20 +490,6 @@ static NTSTATUS dcerpc_map_reason(uint16_t reason)
}
/*
- map a fault reason to a NTSTATUS
-*/
-static NTSTATUS dcerpc_map_fault(uint32_t status)
-{
- switch (status) {
- case DCERPC_FAULT_OP_RNG_ERROR:
- return NT_STATUS_ILLEGAL_FUNCTION;
- case DCERPC_FAULT_ACCESS_DENIED:
- return NT_STATUS_ACCESS_DENIED;
- }
- return NT_STATUS_NET_WRITE_FAULT;
-}
-
-/*
mark the dcerpc connection dead. All outstanding requests get an error
*/
static void dcerpc_connection_dead(struct dcerpc_connection *conn, NTSTATUS status)
@@ -569,19 +555,27 @@ static void dcerpc_recv_data(struct dcerpc_connection *conn, DATA_BLOB *blob, NT
dcerpc_connection_dead(conn, status);
}
- if (conn->bind_private) {
- talloc_steal(conn->bind_private, blob->data);
- dcerpc_bind_recv_data(conn, &pkt);
- return;
- }
- if (conn->alter_private) {
- talloc_steal(conn->alter_private, blob->data);
- dcerpc_alter_recv_data(conn, &pkt);
- return;
- }
+ switch (pkt.ptype) {
+ case DCERPC_PKT_BIND_NAK:
+ case DCERPC_PKT_BIND_ACK:
+ if (conn->bind_private) {
+ talloc_steal(conn->bind_private, blob->data);
+ dcerpc_bind_recv_data(conn, &pkt);
+ }
+ break;
- /* assume its an ordinary request */
- dcerpc_request_recv_data(conn, blob, &pkt);
+ case DCERPC_PKT_ALTER_RESP:
+ if (conn->alter_private) {
+ talloc_steal(conn->alter_private, blob->data);
+ dcerpc_alter_recv_data(conn, &pkt);
+ }
+ break;
+
+ default:
+ /* assume its an ordinary request */
+ dcerpc_request_recv_data(conn, blob, &pkt);
+ break;
+ }
}
@@ -597,13 +591,6 @@ static void dcerpc_bind_recv_data(struct dcerpc_connection *conn, struct ncacn_p
/* mark the connection as not waiting for a bind reply */
conn->bind_private = NULL;
- if (pkt->ptype == DCERPC_PKT_FAULT) {
- DEBUG(2,("dcerpc: bind faulted: reason %s\n",
- dcerpc_errstr(c, pkt->u.fault.status)));
- composite_error(c, dcerpc_map_fault(pkt->u.fault.status));
- return;
- }
-
if (pkt->ptype == DCERPC_PKT_BIND_NAK) {
DEBUG(2,("dcerpc: bind_nak reason %d\n",
pkt->u.bind_nak.reject_reason));
@@ -1541,13 +1528,6 @@ static void dcerpc_alter_recv_data(struct dcerpc_connection *conn, struct ncacn_
/* mark the connection as not waiting for a alter context reply */
conn->alter_private = NULL;
- if (pkt->ptype == DCERPC_PKT_FAULT) {
- DEBUG(2,("dcerpc: alter context faulted: reason %s\n",
- dcerpc_errstr(c, pkt->u.fault.status)));
- composite_error(c, dcerpc_map_fault(pkt->u.fault.status));
- return;
- }
-
if (pkt->ptype == DCERPC_PKT_ALTER_RESP &&
pkt->u.alter_resp.num_results == 1 &&
pkt->u.alter_resp.ctx_list[0].result != 0) {