Missing declarations, no assembler in PEDANTIC.
[openssl.git] / crypto / x509 / x509name.c
index 64c13154955f876dfdb3a59bd6f2a5cb18e318f3..27bc4dc9a3e3508db202e8de9897f3c526a3835c 100644 (file)
@@ -171,6 +171,42 @@ X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc)
        return(ret);
        }
 
+int X509_NAME_add_entry_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, int type,
+                       unsigned char *bytes, int len, int loc, int set)
+{
+       X509_NAME_ENTRY *ne;
+       int ret;
+       ne = X509_NAME_ENTRY_create_by_OBJ(NULL, obj, type, bytes, len);
+       if(!ne) return 0;
+       ret = X509_NAME_add_entry(name, ne, loc, set);
+       X509_NAME_ENTRY_free(ne);
+       return ret;
+}
+
+int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type,
+                       unsigned char *bytes, int len, int loc, int set)
+{
+       X509_NAME_ENTRY *ne;
+       int ret;
+       ne = X509_NAME_ENTRY_create_by_NID(NULL, nid, type, bytes, len);
+       if(!ne) return 0;
+       ret = X509_NAME_add_entry(name, ne, loc, set);
+       X509_NAME_ENTRY_free(ne);
+       return ret;
+}
+
+int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type,
+                       const unsigned char *bytes, int len, int loc, int set)
+{
+       X509_NAME_ENTRY *ne;
+       int ret;
+       ne = X509_NAME_ENTRY_create_by_txt(NULL, field, type, bytes, len);
+       if(!ne) return 0;
+       ret = X509_NAME_add_entry(name, ne, loc, set);
+       X509_NAME_ENTRY_free(ne);
+       return ret;
+}
+
 /* if set is -1, append to previous set, 0 'a new one', and 1,
  * prepend to the guy we are about to stomp on. */
 int X509_NAME_add_entry(X509_NAME *name, X509_NAME_ENTRY *ne, int loc,
@@ -236,10 +272,30 @@ err:
        return(0);
        }
 
+X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne,
+               const char *field, int type, const unsigned char *bytes, int len)
+       {
+       ASN1_OBJECT *obj;
+       X509_NAME_ENTRY *nentry;
+
+       obj=OBJ_txt2obj(field, 0);
+       if (obj == NULL)
+               {
+               X509err(X509_F_X509_NAME_ENTRY_CREATE_BY_TXT,
+                                               X509_R_INVALID_FIELD_NAME);
+               ERR_add_error_data(2, "name=", field);
+               return(NULL);
+               }
+       nentry = X509_NAME_ENTRY_create_by_OBJ(ne,obj,type,bytes,len);
+       ASN1_OBJECT_free(obj);
+       return nentry;
+       }
+
 X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,
             int type, unsigned char *bytes, int len)
        {
        ASN1_OBJECT *obj;
+       X509_NAME_ENTRY *nentry;
 
        obj=OBJ_nid2obj(nid);
        if (obj == NULL)
@@ -247,11 +303,13 @@ X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,
                X509err(X509_F_X509_NAME_ENTRY_CREATE_BY_NID,X509_R_UNKNOWN_NID);
                return(NULL);
                }
-       return(X509_NAME_ENTRY_create_by_OBJ(ne,obj,type,bytes,len));
+       nentry = X509_NAME_ENTRY_create_by_OBJ(ne,obj,type,bytes,len);
+       ASN1_OBJECT_free(obj);
+       return nentry;
        }
 
 X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne,
-            ASN1_OBJECT *obj, int type, unsigned char *bytes, int len)
+            ASN1_OBJECT *obj, int type, const unsigned char *bytes, int len)
        {
        X509_NAME_ENTRY *ret;
 
@@ -289,16 +347,16 @@ int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, ASN1_OBJECT *obj)
        }
 
 int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type,
-            unsigned char *bytes, int len)
+            const unsigned char *bytes, int len)
        {
        int i;
 
        if ((ne == NULL) || ((bytes == NULL) && (len != 0))) return(0);
-       if(type & MBSTRING_FLAG
+       if((type > 0) && (type & MBSTRING_FLAG)
                return ASN1_STRING_set_by_NID(&ne->value, bytes,
                                                len, type,
                                        OBJ_obj2nid(ne->object)) ? 1 : 0;
-       if (len < 0) len=strlen((char *)bytes);
+       if (len < 0) len=strlen((const char *)bytes);
        i=ASN1_STRING_set(ne->value,bytes,len);
        if (!i) return(0);
        if (type != V_ASN1_UNDEF)