Commit 1a15c899 authored by Dr. Stephen Henson's avatar Dr. Stephen Henson
Browse files

Multi valued AVA support.

parent d0a4bd00
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -4,6 +4,10 @@

 Changes between 0.9.7a and 0.9.8  [xx XXX xxxx]

  *) Generate muti valued AVAs using '+' notation in config files for
     req and dirName.
     [Steve Henson]

  *) Support for nameConstraints certificate extension.
     [Steve Henson]

+25 −6
Original line number Diff line number Diff line
@@ -133,7 +133,7 @@ static int add_attribute_object(X509_REQ *req, char *text,
				char *def, char *value, int nid, int n_min,
				int n_max, unsigned long chtype);
static int add_DN_object(X509_NAME *n, char *text, char *def, char *value,
	int nid,int n_min,int n_max, unsigned long chtype);
	int nid,int n_min,int n_max, unsigned long chtype, int mval);
#ifndef OPENSSL_NO_RSA
static void MS_CALLBACK req_cb(int p,int n,void *arg);
#endif
@@ -1259,7 +1259,7 @@ static int prompt_info(X509_REQ *req,
	int i;
	char *p,*q;
	char buf[100];
	int nid;
	int nid, mval;
	long n_min,n_max;
	char *type,*def,*value;
	CONF_VALUE *v;
@@ -1302,6 +1302,13 @@ start: for (;;)
					if(*p) type = p;
					break;
				}
			if (*type == '+')
				{
				mval = -1;
				type++;
				}
			else
				mval = 0;
			/* If OBJ not recognised ignore it */
			if ((nid=OBJ_txt2nid(type)) == NID_undef) goto start;

@@ -1339,7 +1346,7 @@ start: for (;;)
				}

			if (!add_DN_object(subj,v->value,def,value,nid,
				n_min,n_max, chtype))
				n_min,n_max, chtype, mval))
				return 0;
			}
		if (X509_NAME_entry_count(subj) == 0)
@@ -1429,6 +1436,7 @@ static int auto_info(X509_REQ *req, STACK_OF(CONF_VALUE) *dn_sk,

	for (i = 0; i < sk_CONF_VALUE_num(dn_sk); i++)
		{
		int mval;
		v=sk_CONF_VALUE_value(dn_sk,i);
		p=q=NULL;
		type=v->name;
@@ -1445,8 +1453,19 @@ static int auto_info(X509_REQ *req, STACK_OF(CONF_VALUE) *dn_sk,
				if(*p) type = p;
				break;
			}
#ifndef CHARSET_EBCDIC
		if (*p == '+')
#else
		if (*p == os_toascii['+'])
#endif
			{
			p++;
			mval = -1;
			}
		else
			mval = 0;
		if (!X509_NAME_add_entry_by_txt(subj,type, chtype,
				(unsigned char *) v->value,-1,-1,0)) return 0;
				(unsigned char *) v->value,-1,-1,mval)) return 0;

		}

@@ -1469,7 +1488,7 @@ static int auto_info(X509_REQ *req, STACK_OF(CONF_VALUE) *dn_sk,


static int add_DN_object(X509_NAME *n, char *text, char *def, char *value,
	     int nid, int n_min, int n_max, unsigned long chtype)
	     int nid, int n_min, int n_max, unsigned long chtype, int mval)
	{
	int i,ret=0;
	MS_STATIC char buf[1024];
@@ -1519,7 +1538,7 @@ start:
#endif
	if(!req_check_len(i, n_min, n_max)) goto start;
	if (!X509_NAME_add_entry_by_NID(n,nid, chtype,
				(unsigned char *) buf, -1,-1,0)) goto err;
				(unsigned char *) buf, -1,-1,mval)) goto err;
	ret=1;
err:
	return(ret);
+13 −2
Original line number Diff line number Diff line
@@ -801,7 +801,7 @@ int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE)*dn_sk,
						unsigned long chtype)
	{
	CONF_VALUE *v;
	int i;
	int i, mval;
	char *p, *type;
	if (!nm)
		return 0;
@@ -824,8 +824,19 @@ int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE)*dn_sk,
				if(*p) type = p;
				break;
				}
#ifndef CHARSET_EBCDIC
			if (*p == '+')
#else
			if (*p == os_toascii['+'])
#endif
			{
			mval = -1;
			p++;
			}
		else
			mval = 0;
		if (!X509_NAME_add_entry_by_txt(nm,type, chtype,
				(unsigned char *) v->value,-1,-1,0))
				(unsigned char *) v->value,-1,-1,mval))
					return 0;

		}