  The paper studies the problem of reaching agreement in a distributed
message-passing system prone to crash failures. Crashes are generated by
\constrained\ adversaries - a \wadapt\ adversary, who has to fix in advance the
set of $f$ crash-prone processes, or a \chainadapt\ adversary, who orders all
the processes into $k$ disjoint chains and has to follow this pattern when
crashing them. Apart from these constraints, both of them may crash processes
in an adaptive way at any time. While commonly used \sadapt\ adversaries model
attacks and \noadapt\ ones -- pre-defined faults, the constrained adversaries
model more realistic scenarios when there are fault-prone dependent processes,
e.g., in hierarchical or dependable software/hardware systems. We propose
time-efficient consensus algorithms against such adversaries and also show how
to improve the message complexity of proposed solutions. Finally, we show how
to reach consensus against a \kthick\ adversary, limited by an arbitrary
partial order \dk{with a maximal anti-chain of length $k$}. We complement our
algorithmic results with (almost) tight lower bounds, and extend the one for
\wadapt\ adversaries to hold also for (syntactically) weaker \noadapt\
adversaries. Together with the consensus algorithm against \wadapt\ adversaries
(which automatically translates to \noadapt\ adversaries), these results extend
the state-of-the-art of the popular class of \noadapt\ adversaries, in
particular the result of Chor, Meritt and Shmoys~\cite{CMS}, and prove general
separation between \sadapt\ and the constrained adversaries (including
\noadapt) analyzed by Bar-Joseph and Ben-Or~\cite{BB} and others.
