X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=crypto%2Fx509v3%2Fv3_sxnet.c;h=eaea9ea01b4ba52e84fa9940d3a298e2df7c4958;hp=ac7aa7675241ac45910dde7c39c9c87716d0c916;hb=e9746e03ee222b0123ac118f8952e161e7d48a2d;hpb=cfdcfede9cfb0c5f649f379255eea19b37f43f4f diff --git a/crypto/x509v3/v3_sxnet.c b/crypto/x509v3/v3_sxnet.c index ac7aa76752..eaea9ea01b 100644 --- a/crypto/x509v3/v3_sxnet.c +++ b/crypto/x509v3/v3_sxnet.c @@ -58,168 +58,64 @@ #include #include "cryptlib.h" -#include "conf.h" -#include "asn1.h" -#include "asn1_mac.h" -#include "x509v3.h" +#include +#include +#include +#include /* Support for Thawte strong extranet extension */ #define SXNET_TEST -#ifndef NOPROTO static int sxnet_i2r(X509V3_EXT_METHOD *method, SXNET *sx, BIO *out, int indent); #ifdef SXNET_TEST -static SXNET * sxnet_v2i(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, STACK *nval); +static SXNET * sxnet_v2i(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, + STACK_OF(CONF_VALUE) *nval); #endif -#else -static int sxnet_i2r(); -#endif - -X509V3_EXT_METHOD v3_sxnet = { -NID_sxnet, X509V3_EXT_MULTILINE, -(X509V3_EXT_NEW)SXNET_new, -SXNET_free, -(X509V3_EXT_D2I)d2i_SXNET, -i2d_SXNET, -NULL, NULL, -NULL, +const X509V3_EXT_METHOD v3_sxnet = { +NID_sxnet, X509V3_EXT_MULTILINE, ASN1_ITEM_ref(SXNET), +0,0,0,0, +0,0, +0, #ifdef SXNET_TEST (X509V3_EXT_V2I)sxnet_v2i, #else -NULL, +0, #endif (X509V3_EXT_I2R)sxnet_i2r, -NULL, +0, NULL }; +ASN1_SEQUENCE(SXNETID) = { + ASN1_SIMPLE(SXNETID, zone, ASN1_INTEGER), + ASN1_SIMPLE(SXNETID, user, ASN1_OCTET_STRING) +} ASN1_SEQUENCE_END(SXNETID) -/* - * ASN1err(ASN1_F_SXNET_NEW,ERR_R_MALLOC_FAILURE); - * ASN1err(ASN1_F_D2I_SXNET,ERR_R_MALLOC_FAILURE); - * ASN1err(ASN1_F_SXNETID_NEW,ERR_R_MALLOC_FAILURE); - * ASN1err(ASN1_F_D2I_SXNETID,ERR_R_MALLOC_FAILURE); - */ - -int i2d_SXNET(a,pp) -SXNET *a; -unsigned char **pp; -{ - M_ASN1_I2D_vars(a); - - M_ASN1_I2D_len (a->version, i2d_ASN1_INTEGER); - M_ASN1_I2D_len_SEQUENCE_type (SXNETID, a->ids, i2d_SXNETID); - - M_ASN1_I2D_seq_total(); - - M_ASN1_I2D_put (a->version, i2d_ASN1_INTEGER); - M_ASN1_I2D_put_SEQUENCE_type (SXNETID, a->ids, i2d_SXNETID); - - M_ASN1_I2D_finish(); -} - -SXNET *SXNET_new() -{ - SXNET *ret=NULL; - ASN1_CTX c; - M_ASN1_New_Malloc(ret, SXNET); - M_ASN1_New(ret->version,ASN1_INTEGER_new); - M_ASN1_New(ret->ids,sk_SXNETID_new_null); - return (ret); - M_ASN1_New_Error(ASN1_F_SXNET_NEW); -} - -SXNET *d2i_SXNET(a,pp,length) -SXNET **a; -unsigned char **pp; -long length; -{ - M_ASN1_D2I_vars(a,SXNET *,SXNET_new); - M_ASN1_D2I_Init(); - M_ASN1_D2I_start_sequence(); - M_ASN1_D2I_get (ret->version, d2i_ASN1_INTEGER); - M_ASN1_D2I_get_seq_type (SXNETID, ret->ids, d2i_SXNETID, SXNETID_free); - M_ASN1_D2I_Finish(a, SXNET_free, ASN1_F_D2I_SXNET); -} - -void SXNET_free(a) -SXNET *a; -{ - if (a == NULL) return; - ASN1_INTEGER_free(a->version); - sk_SXNETID_pop_free(a->ids, SXNETID_free); - Free (a); -} - -int i2d_SXNETID(a,pp) -SXNETID *a; -unsigned char **pp; -{ - M_ASN1_I2D_vars(a); +IMPLEMENT_ASN1_FUNCTIONS(SXNETID) - M_ASN1_I2D_len (a->zone, i2d_ASN1_INTEGER); - M_ASN1_I2D_len (a->user, i2d_ASN1_OCTET_STRING); - - M_ASN1_I2D_seq_total(); - - M_ASN1_I2D_put (a->zone, i2d_ASN1_INTEGER); - M_ASN1_I2D_put (a->user, i2d_ASN1_OCTET_STRING); - - M_ASN1_I2D_finish(); -} +ASN1_SEQUENCE(SXNET) = { + ASN1_SIMPLE(SXNET, version, ASN1_INTEGER), + ASN1_SEQUENCE_OF(SXNET, ids, SXNETID) +} ASN1_SEQUENCE_END(SXNET) -SXNETID *SXNETID_new() -{ - SXNETID *ret=NULL; - ASN1_CTX c; - M_ASN1_New_Malloc(ret, SXNETID); - ret->zone = NULL; - M_ASN1_New(ret->user,ASN1_OCTET_STRING_new); - return (ret); - M_ASN1_New_Error(ASN1_F_SXNETID_NEW); -} - -SXNETID *d2i_SXNETID(a,pp,length) -SXNETID **a; -unsigned char **pp; -long length; -{ - M_ASN1_D2I_vars(a,SXNETID *,SXNETID_new); - M_ASN1_D2I_Init(); - M_ASN1_D2I_start_sequence(); - M_ASN1_D2I_get(ret->zone, d2i_ASN1_INTEGER); - M_ASN1_D2I_get(ret->user, d2i_ASN1_OCTET_STRING); - M_ASN1_D2I_Finish(a, SXNETID_free, ASN1_F_D2I_SXNETID); -} - -void SXNETID_free(a) -SXNETID *a; -{ - if (a == NULL) return; - ASN1_INTEGER_free(a->zone); - ASN1_OCTET_STRING_free(a->user); - Free (a); -} +IMPLEMENT_ASN1_FUNCTIONS(SXNET) -static int sxnet_i2r(method, sx, out, indent) -X509V3_EXT_METHOD *method; -SXNET *sx; -BIO *out; -int indent; +static int sxnet_i2r(X509V3_EXT_METHOD *method, SXNET *sx, BIO *out, + int indent) { long v; char *tmp; SXNETID *id; int i; v = ASN1_INTEGER_get(sx->version); - BIO_printf(out, "%*sVersion: %d (0x%X)", indent, "", v + 1, v); + BIO_printf(out, "%*sVersion: %ld (0x%lX)", indent, "", v + 1, v); for(i = 0; i < sk_SXNETID_num(sx->ids); i++) { id = sk_SXNETID_value(sx->ids, i); tmp = i2s_ASN1_INTEGER(NULL, id->zone); BIO_printf(out, "\n%*sZone: %s, User: ", indent, "", tmp); - Free(tmp); - ASN1_OCTET_STRING_print(out, id->user); + OPENSSL_free(tmp); + M_ASN1_OCTET_STRING_print(out, id->user); } return 1; } @@ -232,16 +128,14 @@ int indent; */ -static SXNET * sxnet_v2i(method, ctx, nval) -X509V3_EXT_METHOD *method; -X509V3_CTX *ctx; -STACK *nval; +static SXNET * sxnet_v2i(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, + STACK_OF(CONF_VALUE) *nval) { CONF_VALUE *cnf; SXNET *sx = NULL; int i; - for(i = 0; i < sk_num(nval); i++) { - cnf = (CONF_VALUE *)sk_value(nval, i); + for(i = 0; i < sk_CONF_VALUE_num(nval); i++) { + cnf = sk_CONF_VALUE_value(nval, i); if(!SXNET_add_id_asc(&sx, cnf->name, cnf->value, -1)) return NULL; } @@ -255,15 +149,12 @@ STACK *nval; /* Add an id given the zone as an ASCII number */ -int SXNET_add_id_asc(psx, zone, user, userlen) -SXNET **psx; -char *zone; -unsigned char *user; -int userlen; +int SXNET_add_id_asc(SXNET **psx, char *zone, char *user, + int userlen) { ASN1_INTEGER *izone = NULL; if(!(izone = s2i_ASN1_INTEGER(NULL, zone))) { - X509V3err(X509V3_F_SXNET_ADD_ASC,X509V3_R_ERROR_CONVERTING_ZONE); + X509V3err(X509V3_F_SXNET_ADD_ID_ASC,X509V3_R_ERROR_CONVERTING_ZONE); return 0; } return SXNET_add_id_INTEGER(psx, izone, user, userlen); @@ -271,16 +162,13 @@ int userlen; /* Add an id given the zone as an unsigned long */ -int SXNET_add_id_ulong(psx, lzone, user, userlen) -SXNET **psx; -unsigned long lzone; -unsigned char *user; -int userlen; +int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, char *user, + int userlen) { ASN1_INTEGER *izone = NULL; - if(!(izone = ASN1_INTEGER_new()) || !ASN1_INTEGER_set(izone, lzone)) { + if(!(izone = M_ASN1_INTEGER_new()) || !ASN1_INTEGER_set(izone, lzone)) { X509V3err(X509V3_F_SXNET_ADD_ID_ULONG,ERR_R_MALLOC_FAILURE); - ASN1_INTEGER_free(izone); + M_ASN1_INTEGER_free(izone); return 0; } return SXNET_add_id_INTEGER(psx, izone, user, userlen); @@ -292,11 +180,8 @@ int userlen; * free it up afterwards. */ -int SXNET_add_id_INTEGER(psx, zone, user, userlen) -SXNET **psx; -ASN1_INTEGER *zone; -unsigned char *user; -int userlen; +int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *zone, char *user, + int userlen) { SXNET *sx = NULL; SXNETID *id = NULL; @@ -322,7 +207,7 @@ int userlen; if(!(id = SXNETID_new())) goto err; if(userlen == -1) userlen = strlen(user); - if(!ASN1_OCTET_STRING_set(id->user, user, userlen)) goto err; + if(!M_ASN1_OCTET_STRING_set(id->user, user, userlen)) goto err; if(!sk_SXNETID_push(sx->ids, id)) goto err; id->zone = zone; return 1; @@ -335,9 +220,7 @@ int userlen; return 0; } -ASN1_OCTET_STRING *SXNET_get_id_asc(sx, zone) -SXNET *sx; -char *zone; +ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, char *zone) { ASN1_INTEGER *izone = NULL; ASN1_OCTET_STRING *oct; @@ -346,35 +229,31 @@ char *zone; return NULL; } oct = SXNET_get_id_INTEGER(sx, izone); - ASN1_INTEGER_free(oct); + M_ASN1_INTEGER_free(izone); return oct; } -ASN1_OCTET_STRING *SXNET_get_id_ulong(sx, lzone) -SXNET *sx; -unsigned long lzone; +ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone) { ASN1_INTEGER *izone = NULL; ASN1_OCTET_STRING *oct; - if(!(izone = ASN1_INTEGER_new()) || !ASN1_INTEGER_set(izone, lzone)) { + if(!(izone = M_ASN1_INTEGER_new()) || !ASN1_INTEGER_set(izone, lzone)) { X509V3err(X509V3_F_SXNET_GET_ID_ULONG,ERR_R_MALLOC_FAILURE); - ASN1_INTEGER_free(izone); + M_ASN1_INTEGER_free(izone); return NULL; } oct = SXNET_get_id_INTEGER(sx, izone); - ASN1_INTEGER_free(oct); + M_ASN1_INTEGER_free(izone); return oct; } -ASN1_OCTET_STRING *SXNET_get_id_INTEGER(sx, zone) -SXNET *sx; -ASN1_INTEGER *zone; +ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone) { SXNETID *id; int i; for(i = 0; i < sk_SXNETID_num(sx->ids); i++) { id = sk_SXNETID_value(sx->ids, i); - if(!ASN1_INTEGER_cmp(id->zone, zone)) return id->user; + if(!M_ASN1_INTEGER_cmp(id->zone, zone)) return id->user; } return NULL; }