Sophie

Sophie

distrib > Mageia > 6 > armv7hl > media > core-updates-src > by-pkgid > 5c058d93bc1e7ab7eb60541f8421964a > files > 12

openssl-1.0.2r-1.mga6.src.rpm

diff -aur openssl-1.0.2l/crypto/x509v3/v3_alt.c openssl-1.0.2l_patched/crypto/x509v3/v3_alt.c
--- openssl-1.0.2l/crypto/x509v3/v3_alt.c	2017-05-25 14:54:38.000000000 +0200
+++ openssl-1.0.2l_patched/crypto/x509v3/v3_alt.c	2017-05-26 08:33:41.285793387 +0200
@@ -116,9 +116,57 @@
 {
     unsigned char *p;
     char oline[256], htmp[5];
+
+    int rc = 0;
+
+    /* see http://www.iti.gov.br/resolucoes/RESOLU__O_13_DE_26_04_2002.PDF
+     * for the OID definitions and more details
+     * All content is ASN.1 OCTET STRING
+     */
+    /* person related */
+    const char oid_id_pf[] = "2.16.76.1.3.1"; /* person identification data as follows:
+						* birth date: ddmmyyyy (8)
+						* CPF number: (11)
+						* PIS/PASEP number: (11)
+						* RG number: (11)
+						* RG emmitter and state: (6)
+						*/
+    const char oid_el_pf[] = "2.16.76.1.3.5"; /* Electoral data:
+						* card number: (11)
+						* electoral zone: (3)
+						* electoral section: (4)
+						* city and state: (22)
+						*/
+    /* company related */
+    const char oid_pj_id1[] = "2.16.76.1.3.4"; /* info about the person responsible for the company's certificate:
+						 * birth date: ddmmyyyy (8)
+						 * CPF number: (11)
+						 * PIS/PASEP number: (11)
+						 * RG number: (11)
+						 * RG emitter and state: (6)
+						 */
+    const char oid_pj_name[] = "2.16.76.1.3.2"; /* Name of the person responsible for the company's certificate */
+    const char oid_pj_cnpj[] = "2.16.76.1.3.3"; /* CNPJ number of the company*/
+
     int i;
     switch (gen->type) {
     case GEN_OTHERNAME:
+        rc = OBJ_obj2txt(oline, sizeof(oline), gen->d.otherName->type_id, 1);
+        if (rc)
+            if ((!strncmp(oline, oid_id_pf, sizeof(oid_id_pf)))   ||
+                (!strncmp(oline, oid_el_pf, sizeof(oid_el_pf)))   ||
+                (!strncmp(oline, oid_pj_id1, sizeof(oid_pj_id1))) ||
+                (!strncmp(oline, oid_pj_name, sizeof(oid_pj_name))) ||
+                (!strncmp(oline, oid_pj_cnpj, sizeof(oid_pj_cnpj))))
+                /* FIXME: is that string always null terminated? */
+                if (!X509V3_add_value("othername", gen->d.otherName->value->value.octet_string->data, &ret))
+                    return NULL;
+            else
+                if (!X509V3_add_value("othername","<unsupported>", &ret))
+                    return NULL;
+        else
+            if (!X509V3_add_value("othername","<unsupported>", &ret))
+                return NULL;
         if (!X509V3_add_value("othername", "<unsupported>", &ret))
             return NULL;
         break;