diff options
author | Kamen Mazdrashki <kamen.mazdrashki@postpath.com> | 2010-03-12 13:42:05 +0200 |
---|---|---|
committer | Kamen Mazdrashki <kamen.mazdrashki@postpath.com> | 2010-03-24 17:34:35 +0200 |
commit | 427a1f3c6269105256f5d0b0cb642465e728314a (patch) | |
tree | 9c07e73d203fa25f221b77b017af6b5d26daf7e4 /source4/libnet/libnet_become_dc.c | |
parent | fbc1528649b378c9fd004d092b89cb7db545fc61 (diff) | |
download | samba-427a1f3c6269105256f5d0b0cb642465e728314a.tar.gz samba-427a1f3c6269105256f5d0b0cb642465e728314a.tar.xz samba-427a1f3c6269105256f5d0b0cb642465e728314a.zip |
s4/drs: DsAddEntry - extending error handling for V2 replies
After having more complete definition for DsAddEntryReply V2
structure, we can now handle error state in more robust way,
not just counting on number of objects returned.
Diffstat (limited to 'source4/libnet/libnet_become_dc.c')
-rw-r--r-- | source4/libnet/libnet_become_dc.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/source4/libnet/libnet_become_dc.c b/source4/libnet/libnet_become_dc.c index 2dc1ee955ed..ccfb012d6f6 100644 --- a/source4/libnet/libnet_become_dc.c +++ b/source4/libnet/libnet_become_dc.c @@ -2324,11 +2324,24 @@ static void becomeDC_drsuapi1_add_entry_recv(struct tevent_req *subreq) s->dest_dsa.ntds_guid = r->out.ctr->ctr3.objects[0].guid; } else if (*r->out.level_out == 2) { - if (r->out.ctr->ctr2.count != 1) { - composite_error(c, werror_to_ntstatus(r->out.ctr->ctr2.error.extended_err)); + if (DRSUAPI_DIRERR_OK != r->out.ctr->ctr2.dir_err) { + DEBUG(0,("DsAddEntry failed with: dir_err = %d, extended_err = %s", + r->out.ctr->ctr2.dir_err, + win_errstr(r->out.ctr->ctr2.extended_err))); + composite_error(c, werror_to_ntstatus(r->out.ctr->ctr2.extended_err)); return; } + if (1 != r->out.ctr->ctr2.count) { + DEBUG(0,("DsAddEntry: something very wrong had happened - " + "method succeeded but objects returned are %d (expected 1). " + "Errors: dir_err = %d, extended_err = %s", + r->out.ctr->ctr2.count, + r->out.ctr->ctr2.dir_err, + win_errstr(r->out.ctr->ctr2.extended_err))); + composite_error(c, NT_STATUS_INVALID_NETWORK_RESPONSE); + } + s->dest_dsa.ntds_guid = r->out.ctr->ctr2.objects[0].guid; } else { composite_error(c, NT_STATUS_INVALID_NETWORK_RESPONSE); |