jeredfloyd commented on issue #13427:
URL: 
https://github.com/apache/trafficserver/issues/13427#issuecomment-5077013370

   There are a few other items, including const-iness of things.  Here's a 
patch that fixes everything to complete a build successfully on F45.  If it 
looks ok, lmk and I will make it a PR instead.  (I haven't yet tested if it 
creates issues on older releases, but I think it's unlikely.)
   
   ```
   --- src/tscore/X509HostnameValidator.cc.orig 2026-07-25 02:15:34.822042537 
+0000
   +++ src/tscore/X509HostnameValidator.cc      2026-07-25 02:15:32.185006059 
+0000
   @@ -205,12 +205,12 @@
    {
      bool retval = false;
    
   -  if (!a->data || !a->length || cmp_type != a->type) {
   +  if (!ASN1_STRING_get0_data(a) || !ASN1_STRING_length(a) || cmp_type != 
ASN1_STRING_type(a)) {
        return false;
      }
   -  retval = equal(a->data, a->length, b, blen);
   +  retval = equal(ASN1_STRING_get0_data(a), ASN1_STRING_length(a), b, blen);
      if (retval && peername) {
   -    *peername = ats_strndup((char *)a->data, a->length);
   +    *peername = ats_strndup((char *)ASN1_STRING_get0_data(a), 
ASN1_STRING_length(a));
      }
      return retval;
    }
   @@ -218,11 +218,11 @@
    bool
    validate_hostname(X509 *x, const unsigned char *hostname, bool is_ip, char 
**peername)
    {
   -  GENERAL_NAMES *gens = nullptr;
   -  X509_NAME     *name = nullptr;
   -  int            i;
   -  int            alt_type;
   -  bool           retval = false;
   +  GENERAL_NAMES   *gens = nullptr;
   +  const X509_NAME *name = nullptr;
   +  int             i;
   +  int             alt_type;
   +  bool            retval = false;
      ;
      equal_fn equal;
      size_t   hostname_len = strlen((char *)hostname);
   @@ -267,9 +267,9 @@
      name = X509_get_subject_name(x);
    
      while ((i = X509_NAME_get_index_by_NID(name, NID_commonName, i)) >= 0) {
   -    ASN1_STRING   *str;
   -    int            astrlen;
   -    unsigned char *astr;
   +    const ASN1_STRING   *str;
   +    int                 astrlen;
   +    unsigned char       *astr;
        str = X509_NAME_ENTRY_get_data(X509_NAME_get_entry(name, i));
        // Convert to UTF-8
        astrlen = ASN1_STRING_to_UTF8(&astr, str);
   --- src/iocore/net/SSLNetVConnection.cc.orig 2026-07-25 02:24:07.789952688 
+0000
   +++ src/iocore/net/SSLNetVConnection.cc      2026-07-25 02:25:36.161167556 
+0000
   @@ -167,7 +167,7 @@
    }
    
    static void
   -debug_certificate_name(const char *msg, X509_NAME *name)
   +debug_certificate_name(const char *msg, const X509_NAME *name)
    {
      BIO *bio;
    
   --- src/iocore/net/SSLUtils.cc.orig  2026-07-25 02:25:58.022467139 +0000
   +++ src/iocore/net/SSLUtils.cc       2026-07-25 02:37:47.633108283 +0000
   @@ -1104,7 +1104,7 @@
    } /* CheckServerCertNow() */
    
    static char *
   -asn1_strdup(ASN1_STRING *s)
   +asn1_strdup(const ASN1_STRING *s)
    {
      // Make sure we have an 8-bit encoding.
      ink_assert(ASN1_STRING_type(s) == V_ASN1_IA5STRING || ASN1_STRING_type(s) 
== V_ASN1_UTF8STRING ||
   @@ -2407,7 +2407,7 @@
    
        std::set<std::string> name_set;
        // Grub through the names in the certs
   -    X509_NAME *subject = nullptr;
   +    const X509_NAME *subject = nullptr;
    
        // Insert a key for the subject CN.
        subject = X509_get_subject_name(cert);
   @@ -2420,8 +2420,8 @@
              break;
            }
    
   -        X509_NAME_ENTRY *e  = X509_NAME_get_entry(subject, pos);
   -        ASN1_STRING     *cn = X509_NAME_ENTRY_get_data(e);
   +        const X509_NAME_ENTRY *e  = X509_NAME_get_entry(subject, pos);
   +        const ASN1_STRING     *cn = X509_NAME_ENTRY_get_data(e);
            subj_name           = asn1_strdup(cn);
    
            Dbg(dbg_ctl_ssl_load, "subj '%s' in certificate %s %p", 
subj_name.get(), data.cert_names_list[i].c_str(), cert);
   --- src/iocore/net/OCSPStapling.cc.orig      2026-07-25 02:41:18.458968716 
+0000
   +++ src/iocore/net/OCSPStapling.cc   2026-07-25 02:42:21.478823756 +0000
   @@ -489,7 +489,7 @@
      }
    
      /* Calculate the issuerKey hash, excluding tag and length */
   -  if (!EVP_Digest(issuerKey->data, issuerKey->length, md, &i, dgst, 
nullptr)) {
   +  if (!EVP_Digest(ASN1_STRING_get0_data(issuerKey), 
ASN1_STRING_length(issuerKey), md, &i, dgst, nullptr)) {
        goto err;
      }
    
   @@ -515,7 +515,7 @@
    {
      const X509_NAME    *iname;
      const ASN1_INTEGER *serial;
   -  ASN1_BIT_STRING    *ikey;
   +  const ASN1_BIT_STRING    *ikey;
    
      if (!dgst) {
        dgst = EVP_sha1();
   --- src/api/InkAPI.cc.orig   2026-07-25 02:59:52.703119493 +0000
   +++ src/api/InkAPI.cc        2026-07-25 03:00:42.523798053 +0000
   @@ -8307,9 +8307,9 @@
        }
    
        // Extract common name
   -    int              pos              = 
X509_NAME_get_index_by_NID(X509_get_subject_name(cert.get()), NID_commonName, 
-1);
   -    X509_NAME_ENTRY *common_name      = 
X509_NAME_get_entry(X509_get_subject_name(cert.get()), pos);
   -    ASN1_STRING     *common_name_asn1 = 
X509_NAME_ENTRY_get_data(common_name);
   +    const int              pos              = 
X509_NAME_get_index_by_NID(X509_get_subject_name(cert.get()), NID_commonName, 
-1);
   +    const X509_NAME_ENTRY *common_name      = 
X509_NAME_get_entry(X509_get_subject_name(cert.get()), pos);
   +    const ASN1_STRING     *common_name_asn1 = 
X509_NAME_ENTRY_get_data(common_name);
        char *common_name_str = reinterpret_cast<char *>(const_cast<unsigned 
char *>(ASN1_STRING_get0_data(common_name_asn1)));
        if (ASN1_STRING_length(common_name_asn1) != 
static_cast<int>(strlen(common_name_str))) {
          // Embedded null char
   --- plugins/experimental/sslheaders/expand.cc.orig   2026-07-25 
03:13:24.680182258 +0000
   +++ plugins/experimental/sslheaders/expand.cc        2026-07-25 
03:15:55.953244848 +0000
   @@ -49,14 +49,14 @@
    static void
    x509_expand_subject(X509 *x509, BIO *bio)
    {
   -  X509_NAME *name = X509_get_subject_name(x509);
   +  const X509_NAME *name = X509_get_subject_name(x509);
      X509_NAME_print_ex(bio, name, 0 /* indent */, XN_FLAG_ONELINE);
    }
    
    static void
    x509_expand_issuer(X509 *x509, BIO *bio)
    {
   -  X509_NAME *name = X509_get_issuer_name(x509);
   +  const X509_NAME *name = X509_get_issuer_name(x509);
      X509_NAME_print_ex(bio, name, 0 /* indent */, XN_FLAG_ONELINE);
    }
    
   @@ -72,8 +72,8 @@
    {
      const ASN1_BIT_STRING *sig;
      X509_get0_signature(&sig, nullptr, x509);
   -  const char *ptr = reinterpret_cast<const char *>(sig->data);
   -  const char *end = ptr + sig->length;
   +  const char *ptr = reinterpret_cast<const char 
*>(ASN1_STRING_get0_data(sig));
   +  const char *end = ptr + ASN1_STRING_length(sig);
    
      // The canonical OpenSSL way to format the signature seems to be
      // X509_signature_dump(). However that separates each byte with a ':', 
which is
   --- plugins/certifier/certifier.cc.orig      2026-07-25 03:26:32.808935744 
+0000
   +++ plugins/certifier/certifier.cc   2026-07-25 04:02:32.880866169 +0000
   @@ -372,12 +372,18 @@
      X509_gmtime_adj(X509_get_notAfter(cert.get()), static_cast<long>(3650) * 
24 * 3600);
    
      // Get handle to subject name
   -  X509_NAME *n = X509_get_subject_name(cert.get());
   +  X509_NAME *n = X509_NAME_dup(X509_get_subject_name(cert.get()));
      // Set common name field
      if (X509_NAME_add_entry_by_txt(n, "CN", MBSTRING_ASC, (unsigned char 
*)commonName.c_str(), -1, -1, 0) != 1) {
        TSError("[%s] %s: failed to add certificate subject CN", PLUGIN_NAME, 
__func__);
        return nullptr;
      }
   +  if (X509_set_subject_name(cert.get(), n) != 1) {
   +    TSError("[%s] %s: failed to set certificate subject", PLUGIN_NAME, 
__func__);
   +    X509_NAME_free(n);
   +    return nullptr;
   +  }
   +  X509_NAME_free(n);
    
      // Set Traffic Server public key
      if (X509_set_pubkey(cert.get(), ca_pkey_scoped.get()) == 0) {
   --- plugins/experimental/cert_reporting_tool/cert_reporting_tool.cc.orig     
2026-07-25 04:25:19.072669506 +0000
   +++ plugins/experimental/cert_reporting_tool/cert_reporting_tool.cc  
2026-07-25 04:26:01.238251075 +0000
   @@ -65,7 +65,7 @@
            // expiration date, serial number, common name, and subject 
alternative names
            const ASN1_TIME    *not_after    = X509_get_notAfter(cert);
            const ASN1_INTEGER *serial       = X509_get_serialNumber(cert);
   -        X509_NAME          *subject_name = X509_get_subject_name(cert);
   +        const X509_NAME    *subject_name = X509_get_subject_name(cert);
    
            // Subject name
            BIO *subject_bio = BIO_new(BIO_s_mem());
   --- plugins/experimental/txn_box/plugin/src/ts_util.cc.orig  2026-07-25 
04:37:47.324945887 +0000
   +++ plugins/experimental/txn_box/plugin/src/ts_util.cc       2026-07-25 
04:39:21.571239702 +0000
   @@ -1106,7 +1106,7 @@
    namespace
    {
      TextView
   -  ssl_value_for(X509_NAME *name, int nid)
   +  ssl_value_for(const X509_NAME *name, int nid)
      {
        if (int loc = X509_NAME_get_index_by_NID(name, nid, -1); loc >= 0) {
          if (auto entry = X509_NAME_get_entry(name, loc); entry != nullptr) {
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to