summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/x509/x509name.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/x509/x509name.c')
-rw-r--r--src/lib/libcrypto/x509/x509name.c137
1 files changed, 50 insertions, 87 deletions
diff --git a/src/lib/libcrypto/x509/x509name.c b/src/lib/libcrypto/x509/x509name.c
index 650e71b1b5..2a422be350 100644
--- a/src/lib/libcrypto/x509/x509name.c
+++ b/src/lib/libcrypto/x509/x509name.c
@@ -57,18 +57,14 @@
57 */ 57 */
58 58
59#include <stdio.h> 59#include <stdio.h>
60#include "stack.h" 60#include <openssl/stack.h>
61#include "cryptlib.h" 61#include "cryptlib.h"
62#include "asn1.h" 62#include <openssl/asn1.h>
63#include "objects.h" 63#include <openssl/objects.h>
64#include "evp.h" 64#include <openssl/evp.h>
65#include "x509.h" 65#include <openssl/x509.h>
66 66
67int X509_NAME_get_text_by_NID(name,nid,buf,len) 67int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len)
68X509_NAME *name;
69int nid;
70char *buf;
71int len;
72 { 68 {
73 ASN1_OBJECT *obj; 69 ASN1_OBJECT *obj;
74 70
@@ -77,11 +73,8 @@ int len;
77 return(X509_NAME_get_text_by_OBJ(name,obj,buf,len)); 73 return(X509_NAME_get_text_by_OBJ(name,obj,buf,len));
78 } 74 }
79 75
80int X509_NAME_get_text_by_OBJ(name,obj,buf,len) 76int X509_NAME_get_text_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, char *buf,
81X509_NAME *name; 77 int len)
82ASN1_OBJECT *obj;
83char *buf;
84int len;
85 { 78 {
86 int i; 79 int i;
87 ASN1_STRING *data; 80 ASN1_STRING *data;
@@ -96,17 +89,13 @@ int len;
96 return(i); 89 return(i);
97 } 90 }
98 91
99int X509_NAME_entry_count(name) 92int X509_NAME_entry_count(X509_NAME *name)
100X509_NAME *name;
101 { 93 {
102 if (name == NULL) return(0); 94 if (name == NULL) return(0);
103 return(sk_num(name->entries)); 95 return(sk_X509_NAME_ENTRY_num(name->entries));
104 } 96 }
105 97
106int X509_NAME_get_index_by_NID(name,nid,lastpos) 98int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos)
107X509_NAME *name;
108int nid;
109int lastpos;
110 { 99 {
111 ASN1_OBJECT *obj; 100 ASN1_OBJECT *obj;
112 101
@@ -116,61 +105,57 @@ int lastpos;
116 } 105 }
117 106
118/* NOTE: you should be passsing -1, not 0 as lastpos */ 107/* NOTE: you should be passsing -1, not 0 as lastpos */
119int X509_NAME_get_index_by_OBJ(name,obj,lastpos) 108int X509_NAME_get_index_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj,
120X509_NAME *name; 109 int lastpos)
121ASN1_OBJECT *obj;
122int lastpos;
123 { 110 {
124 int n; 111 int n;
125 X509_NAME_ENTRY *ne; 112 X509_NAME_ENTRY *ne;
126 STACK *sk; 113 STACK_OF(X509_NAME_ENTRY) *sk;
127 114
128 if (name == NULL) return(-1); 115 if (name == NULL) return(-1);
129 if (lastpos < 0) 116 if (lastpos < 0)
130 lastpos= -1; 117 lastpos= -1;
131 sk=name->entries; 118 sk=name->entries;
132 n=sk_num(sk); 119 n=sk_X509_NAME_ENTRY_num(sk);
133 for (lastpos++; lastpos < n; lastpos++) 120 for (lastpos++; lastpos < n; lastpos++)
134 { 121 {
135 ne=(X509_NAME_ENTRY *)sk_value(sk,lastpos); 122 ne=sk_X509_NAME_ENTRY_value(sk,lastpos);
136 if (OBJ_cmp(ne->object,obj) == 0) 123 if (OBJ_cmp(ne->object,obj) == 0)
137 return(lastpos); 124 return(lastpos);
138 } 125 }
139 return(-1); 126 return(-1);
140 } 127 }
141 128
142X509_NAME_ENTRY *X509_NAME_get_entry(name,loc) 129X509_NAME_ENTRY *X509_NAME_get_entry(X509_NAME *name, int loc)
143X509_NAME *name;
144int loc;
145 { 130 {
146 if ( (name == NULL) || (sk_num(name->entries) <= loc) || (loc < 0)) 131 if(name == NULL || sk_X509_NAME_ENTRY_num(name->entries) <= loc
132 || loc < 0)
147 return(NULL); 133 return(NULL);
148 else 134 else
149 return((X509_NAME_ENTRY *)sk_value(name->entries,loc)); 135 return(sk_X509_NAME_ENTRY_value(name->entries,loc));
150 } 136 }
151 137
152X509_NAME_ENTRY *X509_NAME_delete_entry(name,loc) 138X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc)
153X509_NAME *name;
154int loc;
155 { 139 {
156 X509_NAME_ENTRY *ret; 140 X509_NAME_ENTRY *ret;
157 int i,j,n,set_prev,set_next; 141 int i,n,set_prev,set_next;
158 STACK *sk; 142 STACK_OF(X509_NAME_ENTRY) *sk;
159 143
160 if ((name == NULL) || (sk_num(name->entries) <= loc) || (loc < 0)) 144 if (name == NULL || sk_X509_NAME_ENTRY_num(name->entries) <= loc
145 || loc < 0)
161 return(NULL); 146 return(NULL);
162 sk=name->entries; 147 sk=name->entries;
163 ret=(X509_NAME_ENTRY *)sk_delete(sk,loc); 148 ret=sk_X509_NAME_ENTRY_delete(sk,loc);
164 n=sk_num(sk); 149 n=sk_X509_NAME_ENTRY_num(sk);
165 name->modified=1; 150 name->modified=1;
166 if (loc == n) return(ret); 151 if (loc == n) return(ret);
167 152
168 /* else we need to fixup the set field */ 153 /* else we need to fixup the set field */
169 if (loc != 0) 154 if (loc != 0)
170 set_prev=((X509_NAME_ENTRY *)sk_value(sk,loc-1))->set; 155 set_prev=(sk_X509_NAME_ENTRY_value(sk,loc-1))->set;
171 else 156 else
172 set_prev=ret->set-1; 157 set_prev=ret->set-1;
173 set_next=((X509_NAME_ENTRY *)sk_value(sk,loc))->set; 158 set_next=sk_X509_NAME_ENTRY_value(sk,loc)->set;
174 159
175 /* set_prev is the previous set 160 /* set_prev is the previous set
176 * set is the current set 161 * set is the current set
@@ -181,29 +166,23 @@ int loc;
181 * so basically only if prev and next differ by 2, then 166 * so basically only if prev and next differ by 2, then
182 * re-number down by 1 */ 167 * re-number down by 1 */
183 if (set_prev+1 < set_next) 168 if (set_prev+1 < set_next)
184 {
185 j=set_next-set_prev-1;
186 for (i=loc; i<n; i++) 169 for (i=loc; i<n; i++)
187 ((X509_NAME_ENTRY *)sk_value(sk,loc-1))->set-=j; 170 sk_X509_NAME_ENTRY_value(sk,i)->set--;
188 }
189 return(ret); 171 return(ret);
190 } 172 }
191 173
192/* if set is -1, append to previous set, 0 'a new one', and 1, 174/* if set is -1, append to previous set, 0 'a new one', and 1,
193 * prepend to the guy we are about to stomp on. */ 175 * prepend to the guy we are about to stomp on. */
194int X509_NAME_add_entry(name,ne,loc,set) 176int X509_NAME_add_entry(X509_NAME *name, X509_NAME_ENTRY *ne, int loc,
195X509_NAME *name; 177 int set)
196X509_NAME_ENTRY *ne;
197int loc;
198int set;
199 { 178 {
200 X509_NAME_ENTRY *new_name=NULL; 179 X509_NAME_ENTRY *new_name=NULL;
201 int n,i,inc; 180 int n,i,inc;
202 STACK *sk; 181 STACK_OF(X509_NAME_ENTRY) *sk;
203 182
204 if (name == NULL) return(0); 183 if (name == NULL) return(0);
205 sk=name->entries; 184 sk=name->entries;
206 n=sk_num(sk); 185 n=sk_X509_NAME_ENTRY_num(sk);
207 if (loc > n) loc=n; 186 if (loc > n) loc=n;
208 else if (loc < 0) loc=n; 187 else if (loc < 0) loc=n;
209 188
@@ -218,7 +197,7 @@ int set;
218 } 197 }
219 else 198 else
220 { 199 {
221 set=((X509_NAME_ENTRY *)sk_value(sk,loc-1))->set; 200 set=sk_X509_NAME_ENTRY_value(sk,loc-1)->set;
222 inc=0; 201 inc=0;
223 } 202 }
224 } 203 }
@@ -227,43 +206,38 @@ int set;
227 if (loc >= n) 206 if (loc >= n)
228 { 207 {
229 if (loc != 0) 208 if (loc != 0)
230 set=((X509_NAME_ENTRY *) 209 set=sk_X509_NAME_ENTRY_value(sk,loc-1)->set+1;
231 sk_value(sk,loc-1))->set+1;
232 else 210 else
233 set=0; 211 set=0;
234 } 212 }
235 else 213 else
236 set=((X509_NAME_ENTRY *)sk_value(sk,loc))->set; 214 set=sk_X509_NAME_ENTRY_value(sk,loc)->set;
237 inc=(set == 0)?1:0; 215 inc=(set == 0)?1:0;
238 } 216 }
239 217
240 if ((new_name=X509_NAME_ENTRY_dup(ne)) == NULL) 218 if ((new_name=X509_NAME_ENTRY_dup(ne)) == NULL)
241 goto err; 219 goto err;
242 new_name->set=set; 220 new_name->set=set;
243 if (!sk_insert(sk,(char *)new_name,loc)) 221 if (!sk_X509_NAME_ENTRY_insert(sk,new_name,loc))
244 { 222 {
245 X509err(X509_F_X509_NAME_ADD_ENTRY,ERR_R_MALLOC_FAILURE); 223 X509err(X509_F_X509_NAME_ADD_ENTRY,ERR_R_MALLOC_FAILURE);
246 goto err; 224 goto err;
247 } 225 }
248 if (inc) 226 if (inc)
249 { 227 {
250 n=sk_num(sk); 228 n=sk_X509_NAME_ENTRY_num(sk);
251 for (i=loc+1; i<n; i++) 229 for (i=loc+1; i<n; i++)
252 ((X509_NAME_ENTRY *)sk_value(sk,i-1))->set+=1; 230 sk_X509_NAME_ENTRY_value(sk,i-1)->set+=1;
253 } 231 }
254 return(1); 232 return(1);
255err: 233err:
256 if (new_name != NULL) 234 if (new_name != NULL)
257 X509_NAME_ENTRY_free(ne); 235 X509_NAME_ENTRY_free(new_name);
258 return(0); 236 return(0);
259 } 237 }
260 238
261X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(ne,nid,type,bytes,len) 239X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,
262X509_NAME_ENTRY **ne; 240 int type, unsigned char *bytes, int len)
263int nid;
264int type;
265unsigned char *bytes;
266int len;
267 { 241 {
268 ASN1_OBJECT *obj; 242 ASN1_OBJECT *obj;
269 243
@@ -276,12 +250,8 @@ int len;
276 return(X509_NAME_ENTRY_create_by_OBJ(ne,obj,type,bytes,len)); 250 return(X509_NAME_ENTRY_create_by_OBJ(ne,obj,type,bytes,len));
277 } 251 }
278 252
279X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(ne,obj,type,bytes,len) 253X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne,
280X509_NAME_ENTRY **ne; 254 ASN1_OBJECT *obj, int type, unsigned char *bytes, int len)
281ASN1_OBJECT *obj;
282int type;
283unsigned char *bytes;
284int len;
285 { 255 {
286 X509_NAME_ENTRY *ret; 256 X509_NAME_ENTRY *ret;
287 257
@@ -306,9 +276,7 @@ err:
306 return(NULL); 276 return(NULL);
307 } 277 }
308 278
309int X509_NAME_ENTRY_set_object(ne,obj) 279int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, ASN1_OBJECT *obj)
310X509_NAME_ENTRY *ne;
311ASN1_OBJECT *obj;
312 { 280 {
313 if ((ne == NULL) || (obj == NULL)) 281 if ((ne == NULL) || (obj == NULL))
314 { 282 {
@@ -320,11 +288,8 @@ ASN1_OBJECT *obj;
320 return((ne->object == NULL)?0:1); 288 return((ne->object == NULL)?0:1);
321 } 289 }
322 290
323int X509_NAME_ENTRY_set_data(ne,type,bytes,len) 291int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type,
324X509_NAME_ENTRY *ne; 292 unsigned char *bytes, int len)
325int type;
326unsigned char *bytes;
327int len;
328 { 293 {
329 int i; 294 int i;
330 295
@@ -342,15 +307,13 @@ int len;
342 return(1); 307 return(1);
343 } 308 }
344 309
345ASN1_OBJECT *X509_NAME_ENTRY_get_object(ne) 310ASN1_OBJECT *X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *ne)
346X509_NAME_ENTRY *ne;
347 { 311 {
348 if (ne == NULL) return(NULL); 312 if (ne == NULL) return(NULL);
349 return(ne->object); 313 return(ne->object);
350 } 314 }
351 315
352ASN1_STRING *X509_NAME_ENTRY_get_data(ne) 316ASN1_STRING *X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *ne)
353X509_NAME_ENTRY *ne;
354 { 317 {
355 if (ne == NULL) return(NULL); 318 if (ne == NULL) return(NULL);
356 return(ne->value); 319 return(ne->value);