X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=crypto%2Fx509%2Fx509_obj.c;h=6a3ba8eb154322c11965af2ac8af49c4f91d9675;hp=188457872a4ed56fbf1658e5d132c68c94ad5b8e;hb=aecb0b018fcf4906ff43174622a42b5f672d889b;hpb=ec577822f95a8bca0023c5c77cef1a4916822d4a diff --git a/crypto/x509/x509_obj.c b/crypto/x509/x509_obj.c index 188457872a..6a3ba8eb15 100644 --- a/crypto/x509/x509_obj.c +++ b/crypto/x509/x509_obj.c @@ -66,7 +66,7 @@ char *X509_NAME_oneline(X509_NAME *a, char *buf, int len) { X509_NAME_ENTRY *ne; - unsigned int i; +int i; int n,lold,l,l1,l2,num,j,type; const char *s; char *p; @@ -75,6 +75,9 @@ char *X509_NAME_oneline(X509_NAME *a, char *buf, int len) static char hex[17]="0123456789ABCDEF"; int gs_doit[4]; char tmp_buf[80]; +#ifdef CHARSET_EBCDIC + char ebcdic_buf[1024]; +#endif if (buf == NULL) { @@ -88,7 +91,7 @@ char *X509_NAME_oneline(X509_NAME *a, char *buf, int len) if(b) { buf=b->data; - Free(b); + OPENSSL_free(b); } strncpy(buf,"NO X509_NAME",len); return buf; @@ -96,9 +99,9 @@ char *X509_NAME_oneline(X509_NAME *a, char *buf, int len) len--; /* space for '\0' */ l=0; - for (i=0; (int)ientries); i++) + for (i=0; ientries); i++) { - ne=(X509_NAME_ENTRY *)sk_value(a->entries,i); + ne=sk_X509_NAME_ENTRY_value(a->entries,i); n=OBJ_obj2nid(ne->object); if ((n == NID_undef) || ((s=OBJ_nid2sn(n)) == NULL)) { @@ -110,6 +113,19 @@ char *X509_NAME_oneline(X509_NAME *a, char *buf, int len) type=ne->value->type; num=ne->value->length; q=ne->value->data; +#ifdef CHARSET_EBCDIC + if (type == V_ASN1_GENERALSTRING || + type == V_ASN1_VISIBLESTRING || + type == V_ASN1_PRINTABLESTRING || + type == V_ASN1_TELETEXSTRING || + type == V_ASN1_VISIBLESTRING || + type == V_ASN1_IA5STRING) { + ascii2ebcdic(ebcdic_buf, q, + (num > sizeof ebcdic_buf) + ? sizeof ebcdic_buf : num); + q=ebcdic_buf; + } +#endif if ((type == V_ASN1_GENERALSTRING) && ((num%4) == 0)) { @@ -132,7 +148,12 @@ char *X509_NAME_oneline(X509_NAME *a, char *buf, int len) { if (!gs_doit[j&3]) continue; l2++; +#ifndef CHARSET_EBCDIC if ((q[j] < ' ') || (q[j] > '~')) l2+=3; +#else + if ((os_toascii[q[j]] < os_toascii[' ']) || + (os_toascii[q[j]] > os_toascii['~'])) l2+=3; +#endif } lold=l; @@ -152,11 +173,14 @@ char *X509_NAME_oneline(X509_NAME *a, char *buf, int len) memcpy(p,s,(unsigned int)l1); p+=l1; *(p++)='='; +#ifndef CHARSET_EBCDIC /* q was assigned above already. */ q=ne->value->data; +#endif for (j=0; j '~')) { @@ -167,13 +191,26 @@ char *X509_NAME_oneline(X509_NAME *a, char *buf, int len) } else *(p++)=n; +#else + n=os_toascii[q[j]]; + if ((n < os_toascii[' ']) || + (n > os_toascii['~'])) + { + *(p++)='\\'; + *(p++)='x'; + *(p++)=hex[(n>>4)&0x0f]; + *(p++)=hex[n&0x0f]; + } + else + *(p++)=q[j]; +#endif } *p='\0'; } if (b != NULL) { p=b->data; - Free(b); + OPENSSL_free(b); } else p=buf;