Hi Selva,

In multi_connection_estableished, we have

#ifdef MANAGEMENT_DEF_AUTH
    if (management)
    {
        management_connection_established(management,
&mi->context.c2.mda_context, mi->context.c2.es <http://context.c2.es>);
    }
#endif
I do not see why this requires --management-client-auth or any management related options to be in use.

management is set to NULL unless a management address is defined (--management), so the above is not called for a plugin or script

bool
open_management(struct context *c)
{
    /* initialize management layer */
    if (management)
    {
        if (c->options.management_addr) <----
        {
         ....
        {
        else
        {
            close_management(); <----
        }

I'm not trying to be resistant in finding another way here to avoid this extra state you guys don't want, this is a real bug in re-auth/reneg that we have seen occur multiple times in various setups that we want to see fixed, and it effects management, script and plugin authentication, however I have had a good walk through the code and I can't see another way.

The other alternative here is to refactor up the call chain so the context_2 is passed to each of these functions instead of just multi & session, however this is about a 500 line refactor that I really don't want to do.

Cheers,
Eric

---
Eric Thorpe
SparkLabs Developer
https://www.sparklabs.com
https://twitter.com/sparklabs
supp...@sparklabs.com

On 25/08/2020 12:25 am, Selva Nair wrote:


On Mon, Aug 24, 2020 at 3:49 AM Eric Thorpe <e...@sparklabs.com <mailto:e...@sparklabs.com>> wrote:

    Hi Selva,

    my suggestion would be to make
    this conditional on MANAGEMNET_DEF_AUTH so that we can
    then get it from  session->opt->mda_context just as we do it when
    auth is done via the management. In practice, that would cover
    most builds where this is really useful.
    Unfortunately this doesn't help. The mda_context flags are only
    set when --management-client-auth is in use, meaning this patch
    would not cover plugin or script authentication, which are the
    more commonly used, and this patch set specifically addresses
    plugin authentication.


Are you sure of that?

In multi_connection_estableished, we have

#ifdef MANAGEMENT_DEF_AUTH
    if (management)
    {
        management_connection_established(management,
&mi->context.c2.mda_context, mi->context.c2.es <http://context.c2.es>);
    }
#endif

management_connection_established will set DAF_CONENCTION_ESATBLISHED in mdac->flags and that's what's used to determine REAUTH.

I do not see why this requires --management-client-auth or any management related options to be in use. Sure, management support and deferred auth support have to be enabled but restricting the usefulness of your patch to those cases is not really a limitation.

What am I missing?

Selva

    ---
    Eric Thorpe
    SparkLabs Developer
    https://www.sparklabs.com  <https://www.sparklabs.com>
    https://twitter.com/sparklabs  <https://twitter.com/sparklabs>
    supp...@sparklabs.com  <mailto:supp...@sparklabs.com>

    On 23/08/2020 12:13 pm, Selva Nair wrote:
    Hi,

    On Thu, Aug 13, 2020 at 4:37 AM Eric Thorpe <e...@sparklabs.com
    <mailto:e...@sparklabs.com>> wrote:

        Hi Arne,

        The issue is your state is not accessible from where that
        boolean needs
        to be used unless I am missing something? Please advise if
        I'm mistaken
        or of another route.


    I agree with Arne that duplicating a state machine variable is
    not a good approach. But we have to somehow get the REAUTH (reneg)
    info in here.

    This has stalled for too long, so my suggestion would be to make
    this conditional on MANAGEMNET_DEF_AUTH so that we can
    then get it from session->opt->mda_context just as we do it when
    auth is done via the management. In practice, that would cover
    most builds where this is really useful.

    In fact, I think we should always enable MANAGEMENT_DEF_AUTH
    when management is enabled. That also gets rid of a lot of IFDEFs and
    allow the use of useful bits like CID more widely in the code. I see
    no compelling reason for such fine-grained build options.

    A marginal increase in code size is of little consequence all but
    embedded devices which can continue to cope without this
    as they do now.

    Selva

_______________________________________________
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to