56
56
57
57
#include <openssl/x509.h>
58
58
59
- #include <assert.h>
60
59
#include <inttypes.h>
61
60
#include <string.h>
62
61
@@ -85,7 +84,8 @@ static int do_indent(BIO *out, int indent) {
85
84
86
85
static int do_name_ex (BIO * out , const X509_NAME * n , int indent ,
87
86
unsigned long flags ) {
88
- int prev = -1 , orflags ;
87
+ int i , prev = -1 , orflags , cnt ;
88
+ int fn_opt , fn_nid ;
89
89
char objtmp [80 ];
90
90
const char * objbuf ;
91
91
int outlen , len ;
@@ -142,8 +142,10 @@ static int do_name_ex(BIO *out, const X509_NAME *n, int indent,
142
142
sep_eq_len = 1 ;
143
143
}
144
144
145
- int cnt = X509_NAME_entry_count (n );
146
- for (int i = 0 ; i < cnt ; i ++ ) {
145
+ fn_opt = flags & XN_FLAG_FN_MASK ;
146
+
147
+ cnt = X509_NAME_entry_count (n );
148
+ for (i = 0 ; i < cnt ; i ++ ) {
147
149
const X509_NAME_ENTRY * ent ;
148
150
if (flags & XN_FLAG_DN_REV ) {
149
151
ent = X509_NAME_get_entry (n , cnt - i - 1 );
@@ -170,24 +172,40 @@ static int do_name_ex(BIO *out, const X509_NAME *n, int indent,
170
172
prev = X509_NAME_ENTRY_set (ent );
171
173
const ASN1_OBJECT * fn = X509_NAME_ENTRY_get_object (ent );
172
174
const ASN1_STRING * val = X509_NAME_ENTRY_get_data (ent );
173
- assert ((flags & XN_FLAG_FN_MASK ) == XN_FLAG_FN_SN );
174
- int fn_nid = OBJ_obj2nid (fn );
175
- if (fn_nid == NID_undef ) {
176
- OBJ_obj2txt (objtmp , sizeof (objtmp ), fn , 1 );
177
- objbuf = objtmp ;
178
- } else {
179
- objbuf = OBJ_nid2sn (fn_nid );
180
- }
181
- if (objbuf == NULL ) {
182
- return -1 ;
183
- }
184
-
185
- int objlen = strlen (objbuf );
186
- if (!maybe_write (out , objbuf , objlen ) ||
187
- !maybe_write (out , sep_eq , sep_eq_len )) {
188
- return -1 ;
175
+ fn_nid = OBJ_obj2nid (fn );
176
+ if (fn_opt != XN_FLAG_FN_NONE ) {
177
+ int objlen , fld_len ;
178
+ if ((fn_opt == XN_FLAG_FN_OID ) || (fn_nid == NID_undef )) {
179
+ OBJ_obj2txt (objtmp , sizeof objtmp , fn , 1 );
180
+ fld_len = 0 ; // XXX: what should this be?
181
+ objbuf = objtmp ;
182
+ } else {
183
+ if (fn_opt == XN_FLAG_FN_SN ) {
184
+ fld_len = FN_WIDTH_SN ;
185
+ objbuf = OBJ_nid2sn (fn_nid );
186
+ } else if (fn_opt == XN_FLAG_FN_LN ) {
187
+ fld_len = FN_WIDTH_LN ;
188
+ objbuf = OBJ_nid2ln (fn_nid );
189
+ } else {
190
+ fld_len = 0 ; // XXX: what should this be?
191
+ objbuf = "" ;
192
+ }
193
+ }
194
+ objlen = strlen (objbuf );
195
+ if (!maybe_write (out , objbuf , objlen )) {
196
+ return -1 ;
197
+ }
198
+ if ((objlen < fld_len ) && (flags & XN_FLAG_FN_ALIGN )) {
199
+ if (!do_indent (out , fld_len - objlen )) {
200
+ return -1 ;
201
+ }
202
+ outlen += fld_len - objlen ;
203
+ }
204
+ if (!maybe_write (out , sep_eq , sep_eq_len )) {
205
+ return -1 ;
206
+ }
207
+ outlen += objlen + sep_eq_len ;
189
208
}
190
- outlen += objlen + sep_eq_len ;
191
209
// If the field name is unknown then fix up the DER dump flag. We
192
210
// might want to limit this further so it will DER dump on anything
193
211
// other than a few 'standard' fields.
0 commit comments