X-Git-Url: https://git.openssl.org/gitweb/?a=blobdiff_plain;f=crypto%2Fx509v3%2Fv3_utl.c;h=40f71c71b4fd070445db2db45102aa25ce3f9d7b;hb=66ab08b1cfb7f57ee9299d6efc322aca385e4fba;hp=dc43fcb7bd2576e60bd998433c53957aa61d4d37;hpb=c74f1eb9bde5c66be3d6685dcc395f39a53add55;p=openssl.git diff --git a/crypto/x509v3/v3_utl.c b/crypto/x509v3/v3_utl.c index dc43fcb7bd..40f71c71b4 100644 --- a/crypto/x509v3/v3_utl.c +++ b/crypto/x509v3/v3_utl.c @@ -57,42 +57,30 @@ */ /* X509 v3 extension utilities */ -#include -#include + +#include #include -#include -#include -#include -#include "x509v3.h" +#include "cryptlib.h" +#include +#include static char *strip_spaces(char *name); -char *str_dup(str) -char *str; -{ - char *tmp; - if(!(tmp = Malloc(strlen(str) + 1))) return NULL; - strcpy(tmp, str); - return tmp; -} - /* Add a CONF_VALUE name value pair to stack */ -int X509V3_add_value(name, value, extlist) -char *name; -char *value; -STACK **extlist; +int X509V3_add_value(const char *name, const char *value, + STACK_OF(CONF_VALUE) **extlist) { CONF_VALUE *vtmp = NULL; char *tname = NULL, *tvalue = NULL; - if(name && !(tname = str_dup(name))) goto err; - if(value && !(tvalue = str_dup(value))) goto err;; + if(name && !(tname = BUF_strdup(name))) goto err; + if(value && !(tvalue = BUF_strdup(value))) goto err;; if(!(vtmp = (CONF_VALUE *)Malloc(sizeof(CONF_VALUE)))) goto err; - if(!*extlist && !(*extlist = sk_new(NULL))) goto err; + if(!*extlist && !(*extlist = sk_CONF_VALUE_new(NULL))) goto err; vtmp->section = NULL; vtmp->name = tname; vtmp->value = tvalue; - if(!sk_push(*extlist, (char *)vtmp)) goto err; + if(!sk_CONF_VALUE_push(*extlist, vtmp)) goto err; return 1; err: X509V3err(X509V3_F_X509V3_ADD_VALUE,ERR_R_MALLOC_FAILURE); @@ -102,10 +90,15 @@ STACK **extlist; return 0; } -/* Free function for STACK of CONF_VALUE */ +int X509V3_add_value_uchar(const char *name, const unsigned char *value, + STACK_OF(CONF_VALUE) **extlist) + { + return X509V3_add_value(name,(const char *)value,extlist); + } + +/* Free function for STACK_OF(CONF_VALUE) */ -void X509V3_conf_free(conf) -CONF_VALUE *conf; +void X509V3_conf_free(CONF_VALUE *conf) { if(!conf) return; if(conf->name) Free(conf->name); @@ -114,28 +107,22 @@ CONF_VALUE *conf; Free((char *)conf); } -int X509V3_add_value_bool(name, asn1_bool, extlist) -char *name; -int asn1_bool; -STACK **extlist; +int X509V3_add_value_bool(const char *name, int asn1_bool, + STACK_OF(CONF_VALUE) **extlist) { if(asn1_bool) return X509V3_add_value(name, "TRUE", extlist); return X509V3_add_value(name, "FALSE", extlist); } -int X509V3_add_value_bool_nf(name, asn1_bool, extlist) -char *name; -int asn1_bool; -STACK **extlist; +int X509V3_add_value_bool_nf(char *name, int asn1_bool, + STACK_OF(CONF_VALUE) **extlist) { if(asn1_bool) return X509V3_add_value(name, "TRUE", extlist); return 1; } -char *i2s_ASN1_ENUMERATED(method, a) -X509V3_EXT_METHOD *method; -ASN1_ENUMERATED *a; +char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *method, ASN1_ENUMERATED *a) { BIGNUM *bntmp = NULL; char *strtmp = NULL; @@ -147,9 +134,7 @@ ASN1_ENUMERATED *a; return strtmp; } -char *i2s_ASN1_INTEGER(method, a) -X509V3_EXT_METHOD *method; -ASN1_INTEGER *a; +char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *method, ASN1_INTEGER *a) { BIGNUM *bntmp = NULL; char *strtmp = NULL; @@ -161,10 +146,30 @@ ASN1_INTEGER *a; return strtmp; } -int X509V3_add_value_int(name, aint, extlist) -char *name; -ASN1_INTEGER *aint; -STACK **extlist; +ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *method, char *value) +{ + BIGNUM *bn = NULL; + ASN1_INTEGER *aint; + bn = BN_new(); + if(!value) { + X509V3err(X509V3_F_S2I_ASN1_INTEGER,X509V3_R_INVALID_NULL_VALUE); + return 0; + } + if(!BN_dec2bn(&bn, value)) { + X509V3err(X509V3_F_S2I_ASN1_INTEGER,X509V3_R_BN_DEC2BN_ERROR); + return 0; + } + + if(!(aint = BN_to_ASN1_INTEGER(bn, NULL))) { + X509V3err(X509V3_F_S2I_ASN1_INTEGER,X509V3_R_BN_TO_ASN1_INTEGER_ERROR); + return 0; + } + BN_free(bn); + return aint; +} + +int X509V3_add_value_int(const char *name, ASN1_INTEGER *aint, + STACK_OF(CONF_VALUE) **extlist) { char *strtmp; int ret; @@ -175,9 +180,7 @@ STACK **extlist; return ret; } -int X509V3_get_value_bool(value, asn1_bool) -CONF_VALUE *value; -int *asn1_bool; +int X509V3_get_value_bool(CONF_VALUE *value, int *asn1_bool) { char *btmp; if(!(btmp = value->value)) goto err; @@ -193,34 +196,19 @@ int *asn1_bool; return 1; } err: - X509V3err(X509V3_F_X509V3_VALUE_GET_BOOL,X509V3_R_INVALID_BOOLEAN_STRING); + X509V3err(X509V3_F_X509V3_GET_VALUE_BOOL,X509V3_R_INVALID_BOOLEAN_STRING); X509V3_conf_err(value); return 0; } -int X509V3_get_value_int(value, aint) -CONF_VALUE *value; -ASN1_INTEGER **aint; +int X509V3_get_value_int(CONF_VALUE *value, ASN1_INTEGER **aint) { - BIGNUM *bn = NULL; - bn = BN_new(); - if(!value->value) { - X509V3err(X509V3_F_X509V3_GET_VALUE_INT,X509V3_R_INVALID_NULL_VALUE); - X509V3_conf_err(value); - return 0; - } - if(!BN_dec2bn(&bn, value->value)) { - X509V3err(X509V3_F_X509V3_GET_VALUE_INT,X509V3_R_BN_DEC2BN_ERROR); + ASN1_INTEGER *itmp; + if(!(itmp = s2i_ASN1_INTEGER(NULL, value->value))) { X509V3_conf_err(value); return 0; } - - if(!(*aint = BN_to_ASN1_INTEGER(bn, NULL))) { - X509V3err(X509V3_F_X509V3_GET_VALUE_INT,X509V3_R_BN_TO_ASN1_INTEGER_ERROR); - X509V3_conf_err(value); - return 0; - } - BN_free(bn); + *aint = itmp; return 1; } @@ -229,16 +217,15 @@ ASN1_INTEGER **aint; /*#define DEBUG*/ -STACK *X509V3_parse_list(line) -char *line; +STACK_OF(CONF_VALUE) *X509V3_parse_list(char *line) { char *p, *q, c; char *ntmp, *vtmp; - STACK *values = NULL; + STACK_OF(CONF_VALUE) *values = NULL; char *linebuf; int state; /* We are going to modify the line so copy it first */ - linebuf = str_dup(line); + linebuf = BUF_strdup(line); state = HDR_NAME; ntmp = NULL; /* Go through all characters */ @@ -316,22 +303,21 @@ return values; err: Free(linebuf); -sk_pop_free(values, X509V3_conf_free); +sk_CONF_VALUE_pop_free(values, X509V3_conf_free); return NULL; } /* Delete leading and trailing spaces from a string */ -static char *strip_spaces(name) -char *name; +static char *strip_spaces(char *name) { char *p, *q; /* Skip over leading spaces */ p = name; - while(*p && isspace(*p)) p++; + while(*p && isspace((unsigned char)*p)) p++; if(!*p) return NULL; q = p + strlen(p) - 1; - while((q != p) && isspace(*q)) q--; + while((q != p) && isspace((unsigned char)*q)) q--; if(p != q) q[1] = 0; if(!*p) return NULL; return p; @@ -343,9 +329,7 @@ char *name; * hex representation */ -char *hex_to_string(buffer, len) -unsigned char *buffer; -long len; +char *hex_to_string(unsigned char *buffer, long len) { char *tmp, *q; unsigned char *p; @@ -370,9 +354,7 @@ long len; * a buffer */ -unsigned char *string_to_hex(str, len) -char *str; -long *len; +unsigned char *string_to_hex(char *str, long *len) { unsigned char *hexbuf, *q; unsigned char ch, cl, *p; @@ -424,9 +406,7 @@ long *len; * cmp or cmp.* */ -int name_cmp(name, cmp) -char *name; -char *cmp; +int name_cmp(const char *name, const char *cmp) { int len, ret; char c;