First off, it should be
gl_ModelViewProjectionMatrix * gl_LightSource[0].position

and second, if you want the position in screen space and since lights normally don’t move, use gluProject. If you want to absolutely do gluProject in shaders, look at the source code for GLU (www.mesa3d.org)

Just came across the technique in GPU Gems 3, which is basically just a directional streak filter as a post process (accum along vector towards projected light). Surprisingly convincing given its simplicity and speed. Anyway, the projected light bit rang a bell…

A highpass filter on the source/downsampled image might do the trick as an alternative to rendering occluders, if you’ve got some decent range (something you might have handy anyway if you’re doing bloom/flare stuff)…