Starting with newer versions of OpenVPN I believe 2.2+ you need to have "script-security 3" set or you can't execute a third party script.
Prior to that you could also use the auth-user-pass-verify like this:
auth-user-pass-verify ./validate.pl "$username $password $ip" via-env
Options error: the --auth-user-pass-verify directive should have at most 2 parameters. To pass a list of arguments as one of the parameters, try enclosing them in double quotes ("").
However this no longer works. The way env works no longer gives you the variables as variables that you can pass as arguments.
It now works as normal so for example in a shell script you call from OpenVPN.
Just referencing $username and $password gives you the login information the user sent. This seems to have taken effect in version 2.3 or 2.4 or possibly even 2.2