For a 6 DOF flight sim, I think it’s better if you use three calls to glRotate (along with a glTranslate to move the viewpoint) to rotate about the thre axes, pitch, yaw and roll (or whatever you call them).
The problem you have is, I believe, related to the up vector (rx, ry and rz). The up vector is specified in world coordinates, and must be rotated using the pitch and yaw also, not only roll. Thats why you have trouble, because when you pitch/yaw the camera, you don’t pitch/yaw the up vector, and you will have a wierd result.
You should really use quaternions to avoid the gimal lock problem. On my web-site (www.web-discovery.net) there is a simple project which shows use of quaternions to accomplish 6DOF.