1*2175Sjp161948=pod
2*2175Sjp161948
3*2175Sjp161948=head1 NAME
4*2175Sjp161948
5*2175Sjp161948X509_NAME_print_ex, X509_NAME_print_ex_fp, X509_NAME_print,
6*2175Sjp161948X509_NAME_oneline - X509_NAME printing routines.
7*2175Sjp161948
8*2175Sjp161948=head1 SYNOPSIS
9*2175Sjp161948
10*2175Sjp161948 #include <openssl/x509.h>
11*2175Sjp161948
12*2175Sjp161948 int X509_NAME_print_ex(BIO *out, X509_NAME *nm, int indent, unsigned long flags);
13*2175Sjp161948 int X509_NAME_print_ex_fp(FILE *fp, X509_NAME *nm, int indent, unsigned long flags);
14*2175Sjp161948 char *	X509_NAME_oneline(X509_NAME *a,char *buf,int size);
15*2175Sjp161948 int X509_NAME_print(BIO *bp, X509_NAME *name, int obase);
16*2175Sjp161948
17*2175Sjp161948=head1 DESCRIPTION
18*2175Sjp161948
19*2175Sjp161948X509_NAME_print_ex() prints a human readable version of B<nm> to BIO B<out>. Each
20*2175Sjp161948line (for multiline formats) is indented by B<indent> spaces. The output format
21*2175Sjp161948can be extensively customised by use of the B<flags> parameter.
22*2175Sjp161948
23*2175Sjp161948X509_NAME_print_ex_fp() is identical to X509_NAME_print_ex() except the output is
24*2175Sjp161948written to FILE pointer B<fp>.
25*2175Sjp161948
26*2175Sjp161948X509_NAME_oneline() prints an ASCII version of B<a> to B<buf>. At most B<size>
27*2175Sjp161948bytes will be written. If B<buf> is B<NULL> then a buffer is dynamically allocated
28*2175Sjp161948and returned, otherwise B<buf> is returned.
29*2175Sjp161948
30*2175Sjp161948X509_NAME_print() prints out B<name> to B<bp> indenting each line by B<obase>
31*2175Sjp161948characters. Multiple lines are used if the output (including indent) exceeds
32*2175Sjp16194880 characters.
33*2175Sjp161948
34*2175Sjp161948=head1 NOTES
35*2175Sjp161948
36*2175Sjp161948The functions X509_NAME_oneline() and X509_NAME_print() are legacy functions which
37*2175Sjp161948produce a non standard output form, they don't handle multi character fields and
38*2175Sjp161948have various quirks and inconsistencies. Their use is strongly discouraged in new
39*2175Sjp161948applications.
40*2175Sjp161948
41*2175Sjp161948Although there are a large number of possible flags for most purposes
42*2175Sjp161948B<XN_FLAG_ONELINE>, B<XN_FLAG_MULTILINE> or B<XN_FLAG_RFC2253> will suffice.
43*2175Sjp161948As noted on the L<ASN1_STRING_print_ex(3)|ASN1_STRING_print_ex(3)> manual page
44*2175Sjp161948for UTF8 terminals the B<ASN1_STRFLGS_ESC_MSB> should be unset: so for example
45*2175Sjp161948B<XN_FLAG_ONELINE & ~ASN1_STRFLGS_ESC_MSB> would be used.
46*2175Sjp161948
47*2175Sjp161948The complete set of the flags supported by X509_NAME_print_ex() is listed below.
48*2175Sjp161948
49*2175Sjp161948Several options can be ored together.
50*2175Sjp161948
51*2175Sjp161948The options B<XN_FLAG_SEP_COMMA_PLUS>, B<XN_FLAG_SEP_CPLUS_SPC>,
52*2175Sjp161948B<XN_FLAG_SEP_SPLUS_SPC> and B<XN_FLAG_SEP_MULTILINE> determine the field separators
53*2175Sjp161948to use. Two distinct separators are used between distinct RelativeDistinguishedName
54*2175Sjp161948components and separate values in the same RDN for a multi-valued RDN. Multi-valued
55*2175Sjp161948RDNs are currently very rare so the second separator will hardly ever be used.
56*2175Sjp161948
57*2175Sjp161948B<XN_FLAG_SEP_COMMA_PLUS> uses comma and plus as separators. B<XN_FLAG_SEP_CPLUS_SPC>
58*2175Sjp161948uses comma and plus with spaces: this is more readable that plain comma and plus.
59*2175Sjp161948B<XN_FLAG_SEP_SPLUS_SPC> uses spaced semicolon and plus. B<XN_FLAG_SEP_MULTILINE> uses
60*2175Sjp161948spaced newline and plus respectively.
61*2175Sjp161948
62*2175Sjp161948If B<XN_FLAG_DN_REV> is set the whole DN is printed in reversed order.
63*2175Sjp161948
64*2175Sjp161948The fields B<XN_FLAG_FN_SN>, B<XN_FLAG_FN_LN>, B<XN_FLAG_FN_OID>,
65*2175Sjp161948B<XN_FLAG_FN_NONE> determine how a field name is displayed. It will
66*2175Sjp161948use the short name (e.g. CN) the long name (e.g. commonName) always
67*2175Sjp161948use OID numerical form (normally OIDs are only used if the field name is not
68*2175Sjp161948recognised) and no field name respectively.
69*2175Sjp161948
70*2175Sjp161948If B<XN_FLAG_SPC_EQ> is set then spaces will be placed around the '=' character
71*2175Sjp161948separating field names and values.
72*2175Sjp161948
73*2175Sjp161948If B<XN_FLAG_DUMP_UNKNOWN_FIELDS> is set then the encoding of unknown fields is
74*2175Sjp161948printed instead of the values.
75*2175Sjp161948
76*2175Sjp161948If B<XN_FLAG_FN_ALIGN> is set then field names are padded to 20 characters: this
77*2175Sjp161948is only of use for multiline format.
78*2175Sjp161948
79*2175Sjp161948Additionally all the options supported by ASN1_STRING_print_ex() can be used to
80*2175Sjp161948control how each field value is displayed.
81*2175Sjp161948
82*2175Sjp161948In addition a number options can be set for commonly used formats.
83*2175Sjp161948
84*2175Sjp161948B<XN_FLAG_RFC2253> sets options which produce an output compatible with RFC2253 it
85*2175Sjp161948is equivalent to:
86*2175Sjp161948 B<ASN1_STRFLGS_RFC2253 | XN_FLAG_SEP_COMMA_PLUS | XN_FLAG_DN_REV | XN_FLAG_FN_SN | XN_FLAG_DUMP_UNKNOWN_FIELDS>
87*2175Sjp161948
88*2175Sjp161948
89*2175Sjp161948B<XN_FLAG_ONELINE> is a more readable one line format it is the same as:
90*2175Sjp161948 B<ASN1_STRFLGS_RFC2253 | ASN1_STRFLGS_ESC_QUOTE | XN_FLAG_SEP_CPLUS_SPC | XN_FLAG_SPC_EQ | XN_FLAG_FN_SN>
91*2175Sjp161948
92*2175Sjp161948B<XN_FLAG_MULTILINE> is a multiline format is is the same as:
93*2175Sjp161948 B<ASN1_STRFLGS_ESC_CTRL | ASN1_STRFLGS_ESC_MSB | XN_FLAG_SEP_MULTILINE | XN_FLAG_SPC_EQ | XN_FLAG_FN_LN | XN_FLAG_FN_ALIGN>
94*2175Sjp161948
95*2175Sjp161948B<XN_FLAG_COMPAT> uses a format identical to X509_NAME_print(): in fact it calls X509_NAME_print() internally.
96*2175Sjp161948
97*2175Sjp161948=head1 SEE ALSO
98*2175Sjp161948
99*2175Sjp161948L<ASN1_STRING_print_ex(3)|ASN1_STRING_print_ex(3)>
100*2175Sjp161948
101*2175Sjp161948=head1 HISTORY
102*2175Sjp161948
103*2175Sjp161948TBA
104*2175Sjp161948
105*2175Sjp161948=cut
106