diff options
| author | beck <> | 2000-04-15 06:18:51 +0000 |
|---|---|---|
| committer | beck <> | 2000-04-15 06:18:51 +0000 |
| commit | b608c7f2b175e121f2c22d53341a317153afdc8e (patch) | |
| tree | e94b160b3fcd8180df79e4251d68d24d665f0195 /src/lib/libcrypto/x509 | |
| parent | c8d6701c396cebdcd0d45eac73b762e9498f6b01 (diff) | |
| download | openbsd-b608c7f2b175e121f2c22d53341a317153afdc8e.tar.gz openbsd-b608c7f2b175e121f2c22d53341a317153afdc8e.tar.bz2 openbsd-b608c7f2b175e121f2c22d53341a317153afdc8e.zip | |
OpenSSL 0.9.5a merge
Diffstat (limited to 'src/lib/libcrypto/x509')
| -rw-r--r-- | src/lib/libcrypto/x509/x509.h | 4 | ||||
| -rw-r--r-- | src/lib/libcrypto/x509/x509_err.c | 3 | ||||
| -rw-r--r-- | src/lib/libcrypto/x509/x509_trs.c | 17 | ||||
| -rw-r--r-- | src/lib/libcrypto/x509/x509_vfy.c | 22 | ||||
| -rw-r--r-- | src/lib/libcrypto/x509/x509name.c | 2 |
5 files changed, 31 insertions, 17 deletions
diff --git a/src/lib/libcrypto/x509/x509.h b/src/lib/libcrypto/x509/x509.h index d3336d9ceb..0192272e7c 100644 --- a/src/lib/libcrypto/x509/x509.h +++ b/src/lib/libcrypto/x509/x509.h | |||
| @@ -284,7 +284,9 @@ DECLARE_STACK_OF(X509_TRUST) | |||
| 284 | 284 | ||
| 285 | /* standard trust ids */ | 285 | /* standard trust ids */ |
| 286 | 286 | ||
| 287 | #define X509_TRUST_ANY 1 | 287 | #define X509_TRUST_DEFAULT -1 /* Only valid in purpose settings */ |
| 288 | |||
| 289 | #define X509_TRUST_COMPAT 1 | ||
| 288 | #define X509_TRUST_SSL_CLIENT 2 | 290 | #define X509_TRUST_SSL_CLIENT 2 |
| 289 | #define X509_TRUST_SSL_SERVER 3 | 291 | #define X509_TRUST_SSL_SERVER 3 |
| 290 | #define X509_TRUST_EMAIL 4 | 292 | #define X509_TRUST_EMAIL 4 |
diff --git a/src/lib/libcrypto/x509/x509_err.c b/src/lib/libcrypto/x509/x509_err.c index fdedbdac34..848add56e9 100644 --- a/src/lib/libcrypto/x509/x509_err.c +++ b/src/lib/libcrypto/x509/x509_err.c | |||
| @@ -54,7 +54,8 @@ | |||
| 54 | */ | 54 | */ |
| 55 | 55 | ||
| 56 | /* NOTE: this file was auto generated by the mkerr.pl script: any changes | 56 | /* NOTE: this file was auto generated by the mkerr.pl script: any changes |
| 57 | * made to it will be overwritten when the script next updates this file. | 57 | * made to it will be overwritten when the script next updates this file, |
| 58 | * only reason strings will be preserved. | ||
| 58 | */ | 59 | */ |
| 59 | 60 | ||
| 60 | #include <stdio.h> | 61 | #include <stdio.h> |
diff --git a/src/lib/libcrypto/x509/x509_trs.c b/src/lib/libcrypto/x509/x509_trs.c index 9f7d67952d..c779aaf94d 100644 --- a/src/lib/libcrypto/x509/x509_trs.c +++ b/src/lib/libcrypto/x509/x509_trs.c | |||
| @@ -65,7 +65,7 @@ static int tr_cmp(X509_TRUST **a, X509_TRUST **b); | |||
| 65 | static void trtable_free(X509_TRUST *p); | 65 | static void trtable_free(X509_TRUST *p); |
| 66 | 66 | ||
| 67 | static int trust_1oidany(X509_TRUST *trust, X509 *x, int flags); | 67 | static int trust_1oidany(X509_TRUST *trust, X509 *x, int flags); |
| 68 | static int trust_any(X509_TRUST *trust, X509 *x, int flags); | 68 | static int trust_compat(X509_TRUST *trust, X509 *x, int flags); |
| 69 | 69 | ||
| 70 | static int obj_trust(int id, X509 *x, int flags); | 70 | static int obj_trust(int id, X509 *x, int flags); |
| 71 | static int (*default_trust)(int id, X509 *x, int flags) = obj_trust; | 71 | static int (*default_trust)(int id, X509 *x, int flags) = obj_trust; |
| @@ -76,7 +76,7 @@ static int (*default_trust)(int id, X509 *x, int flags) = obj_trust; | |||
| 76 | */ | 76 | */ |
| 77 | 77 | ||
| 78 | static X509_TRUST trstandard[] = { | 78 | static X509_TRUST trstandard[] = { |
| 79 | {X509_TRUST_ANY, 0, trust_any, "Any", 0, NULL}, | 79 | {X509_TRUST_COMPAT, 0, trust_compat, "compatible", 0, NULL}, |
| 80 | {X509_TRUST_SSL_CLIENT, 0, trust_1oidany, "SSL Client", NID_client_auth, NULL}, | 80 | {X509_TRUST_SSL_CLIENT, 0, trust_1oidany, "SSL Client", NID_client_auth, NULL}, |
| 81 | {X509_TRUST_SSL_SERVER, 0, trust_1oidany, "SSL Client", NID_server_auth, NULL}, | 81 | {X509_TRUST_SSL_SERVER, 0, trust_1oidany, "SSL Client", NID_server_auth, NULL}, |
| 82 | {X509_TRUST_EMAIL, 0, trust_1oidany, "S/MIME email", NID_email_protect, NULL}, | 82 | {X509_TRUST_EMAIL, 0, trust_1oidany, "S/MIME email", NID_email_protect, NULL}, |
| @@ -107,8 +107,8 @@ int X509_check_trust(X509 *x, int id, int flags) | |||
| 107 | X509_TRUST *pt; | 107 | X509_TRUST *pt; |
| 108 | int idx; | 108 | int idx; |
| 109 | if(id == -1) return 1; | 109 | if(id == -1) return 1; |
| 110 | if(!(idx = X509_TRUST_get_by_id(id))) | 110 | idx = X509_TRUST_get_by_id(id); |
| 111 | return default_trust(id, x, flags); | 111 | if(idx == -1) return default_trust(id, x, flags); |
| 112 | pt = X509_TRUST_get0(idx); | 112 | pt = X509_TRUST_get0(idx); |
| 113 | return pt->check_trust(pt, x, flags); | 113 | return pt->check_trust(pt, x, flags); |
| 114 | } | 114 | } |
| @@ -230,6 +230,11 @@ static int trust_1oidany(X509_TRUST *trust, X509 *x, int flags) | |||
| 230 | /* we don't have any trust settings: for compatibility | 230 | /* we don't have any trust settings: for compatibility |
| 231 | * we return trusted if it is self signed | 231 | * we return trusted if it is self signed |
| 232 | */ | 232 | */ |
| 233 | return trust_compat(trust, x, flags); | ||
| 234 | } | ||
| 235 | |||
| 236 | static int trust_compat(X509_TRUST *trust, X509 *x, int flags) | ||
| 237 | { | ||
| 233 | X509_check_purpose(x, -1, 0); | 238 | X509_check_purpose(x, -1, 0); |
| 234 | if(x->ex_flags & EXFLAG_SS) return X509_TRUST_TRUSTED; | 239 | if(x->ex_flags & EXFLAG_SS) return X509_TRUST_TRUSTED; |
| 235 | else return X509_TRUST_UNTRUSTED; | 240 | else return X509_TRUST_UNTRUSTED; |
| @@ -257,7 +262,3 @@ static int obj_trust(int id, X509 *x, int flags) | |||
| 257 | return X509_TRUST_UNTRUSTED; | 262 | return X509_TRUST_UNTRUSTED; |
| 258 | } | 263 | } |
| 259 | 264 | ||
| 260 | static int trust_any(X509_TRUST *trust, X509 *x, int flags) | ||
| 261 | { | ||
| 262 | return X509_TRUST_TRUSTED; | ||
| 263 | } | ||
diff --git a/src/lib/libcrypto/x509/x509_vfy.c b/src/lib/libcrypto/x509/x509_vfy.c index 4fdff54124..3ddb2303d3 100644 --- a/src/lib/libcrypto/x509/x509_vfy.c +++ b/src/lib/libcrypto/x509/x509_vfy.c | |||
| @@ -436,11 +436,14 @@ static int internal_verify(X509_STORE_CTX *ctx) | |||
| 436 | } | 436 | } |
| 437 | if (X509_verify(xs,pkey) <= 0) | 437 | if (X509_verify(xs,pkey) <= 0) |
| 438 | { | 438 | { |
| 439 | EVP_PKEY_free(pkey); | ||
| 440 | ctx->error=X509_V_ERR_CERT_SIGNATURE_FAILURE; | 439 | ctx->error=X509_V_ERR_CERT_SIGNATURE_FAILURE; |
| 441 | ctx->current_cert=xs; | 440 | ctx->current_cert=xs; |
| 442 | ok=(*cb)(0,ctx); | 441 | ok=(*cb)(0,ctx); |
| 443 | if (!ok) goto end; | 442 | if (!ok) |
| 443 | { | ||
| 444 | EVP_PKEY_free(pkey); | ||
| 445 | goto end; | ||
| 446 | } | ||
| 444 | } | 447 | } |
| 445 | EVP_PKEY_free(pkey); | 448 | EVP_PKEY_free(pkey); |
| 446 | pkey=NULL; | 449 | pkey=NULL; |
| @@ -768,18 +771,25 @@ int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, | |||
| 768 | if(!purpose) purpose = def_purpose; | 771 | if(!purpose) purpose = def_purpose; |
| 769 | /* If we have a purpose then check it is valid */ | 772 | /* If we have a purpose then check it is valid */ |
| 770 | if(purpose) { | 773 | if(purpose) { |
| 774 | X509_PURPOSE *ptmp; | ||
| 771 | idx = X509_PURPOSE_get_by_id(purpose); | 775 | idx = X509_PURPOSE_get_by_id(purpose); |
| 772 | if(idx == -1) { | 776 | if(idx == -1) { |
| 773 | X509err(X509_F_X509_STORE_CTX_PURPOSE_INHERIT, | 777 | X509err(X509_F_X509_STORE_CTX_PURPOSE_INHERIT, |
| 774 | X509_R_UNKNOWN_PURPOSE_ID); | 778 | X509_R_UNKNOWN_PURPOSE_ID); |
| 775 | return 0; | 779 | return 0; |
| 776 | } | 780 | } |
| 777 | /* If trust not set then get from purpose default */ | 781 | ptmp = X509_PURPOSE_get0(idx); |
| 778 | if(!trust) { | 782 | if(ptmp->trust == X509_TRUST_DEFAULT) { |
| 779 | X509_PURPOSE *ptmp; | 783 | idx = X509_PURPOSE_get_by_id(def_purpose); |
| 784 | if(idx == -1) { | ||
| 785 | X509err(X509_F_X509_STORE_CTX_PURPOSE_INHERIT, | ||
| 786 | X509_R_UNKNOWN_PURPOSE_ID); | ||
| 787 | return 0; | ||
| 788 | } | ||
| 780 | ptmp = X509_PURPOSE_get0(idx); | 789 | ptmp = X509_PURPOSE_get0(idx); |
| 781 | trust = ptmp->trust; | ||
| 782 | } | 790 | } |
| 791 | /* If trust not set then get from purpose default */ | ||
| 792 | if(!trust) trust = ptmp->trust; | ||
| 783 | } | 793 | } |
| 784 | if(trust) { | 794 | if(trust) { |
| 785 | idx = X509_TRUST_get_by_id(trust); | 795 | idx = X509_TRUST_get_by_id(trust); |
diff --git a/src/lib/libcrypto/x509/x509name.c b/src/lib/libcrypto/x509/x509name.c index cf2382d42c..4c20e03ece 100644 --- a/src/lib/libcrypto/x509/x509name.c +++ b/src/lib/libcrypto/x509/x509name.c | |||
| @@ -352,7 +352,7 @@ int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, | |||
| 352 | int i; | 352 | int i; |
| 353 | 353 | ||
| 354 | if ((ne == NULL) || ((bytes == NULL) && (len != 0))) return(0); | 354 | if ((ne == NULL) || ((bytes == NULL) && (len != 0))) return(0); |
| 355 | if(type & MBSTRING_FLAG) | 355 | if((type > 0) && (type & MBSTRING_FLAG)) |
| 356 | return ASN1_STRING_set_by_NID(&ne->value, bytes, | 356 | return ASN1_STRING_set_by_NID(&ne->value, bytes, |
| 357 | len, type, | 357 | len, type, |
| 358 | OBJ_obj2nid(ne->object)) ? 1 : 0; | 358 | OBJ_obj2nid(ne->object)) ? 1 : 0; |
