The sample code for the ASC-CDL Saturation component looks like this:
/* compute the fully desaturated grey value */
luma = rgb * sat_coef_709 +
rgb * sat_coef_709 +
rgb * sat_coef_709 ;
output rgb is a weighted average between the input rgb and
the fully desaturated grey value with "sat" as the weight...
for (c=0; c<3; c++)
rgb[c] = rgb[c] * sat + luma * (1.0 - sat);
The coefficients for any given RGB colourspace will differ. The coefficients for REC.709, are RGB
0.2126, 0.7152, 0.0722
Should be easy to sort out.
And yes, as per @cegaton, avoid the horrible use of (the also equally incorrectly labelled) YUV.
Technically, the RGB to BW node should work and honour the luma coefficients in the OpenColorIO configuration as well.