Commit cfdcfede authored by Ben Laurie's avatar Ben Laurie
Browse files

Another STACK bites the dust.

parent 1d48dd00
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -193,6 +193,10 @@ err:\
		M_ASN1_D2I_get_imp_set(r,func,free_func,\
			V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL);

#define M_ASN1_D2I_get_seq_type(type,r,func,free_func) \
		M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,\
					    V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL)

#define M_ASN1_D2I_get_seq_opt(r,func,free_func) \
	if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \
		V_ASN1_CONSTRUCTED|V_ASN1_SEQUENCE)))\
@@ -211,8 +215,8 @@ err:\

#define M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,a,b) \
	c.q=c.p; \
	if (d2i_ASN1_SET_OF_##type(&(r),&c.p,c.slen,func,free_func,a,b) \
	    == NULL) \
	if (d2i_ASN1_SET_OF_##type(&(r),&c.p,c.slen,func,\
				   free_func,a,b) == NULL) \
		{ c.line=__LINE__; goto err; } \
	c.slen-=(c.p-c.q);

@@ -309,6 +313,10 @@ err:\
		ret+=i2d_ASN1_SET(a,NULL,f,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL, \
				  IS_SEQUENCE);

#define M_ASN1_I2D_len_SEQUENCE_type(type,a,f) \
		ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,V_ASN1_SEQUENCE, \
					    V_ASN1_UNIVERSAL,IS_SEQUENCE)

#define M_ASN1_I2D_len_SEQUENCE_opt(a,f) \
		if ((a != NULL) && (sk_num(a) != 0)) \
			M_ASN1_I2D_len_SEQUENCE(a,f);
@@ -379,6 +387,10 @@ err:\
#define M_ASN1_I2D_put_SEQUENCE(a,f) i2d_ASN1_SET(a,&p,f,V_ASN1_SEQUENCE,\
					     V_ASN1_UNIVERSAL,IS_SEQUENCE)

#define M_ASN1_I2D_put_SEQUENCE_type(type,a,f) \
     i2d_ASN1_SET_OF_##type(a,&p,f,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL, \
			    IS_SEQUENCE)

#define M_ASN1_I2D_put_SEQUENCE_opt(a,f) \
		if ((a != NULL) && (sk_num(a) != 0)) \
			M_ASN1_I2D_put_SEQUENCE(a,f);
+1 −5
Original line number Diff line number Diff line
@@ -164,11 +164,7 @@ typedef struct evp_pkey_st
		struct dh_st *dh;	/* DH */
		} pkey;
	int save_parameters;
#ifdef HEADER_STACK_H
	STACK /*X509_ATTRIBUTE*/ *attributes; /* [ 0 ] */
#else
	char /* X509_ATTRIBUTE */ *attributes; /* [ 0 ] */
#endif
	} EVP_PKEY;

#define EVP_PKEY_MO_SIGN	0x0001
+3 −1
Original line number Diff line number Diff line
@@ -126,7 +126,7 @@ typedef struct X509_pubkey_st
	{
	X509_ALGOR *algor;
	ASN1_BIT_STRING *public_key;
	struct evp_pkey_st /* EVP_PKEY*/ *pkey;
	EVP_PKEY *pkey;
	} X509_PUBKEY;

typedef struct X509_sig_st
@@ -256,6 +256,8 @@ typedef struct x509_attributes_st
		} value;
	} X509_ATTRIBUTE;

DECLARE_STACK_OF(X509_ATTRIBUTE);

typedef struct private_key_st
	{
	int version;
+15 −12
Original line number Diff line number Diff line
@@ -109,12 +109,12 @@ unsigned char **pp;
	M_ASN1_I2D_vars(a);

	M_ASN1_I2D_len (a->version, i2d_ASN1_INTEGER);
	M_ASN1_I2D_len_SEQUENCE (a->ids, i2d_SXNETID);
	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 (a->ids, i2d_SXNETID);
	M_ASN1_I2D_put_SEQUENCE_type (SXNETID, a->ids, i2d_SXNETID);

	M_ASN1_I2D_finish();
}
@@ -125,7 +125,7 @@ SXNET *SXNET_new()
	ASN1_CTX c;
	M_ASN1_New_Malloc(ret, SXNET);
	M_ASN1_New(ret->version,ASN1_INTEGER_new);
	M_ASN1_New(ret->ids,sk_new_null);
	M_ASN1_New(ret->ids,sk_SXNETID_new_null);
	return (ret);
	M_ASN1_New_Error(ASN1_F_SXNET_NEW);
}
@@ -139,7 +139,7 @@ long length;
	M_ASN1_D2I_Init();
	M_ASN1_D2I_start_sequence();
	M_ASN1_D2I_get (ret->version, d2i_ASN1_INTEGER);
	M_ASN1_D2I_get_seq (ret->ids, d2i_SXNETID, SXNETID_free);
	M_ASN1_D2I_get_seq_type (SXNETID, ret->ids, d2i_SXNETID, SXNETID_free);
	M_ASN1_D2I_Finish(a, SXNET_free, ASN1_F_D2I_SXNET);
}

@@ -148,8 +148,8 @@ SXNET *a;
{
	if (a == NULL) return;
	ASN1_INTEGER_free(a->version);
	sk_pop_free(a->ids, SXNETID_free);
	Free ((char *)a);
	sk_SXNETID_pop_free(a->ids, SXNETID_free);
	Free (a);
}

int i2d_SXNETID(a,pp)
@@ -199,7 +199,7 @@ SXNETID *a;
	if (a == NULL) return;
	ASN1_INTEGER_free(a->zone);
	ASN1_OCTET_STRING_free(a->user);
	Free ((char *)a);
	Free (a);
}

static int sxnet_i2r(method, sx, out, indent)
@@ -214,8 +214,8 @@ int indent;
	int i;
	v = ASN1_INTEGER_get(sx->version);
	BIO_printf(out, "%*sVersion: %d (0x%X)", indent, "", v + 1, v);
	for(i = 0; i < sk_num(sx->ids); i++) {
		id = (SXNETID *)sk_value(sx->ids, i);
	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);
@@ -323,7 +323,7 @@ int userlen;
	if(userlen == -1) userlen = strlen(user);
		
	if(!ASN1_OCTET_STRING_set(id->user, user, userlen)) goto err;
	if(!sk_push(sx->ids, (char *)id)) goto err;
	if(!sk_SXNETID_push(sx->ids, id)) goto err;
	id->zone = zone;
	return 1;
	
@@ -372,9 +372,12 @@ ASN1_INTEGER *zone;
{
	SXNETID *id;
	int i;
	for(i = 0; i < sk_num(sx->ids); i++) {
		id = (SXNETID *)sk_value(sx->ids, 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;
	}
	return NULL;
}

IMPLEMENT_STACK_OF(SXNETID)
IMPLEMENT_ASN1_SET_OF(SXNETID)
+8 −5
Original line number Diff line number Diff line
@@ -184,16 +184,19 @@ union {

/* Strong extranet structures */

typedef struct SXNET_st {
	ASN1_INTEGER *version;
	STACK /* SXNETID */ *ids;
} SXNET;

typedef struct SXNET_ID_st {
	ASN1_INTEGER *zone;
	ASN1_OCTET_STRING *user;
} SXNETID;

DECLARE_STACK_OF(SXNETID)
DECLARE_ASN1_SET_OF(SXNETID)

typedef struct SXNET_st {
	ASN1_INTEGER *version;
	STACK_OF(SXNETID) *ids;
} SXNET;

#define X509V3_conf_err(val) ERR_add_error_data(6, "section:", val->section, \
",name:", val->name, ",value:", val->value);