1 | =pod
|
---|
2 |
|
---|
3 | =head1 NAME
|
---|
4 |
|
---|
5 | X509_NAME_get_index_by_NID, X509_NAME_get_index_by_OBJ, X509_NAME_get_entry,
|
---|
6 | X509_NAME_entry_count, X509_NAME_get_text_by_NID, X509_NAME_get_text_by_OBJ -
|
---|
7 | X509_NAME lookup and enumeration functions
|
---|
8 |
|
---|
9 | =head1 SYNOPSIS
|
---|
10 |
|
---|
11 | #include <openssl/x509.h>
|
---|
12 |
|
---|
13 | int X509_NAME_get_index_by_NID(const X509_NAME *name, int nid, int lastpos);
|
---|
14 | int X509_NAME_get_index_by_OBJ(const X509_NAME *name,
|
---|
15 | const ASN1_OBJECT *obj, int lastpos);
|
---|
16 |
|
---|
17 | int X509_NAME_entry_count(const X509_NAME *name);
|
---|
18 | X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc);
|
---|
19 |
|
---|
20 | int X509_NAME_get_text_by_NID(const X509_NAME *name, int nid,
|
---|
21 | char *buf, int len);
|
---|
22 | int X509_NAME_get_text_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj,
|
---|
23 | char *buf, int len);
|
---|
24 |
|
---|
25 | =head1 DESCRIPTION
|
---|
26 |
|
---|
27 | These functions allow an B<X509_NAME> structure to be examined. The
|
---|
28 | B<X509_NAME> structure is the same as the B<Name> type defined in
|
---|
29 | RFC2459 (and elsewhere) and used for example in certificate subject
|
---|
30 | and issuer names.
|
---|
31 |
|
---|
32 | X509_NAME_get_index_by_NID() and X509_NAME_get_index_by_OBJ() retrieve
|
---|
33 | the next index matching B<nid> or B<obj> after B<lastpos>. B<lastpos>
|
---|
34 | should initially be set to -1. If there are no more entries -1 is returned.
|
---|
35 | If B<nid> is invalid (doesn't correspond to a valid OID) then -2 is returned.
|
---|
36 |
|
---|
37 | X509_NAME_entry_count() returns the total number of entries in B<name>.
|
---|
38 |
|
---|
39 | X509_NAME_get_entry() retrieves the B<X509_NAME_ENTRY> from B<name>
|
---|
40 | corresponding to index B<loc>. Acceptable values for B<loc> run from
|
---|
41 | 0 to (X509_NAME_entry_count(name) - 1). The value returned is an
|
---|
42 | internal pointer which must not be freed.
|
---|
43 |
|
---|
44 | X509_NAME_get_text_by_NID(), X509_NAME_get_text_by_OBJ() retrieve
|
---|
45 | the "text" from the first entry in B<name> which matches B<nid> or
|
---|
46 | B<obj>, if no such entry exists -1 is returned. At most B<len> bytes
|
---|
47 | will be written and the text written to B<buf> will be null
|
---|
48 | terminated. The length of the output string written is returned
|
---|
49 | excluding the terminating null. If B<buf> is <NULL> then the amount
|
---|
50 | of space needed in B<buf> (excluding the final null) is returned.
|
---|
51 |
|
---|
52 | =head1 NOTES
|
---|
53 |
|
---|
54 | X509_NAME_get_text_by_NID() and X509_NAME_get_text_by_OBJ() should be
|
---|
55 | considered deprecated because they
|
---|
56 | have various limitations which make them
|
---|
57 | of minimal use in practice. They can only find the first matching
|
---|
58 | entry and will copy the contents of the field verbatim: this can
|
---|
59 | be highly confusing if the target is a multicharacter string type
|
---|
60 | like a BMPString or a UTF8String.
|
---|
61 |
|
---|
62 | For a more general solution X509_NAME_get_index_by_NID() or
|
---|
63 | X509_NAME_get_index_by_OBJ() should be used followed by
|
---|
64 | X509_NAME_get_entry() on any matching indices and then the
|
---|
65 | various B<X509_NAME_ENTRY> utility functions on the result.
|
---|
66 |
|
---|
67 | The list of all relevant B<NID_*> and B<OBJ_* codes> can be found in
|
---|
68 | the source code header files F<< <openssl/obj_mac.h> >> and/or
|
---|
69 | F<< <openssl/objects.h> >>.
|
---|
70 |
|
---|
71 | Applications which could pass invalid NIDs to X509_NAME_get_index_by_NID()
|
---|
72 | should check for the return value of -2. Alternatively the NID validity
|
---|
73 | can be determined first by checking OBJ_nid2obj(nid) is not NULL.
|
---|
74 |
|
---|
75 | =head1 RETURN VALUES
|
---|
76 |
|
---|
77 | X509_NAME_get_index_by_NID() and X509_NAME_get_index_by_OBJ()
|
---|
78 | return the index of the next matching entry or -1 if not found.
|
---|
79 | X509_NAME_get_index_by_NID() can also return -2 if the supplied
|
---|
80 | NID is invalid.
|
---|
81 |
|
---|
82 | X509_NAME_entry_count() returns the total number of entries, and 0
|
---|
83 | for failure.
|
---|
84 |
|
---|
85 | X509_NAME_get_entry() returns an B<X509_NAME> pointer to the
|
---|
86 | requested entry or B<NULL> if the index is invalid.
|
---|
87 |
|
---|
88 | =head1 EXAMPLES
|
---|
89 |
|
---|
90 | Process all entries:
|
---|
91 |
|
---|
92 | int i;
|
---|
93 | X509_NAME_ENTRY *e;
|
---|
94 |
|
---|
95 | for (i = 0; i < X509_NAME_entry_count(nm); i++) {
|
---|
96 | e = X509_NAME_get_entry(nm, i);
|
---|
97 | /* Do something with e */
|
---|
98 | }
|
---|
99 |
|
---|
100 | Process all commonName entries:
|
---|
101 |
|
---|
102 | int lastpos = -1;
|
---|
103 | X509_NAME_ENTRY *e;
|
---|
104 |
|
---|
105 | for (;;) {
|
---|
106 | lastpos = X509_NAME_get_index_by_NID(nm, NID_commonName, lastpos);
|
---|
107 | if (lastpos == -1)
|
---|
108 | break;
|
---|
109 | e = X509_NAME_get_entry(nm, lastpos);
|
---|
110 | /* Do something with e */
|
---|
111 | }
|
---|
112 |
|
---|
113 | =head1 SEE ALSO
|
---|
114 |
|
---|
115 | L<ERR_get_error(3)>, L<d2i_X509_NAME(3)>
|
---|
116 |
|
---|
117 | =head1 COPYRIGHT
|
---|
118 |
|
---|
119 | Copyright 2002-2021 The OpenSSL Project Authors. All Rights Reserved.
|
---|
120 |
|
---|
121 | Licensed under the Apache License 2.0 (the "License"). You may not use
|
---|
122 | this file except in compliance with the License. You can obtain a copy
|
---|
123 | in the file LICENSE in the source distribution or at
|
---|
124 | L<https://www.openssl.org/source/license.html>.
|
---|
125 |
|
---|
126 | =cut
|
---|