Author: abartlet Date: 2005-01-11 20:09:59 +0000 (Tue, 11 Jan 2005) New Revision: 4691
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=4691 Log: Make the DCE-RPC bind code compleatly generic to the number of passes that the GENSEC mechanism wishes to select. It is of course up to the GENSEC mech and the remote server to actually support this however... Andrew Bartlett Modified: branches/SAMBA_4_0/source/librpc/rpc/dcerpc_auth.c Changeset: Modified: branches/SAMBA_4_0/source/librpc/rpc/dcerpc_auth.c =================================================================== --- branches/SAMBA_4_0/source/librpc/rpc/dcerpc_auth.c 2005-01-11 16:53:02 UTC (rev 4690) +++ branches/SAMBA_4_0/source/librpc/rpc/dcerpc_auth.c 2005-01-11 20:09:59 UTC (rev 4691) @@ -75,22 +75,30 @@ status = gensec_update(p->conn->security_state.generic_state, tmp_ctx, null_data_blob, &credentials); - if (!NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) { - goto done; - } p->conn->security_state.auth_info->credentials = credentials; - status = dcerpc_bind_byuuid(p, tmp_ctx, uuid, version); - if (!NT_STATUS_IS_OK(status)) { + if (NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) { + /* We are demanding a reply, so use a request that will get us one */ + status = dcerpc_bind_byuuid(p, tmp_ctx, uuid, version); + if (!NT_STATUS_IS_OK(status)) { + goto done; + } + } else if (NT_STATUS_IS_OK(status)) { + /* We don't care for the reply, so jump to the end */ + status = dcerpc_bind_byuuid(p, tmp_ctx, uuid, version); goto done; + } else { + /* Something broke in GENSEC - bail */ + goto done; } while (1) { status = gensec_update(p->conn->security_state.generic_state, tmp_ctx, p->conn->security_state.auth_info->credentials, &credentials); - if (!NT_STATUS_IS_OK(status) && !NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) { + if (!NT_STATUS_IS_OK(status) + && !NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) { break; }
