2002-10-10 01:05:05 +08:00
|
|
|
=pod
|
|
|
|
|
2002-11-13 09:20:43 +08:00
|
|
|
=head1 NAME
|
|
|
|
|
2002-10-10 01:05:05 +08:00
|
|
|
X509_NAME_get_index_by_NID, X509_NAME_get_index_by_OBJ, X509_NAME_get_entry,
|
|
|
|
X509_NAME_entry_count, X509_NAME_get_text_by_NID, X509_NAME_get_text_by_OBJ -
|
|
|
|
X509_NAME lookup and enumeration functions
|
|
|
|
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
|
2006-05-14 19:28:00 +08:00
|
|
|
#include <openssl/x509.h>
|
2002-10-10 01:05:05 +08:00
|
|
|
|
2020-03-23 15:30:37 +08:00
|
|
|
int X509_NAME_get_index_by_NID(const X509_NAME *name, int nid, int lastpos);
|
|
|
|
int X509_NAME_get_index_by_OBJ(const X509_NAME *name,
|
|
|
|
const ASN1_OBJECT *obj, int lastpos);
|
2002-10-10 01:05:05 +08:00
|
|
|
|
2016-07-08 06:10:29 +08:00
|
|
|
int X509_NAME_entry_count(const X509_NAME *name);
|
2016-08-20 01:44:10 +08:00
|
|
|
X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc);
|
2006-05-14 19:28:00 +08:00
|
|
|
|
2020-03-23 15:30:37 +08:00
|
|
|
int X509_NAME_get_text_by_NID(const X509_NAME *name, int nid,
|
|
|
|
char *buf, int len);
|
|
|
|
int X509_NAME_get_text_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj,
|
|
|
|
char *buf, int len);
|
2002-10-10 01:05:05 +08:00
|
|
|
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
|
|
|
|
These functions allow an B<X509_NAME> structure to be examined. The
|
|
|
|
B<X509_NAME> structure is the same as the B<Name> type defined in
|
|
|
|
RFC2459 (and elsewhere) and used for example in certificate subject
|
|
|
|
and issuer names.
|
|
|
|
|
|
|
|
X509_NAME_get_index_by_NID() and X509_NAME_get_index_by_OBJ() retrieve
|
|
|
|
the next index matching B<nid> or B<obj> after B<lastpos>. B<lastpos>
|
|
|
|
should initially be set to -1. If there are no more entries -1 is returned.
|
2015-07-06 21:17:49 +08:00
|
|
|
If B<nid> is invalid (doesn't correspond to a valid OID) then -2 is returned.
|
2002-10-10 01:05:05 +08:00
|
|
|
|
|
|
|
X509_NAME_entry_count() returns the total number of entries in B<name>.
|
|
|
|
|
|
|
|
X509_NAME_get_entry() retrieves the B<X509_NAME_ENTRY> from B<name>
|
|
|
|
corresponding to index B<loc>. Acceptable values for B<loc> run from
|
|
|
|
0 to (X509_NAME_entry_count(name) - 1). The value returned is an
|
|
|
|
internal pointer which must not be freed.
|
|
|
|
|
|
|
|
X509_NAME_get_text_by_NID(), X509_NAME_get_text_by_OBJ() retrieve
|
|
|
|
the "text" from the first entry in B<name> which matches B<nid> or
|
|
|
|
B<obj>, if no such entry exists -1 is returned. At most B<len> bytes
|
|
|
|
will be written and the text written to B<buf> will be null
|
|
|
|
terminated. The length of the output string written is returned
|
|
|
|
excluding the terminating null. If B<buf> is <NULL> then the amount
|
2016-05-20 20:11:46 +08:00
|
|
|
of space needed in B<buf> (excluding the final null) is returned.
|
2002-10-10 01:05:05 +08:00
|
|
|
|
|
|
|
=head1 NOTES
|
|
|
|
|
2017-07-03 00:16:38 +08:00
|
|
|
X509_NAME_get_text_by_NID() and X509_NAME_get_text_by_OBJ() should be
|
2018-05-08 18:32:12 +08:00
|
|
|
considered deprecated because they
|
2017-07-03 00:16:38 +08:00
|
|
|
have various limitations which make them
|
2002-10-10 01:05:05 +08:00
|
|
|
of minimal use in practice. They can only find the first matching
|
|
|
|
entry and will copy the contents of the field verbatim: this can
|
2015-04-14 02:05:13 +08:00
|
|
|
be highly confusing if the target is a multicharacter string type
|
2002-10-10 01:05:05 +08:00
|
|
|
like a BMPString or a UTF8String.
|
|
|
|
|
|
|
|
For a more general solution X509_NAME_get_index_by_NID() or
|
|
|
|
X509_NAME_get_index_by_OBJ() should be used followed by
|
|
|
|
X509_NAME_get_entry() on any matching indices and then the
|
|
|
|
various B<X509_NAME_ENTRY> utility functions on the result.
|
|
|
|
|
2014-09-12 13:00:26 +08:00
|
|
|
The list of all relevant B<NID_*> and B<OBJ_* codes> can be found in
|
2021-01-12 22:44:43 +08:00
|
|
|
the source code header files F<< <openssl/obj_mac.h> >> and/or
|
|
|
|
F<< <openssl/objects.h> >>.
|
2014-09-12 13:00:26 +08:00
|
|
|
|
2015-07-06 21:17:49 +08:00
|
|
|
Applications which could pass invalid NIDs to X509_NAME_get_index_by_NID()
|
|
|
|
should check for the return value of -2. Alternatively the NID validity
|
|
|
|
can be determined first by checking OBJ_nid2obj(nid) is not NULL.
|
|
|
|
|
2019-02-26 13:11:10 +08:00
|
|
|
=head1 RETURN VALUES
|
|
|
|
|
|
|
|
X509_NAME_get_index_by_NID() and X509_NAME_get_index_by_OBJ()
|
|
|
|
return the index of the next matching entry or -1 if not found.
|
|
|
|
X509_NAME_get_index_by_NID() can also return -2 if the supplied
|
|
|
|
NID is invalid.
|
|
|
|
|
|
|
|
X509_NAME_entry_count() returns the total number of entries.
|
|
|
|
|
|
|
|
X509_NAME_get_entry() returns an B<X509_NAME> pointer to the
|
|
|
|
requested entry or B<NULL> if the index is invalid.
|
|
|
|
|
2002-10-10 01:05:05 +08:00
|
|
|
=head1 EXAMPLES
|
|
|
|
|
|
|
|
Process all entries:
|
|
|
|
|
|
|
|
int i;
|
|
|
|
X509_NAME_ENTRY *e;
|
|
|
|
|
2016-11-19 07:10:05 +08:00
|
|
|
for (i = 0; i < X509_NAME_entry_count(nm); i++) {
|
|
|
|
e = X509_NAME_get_entry(nm, i);
|
|
|
|
/* Do something with e */
|
|
|
|
}
|
2002-10-10 01:05:05 +08:00
|
|
|
|
|
|
|
Process all commonName entries:
|
|
|
|
|
2016-11-18 16:47:50 +08:00
|
|
|
int lastpos = -1;
|
2002-10-10 01:05:05 +08:00
|
|
|
X509_NAME_ENTRY *e;
|
|
|
|
|
2016-11-19 07:10:05 +08:00
|
|
|
for (;;) {
|
|
|
|
lastpos = X509_NAME_get_index_by_NID(nm, NID_commonName, lastpos);
|
|
|
|
if (lastpos == -1)
|
|
|
|
break;
|
|
|
|
e = X509_NAME_get_entry(nm, lastpos);
|
|
|
|
/* Do something with e */
|
|
|
|
}
|
2002-10-10 01:05:05 +08:00
|
|
|
|
|
|
|
=head1 SEE ALSO
|
|
|
|
|
2015-08-18 03:21:33 +08:00
|
|
|
L<ERR_get_error(3)>, L<d2i_X509_NAME(3)>
|
2002-10-10 01:05:05 +08:00
|
|
|
|
2016-05-18 23:44:05 +08:00
|
|
|
=head1 COPYRIGHT
|
|
|
|
|
2021-01-28 20:54:57 +08:00
|
|
|
Copyright 2002-2021 The OpenSSL Project Authors. All Rights Reserved.
|
2016-05-18 23:44:05 +08:00
|
|
|
|
2018-12-06 21:04:44 +08:00
|
|
|
Licensed under the Apache License 2.0 (the "License"). You may not use
|
2016-05-18 23:44:05 +08:00
|
|
|
this file except in compliance with the License. You can obtain a copy
|
|
|
|
in the file LICENSE in the source distribution or at
|
|
|
|
L<https://www.openssl.org/source/license.html>.
|
|
|
|
|
|
|
|
=cut
|