diff options
author | djm <> | 2010-10-01 22:59:01 +0000 |
---|---|---|
committer | djm <> | 2010-10-01 22:59:01 +0000 |
commit | fe047d8b632246cb2db3234a0a4f32e5c318857b (patch) | |
tree | 939b752540947d33507b3acc48d76a8bfb7c3dc3 /src/lib/libcrypto/x509v3/v3_alt.c | |
parent | 2ea67f4aa254b09ded62e6e14fc893bbe6381579 (diff) | |
download | openbsd-fe047d8b632246cb2db3234a0a4f32e5c318857b.tar.gz openbsd-fe047d8b632246cb2db3234a0a4f32e5c318857b.tar.bz2 openbsd-fe047d8b632246cb2db3234a0a4f32e5c318857b.zip |
resolve conflicts, fix local changes
Diffstat (limited to 'src/lib/libcrypto/x509v3/v3_alt.c')
-rw-r--r-- | src/lib/libcrypto/x509v3/v3_alt.c | 140 |
1 files changed, 86 insertions, 54 deletions
diff --git a/src/lib/libcrypto/x509v3/v3_alt.c b/src/lib/libcrypto/x509v3/v3_alt.c index 75fda7f268..91aefcddc1 100644 --- a/src/lib/libcrypto/x509v3/v3_alt.c +++ b/src/lib/libcrypto/x509v3/v3_alt.c | |||
@@ -82,6 +82,12 @@ NULL, NULL, NULL}, | |||
82 | (X509V3_EXT_I2V)i2v_GENERAL_NAMES, | 82 | (X509V3_EXT_I2V)i2v_GENERAL_NAMES, |
83 | (X509V3_EXT_V2I)v2i_issuer_alt, | 83 | (X509V3_EXT_V2I)v2i_issuer_alt, |
84 | NULL, NULL, NULL}, | 84 | NULL, NULL, NULL}, |
85 | |||
86 | { NID_certificate_issuer, 0, ASN1_ITEM_ref(GENERAL_NAMES), | ||
87 | 0,0,0,0, | ||
88 | 0,0, | ||
89 | (X509V3_EXT_I2V)i2v_GENERAL_NAMES, | ||
90 | NULL, NULL, NULL, NULL}, | ||
85 | }; | 91 | }; |
86 | 92 | ||
87 | STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method, | 93 | STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method, |
@@ -147,9 +153,9 @@ STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, | |||
147 | BIO_snprintf(htmp, sizeof htmp, | 153 | BIO_snprintf(htmp, sizeof htmp, |
148 | "%X", p[0] << 8 | p[1]); | 154 | "%X", p[0] << 8 | p[1]); |
149 | p += 2; | 155 | p += 2; |
150 | strlcat(oline, htmp, sizeof oline); | 156 | strlcat(oline, htmp, sizeof(oline)); |
151 | if (i != 7) | 157 | if (i != 7) |
152 | strlcat(oline, ":", sizeof oline); | 158 | strlcat(oline, ":", sizeof(oline)); |
153 | } | 159 | } |
154 | } | 160 | } |
155 | else | 161 | else |
@@ -360,6 +366,7 @@ static int copy_email(X509V3_CTX *ctx, GENERAL_NAMES *gens, int move_p) | |||
360 | if (move_p) | 366 | if (move_p) |
361 | { | 367 | { |
362 | X509_NAME_delete_entry(nm, i); | 368 | X509_NAME_delete_entry(nm, i); |
369 | X509_NAME_ENTRY_free(ne); | ||
363 | i--; | 370 | i--; |
364 | } | 371 | } |
365 | if(!email || !(gen = GENERAL_NAME_new())) { | 372 | if(!email || !(gen = GENERAL_NAME_new())) { |
@@ -386,8 +393,8 @@ static int copy_email(X509V3_CTX *ctx, GENERAL_NAMES *gens, int move_p) | |||
386 | 393 | ||
387 | } | 394 | } |
388 | 395 | ||
389 | GENERAL_NAMES *v2i_GENERAL_NAMES(X509V3_EXT_METHOD *method, | 396 | GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method, |
390 | X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval) | 397 | X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval) |
391 | { | 398 | { |
392 | GENERAL_NAME *gen; | 399 | GENERAL_NAME *gen; |
393 | GENERAL_NAMES *gens = NULL; | 400 | GENERAL_NAMES *gens = NULL; |
@@ -408,28 +415,22 @@ GENERAL_NAMES *v2i_GENERAL_NAMES(X509V3_EXT_METHOD *method, | |||
408 | return NULL; | 415 | return NULL; |
409 | } | 416 | } |
410 | 417 | ||
411 | GENERAL_NAME *v2i_GENERAL_NAME(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, | 418 | GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, |
412 | CONF_VALUE *cnf) | 419 | CONF_VALUE *cnf) |
413 | { | 420 | { |
414 | return v2i_GENERAL_NAME_ex(NULL, method, ctx, cnf, 0); | 421 | return v2i_GENERAL_NAME_ex(NULL, method, ctx, cnf, 0); |
415 | } | 422 | } |
416 | 423 | ||
417 | GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, | 424 | GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out, |
418 | X509V3_EXT_METHOD *method, X509V3_CTX *ctx, | 425 | const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, |
419 | CONF_VALUE *cnf, int is_nc) | 426 | int gen_type, char *value, int is_nc) |
420 | { | 427 | { |
421 | char is_string = 0; | 428 | char is_string = 0; |
422 | int type; | ||
423 | GENERAL_NAME *gen = NULL; | 429 | GENERAL_NAME *gen = NULL; |
424 | 430 | ||
425 | char *name, *value; | ||
426 | |||
427 | name = cnf->name; | ||
428 | value = cnf->value; | ||
429 | |||
430 | if(!value) | 431 | if(!value) |
431 | { | 432 | { |
432 | X509V3err(X509V3_F_V2I_GENERAL_NAME_EX,X509V3_R_MISSING_VALUE); | 433 | X509V3err(X509V3_F_A2I_GENERAL_NAME,X509V3_R_MISSING_VALUE); |
433 | return NULL; | 434 | return NULL; |
434 | } | 435 | } |
435 | 436 | ||
@@ -440,74 +441,62 @@ GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, | |||
440 | gen = GENERAL_NAME_new(); | 441 | gen = GENERAL_NAME_new(); |
441 | if(gen == NULL) | 442 | if(gen == NULL) |
442 | { | 443 | { |
443 | X509V3err(X509V3_F_V2I_GENERAL_NAME_EX,ERR_R_MALLOC_FAILURE); | 444 | X509V3err(X509V3_F_A2I_GENERAL_NAME,ERR_R_MALLOC_FAILURE); |
444 | return NULL; | 445 | return NULL; |
445 | } | 446 | } |
446 | } | 447 | } |
447 | 448 | ||
448 | if(!name_cmp(name, "email")) | 449 | switch (gen_type) |
449 | { | ||
450 | is_string = 1; | ||
451 | type = GEN_EMAIL; | ||
452 | } | ||
453 | else if(!name_cmp(name, "URI")) | ||
454 | { | ||
455 | is_string = 1; | ||
456 | type = GEN_URI; | ||
457 | } | ||
458 | else if(!name_cmp(name, "DNS")) | ||
459 | { | 450 | { |
451 | case GEN_URI: | ||
452 | case GEN_EMAIL: | ||
453 | case GEN_DNS: | ||
460 | is_string = 1; | 454 | is_string = 1; |
461 | type = GEN_DNS; | 455 | break; |
462 | } | 456 | |
463 | else if(!name_cmp(name, "RID")) | 457 | case GEN_RID: |
464 | { | 458 | { |
465 | ASN1_OBJECT *obj; | 459 | ASN1_OBJECT *obj; |
466 | if(!(obj = OBJ_txt2obj(value,0))) | 460 | if(!(obj = OBJ_txt2obj(value,0))) |
467 | { | 461 | { |
468 | X509V3err(X509V3_F_V2I_GENERAL_NAME_EX,X509V3_R_BAD_OBJECT); | 462 | X509V3err(X509V3_F_A2I_GENERAL_NAME,X509V3_R_BAD_OBJECT); |
469 | ERR_add_error_data(2, "value=", value); | 463 | ERR_add_error_data(2, "value=", value); |
470 | goto err; | 464 | goto err; |
471 | } | 465 | } |
472 | gen->d.rid = obj; | 466 | gen->d.rid = obj; |
473 | type = GEN_RID; | ||
474 | } | 467 | } |
475 | else if(!name_cmp(name, "IP")) | 468 | break; |
476 | { | 469 | |
470 | case GEN_IPADD: | ||
477 | if (is_nc) | 471 | if (is_nc) |
478 | gen->d.ip = a2i_IPADDRESS_NC(value); | 472 | gen->d.ip = a2i_IPADDRESS_NC(value); |
479 | else | 473 | else |
480 | gen->d.ip = a2i_IPADDRESS(value); | 474 | gen->d.ip = a2i_IPADDRESS(value); |
481 | if(gen->d.ip == NULL) | 475 | if(gen->d.ip == NULL) |
482 | { | 476 | { |
483 | X509V3err(X509V3_F_V2I_GENERAL_NAME_EX,X509V3_R_BAD_IP_ADDRESS); | 477 | X509V3err(X509V3_F_A2I_GENERAL_NAME,X509V3_R_BAD_IP_ADDRESS); |
484 | ERR_add_error_data(2, "value=", value); | 478 | ERR_add_error_data(2, "value=", value); |
485 | goto err; | 479 | goto err; |
486 | } | 480 | } |
487 | type = GEN_IPADD; | 481 | break; |
488 | } | 482 | |
489 | else if(!name_cmp(name, "dirName")) | 483 | case GEN_DIRNAME: |
490 | { | ||
491 | type = GEN_DIRNAME; | ||
492 | if (!do_dirname(gen, value, ctx)) | 484 | if (!do_dirname(gen, value, ctx)) |
493 | { | 485 | { |
494 | X509V3err(X509V3_F_V2I_GENERAL_NAME_EX,X509V3_R_DIRNAME_ERROR); | 486 | X509V3err(X509V3_F_A2I_GENERAL_NAME,X509V3_R_DIRNAME_ERROR); |
495 | goto err; | 487 | goto err; |
496 | } | 488 | } |
497 | } | 489 | break; |
498 | else if(!name_cmp(name, "otherName")) | 490 | |
499 | { | 491 | case GEN_OTHERNAME: |
500 | if (!do_othername(gen, value, ctx)) | 492 | if (!do_othername(gen, value, ctx)) |
501 | { | 493 | { |
502 | X509V3err(X509V3_F_V2I_GENERAL_NAME_EX,X509V3_R_OTHERNAME_ERROR); | 494 | X509V3err(X509V3_F_A2I_GENERAL_NAME,X509V3_R_OTHERNAME_ERROR); |
503 | goto err; | 495 | goto err; |
504 | } | 496 | } |
505 | type = GEN_OTHERNAME; | 497 | break; |
506 | } | 498 | default: |
507 | else | 499 | X509V3err(X509V3_F_A2I_GENERAL_NAME,X509V3_R_UNSUPPORTED_TYPE); |
508 | { | ||
509 | X509V3err(X509V3_F_V2I_GENERAL_NAME_EX,X509V3_R_UNSUPPORTED_OPTION); | ||
510 | ERR_add_error_data(2, "name=", name); | ||
511 | goto err; | 500 | goto err; |
512 | } | 501 | } |
513 | 502 | ||
@@ -517,12 +506,12 @@ GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, | |||
517 | !ASN1_STRING_set(gen->d.ia5, (unsigned char*)value, | 506 | !ASN1_STRING_set(gen->d.ia5, (unsigned char*)value, |
518 | strlen(value))) | 507 | strlen(value))) |
519 | { | 508 | { |
520 | X509V3err(X509V3_F_V2I_GENERAL_NAME_EX,ERR_R_MALLOC_FAILURE); | 509 | X509V3err(X509V3_F_A2I_GENERAL_NAME,ERR_R_MALLOC_FAILURE); |
521 | goto err; | 510 | goto err; |
522 | } | 511 | } |
523 | } | 512 | } |
524 | 513 | ||
525 | gen->type = type; | 514 | gen->type = gen_type; |
526 | 515 | ||
527 | return gen; | 516 | return gen; |
528 | 517 | ||
@@ -532,6 +521,48 @@ GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, | |||
532 | return NULL; | 521 | return NULL; |
533 | } | 522 | } |
534 | 523 | ||
524 | GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, | ||
525 | const X509V3_EXT_METHOD *method, | ||
526 | X509V3_CTX *ctx, CONF_VALUE *cnf, int is_nc) | ||
527 | { | ||
528 | int type; | ||
529 | |||
530 | char *name, *value; | ||
531 | |||
532 | name = cnf->name; | ||
533 | value = cnf->value; | ||
534 | |||
535 | if(!value) | ||
536 | { | ||
537 | X509V3err(X509V3_F_V2I_GENERAL_NAME_EX,X509V3_R_MISSING_VALUE); | ||
538 | return NULL; | ||
539 | } | ||
540 | |||
541 | if(!name_cmp(name, "email")) | ||
542 | type = GEN_EMAIL; | ||
543 | else if(!name_cmp(name, "URI")) | ||
544 | type = GEN_URI; | ||
545 | else if(!name_cmp(name, "DNS")) | ||
546 | type = GEN_DNS; | ||
547 | else if(!name_cmp(name, "RID")) | ||
548 | type = GEN_RID; | ||
549 | else if(!name_cmp(name, "IP")) | ||
550 | type = GEN_IPADD; | ||
551 | else if(!name_cmp(name, "dirName")) | ||
552 | type = GEN_DIRNAME; | ||
553 | else if(!name_cmp(name, "otherName")) | ||
554 | type = GEN_OTHERNAME; | ||
555 | else | ||
556 | { | ||
557 | X509V3err(X509V3_F_V2I_GENERAL_NAME_EX,X509V3_R_UNSUPPORTED_OPTION); | ||
558 | ERR_add_error_data(2, "name=", name); | ||
559 | return NULL; | ||
560 | } | ||
561 | |||
562 | return a2i_GENERAL_NAME(out, method, ctx, type, value, is_nc); | ||
563 | |||
564 | } | ||
565 | |||
535 | static int do_othername(GENERAL_NAME *gen, char *value, X509V3_CTX *ctx) | 566 | static int do_othername(GENERAL_NAME *gen, char *value, X509V3_CTX *ctx) |
536 | { | 567 | { |
537 | char *objtmp = NULL, *p; | 568 | char *objtmp = NULL, *p; |
@@ -577,6 +608,7 @@ static int do_dirname(GENERAL_NAME *gen, char *value, X509V3_CTX *ctx) | |||
577 | if (!ret) | 608 | if (!ret) |
578 | X509_NAME_free(nm); | 609 | X509_NAME_free(nm); |
579 | gen->d.dirn = nm; | 610 | gen->d.dirn = nm; |
611 | X509V3_section_free(ctx, sk); | ||
580 | 612 | ||
581 | return ret; | 613 | return ret; |
582 | } | 614 | } |