Ticket #65297: patch-alpine-validate-cert.diff

File patch-alpine-validate-cert.diff, 1.7 KB (added by steven-michaud (Steven Michaud), 2 years ago)

Patch to Alpine 2.25 that fixes this bug

  • imap/src/osdep/unix/ssl_unix.c

    old new  
    554554                                /* Method 2, use cname */
    555555  if(m == 0 || ret != NIL){
    556556     cname = X509_get_subject_name(cert);
    557      for(j = 0, ret = NIL; j < X509_NAME_entry_count(cname) && ret == NIL; j++){
     557     for (j = 0, ret = NIL; j < X509_NAME_entry_count(cname); j++) {
    558558        if((e = X509_NAME_get_entry(cname, j)) != NULL){
    559559           X509_NAME_get_text_by_OBJ(cname, X509_NAME_ENTRY_get_object(e), buf, sizeof(buf));
    560560           s = (char *) buf;
     
    564564                                /* host name matches pattern? */
    565565           ret = ssl_compare_hostnames (host,s) ? NIL :
    566566                 "Server name does not match certificate";
    567            ext = NIL;
     567           if (ret == NIL) break;
     568        }
     569     }
     570     ext = NIL;
    568571                                /* if mismatch, see if in extensions */
    569            if (ret && (ext = X509_get_ext_d2i (cert,NID_subject_alt_name,NIL,NIL)) &&
    570                 (n = sk_GENERAL_NAME_num (ext)))
     572     if (ret && (ext = X509_get_ext_d2i (cert,NID_subject_alt_name,NIL,NIL)) &&
     573         (n = sk_GENERAL_NAME_num (ext)))
    571574                   /* older versions of OpenSSL use "ia5" instead of dNSName */
    572               for (i = 0; ret && (i < n); i++)
    573                   if ((name = sk_GENERAL_NAME_value (ext,i)) &&
    574                      (name->type = GEN_DNS) && (s = name->d.ia5->data) &&
    575                      ssl_compare_hostnames (host,s)) ret = NIL;
    576           if(ext) GENERAL_NAMES_free(ext);
    577         }
    578      }
     575       for (i = 0; ret && (i < n); i++)
     576         if ((name = sk_GENERAL_NAME_value (ext,i)) &&
     577             (name->type = GEN_DNS) && (s = name->d.ia5->data) &&
     578             ssl_compare_hostnames (host,s)) ret = NIL;
     579     if (ext) GENERAL_NAMES_free(ext);
    579580  }
    580581
    581582  if (ret == NIL