HEIMDAL: allow optional q in DH DomainParameters
authorLove Hornquist Astrand <lha@h5l.org>
Mon, 29 Apr 2013 18:37:39 +0000 (11:37 -0700)
committerAndrew Bartlett <abartlet@samba.org>
Mon, 28 Aug 2017 09:18:15 +0000 (11:18 +0200)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=12986

Reviewed-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
(cherry picked from heimdal commit e8317b955f5a390c4f296871ba6987ad05478c95)

source4/heimdal/kdc/pkinit.c
source4/heimdal/lib/asn1/rfc2459.asn1
source4/heimdal/lib/krb5/pkinit.c

index d85b15650073d2b282fb7ce65e63c13867c710dc..3a9e8f266cefb012e58925e3213a54ab9bd5ce5f 100644 (file)
@@ -361,7 +361,7 @@ get_dh_param(krb5_context context,
     }
 
     ret = _krb5_dh_group_ok(context, config->pkinit_dh_min_bits,
-                           &dhparam.p, &dhparam.g, &dhparam.q, moduli,
+                           &dhparam.p, &dhparam.g, dhparam.q, moduli,
                            &client_params->dh_group_name);
     if (ret) {
        /* XXX send back proposal of better group */
index bf82f81d9e3a6f31af6320687ad9d5dc65b09e6e..7843f65d0f60c50bdfcc5c249fd33f5cd6376ba1 100644 (file)
@@ -239,7 +239,7 @@ ValidationParms ::= SEQUENCE {
 DomainParameters ::= SEQUENCE {
        p               INTEGER, -- odd prime, p=jq +1
        g               INTEGER, -- generator, g
-       q               INTEGER, -- factor of p-1
+       q               INTEGER OPTIONAL, -- factor of p-1
        j               INTEGER OPTIONAL, -- subgroup factor
        validationParms ValidationParms OPTIONAL -- ValidationParms
 }
index 1103a17807be9e1240339580775c203073669244..c30a298a15c992a64a072fcd9424d660602b8996 100644 (file)
@@ -497,7 +497,12 @@ build_auth_pack(krb5_context context,
                free_DomainParameters(&dp);
                return ret;
            }
-           ret = BN_to_integer(context, dh->q, &dp.q);
+           dp.q = calloc(1, sizeof(*dp.q));
+           if (dp.q == NULL) {
+               free_DomainParameters(&dp);
+               return ENOMEM;
+           }
+           ret = BN_to_integer(context, dh->q, dp.q);
            if (ret) {
                free_DomainParameters(&dp);
                return ret;