We present an a posteriori error analysis of adaptive finite element approximations of distributed control problems for second order elliptic boundary value problems under bound constraints on the control. The error analysis is based on a residual-type a posteriori error estimator that consists of edge and element residuals. Since we do not assume any regularity of the data of the problem, the error analysis further invokes data oscillations. We prove reliability and efficiency of the error estimator and provide a bulk criterion for mesh refinement that also takes into account data oscillations and is realized by a greedy algorithm. A detailed documentation of numerical results for selected test problems illustrates the convergence of the adaptive finite element method.