ACK.

On Feb 18, 2010, at 11:58:28, Karl O. Pinc wrote:

> ---
> sample-scripts/verify-cn |   42 +++++++++++++++++++++++++++---------------
> 1 files changed, 27 insertions(+), 15 deletions(-)
> 
> diff --git a/sample-scripts/verify-cn b/sample-scripts/verify-cn
> index 5d56d95..f9fea0f 100755
> --- a/sample-scripts/verify-cn
> +++ b/sample-scripts/verify-cn
> @@ -7,24 +7,28 @@
> #
> # For example in OpenVPN, you could use the directive:
> #
> -#   tls-verify "./verify-cn Test-Client"
> +#   tls-verify "./verify-cn /etc/openvpn/allowed_clients"
> #
> # This would cause the connection to be dropped unless
> -# the client common name is "Test-Client"
> +# the client common name is listed on a line in the
> +# allowed_clients file.
> 
> -die "usage: verify-cn cn certificate_depth X509_NAME_oneline" if (@ARGV != 
> 3);
> +die "usage: verify-cn cnfile certificate_depth X509_NAME_oneline" if (@ARGV 
> != 3);
> 
> # Parse out arguments:
> -#   cn    -- The common name which the client is required to have,
> -#            taken from the argument to the tls-verify directive
> -#            in the OpenVPN config file.
> -#   depth -- The current certificate chain depth.  In a typical
> -#            bi-level chain, the root certificate will be at level
> -#            1 and the client certificate will be at level 0.
> -#            This script will be called separately for each level.
> -#   x509  -- the X509 subject string as extracted by OpenVPN from
> -#            the client's provided certificate.
> -($cn, $depth, $x509) = @ARGV;
> +#   cnfile -- The file containing the list of common names, one per
> +#             line, which the client is required to have,
> +#             taken from the argument to the tls-verify directive
> +#             in the OpenVPN config file.
> +#             The file can have blank lines and comment lines that begin
> +#             with the # character.
> +#   depth  -- The current certificate chain depth.  In a typical
> +#             bi-level chain, the root certificate will be at level
> +#             1 and the client certificate will be at level 0.
> +#             This script will be called separately for each level.
> +#   x509   -- the X509 subject string as extracted by OpenVPN from
> +#             the client's provided certificate.
> +($cnfile, $depth, $x509) = @ARGV;
> 
> if ($depth == 0) {
>     # If depth is zero, we know that this is the final
> @@ -34,11 +38,19 @@ if ($depth == 0) {
>     # the X509 subject string.
> 
>     if ($x509 =~ /\/CN=([^\/]+)/) {
> +        $cn = $1;
>       # Accept the connection if the X509 common name
>       # string matches the passed cn argument.
> -     if ($cn eq $1) {
> -         exit 0;
> +     open(FH, '<', $cnfile) or exit 1; # can't open, nobody authenticates!
> +        while (defined($line = <FH>)) {
> +         if ($line !~ /^[[:space:]]*(#|$)/o) {
> +             chop($line);
> +             if ($line eq $cn) {
> +                 exit 0;
> +             }
> +         }
>       }
> +     close(FH);
>     }
> 
>     # Authentication failed -- Either we could not parse
> -- 
> 1.5.6.5
> 
> 
> ------------------------------------------------------------------------------
> Download Intel&#174; Parallel Studio Eval
> Try the new software tools for yourself. Speed compiling, find bugs
> proactively, and fine-tune applications for parallel performance.
> See why Intel Parallel Studio got high marks during beta.
> http://p.sf.net/sfu/intel-sw-dev
> _______________________________________________
> Openvpn-devel mailing list
> Openvpn-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/openvpn-devel
> 

---
Eric Crist





Reply via email to