grpc 1.41.0 → 1.41.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +4 -3
- data/etc/roots.pem +335 -326
- data/src/ruby/ext/grpc/extconf.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/boringssl-with-bazel/err_data.c +278 -272
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +15 -22
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +13 -7
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
- data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +268 -271
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +6 -43
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +0 -39
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +25 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +289 -198
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +9 -13
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +11 -8
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
- data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
- data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +45 -65
- data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +21 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +5 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +24 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +12 -9
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +9 -4
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +151 -12
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +181 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +11 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +11 -50
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +0 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +22 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +11 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +4 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +17 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +71 -26
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +304 -192
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +2 -9
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +9 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +8 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +9 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +5 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +26 -12
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -32
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +50 -76
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +0 -131
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +48 -8
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +266 -357
- data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +90 -152
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +15 -13
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +75 -79
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +96 -97
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +63 -43
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -12
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +14 -16
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +14 -27
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +203 -203
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +30 -41
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +47 -33
- metadata +39 -38
@@ -66,6 +66,10 @@
|
|
66
66
|
#include <openssl/obj.h>
|
67
67
|
#include <openssl/x509v3.h>
|
68
68
|
|
69
|
+
#include "internal.h"
|
70
|
+
#include "../x509/internal.h"
|
71
|
+
|
72
|
+
|
69
73
|
static void *v2i_crld(const X509V3_EXT_METHOD *method,
|
70
74
|
X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval);
|
71
75
|
static int i2r_crldp(const X509V3_EXT_METHOD *method, void *pcrldp, BIO *out,
|
@@ -61,6 +61,11 @@
|
|
61
61
|
#include <openssl/mem.h>
|
62
62
|
#include <openssl/x509v3.h>
|
63
63
|
|
64
|
+
#include "internal.h"
|
65
|
+
|
66
|
+
|
67
|
+
typedef BIT_STRING_BITNAME ENUMERATED_NAMES;
|
68
|
+
|
64
69
|
static const ENUMERATED_NAMES crl_reasons[] = {
|
65
70
|
{CRL_REASON_UNSPECIFIED, "Unspecified", "unspecified"},
|
66
71
|
{CRL_REASON_KEY_COMPROMISE, "Key Compromise", "keyCompromise"},
|
@@ -66,6 +66,7 @@
|
|
66
66
|
#include <openssl/x509v3.h>
|
67
67
|
|
68
68
|
#include "../internal.h"
|
69
|
+
#include "../x509/internal.h"
|
69
70
|
|
70
71
|
|
71
72
|
static void *v2i_NAME_CONSTRAINTS(const X509V3_EXT_METHOD *method,
|
@@ -389,25 +390,73 @@ static int nc_dn(X509_NAME *nm, X509_NAME *base)
|
|
389
390
|
return X509_V_OK;
|
390
391
|
}
|
391
392
|
|
393
|
+
static int starts_with(const CBS *cbs, uint8_t c)
|
394
|
+
{
|
395
|
+
return CBS_len(cbs) > 0 && CBS_data(cbs)[0] == c;
|
396
|
+
}
|
397
|
+
|
398
|
+
static int equal_case(const CBS *a, const CBS *b)
|
399
|
+
{
|
400
|
+
if (CBS_len(a) != CBS_len(b)) {
|
401
|
+
return 0;
|
402
|
+
}
|
403
|
+
/* Note we cannot use |OPENSSL_strncasecmp| because that would stop
|
404
|
+
* iterating at NUL. */
|
405
|
+
const uint8_t *a_data = CBS_data(a), *b_data = CBS_data(b);
|
406
|
+
for (size_t i = 0; i < CBS_len(a); i++) {
|
407
|
+
if (OPENSSL_tolower(a_data[i]) != OPENSSL_tolower(b_data[i])) {
|
408
|
+
return 0;
|
409
|
+
}
|
410
|
+
}
|
411
|
+
return 1;
|
412
|
+
}
|
413
|
+
|
414
|
+
static int has_suffix_case(const CBS *a, const CBS *b)
|
415
|
+
{
|
416
|
+
if (CBS_len(a) < CBS_len(b)) {
|
417
|
+
return 0;
|
418
|
+
}
|
419
|
+
CBS copy = *a;
|
420
|
+
CBS_skip(©, CBS_len(a) - CBS_len(b));
|
421
|
+
return equal_case(©, b);
|
422
|
+
}
|
423
|
+
|
392
424
|
static int nc_dns(ASN1_IA5STRING *dns, ASN1_IA5STRING *base)
|
393
425
|
{
|
394
|
-
|
395
|
-
|
426
|
+
CBS dns_cbs, base_cbs;
|
427
|
+
CBS_init(&dns_cbs, dns->data, dns->length);
|
428
|
+
CBS_init(&base_cbs, base->data, base->length);
|
429
|
+
|
396
430
|
/* Empty matches everything */
|
397
|
-
if (
|
431
|
+
if (CBS_len(&base_cbs) == 0) {
|
398
432
|
return X509_V_OK;
|
433
|
+
}
|
434
|
+
|
435
|
+
/* If |base_cbs| begins with a '.', do a simple suffix comparison. This is
|
436
|
+
* not part of RFC5280, but is part of OpenSSL's original behavior. */
|
437
|
+
if (starts_with(&base_cbs, '.')) {
|
438
|
+
if (has_suffix_case(&dns_cbs, &base_cbs)) {
|
439
|
+
return X509_V_OK;
|
440
|
+
}
|
441
|
+
return X509_V_ERR_PERMITTED_VIOLATION;
|
442
|
+
}
|
443
|
+
|
399
444
|
/*
|
400
445
|
* Otherwise can add zero or more components on the left so compare RHS
|
401
446
|
* and if dns is longer and expect '.' as preceding character.
|
402
447
|
*/
|
403
|
-
if (
|
404
|
-
|
405
|
-
if (
|
448
|
+
if (CBS_len(&dns_cbs) > CBS_len(&base_cbs)) {
|
449
|
+
uint8_t dot;
|
450
|
+
if (!CBS_skip(&dns_cbs, CBS_len(&dns_cbs) - CBS_len(&base_cbs) - 1) ||
|
451
|
+
!CBS_get_u8(&dns_cbs, &dot) ||
|
452
|
+
dot != '.') {
|
406
453
|
return X509_V_ERR_PERMITTED_VIOLATION;
|
454
|
+
}
|
407
455
|
}
|
408
456
|
|
409
|
-
if (
|
457
|
+
if (!equal_case(&dns_cbs, &base_cbs)) {
|
410
458
|
return X509_V_ERR_PERMITTED_VIOLATION;
|
459
|
+
}
|
411
460
|
|
412
461
|
return X509_V_OK;
|
413
462
|
|
@@ -415,86 +464,94 @@ static int nc_dns(ASN1_IA5STRING *dns, ASN1_IA5STRING *base)
|
|
415
464
|
|
416
465
|
static int nc_email(ASN1_IA5STRING *eml, ASN1_IA5STRING *base)
|
417
466
|
{
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
467
|
+
CBS eml_cbs, base_cbs;
|
468
|
+
CBS_init(&eml_cbs, eml->data, eml->length);
|
469
|
+
CBS_init(&base_cbs, base->data, base->length);
|
470
|
+
|
471
|
+
/* TODO(davidben): In OpenSSL 1.1.1, this switched from the first '@' to the
|
472
|
+
* last one. Match them here, or perhaps do an actual parse. Looks like
|
473
|
+
* multiple '@'s may be allowed in quoted strings. */
|
474
|
+
CBS eml_local, base_local;
|
475
|
+
if (!CBS_get_until_first(&eml_cbs, &eml_local, '@')) {
|
424
476
|
return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
|
477
|
+
}
|
478
|
+
int base_has_at = CBS_get_until_first(&base_cbs, &base_local, '@');
|
479
|
+
|
425
480
|
/* Special case: inital '.' is RHS match */
|
426
|
-
if (!
|
427
|
-
if (
|
428
|
-
|
429
|
-
if (!OPENSSL_strcasecmp(baseptr, emlptr))
|
430
|
-
return X509_V_OK;
|
481
|
+
if (!base_has_at && starts_with(&base_cbs, '.')) {
|
482
|
+
if (has_suffix_case(&eml_cbs, &base_cbs)) {
|
483
|
+
return X509_V_OK;
|
431
484
|
}
|
432
485
|
return X509_V_ERR_PERMITTED_VIOLATION;
|
433
486
|
}
|
434
487
|
|
435
488
|
/* If we have anything before '@' match local part */
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
return X509_V_ERR_PERMITTED_VIOLATION;
|
489
|
+
if (base_has_at) {
|
490
|
+
/* TODO(davidben): This interprets a constraint of "@example.com" as
|
491
|
+
* "example.com", which is not part of RFC5280. */
|
492
|
+
if (CBS_len(&base_local) > 0) {
|
441
493
|
/* Case sensitive match of local part */
|
442
|
-
if (
|
494
|
+
if (!CBS_mem_equal(&base_local, CBS_data(&eml_local),
|
495
|
+
CBS_len(&eml_local))) {
|
443
496
|
return X509_V_ERR_PERMITTED_VIOLATION;
|
497
|
+
}
|
444
498
|
}
|
445
499
|
/* Position base after '@' */
|
446
|
-
|
500
|
+
assert(starts_with(&base_cbs, '@'));
|
501
|
+
CBS_skip(&base_cbs, 1);
|
447
502
|
}
|
448
|
-
|
503
|
+
|
449
504
|
/* Just have hostname left to match: case insensitive */
|
450
|
-
|
505
|
+
assert(starts_with(&eml_cbs, '@'));
|
506
|
+
CBS_skip(&eml_cbs, 1);
|
507
|
+
if (!equal_case(&base_cbs, &eml_cbs)) {
|
451
508
|
return X509_V_ERR_PERMITTED_VIOLATION;
|
509
|
+
}
|
452
510
|
|
453
511
|
return X509_V_OK;
|
454
|
-
|
455
512
|
}
|
456
513
|
|
457
514
|
static int nc_uri(ASN1_IA5STRING *uri, ASN1_IA5STRING *base)
|
458
515
|
{
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
516
|
+
CBS uri_cbs, base_cbs;
|
517
|
+
CBS_init(&uri_cbs, uri->data, uri->length);
|
518
|
+
CBS_init(&base_cbs, base->data, base->length);
|
519
|
+
|
463
520
|
/* Check for foo:// and skip past it */
|
464
|
-
|
521
|
+
CBS scheme;
|
522
|
+
uint8_t byte;
|
523
|
+
if (!CBS_get_until_first(&uri_cbs, &scheme, ':') ||
|
524
|
+
!CBS_skip(&uri_cbs, 1) || // Skip the colon
|
525
|
+
!CBS_get_u8(&uri_cbs, &byte) || byte != '/' ||
|
526
|
+
!CBS_get_u8(&uri_cbs, &byte) || byte != '/') {
|
465
527
|
return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
|
466
|
-
|
467
|
-
|
468
|
-
/* Determine length of hostname part of URI */
|
469
|
-
|
470
|
-
/* Look for a port indicator as end of hostname first */
|
471
|
-
|
472
|
-
p = strchr(hostptr, ':');
|
473
|
-
/* Otherwise look for trailing slash */
|
474
|
-
if (!p)
|
475
|
-
p = strchr(hostptr, '/');
|
528
|
+
}
|
476
529
|
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
530
|
+
/* Look for a port indicator as end of hostname first. Otherwise look for
|
531
|
+
* trailing slash, or the end of the string.
|
532
|
+
* TODO(davidben): This is not a correct URI parser and mishandles IPv6
|
533
|
+
* literals. */
|
534
|
+
CBS host;
|
535
|
+
if (!CBS_get_until_first(&uri_cbs, &host, ':') &&
|
536
|
+
!CBS_get_until_first(&uri_cbs, &host, '/')) {
|
537
|
+
host = uri_cbs;
|
538
|
+
}
|
481
539
|
|
482
|
-
if (
|
540
|
+
if (CBS_len(&host) == 0) {
|
483
541
|
return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
|
542
|
+
}
|
484
543
|
|
485
544
|
/* Special case: inital '.' is RHS match */
|
486
|
-
if (
|
487
|
-
if (
|
488
|
-
|
489
|
-
if (!OPENSSL_strncasecmp(p, baseptr, base->length))
|
490
|
-
return X509_V_OK;
|
545
|
+
if (starts_with(&base_cbs, '.')) {
|
546
|
+
if (has_suffix_case(&host, &base_cbs)) {
|
547
|
+
return X509_V_OK;
|
491
548
|
}
|
492
549
|
return X509_V_ERR_PERMITTED_VIOLATION;
|
493
550
|
}
|
494
551
|
|
495
|
-
if ((
|
496
|
-
|| OPENSSL_strncasecmp(hostptr, baseptr, hostlen))
|
552
|
+
if (!equal_case(&base_cbs, &host)) {
|
497
553
|
return X509_V_ERR_PERMITTED_VIOLATION;
|
554
|
+
}
|
498
555
|
|
499
556
|
return X509_V_OK;
|
500
557
|
|
@@ -75,7 +75,8 @@ static int i2r_pci(X509V3_EXT_METHOD *method, PROXY_CERT_INFO_EXTENSION *pci,
|
|
75
75
|
i2a_ASN1_OBJECT(out, pci->proxyPolicy->policyLanguage);
|
76
76
|
BIO_puts(out, "\n");
|
77
77
|
if (pci->proxyPolicy->policy && pci->proxyPolicy->policy->data)
|
78
|
-
BIO_printf(out, "%*sPolicy Text:
|
78
|
+
BIO_printf(out, "%*sPolicy Text: %.*s\n", indent, "",
|
79
|
+
pci->proxyPolicy->policy->length,
|
79
80
|
pci->proxyPolicy->policy->data);
|
80
81
|
return 1;
|
81
82
|
}
|
@@ -218,7 +218,6 @@ static int unknown_ext_print(BIO *out, X509_EXTENSION *ext,
|
|
218
218
|
}
|
219
219
|
}
|
220
220
|
|
221
|
-
#ifndef OPENSSL_NO_FP_API
|
222
221
|
int X509V3_EXT_print_fp(FILE *fp, X509_EXTENSION *ext, int flag, int indent)
|
223
222
|
{
|
224
223
|
BIO *bio_tmp;
|
@@ -229,4 +228,3 @@ int X509V3_EXT_print_fp(FILE *fp, X509_EXTENSION *ext, int flag, int indent)
|
|
229
228
|
BIO_free(bio_tmp);
|
230
229
|
return ret;
|
231
230
|
}
|
232
|
-
#endif
|
@@ -88,42 +88,69 @@ static int ipv6_hex(unsigned char *out, const char *in, int inlen);
|
|
88
88
|
|
89
89
|
/* Add a CONF_VALUE name value pair to stack */
|
90
90
|
|
91
|
-
int
|
92
|
-
|
91
|
+
static int x509V3_add_len_value(const char *name, const char *value,
|
92
|
+
size_t value_len, int omit_value,
|
93
|
+
STACK_OF(CONF_VALUE) **extlist)
|
93
94
|
{
|
94
95
|
CONF_VALUE *vtmp = NULL;
|
95
96
|
char *tname = NULL, *tvalue = NULL;
|
97
|
+
int extlist_was_null = *extlist == NULL;
|
96
98
|
if (name && !(tname = OPENSSL_strdup(name)))
|
97
|
-
goto
|
98
|
-
if (
|
99
|
-
|
99
|
+
goto malloc_err;
|
100
|
+
if (!omit_value) {
|
101
|
+
/* |CONF_VALUE| cannot represent strings with NULs. */
|
102
|
+
if (OPENSSL_memchr(value, 0, value_len)) {
|
103
|
+
OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_VALUE);
|
104
|
+
goto err;
|
105
|
+
}
|
106
|
+
tvalue = OPENSSL_strndup(value, value_len);
|
107
|
+
if (tvalue == NULL) {
|
108
|
+
goto malloc_err;
|
109
|
+
}
|
110
|
+
}
|
100
111
|
if (!(vtmp = CONF_VALUE_new()))
|
101
|
-
goto
|
112
|
+
goto malloc_err;
|
102
113
|
if (!*extlist && !(*extlist = sk_CONF_VALUE_new_null()))
|
103
|
-
goto
|
114
|
+
goto malloc_err;
|
104
115
|
vtmp->section = NULL;
|
105
116
|
vtmp->name = tname;
|
106
117
|
vtmp->value = tvalue;
|
107
118
|
if (!sk_CONF_VALUE_push(*extlist, vtmp))
|
108
|
-
goto
|
119
|
+
goto malloc_err;
|
109
120
|
return 1;
|
110
|
-
|
121
|
+
malloc_err:
|
111
122
|
OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
123
|
+
err:
|
124
|
+
if (extlist_was_null) {
|
125
|
+
sk_CONF_VALUE_free(*extlist);
|
126
|
+
*extlist = NULL;
|
127
|
+
}
|
128
|
+
OPENSSL_free(vtmp);
|
129
|
+
OPENSSL_free(tname);
|
130
|
+
OPENSSL_free(tvalue);
|
118
131
|
return 0;
|
119
132
|
}
|
120
133
|
|
134
|
+
int X509V3_add_value(const char *name, const char *value,
|
135
|
+
STACK_OF(CONF_VALUE) **extlist)
|
136
|
+
{
|
137
|
+
return x509V3_add_len_value(name, value, value != NULL ? strlen(value) : 0,
|
138
|
+
/*omit_value=*/value == NULL, extlist);
|
139
|
+
}
|
140
|
+
|
121
141
|
int X509V3_add_value_uchar(const char *name, const unsigned char *value,
|
122
142
|
STACK_OF(CONF_VALUE) **extlist)
|
123
143
|
{
|
124
144
|
return X509V3_add_value(name, (const char *)value, extlist);
|
125
145
|
}
|
126
146
|
|
147
|
+
int x509V3_add_value_asn1_string(const char *name, const ASN1_STRING *value,
|
148
|
+
STACK_OF(CONF_VALUE) **extlist)
|
149
|
+
{
|
150
|
+
return x509V3_add_len_value(name, (const char *)value->data, value->length,
|
151
|
+
/*omit_value=*/0, extlist);
|
152
|
+
}
|
153
|
+
|
127
154
|
/* Free function for STACK_OF(CONF_VALUE) */
|
128
155
|
|
129
156
|
void X509V3_conf_free(CONF_VALUE *conf)
|
@@ -268,7 +295,7 @@ ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *method, const char *value)
|
|
268
295
|
return aint;
|
269
296
|
}
|
270
297
|
|
271
|
-
int X509V3_add_value_int(const char *name, ASN1_INTEGER *aint,
|
298
|
+
int X509V3_add_value_int(const char *name, const ASN1_INTEGER *aint,
|
272
299
|
STACK_OF(CONF_VALUE) **extlist)
|
273
300
|
{
|
274
301
|
char *strtmp;
|
@@ -631,27 +658,45 @@ static void str_free(OPENSSL_STRING str)
|
|
631
658
|
|
632
659
|
static int append_ia5(STACK_OF(OPENSSL_STRING) **sk, ASN1_IA5STRING *email)
|
633
660
|
{
|
634
|
-
char *emtmp;
|
635
661
|
/* First some sanity checks */
|
636
662
|
if (email->type != V_ASN1_IA5STRING)
|
637
663
|
return 1;
|
638
|
-
if (
|
664
|
+
if (email->data == NULL || email->length == 0)
|
665
|
+
return 1;
|
666
|
+
/* |OPENSSL_STRING| cannot represent strings with embedded NULs. Do not
|
667
|
+
* report them as outputs. */
|
668
|
+
if (OPENSSL_memchr(email->data, 0, email->length) != NULL)
|
639
669
|
return 1;
|
670
|
+
|
671
|
+
char *emtmp = NULL;
|
640
672
|
if (!*sk)
|
641
673
|
*sk = sk_OPENSSL_STRING_new(sk_strcmp);
|
642
674
|
if (!*sk)
|
643
|
-
|
675
|
+
goto err;
|
676
|
+
|
677
|
+
emtmp = OPENSSL_strndup((char *)email->data, email->length);
|
678
|
+
if (emtmp == NULL) {
|
679
|
+
goto err;
|
680
|
+
}
|
681
|
+
|
644
682
|
/* Don't add duplicates */
|
645
683
|
sk_OPENSSL_STRING_sort(*sk);
|
646
|
-
if (sk_OPENSSL_STRING_find(*sk, NULL,
|
684
|
+
if (sk_OPENSSL_STRING_find(*sk, NULL, emtmp)) {
|
685
|
+
OPENSSL_free(emtmp);
|
647
686
|
return 1;
|
648
|
-
|
649
|
-
if (!
|
650
|
-
|
651
|
-
*sk = NULL;
|
652
|
-
return 0;
|
687
|
+
}
|
688
|
+
if (!sk_OPENSSL_STRING_push(*sk, emtmp)) {
|
689
|
+
goto err;
|
653
690
|
}
|
654
691
|
return 1;
|
692
|
+
|
693
|
+
err:
|
694
|
+
/* TODO(davidben): Fix the error-handling in this file. It currently relies
|
695
|
+
* on |append_ia5| leaving |*sk| at NULL on error. */
|
696
|
+
OPENSSL_free(emtmp);
|
697
|
+
X509_email_free(*sk);
|
698
|
+
*sk = NULL;
|
699
|
+
return 0;
|
655
700
|
}
|
656
701
|
|
657
702
|
void X509_email_free(STACK_OF(OPENSSL_STRING) *sk)
|
@@ -1120,7 +1165,7 @@ int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags)
|
|
1120
1165
|
|
1121
1166
|
/*
|
1122
1167
|
* Convert IP addresses both IPv4 and IPv6 into an OCTET STRING compatible
|
1123
|
-
* with
|
1168
|
+
* with RFC 3280.
|
1124
1169
|
*/
|
1125
1170
|
|
1126
1171
|
ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc)
|