lh_CONF_VALUE_new parameters?

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

lh_CONF_VALUE_new parameters?

Matěj Cepl
Hi,

I am trying to make M2Crypto build on Windows again
(https://gitlab.com/m2crypto/m2crypto/merge_requests/26). I have
replaced by POSIX's poll by WSAPoll( I know about
https://daniel.haxx.se/blog/2012/10/10/wsapoll-is-broken/ but we
don't play with the error values, which is a mistake, I know, so
we shouldn't be affected).

The second problem is that VC++ compiler crashes on problems
with CONF_VALUE. Originally M2Crypto had this
(https://gitlab.com/m2crypto/m2crypto/blob/master/SWIG/_x509.i#L514):

    #if OPENSSL_VERSION_NUMBER >= 0x10000000L
    LHASH_OF(CONF_VALUE)
    #else
    LHASH
    #endif
    *x509v3_lhash() {
        return lh_new(NULL, NULL); /* Should probably be lh_CONF_VALUE_new but won't compile. */
    }

Apparently, using lh_new(NULL, NULL) is not good enough for VC++
and it crashes on it
(https://ci.appveyor.com/project/mcepl/m2crypto-nngqn/build/job/e7q2ogndlje2x2h9)

After a deep dive into lhash(3) and some examples on github,
I have created this:

    /*
    typedef struct
            {
            char *section;
            char *name;
            char *value;
            } CONF_VALUE;

     */

    unsigned long CONF_VALUE_hash(const CONF_VALUE *v) {
        char *v_key, *hash_hex;

        v_key = strncat(v1->section, v1->name, 1024);
        v_key = strncat(v1_key, v1->value, 2048);

        return *(unsigned long *) SHA256(v_key, strlen(v_key), hash_hex);
    }
    static IMPLEMENT_LHASH_HASH_FN(CONF_VALUE_hash, const CONF_VALUE*);

    int CONF_VALUE_cmp(const CONF_VALUE *v1, const CONF_VALUE *v2) {
        char *v1_key, *v2_key;

        v1_key = strncat(v1->section, v1->name, 1024);
        v1_key = strncat(v1_key, v1->value, 2048);

        v2_key = strncat(v2->section, v2->name, 1024);
        v2_key = strncat(v2_key, v2->value, 2048);

        return strncmp(v1_key, v2_key, 2048);
    }
    static IMPLEMENT_LHASH_COMP_FN(CONF_VALUE_cmp, const CONF_VALUE*);

    #if OPENSSL_VERSION_NUMBER >= 0x10000000L
    LHASH_OF(CONF_VALUE)
    #else
    LHASH
    #endif
    *x509v3_lhash() {
        return lh_CONF_VALUE_new(CONF_VALUE_hash, CONF_VALUE_cmp);
    }

but gcc still fails to compile with error:

    SWIG/_x509.i:554: Error: Macro 'lh_CONF_VALUE_new' expects
    no arguments

lh_CONF_VALUE_new with arguments is however exactly what I found
on the Internet (and in crypt/conf/conf_api.c, which seems to be
the only use of lh_CONF_VALUE_new in OpenSSL tree).

Using openssl-1.0.1e-56.el7.x86_64 on RHEL-7.

Could anybody enlighten me, how to make lh_CONF_VALUE_new
working, please?

Thank you,

Matěj

--
https://matej.ceplovi.cz/blog/, Jabber: [hidden email]
GPG Finger: 89EF 4BC6 288A BF43 1BAB  25C3 E09F EF25 D964 84AC

You either die a hero or you live long enough to see yourself become the villain.
  -- Harvey Dent in The Dark Knight

--
openssl-users mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users