No problem. I drop all together the username-as-common-name because it has
other side effects on calling the client-disconnect script when a client
reconnects (I sent another note on November 4th). As you mention, I now
handle this logic in the client connect/authenticate scripts and is working
much better so please ignore my request. However do look at the issue about
the reconnect as it will happen whenever the common name is blank
(regardless of the username-as-common-name setting) 

Regards
Carlos



-----Mensaje original-----
De: David Sommerseth [mailto:openvpn.l...@topphemmelig.net] 
Enviado el: domingo, 14 de noviembre de 2010 13:05
Para: Carlos Soto
CC: openvpn-devel@lists.sourceforge.net
Asunto: Re: [Openvpn-devel] Variable common_name can be blank in
client-connect script

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 03/10/10 20:56, Carlos Soto wrote:
> Author: Carlos Soto <carlos.soto at terra.es
<mailto:carlos.s...@terra.es>>
> 
> Variable common_name can be blank in client-connect script
> 
> If a server is configured with auth-user-pass-optional and
> username-as-common-name it is possible that the auth-user-pass-verify
> script will validate a connection with no username as it is optional. It
> that case the common_name becames blank and client-connect script may
> fail because it does not have a value for the common name. I think that
> the common name should never be blank so in cases where the username is
> blank and the username-as-common-name option is enabled, the common_name
> should keep its original value.
> 
> diff --git a/ssl.c b/ssl.c
> index a1268ac..381ab07 100644
> --- a/ssl.c
> +++ b/ssl.c
> 
> @@ -3718,7 +3718,7 @@ key_method_2_read (struct buffer *buf, struct
tls_multi *multi, struct tls_sessi
>           if (man_def_auth != KMDA_UNDEF)
>             ks->auth_deferred = true;
>  #endif
> -         if ((session->opt->ssl_flags & SSLF_USERNAME_AS_COMMON_NAME))
> +         if ((session->opt->ssl_flags & SSLF_USERNAME_AS_COMMON_NAME)
> && (strlen (up->username)))
>             set_common_name (session, up->username);
>  #ifdef ENABLE_DEF_AUTH
>           msg (D_HANDSHAKE, "TLS: Username/Password authentication %s
> for username '%s' %s",
>  

Sorry for not having responded earlier, but I'm going through the patch
queue these days.

I'm also giving this patch a NAK.

This is a critical change of current behaviour and might lead to
misunderstandings when configuring such a setup you describe.

We can however discuss if we can accept such a behaviour this patch will
introduce by doing it configurable as a flag to
- --username-as-common-name.  But I really struggle to see this being an
important feature OpenVPN should have.  As Gert already said, if the
username is blank, it's blank.  Using --username-as-common-name, I would
also expect CN to be blank.

If CN is sometimes username and sometimes CN, that's going to be a mess
to handle properly for most setups.  And in those cases where this might
be needed, it might really be that --username-as-common-name is not the
right option to use.  It might be writing a separate --plugin to handle
such situation properly to your needs is a better approach.

Such a plug-in should be able to grant access in those cases where you
have a mixture of people not sending usernames and you want to
authenticate against the client certificate CN instead.  With such a
plug-in you should be able to skip the usage of
- --username-as-common-name.   I believe this would be a much cleaner
approach, as it's the authentication phase which decides if this
situation with a blank username is correct or not.


kind regards,

David Sommerseth
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/

iEYEARECAAYFAkzf0GAACgkQDC186MBRfrp42ACgjd2fKwrZEiq9X+o2fmtfLEP0
xGcAni10TG8Afk7I95pg7XJKKJ0Ylq3C
=hewl
-----END PGP SIGNATURE-----


Reply via email to