From 3fa3bc7ebaa2f8a5bacb7766329e89ab4e36f644 Mon Sep 17 00:00:00 2001 From: Kamen Mazdrashki Date: Tue, 7 Sep 2010 21:22:47 +0300 Subject: s4-drepsrv: Dump more info when drepl_replica_sync() fails There are many spots where this function may fail and I find it very useful to know where exactly function fails and what are the input parameters during testing. REPLICA_SYNC_FAIL() macro now dumps an error message so we may remove extra DEBUG() dump in implementation. --- source4/dsdb/repl/drepl_service.c | 52 +++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 24 deletions(-) (limited to 'source4/dsdb/repl') diff --git a/source4/dsdb/repl/drepl_service.c b/source4/dsdb/repl/drepl_service.c index 7d4a88ca80..0adef9e36e 100644 --- a/source4/dsdb/repl/drepl_service.c +++ b/source4/dsdb/repl/drepl_service.c @@ -220,12 +220,20 @@ static NTSTATUS drepl_replica_sync(struct irpc_message *msg, struct dreplsrv_service *service = talloc_get_type(msg->private_data, struct dreplsrv_service); -#define REPLICA_SYNC_FAIL(_werr) do {r->out.result = _werr; goto done;} while(0) +#define REPLICA_SYNC_FAIL(_msg, _werr) do {\ + if (!W_ERROR_IS_OK(werr)) { \ + DEBUG(0,(__location__ ": Failure - %s. werr = %s\n", \ + _msg, win_errstr(_werr))); \ + NDR_PRINT_IN_DEBUG(drsuapi_DsReplicaSync, r); \ + } \ + r->out.result = _werr; \ + goto done;\ + } while(0) + if (r->in.level != 1) { - DEBUG(0,("%s: Level %d is not supported yet.\n", - __FUNCTION__, r->in.level)); - REPLICA_SYNC_FAIL(WERR_DS_DRA_INVALID_PARAMETER); + REPLICA_SYNC_FAIL("Unsupported level", + WERR_DS_DRA_INVALID_PARAMETER); } req1 = &r->in.req->req1; @@ -233,7 +241,8 @@ static NTSTATUS drepl_replica_sync(struct irpc_message *msg, /* Check input parameters */ if (!nc) { - REPLICA_SYNC_FAIL(WERR_DS_DRA_INVALID_PARAMETER); + REPLICA_SYNC_FAIL("Invalid Naming Context", + WERR_DS_DRA_INVALID_PARAMETER); } /* Find Naming context to be synchronized */ @@ -241,12 +250,8 @@ static NTSTATUS drepl_replica_sync(struct irpc_message *msg, &nc->guid, &nc->sid, nc->dn, &p); if (!W_ERROR_IS_OK(werr)) { - DEBUG(0,("%s: failed to find NC for (%s, %s) - %s\n", - __FUNCTION__, - GUID_string(msg, &nc->guid), - nc->dn, - win_errstr(werr))); - REPLICA_SYNC_FAIL(werr); + REPLICA_SYNC_FAIL("Failed to find requested Naming Context", + werr); } /* should we process it asynchronously? */ @@ -255,8 +260,8 @@ static NTSTATUS drepl_replica_sync(struct irpc_message *msg, } else { cb_data = talloc_zero(msg, struct drepl_replica_sync_cb_data); if (!cb_data) { - DEBUG(0,(__location__ ": Not enought memory!")); - REPLICA_SYNC_FAIL(WERR_DS_DRA_INTERNAL_ERROR); + REPLICA_SYNC_FAIL("Not enought memory", + WERR_DS_DRA_INTERNAL_ERROR); } cb_data->msg = msg; @@ -270,14 +275,16 @@ static NTSTATUS drepl_replica_sync(struct irpc_message *msg, /* schedule replication item */ werr = _drepl_schedule_replication(service, dsa, nc, cb_data, msg); if (!W_ERROR_IS_OK(werr)) { - REPLICA_SYNC_FAIL(werr); + REPLICA_SYNC_FAIL("_drepl_schedule_replication() failed", + werr); } } } else { if (req1->options & DRSUAPI_DRS_SYNC_BYNAME) { /* client should pass at least valid string */ if (!req1->source_dsa_dns) { - REPLICA_SYNC_FAIL(WERR_DS_DRA_INVALID_PARAMETER); + REPLICA_SYNC_FAIL("'source_dsa_dns' is not valid", + WERR_DS_DRA_INVALID_PARAMETER); } werr = dreplsrv_partition_source_dsa_by_dns(p, @@ -286,7 +293,8 @@ static NTSTATUS drepl_replica_sync(struct irpc_message *msg, } else { /* client should pass at least some GUID */ if (GUID_all_zero(&req1->source_dsa_guid)) { - REPLICA_SYNC_FAIL(WERR_DS_DRA_INVALID_PARAMETER); + REPLICA_SYNC_FAIL("'source_dsa_guid' is not valid", + WERR_DS_DRA_INVALID_PARAMETER); } werr = dreplsrv_partition_source_dsa_by_guid(p, @@ -294,19 +302,15 @@ static NTSTATUS drepl_replica_sync(struct irpc_message *msg, &dsa); } if (!W_ERROR_IS_OK(werr)) { - DEBUG(0,("%s: Failed to locate source DSA %s for NC %s.\n", - __FUNCTION__, - (req1->options & DRSUAPI_DRS_SYNC_BYNAME) - ? req1->source_dsa_dns - : GUID_string(r, &req1->source_dsa_guid), - nc->dn)); - REPLICA_SYNC_FAIL(WERR_DS_DRA_NO_REPLICA); + REPLICA_SYNC_FAIL("Failed to locate source DSA for given NC", + WERR_DS_DRA_NO_REPLICA); } /* schedule replication item */ werr = _drepl_schedule_replication(service, dsa, nc, cb_data, msg); if (!W_ERROR_IS_OK(werr)) { - REPLICA_SYNC_FAIL(werr); + REPLICA_SYNC_FAIL("_drepl_schedule_replication() failed", + werr); } } -- cgit