diff options
Diffstat (limited to 'src/lib/libcrypto/asn1/a_strex.c')
| -rw-r--r-- | src/lib/libcrypto/asn1/a_strex.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/src/lib/libcrypto/asn1/a_strex.c b/src/lib/libcrypto/asn1/a_strex.c index 569b811998..128aa7e772 100644 --- a/src/lib/libcrypto/asn1/a_strex.c +++ b/src/lib/libcrypto/asn1/a_strex.c | |||
| @@ -371,6 +371,8 @@ static int do_indent(char_io *io_ch, void *arg, int indent) | |||
| 371 | return 1; | 371 | return 1; |
| 372 | } | 372 | } |
| 373 | 373 | ||
| 374 | #define FN_WIDTH_LN 25 | ||
| 375 | #define FN_WIDTH_SN 10 | ||
| 374 | 376 | ||
| 375 | static int do_name_ex(char_io *io_ch, void *arg, X509_NAME *n, | 377 | static int do_name_ex(char_io *io_ch, void *arg, X509_NAME *n, |
| 376 | int indent, unsigned long flags) | 378 | int indent, unsigned long flags) |
| @@ -456,19 +458,29 @@ static int do_name_ex(char_io *io_ch, void *arg, X509_NAME *n, | |||
| 456 | val = X509_NAME_ENTRY_get_data(ent); | 458 | val = X509_NAME_ENTRY_get_data(ent); |
| 457 | fn_nid = OBJ_obj2nid(fn); | 459 | fn_nid = OBJ_obj2nid(fn); |
| 458 | if(fn_opt != XN_FLAG_FN_NONE) { | 460 | if(fn_opt != XN_FLAG_FN_NONE) { |
| 459 | int objlen; | 461 | int objlen, fld_len; |
| 460 | if((fn_opt == XN_FLAG_FN_OID) || (fn_nid==NID_undef) ) { | 462 | if((fn_opt == XN_FLAG_FN_OID) || (fn_nid==NID_undef) ) { |
| 461 | OBJ_obj2txt(objtmp, 80, fn, 1); | 463 | OBJ_obj2txt(objtmp, 80, fn, 1); |
| 464 | fld_len = 0; /* XXX: what should this be? */ | ||
| 462 | objbuf = objtmp; | 465 | objbuf = objtmp; |
| 463 | } else { | 466 | } else { |
| 464 | if(fn_opt == XN_FLAG_FN_SN) | 467 | if(fn_opt == XN_FLAG_FN_SN) { |
| 468 | fld_len = FN_WIDTH_SN; | ||
| 465 | objbuf = OBJ_nid2sn(fn_nid); | 469 | objbuf = OBJ_nid2sn(fn_nid); |
| 466 | else if(fn_opt == XN_FLAG_FN_LN) | 470 | } else if(fn_opt == XN_FLAG_FN_LN) { |
| 471 | fld_len = FN_WIDTH_LN; | ||
| 467 | objbuf = OBJ_nid2ln(fn_nid); | 472 | objbuf = OBJ_nid2ln(fn_nid); |
| 468 | else objbuf = ""; | 473 | } else { |
| 474 | fld_len = 0; /* XXX: what should this be? */ | ||
| 475 | objbuf = ""; | ||
| 476 | } | ||
| 469 | } | 477 | } |
| 470 | objlen = strlen(objbuf); | 478 | objlen = strlen(objbuf); |
| 471 | if(!io_ch(arg, objbuf, objlen)) return -1; | 479 | if(!io_ch(arg, objbuf, objlen)) return -1; |
| 480 | if ((objlen < fld_len) && (flags & XN_FLAG_FN_ALIGN)) { | ||
| 481 | if (!do_indent(io_ch, arg, fld_len - objlen)) return -1; | ||
| 482 | outlen += fld_len - objlen; | ||
| 483 | } | ||
| 472 | if(!io_ch(arg, sep_eq, sep_eq_len)) return -1; | 484 | if(!io_ch(arg, sep_eq, sep_eq_len)) return -1; |
| 473 | outlen += objlen + sep_eq_len; | 485 | outlen += objlen + sep_eq_len; |
| 474 | } | 486 | } |
| @@ -491,12 +503,24 @@ static int do_name_ex(char_io *io_ch, void *arg, X509_NAME *n, | |||
| 491 | 503 | ||
| 492 | int X509_NAME_print_ex(BIO *out, X509_NAME *nm, int indent, unsigned long flags) | 504 | int X509_NAME_print_ex(BIO *out, X509_NAME *nm, int indent, unsigned long flags) |
| 493 | { | 505 | { |
| 506 | if(flags == XN_FLAG_COMPAT) | ||
| 507 | return X509_NAME_print(out, nm, indent); | ||
| 494 | return do_name_ex(send_bio_chars, out, nm, indent, flags); | 508 | return do_name_ex(send_bio_chars, out, nm, indent, flags); |
| 495 | } | 509 | } |
| 496 | 510 | ||
| 497 | 511 | ||
| 498 | int X509_NAME_print_ex_fp(FILE *fp, X509_NAME *nm, int indent, unsigned long flags) | 512 | int X509_NAME_print_ex_fp(FILE *fp, X509_NAME *nm, int indent, unsigned long flags) |
| 499 | { | 513 | { |
| 514 | if(flags == XN_FLAG_COMPAT) | ||
| 515 | { | ||
| 516 | BIO *btmp; | ||
| 517 | int ret; | ||
| 518 | btmp = BIO_new_fp(fp, BIO_NOCLOSE); | ||
| 519 | if(!btmp) return -1; | ||
| 520 | ret = X509_NAME_print(btmp, nm, indent); | ||
| 521 | BIO_free(btmp); | ||
| 522 | return ret; | ||
| 523 | } | ||
| 500 | return do_name_ex(send_fp_chars, fp, nm, indent, flags); | 524 | return do_name_ex(send_fp_chars, fp, nm, indent, flags); |
| 501 | } | 525 | } |
| 502 | 526 | ||
