Loading crypto/x509/x509_lcl.h +1 −6 Original line number Diff line number Diff line Loading @@ -72,12 +72,7 @@ struct X509_VERIFY_PARAM_st { int trust; /* trust setting to check */ int depth; /* Verify depth */ STACK_OF(ASN1_OBJECT) *policies; /* Permissible policies */ X509_VERIFY_PARAM_ID *id; /* opaque ID data */ }; /* internal only structure to hold additional X509_VERIFY_PARAM data */ struct X509_VERIFY_PARAM_ID_st { /* Peer identity details */ STACK_OF(OPENSSL_STRING) *hosts; /* Set of acceptable names */ unsigned int hostflags; /* Flags to control matching features */ char *peername; /* Matching hostname in peer certificate */ Loading crypto/x509/x509_vfy.c +10 −11 Original line number Diff line number Diff line Loading @@ -764,19 +764,19 @@ static int check_id_error(X509_STORE_CTX *ctx, int errcode) return ctx->verify_cb(0, ctx); } static int check_hosts(X509 *x, X509_VERIFY_PARAM_ID *id) static int check_hosts(X509 *x, X509_VERIFY_PARAM *vpm) { int i; int n = sk_OPENSSL_STRING_num(id->hosts); int n = sk_OPENSSL_STRING_num(vpm->hosts); char *name; if (id->peername != NULL) { OPENSSL_free(id->peername); id->peername = NULL; if (vpm->peername != NULL) { OPENSSL_free(vpm->peername); vpm->peername = NULL; } for (i = 0; i < n; ++i) { name = sk_OPENSSL_STRING_value(id->hosts, i); if (X509_check_host(x, name, 0, id->hostflags, &id->peername) > 0) name = sk_OPENSSL_STRING_value(vpm->hosts, i); if (X509_check_host(x, name, 0, vpm->hostflags, &vpm->peername) > 0) return 1; } return n == 0; Loading @@ -785,17 +785,16 @@ static int check_hosts(X509 *x, X509_VERIFY_PARAM_ID *id) static int check_id(X509_STORE_CTX *ctx) { X509_VERIFY_PARAM *vpm = ctx->param; X509_VERIFY_PARAM_ID *id = vpm->id; X509 *x = ctx->cert; if (id->hosts && check_hosts(x, id) <= 0) { if (vpm->hosts && check_hosts(x, vpm) <= 0) { if (!check_id_error(ctx, X509_V_ERR_HOSTNAME_MISMATCH)) return 0; } if (id->email && X509_check_email(x, id->email, id->emaillen, 0) <= 0) { if (vpm->email && X509_check_email(x, vpm->email, vpm->emaillen, 0) <= 0) { if (!check_id_error(ctx, X509_V_ERR_EMAIL_MISMATCH)) return 0; } if (id->ip && X509_check_ip(x, id->ip, id->iplen, 0) <= 0) { if (vpm->ip && X509_check_ip(x, vpm->ip, vpm->iplen, 0) <= 0) { if (!check_id_error(ctx, X509_V_ERR_IP_ADDRESS_MISMATCH)) return 0; } Loading crypto/x509/x509_vpm.c +38 −56 Original line number Diff line number Diff line Loading @@ -83,7 +83,7 @@ static void str_free(char *s) OPENSSL_free(s); } static int int_x509_param_set_hosts(X509_VERIFY_PARAM_ID *id, int mode, static int int_x509_param_set_hosts(X509_VERIFY_PARAM *vpm, int mode, const char *name, size_t namelen) { char *copy; Loading @@ -100,8 +100,8 @@ static int int_x509_param_set_hosts(X509_VERIFY_PARAM_ID *id, int mode, --namelen; if (mode == SET_HOST) { sk_OPENSSL_STRING_pop_free(id->hosts, str_free); id->hosts = NULL; sk_OPENSSL_STRING_pop_free(vpm->hosts, str_free); vpm->hosts = NULL; } if (name == NULL || namelen == 0) return 1; Loading @@ -110,17 +110,17 @@ static int int_x509_param_set_hosts(X509_VERIFY_PARAM_ID *id, int mode, if (copy == NULL) return 0; if (id->hosts == NULL && (id->hosts = sk_OPENSSL_STRING_new_null()) == NULL) { if (vpm->hosts == NULL && (vpm->hosts = sk_OPENSSL_STRING_new_null()) == NULL) { OPENSSL_free(copy); return 0; } if (!sk_OPENSSL_STRING_push(id->hosts, copy)) { if (!sk_OPENSSL_STRING_push(vpm->hosts, copy)) { OPENSSL_free(copy); if (sk_OPENSSL_STRING_num(id->hosts) == 0) { sk_OPENSSL_STRING_free(id->hosts); id->hosts = NULL; if (sk_OPENSSL_STRING_num(vpm->hosts) == 0) { sk_OPENSSL_STRING_free(vpm->hosts); vpm->hosts = NULL; } return 0; } Loading @@ -130,7 +130,6 @@ static int int_x509_param_set_hosts(X509_VERIFY_PARAM_ID *id, int mode, static void x509_verify_param_zero(X509_VERIFY_PARAM *param) { X509_VERIFY_PARAM_ID *paramid; if (!param) return; param->name = NULL; Loading @@ -144,32 +143,25 @@ static void x509_verify_param_zero(X509_VERIFY_PARAM *param) param->depth = -1; sk_ASN1_OBJECT_pop_free(param->policies, ASN1_OBJECT_free); param->policies = NULL; paramid = param->id; sk_OPENSSL_STRING_pop_free(paramid->hosts, str_free); paramid->hosts = NULL; OPENSSL_free(paramid->peername); paramid->peername = NULL; OPENSSL_free(paramid->email); paramid->email = NULL; paramid->emaillen = 0; OPENSSL_free(paramid->ip); paramid->ip = NULL; paramid->iplen = 0; sk_OPENSSL_STRING_pop_free(param->hosts, str_free); param->hosts = NULL; OPENSSL_free(param->peername); param->peername = NULL; OPENSSL_free(param->email); param->email = NULL; param->emaillen = 0; OPENSSL_free(param->ip); param->ip = NULL; param->iplen = 0; } X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void) { X509_VERIFY_PARAM *param; X509_VERIFY_PARAM_ID *paramid; param = OPENSSL_zalloc(sizeof(*param)); if (param == NULL) return NULL; param->id = paramid = OPENSSL_zalloc(sizeof(*paramid)); if (paramid == NULL) { OPENSSL_free(param); return NULL; } x509_verify_param_zero(param); return param; } Loading @@ -179,7 +171,6 @@ void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param) if (!param) return; x509_verify_param_zero(param); OPENSSL_free(param->id); OPENSSL_free(param); } Loading Loading @@ -221,11 +212,6 @@ void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param) (to_overwrite || \ ((src->field != def) && (to_default || (dest->field == def)))) /* As above but for ID fields */ #define test_x509_verify_param_copy_id(idf, def) \ test_x509_verify_param_copy(id->idf, def) /* Macro to test and copy a field if necessary */ #define x509_verify_param_copy(field, def) \ Loading @@ -237,10 +223,8 @@ int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *dest, { unsigned long inh_flags; int to_default, to_overwrite; X509_VERIFY_PARAM_ID *id; if (!src) return 1; id = src->id; inh_flags = dest->inh_flags | src->inh_flags; if (inh_flags & X509_VP_FLAG_ONCE) Loading Loading @@ -282,25 +266,25 @@ int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *dest, } /* Copy the host flags if and only if we're copying the host list */ if (test_x509_verify_param_copy_id(hosts, NULL)) { sk_OPENSSL_STRING_pop_free(dest->id->hosts, str_free); dest->id->hosts = NULL; if (id->hosts) { dest->id->hosts = sk_OPENSSL_STRING_deep_copy(id->hosts, str_copy, str_free); if (dest->id->hosts == NULL) if (test_x509_verify_param_copy(hosts, NULL)) { sk_OPENSSL_STRING_pop_free(dest->hosts, str_free); dest->hosts = NULL; if (src->hosts) { dest->hosts = sk_OPENSSL_STRING_deep_copy(src->hosts, str_copy, str_free); if (dest->hosts == NULL) return 0; dest->id->hostflags = id->hostflags; dest->hostflags = src->hostflags; } } if (test_x509_verify_param_copy_id(email, NULL)) { if (!X509_VERIFY_PARAM_set1_email(dest, id->email, id->emaillen)) if (test_x509_verify_param_copy(email, NULL)) { if (!X509_VERIFY_PARAM_set1_email(dest, src->email, src->emaillen)) return 0; } if (test_x509_verify_param_copy_id(ip, NULL)) { if (!X509_VERIFY_PARAM_set1_ip(dest, id->ip, id->iplen)) if (test_x509_verify_param_copy(ip, NULL)) { if (!X509_VERIFY_PARAM_set1_ip(dest, src->ip, src->iplen)) return 0; } Loading Loading @@ -440,30 +424,30 @@ int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param, int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, const char *name, size_t namelen) { return int_x509_param_set_hosts(param->id, SET_HOST, name, namelen); return int_x509_param_set_hosts(param, SET_HOST, name, namelen); } int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, const char *name, size_t namelen) { return int_x509_param_set_hosts(param->id, ADD_HOST, name, namelen); return int_x509_param_set_hosts(param, ADD_HOST, name, namelen); } void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, unsigned int flags) { param->id->hostflags = flags; param->hostflags = flags; } char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *param) { return param->id->peername; return param->peername; } int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, const char *email, size_t emaillen) { return int_x509_param_set1(¶m->id->email, ¶m->id->emaillen, return int_x509_param_set1(¶m->email, ¶m->emaillen, email, emaillen); } Loading @@ -472,7 +456,7 @@ int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, { if (iplen != 0 && iplen != 4 && iplen != 16) return 0; return int_x509_param_set1((char **)¶m->id->ip, ¶m->id->iplen, return int_x509_param_set1((char **)¶m->ip, ¶m->iplen, (char *)ip, iplen); } Loading @@ -497,9 +481,7 @@ const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param) return param->name; } static X509_VERIFY_PARAM_ID _empty_id = { NULL, 0U, NULL, NULL, 0, NULL, 0 }; #define vpm_empty_id (X509_VERIFY_PARAM_ID *)&_empty_id #define vpm_empty_id NULL, 0U, NULL, NULL, 0, NULL, 0 /* * Default verify parameters: these are used for various applications and can Loading include/openssl/x509_vfy.h +0 −1 Original line number Diff line number Diff line Loading @@ -143,7 +143,6 @@ typedef struct x509_lookup_method_st { X509_OBJECT *ret); } X509_LOOKUP_METHOD; typedef struct X509_VERIFY_PARAM_ID_st X509_VERIFY_PARAM_ID; typedef struct X509_VERIFY_PARAM_st X509_VERIFY_PARAM; DECLARE_STACK_OF(X509_VERIFY_PARAM) Loading Loading
crypto/x509/x509_lcl.h +1 −6 Original line number Diff line number Diff line Loading @@ -72,12 +72,7 @@ struct X509_VERIFY_PARAM_st { int trust; /* trust setting to check */ int depth; /* Verify depth */ STACK_OF(ASN1_OBJECT) *policies; /* Permissible policies */ X509_VERIFY_PARAM_ID *id; /* opaque ID data */ }; /* internal only structure to hold additional X509_VERIFY_PARAM data */ struct X509_VERIFY_PARAM_ID_st { /* Peer identity details */ STACK_OF(OPENSSL_STRING) *hosts; /* Set of acceptable names */ unsigned int hostflags; /* Flags to control matching features */ char *peername; /* Matching hostname in peer certificate */ Loading
crypto/x509/x509_vfy.c +10 −11 Original line number Diff line number Diff line Loading @@ -764,19 +764,19 @@ static int check_id_error(X509_STORE_CTX *ctx, int errcode) return ctx->verify_cb(0, ctx); } static int check_hosts(X509 *x, X509_VERIFY_PARAM_ID *id) static int check_hosts(X509 *x, X509_VERIFY_PARAM *vpm) { int i; int n = sk_OPENSSL_STRING_num(id->hosts); int n = sk_OPENSSL_STRING_num(vpm->hosts); char *name; if (id->peername != NULL) { OPENSSL_free(id->peername); id->peername = NULL; if (vpm->peername != NULL) { OPENSSL_free(vpm->peername); vpm->peername = NULL; } for (i = 0; i < n; ++i) { name = sk_OPENSSL_STRING_value(id->hosts, i); if (X509_check_host(x, name, 0, id->hostflags, &id->peername) > 0) name = sk_OPENSSL_STRING_value(vpm->hosts, i); if (X509_check_host(x, name, 0, vpm->hostflags, &vpm->peername) > 0) return 1; } return n == 0; Loading @@ -785,17 +785,16 @@ static int check_hosts(X509 *x, X509_VERIFY_PARAM_ID *id) static int check_id(X509_STORE_CTX *ctx) { X509_VERIFY_PARAM *vpm = ctx->param; X509_VERIFY_PARAM_ID *id = vpm->id; X509 *x = ctx->cert; if (id->hosts && check_hosts(x, id) <= 0) { if (vpm->hosts && check_hosts(x, vpm) <= 0) { if (!check_id_error(ctx, X509_V_ERR_HOSTNAME_MISMATCH)) return 0; } if (id->email && X509_check_email(x, id->email, id->emaillen, 0) <= 0) { if (vpm->email && X509_check_email(x, vpm->email, vpm->emaillen, 0) <= 0) { if (!check_id_error(ctx, X509_V_ERR_EMAIL_MISMATCH)) return 0; } if (id->ip && X509_check_ip(x, id->ip, id->iplen, 0) <= 0) { if (vpm->ip && X509_check_ip(x, vpm->ip, vpm->iplen, 0) <= 0) { if (!check_id_error(ctx, X509_V_ERR_IP_ADDRESS_MISMATCH)) return 0; } Loading
crypto/x509/x509_vpm.c +38 −56 Original line number Diff line number Diff line Loading @@ -83,7 +83,7 @@ static void str_free(char *s) OPENSSL_free(s); } static int int_x509_param_set_hosts(X509_VERIFY_PARAM_ID *id, int mode, static int int_x509_param_set_hosts(X509_VERIFY_PARAM *vpm, int mode, const char *name, size_t namelen) { char *copy; Loading @@ -100,8 +100,8 @@ static int int_x509_param_set_hosts(X509_VERIFY_PARAM_ID *id, int mode, --namelen; if (mode == SET_HOST) { sk_OPENSSL_STRING_pop_free(id->hosts, str_free); id->hosts = NULL; sk_OPENSSL_STRING_pop_free(vpm->hosts, str_free); vpm->hosts = NULL; } if (name == NULL || namelen == 0) return 1; Loading @@ -110,17 +110,17 @@ static int int_x509_param_set_hosts(X509_VERIFY_PARAM_ID *id, int mode, if (copy == NULL) return 0; if (id->hosts == NULL && (id->hosts = sk_OPENSSL_STRING_new_null()) == NULL) { if (vpm->hosts == NULL && (vpm->hosts = sk_OPENSSL_STRING_new_null()) == NULL) { OPENSSL_free(copy); return 0; } if (!sk_OPENSSL_STRING_push(id->hosts, copy)) { if (!sk_OPENSSL_STRING_push(vpm->hosts, copy)) { OPENSSL_free(copy); if (sk_OPENSSL_STRING_num(id->hosts) == 0) { sk_OPENSSL_STRING_free(id->hosts); id->hosts = NULL; if (sk_OPENSSL_STRING_num(vpm->hosts) == 0) { sk_OPENSSL_STRING_free(vpm->hosts); vpm->hosts = NULL; } return 0; } Loading @@ -130,7 +130,6 @@ static int int_x509_param_set_hosts(X509_VERIFY_PARAM_ID *id, int mode, static void x509_verify_param_zero(X509_VERIFY_PARAM *param) { X509_VERIFY_PARAM_ID *paramid; if (!param) return; param->name = NULL; Loading @@ -144,32 +143,25 @@ static void x509_verify_param_zero(X509_VERIFY_PARAM *param) param->depth = -1; sk_ASN1_OBJECT_pop_free(param->policies, ASN1_OBJECT_free); param->policies = NULL; paramid = param->id; sk_OPENSSL_STRING_pop_free(paramid->hosts, str_free); paramid->hosts = NULL; OPENSSL_free(paramid->peername); paramid->peername = NULL; OPENSSL_free(paramid->email); paramid->email = NULL; paramid->emaillen = 0; OPENSSL_free(paramid->ip); paramid->ip = NULL; paramid->iplen = 0; sk_OPENSSL_STRING_pop_free(param->hosts, str_free); param->hosts = NULL; OPENSSL_free(param->peername); param->peername = NULL; OPENSSL_free(param->email); param->email = NULL; param->emaillen = 0; OPENSSL_free(param->ip); param->ip = NULL; param->iplen = 0; } X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void) { X509_VERIFY_PARAM *param; X509_VERIFY_PARAM_ID *paramid; param = OPENSSL_zalloc(sizeof(*param)); if (param == NULL) return NULL; param->id = paramid = OPENSSL_zalloc(sizeof(*paramid)); if (paramid == NULL) { OPENSSL_free(param); return NULL; } x509_verify_param_zero(param); return param; } Loading @@ -179,7 +171,6 @@ void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param) if (!param) return; x509_verify_param_zero(param); OPENSSL_free(param->id); OPENSSL_free(param); } Loading Loading @@ -221,11 +212,6 @@ void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param) (to_overwrite || \ ((src->field != def) && (to_default || (dest->field == def)))) /* As above but for ID fields */ #define test_x509_verify_param_copy_id(idf, def) \ test_x509_verify_param_copy(id->idf, def) /* Macro to test and copy a field if necessary */ #define x509_verify_param_copy(field, def) \ Loading @@ -237,10 +223,8 @@ int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *dest, { unsigned long inh_flags; int to_default, to_overwrite; X509_VERIFY_PARAM_ID *id; if (!src) return 1; id = src->id; inh_flags = dest->inh_flags | src->inh_flags; if (inh_flags & X509_VP_FLAG_ONCE) Loading Loading @@ -282,25 +266,25 @@ int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *dest, } /* Copy the host flags if and only if we're copying the host list */ if (test_x509_verify_param_copy_id(hosts, NULL)) { sk_OPENSSL_STRING_pop_free(dest->id->hosts, str_free); dest->id->hosts = NULL; if (id->hosts) { dest->id->hosts = sk_OPENSSL_STRING_deep_copy(id->hosts, str_copy, str_free); if (dest->id->hosts == NULL) if (test_x509_verify_param_copy(hosts, NULL)) { sk_OPENSSL_STRING_pop_free(dest->hosts, str_free); dest->hosts = NULL; if (src->hosts) { dest->hosts = sk_OPENSSL_STRING_deep_copy(src->hosts, str_copy, str_free); if (dest->hosts == NULL) return 0; dest->id->hostflags = id->hostflags; dest->hostflags = src->hostflags; } } if (test_x509_verify_param_copy_id(email, NULL)) { if (!X509_VERIFY_PARAM_set1_email(dest, id->email, id->emaillen)) if (test_x509_verify_param_copy(email, NULL)) { if (!X509_VERIFY_PARAM_set1_email(dest, src->email, src->emaillen)) return 0; } if (test_x509_verify_param_copy_id(ip, NULL)) { if (!X509_VERIFY_PARAM_set1_ip(dest, id->ip, id->iplen)) if (test_x509_verify_param_copy(ip, NULL)) { if (!X509_VERIFY_PARAM_set1_ip(dest, src->ip, src->iplen)) return 0; } Loading Loading @@ -440,30 +424,30 @@ int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param, int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, const char *name, size_t namelen) { return int_x509_param_set_hosts(param->id, SET_HOST, name, namelen); return int_x509_param_set_hosts(param, SET_HOST, name, namelen); } int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, const char *name, size_t namelen) { return int_x509_param_set_hosts(param->id, ADD_HOST, name, namelen); return int_x509_param_set_hosts(param, ADD_HOST, name, namelen); } void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, unsigned int flags) { param->id->hostflags = flags; param->hostflags = flags; } char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *param) { return param->id->peername; return param->peername; } int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, const char *email, size_t emaillen) { return int_x509_param_set1(¶m->id->email, ¶m->id->emaillen, return int_x509_param_set1(¶m->email, ¶m->emaillen, email, emaillen); } Loading @@ -472,7 +456,7 @@ int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, { if (iplen != 0 && iplen != 4 && iplen != 16) return 0; return int_x509_param_set1((char **)¶m->id->ip, ¶m->id->iplen, return int_x509_param_set1((char **)¶m->ip, ¶m->iplen, (char *)ip, iplen); } Loading @@ -497,9 +481,7 @@ const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param) return param->name; } static X509_VERIFY_PARAM_ID _empty_id = { NULL, 0U, NULL, NULL, 0, NULL, 0 }; #define vpm_empty_id (X509_VERIFY_PARAM_ID *)&_empty_id #define vpm_empty_id NULL, 0U, NULL, NULL, 0, NULL, 0 /* * Default verify parameters: these are used for various applications and can Loading
include/openssl/x509_vfy.h +0 −1 Original line number Diff line number Diff line Loading @@ -143,7 +143,6 @@ typedef struct x509_lookup_method_st { X509_OBJECT *ret); } X509_LOOKUP_METHOD; typedef struct X509_VERIFY_PARAM_ID_st X509_VERIFY_PARAM_ID; typedef struct X509_VERIFY_PARAM_st X509_VERIFY_PARAM; DECLARE_STACK_OF(X509_VERIFY_PARAM) Loading