aboutsummaryrefslogtreecommitdiffstats
path: root/crypto/x509
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2000-01-07 00:55:54 +0000
committerDr. Stephen Henson <steve@openssl.org>2000-01-07 00:55:54 +0000
commit35f4850ae06b6056dd58cd072d0030b35c4541ad (patch)
treee4334c4b27ab67299002357ebc5c59f4e773c653 /crypto/x509
parentadd9e2544a78b5e3f854c59b2bd08b65f9dfa958 (diff)
downloadopenssl-35f4850ae06b6056dd58cd072d0030b35c4541ad.tar.gz
More X509_ATTRIBUTE changes.
Diffstat (limited to 'crypto/x509')
-rw-r--r--crypto/x509/x509.h11
-rw-r--r--crypto/x509/x509_att.c27
2 files changed, 27 insertions, 11 deletions
diff --git a/crypto/x509/x509.h b/crypto/x509/x509.h
index 9f5f9a1a15..46a95cf263 100644
--- a/crypto/x509/x509.h
+++ b/crypto/x509/x509.h
@@ -818,8 +818,8 @@ void X509_CERT_AUX_free(X509_CERT_AUX *a);
int i2d_X509_CERT_AUX(X509_CERT_AUX *a,unsigned char **pp);
X509_CERT_AUX * d2i_X509_CERT_AUX(X509_CERT_AUX **a,unsigned char **pp,
long length);
-int X509_alias_set(X509 *x, unsigned char *name, int len);
-unsigned char * X509_alias_get(X509 *x, int *len);
+int X509_alias_rset(X509 *x, unsigned char *name, int len);
+unsigned char * X509_alias_iget(X509 *x, int *len);
int (*X509_TRUST_set_default(int (*trust)(int , X509 *, int)))(int, X509 *, int);
int X509_radd_trust_object(X509 *x, ASN1_OBJECT *obj);
int X509_radd_reject_object(X509 *x, ASN1_OBJECT *obj);
@@ -1030,13 +1030,14 @@ X509_ATTRIBUTE *X509_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc);
STACK_OF(X509_ATTRIBUTE) *X509_radd_attr(STACK_OF(X509_ATTRIBUTE) **x,
X509_ATTRIBUTE *attr, int loc);
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid,
- int atrtype, void *data);
+ int atrtype, void *data, int len);
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr,
- ASN1_OBJECT *obj, int atrtype, void *data);
+ ASN1_OBJECT *obj, int atrtype, void *data, int len);
int X509_ATTRIBUTE_rset_object(X509_ATTRIBUTE *attr, ASN1_OBJECT *obj);
-int X509_ATTRIBUTE_iset_data(X509_ATTRIBUTE *attr, int attrtype, void *data);
+int X509_ATTRIBUTE_rset_data(X509_ATTRIBUTE *attr, int attrtype, void *data, int len);
void *X509_ATTRIBUTE_iget_data(X509_ATTRIBUTE *attr, int idx,
int atrtype, void *data);
+int X509_ATTRIBUTE_count(X509_ATTRIBUTE *attr);
ASN1_OBJECT *X509_ATTRIBUTE_iget_object(X509_ATTRIBUTE *attr);
ASN1_TYPE *X509_ATTRIBUTE_type_iget(X509_ATTRIBUTE *attr, int idx);
diff --git a/crypto/x509/x509_att.c b/crypto/x509/x509_att.c
index f755ccee85..b5cb2d5a7d 100644
--- a/crypto/x509/x509_att.c
+++ b/crypto/x509/x509_att.c
@@ -154,7 +154,7 @@ err2:
}
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid,
- int atrtype, void *data)
+ int atrtype, void *data, int len)
{
ASN1_OBJECT *obj;
X509_ATTRIBUTE *ret;
@@ -165,13 +165,13 @@ X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid,
X509err(X509_F_X509_ATTRIBUTE_CREATE_BY_NID,X509_R_UNKNOWN_NID);
return(NULL);
}
- ret=X509_ATTRIBUTE_create_by_OBJ(attr,obj,atrtype,data);
+ ret=X509_ATTRIBUTE_create_by_OBJ(attr,obj,atrtype,data,len);
if (ret == NULL) ASN1_OBJECT_free(obj);
return(ret);
}
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr,
- ASN1_OBJECT *obj, int atrtype, void *data)
+ ASN1_OBJECT *obj, int atrtype, void *data, int len)
{
X509_ATTRIBUTE *ret;
@@ -188,7 +188,7 @@ X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr,
if (!X509_ATTRIBUTE_rset_object(ret,obj))
goto err;
- if (!X509_ATTRIBUTE_iset_data(ret,atrtype,data))
+ if (!X509_ATTRIBUTE_rset_data(ret,atrtype,data,len))
goto err;
if ((attr != NULL) && (*attr == NULL)) *attr=ret;
@@ -208,15 +208,30 @@ int X509_ATTRIBUTE_rset_object(X509_ATTRIBUTE *attr, ASN1_OBJECT *obj)
return(1);
}
-int X509_ATTRIBUTE_iset_data(X509_ATTRIBUTE *attr, int attrtype, void *data)
+int X509_ATTRIBUTE_rset_data(X509_ATTRIBUTE *attr, int attrtype, void *data, int len)
{
ASN1_TYPE *ttmp;
+ ASN1_STRING *stmp;
+ int atype;
if (!attr) return 0;
+ if(attrtype & MBSTRING_FLAG) {
+ stmp = ASN1_STRING_set_by_NID(NULL, data, len, attrtype,
+ OBJ_obj2nid(attr->object));
+ if(!stmp) {
+ X509err(X509_F_X509_ATTRIBUTE_ISET_DATA, ERR_R_ASN1_LIB);
+ return 0;
+ }
+ atype = stmp->type;
+ } else {
+ if(!(stmp = ASN1_STRING_type_new(attrtype))) goto err;
+ if(!ASN1_STRING_set(stmp, data, len)) goto err;
+ atype = attrtype;
+ }
if(!(attr->value.set = sk_ASN1_TYPE_new_null())) goto err;
if(!(ttmp = ASN1_TYPE_new())) goto err;
if(!sk_ASN1_TYPE_push(attr->value.set, ttmp)) goto err;
attr->set = 1;
- ASN1_TYPE_set(ttmp, attrtype, data);
+ ASN1_TYPE_set(ttmp, atype, data);
return 1;
err:
X509err(X509_F_X509_ATTRIBUTE_ISET_DATA, ERR_R_MALLOC_FAILURE);