Merge of main trunk, no conflicts this time
authorRichard Levitte <levitte@openssl.org>
Mon, 11 Sep 2000 10:18:56 +0000 (10:18 +0000)
committerRichard Levitte <levitte@openssl.org>
Mon, 11 Sep 2000 10:18:56 +0000 (10:18 +0000)
CHANGES
apps/req.c
crypto/asn1/a_mbstr.c
crypto/x509v3/v3_utl.c
doc/crypto/bio.pod

diff --git a/CHANGES b/CHANGES
index dcb354f88ffda31c45a5f78bb97251455b933913..50a643ed61db5159c17bb20d844c5c40c6a581a5 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,10 @@
 
  Changes between 0.9.5a and 0.9.6  [xx XXX 2000]
 
+  *) Add a few more EBCDIC conditionals that make `req' and `x509'
+     work better on such systems.
+     [Martin Kraemer <Martin.Kraemer@MchP.Siemens.De>]
+
   *) Add two demo programs for PKCS12_parse() and PKCS12_create().
      Update PKCS12_parse() so it copies the friendlyName and the
      keyid to the certificates aux info.
index 02b0d88a952c82d5db8e5c5d14cad053322c18cf..691c2b0f05ff119a7f5c537b9f468c8f68566653 100644 (file)
@@ -1139,7 +1139,11 @@ static int auto_info(X509_REQ *req, STACK_OF(CONF_VALUE) *dn_sk,
                 * multiple instances 
                 */
                for(p = v->name; *p ; p++) 
+#ifndef CHARSET_EBCDIC
                        if ((*p == ':') || (*p == ',') || (*p == '.')) {
+#else
+                       if ((*p == os_toascii[':']) || (*p == os_toascii[',']) || (*p == os_toascii['.'])) {
+#endif
                                p++;
                                if(*p) type = p;
                                break;
@@ -1255,6 +1259,9 @@ start:
                return(0);
                }
        buf[--i]='\0';
+#ifdef CHARSET_EBCDIC
+       ebcdic2ascii(buf, buf, i);
+#endif
        if(!req_check_len(i, min, max)) goto start;
 
        if(!X509_REQ_add1_attr_by_NID(req, nid, MBSTRING_ASC,
index 9842b653e62b8b5ad8747a8140eeb42a7c0af7ee..5d981c655387c385fcaeb7b44eb75a3a72aabf4b 100644 (file)
@@ -385,9 +385,16 @@ static int is_printable(unsigned long value)
        /* Note: we can't use 'isalnum' because certain accented 
         * characters may count as alphanumeric in some environments.
         */
+#ifndef CHARSET_EBCDIC
        if((ch >= 'a') && (ch <= 'z')) return 1;
        if((ch >= 'A') && (ch <= 'Z')) return 1;
        if((ch >= '0') && (ch <= '9')) return 1;
        if ((ch == ' ') || strchr("'()+,-./:=?", ch)) return 1;
+#else /*CHARSET_EBCDIC*/
+       if((ch >= os_toascii['a']) && (ch <= os_toascii['z'])) return 1;
+       if((ch >= os_toascii['A']) && (ch <= os_toascii['Z'])) return 1;
+       if((ch >= os_toascii['0']) && (ch <= os_toascii['9'])) return 1;
+       if ((ch == os_toascii[' ']) || strchr("'()+,-./:=?", os_toebcdic[ch])) return 1;
+#endif /*CHARSET_EBCDIC*/
        return 0;
 }
index 0976bcc7116195ad3739f114905751e49d9992f3..e6e99b2d5cd0728cc9af4fe35a32edfb95cdb453 100644 (file)
@@ -331,6 +331,7 @@ static char *strip_spaces(char *name)
 
 /* Given a buffer of length 'len' return a OPENSSL_malloc'ed string with its
  * hex representation
+ * @@@ (Contents of buffer are always kept in ASCII, also on EBCDIC machines)
  */
 
 char *hex_to_string(unsigned char *buffer, long len)
@@ -351,6 +352,10 @@ char *hex_to_string(unsigned char *buffer, long len)
                *q++ = ':';
        }
        q[-1] = 0;
+#ifdef CHARSET_EBCDIC
+       ebcdic2ascii(tmp, tmp, q - tmp - 1);
+#endif
+
        return tmp;
 }
 
@@ -369,8 +374,14 @@ unsigned char *string_to_hex(char *str, long *len)
        if(!(hexbuf = OPENSSL_malloc(strlen(str) >> 1))) goto err;
        for(p = (unsigned char *)str, q = hexbuf; *p;) {
                ch = *p++;
+#ifdef CHARSET_EBCDIC
+               ch = os_toebcdic[ch];
+#endif
                if(ch == ':') continue;
                cl = *p++;
+#ifdef CHARSET_EBCDIC
+               cl = os_toebcdic[cl];
+#endif
                if(!cl) {
                        X509V3err(X509V3_F_STRING_TO_HEX,X509V3_R_ODD_NUMBER_OF_DIGITS);
                        OPENSSL_free(hexbuf);
index 0214804dcffdaf0a708be825fe37a8caa10a187f..987ec838fb32a1722033bf8d5522729154f6b76c 100644 (file)
@@ -34,7 +34,7 @@ if it is being read from.
 BIOs can be joined together to form a chain (a single BIO is a chain
 with one component). A chain normally consist of one source/sink
 BIO and one or more filter BIOs. Data read from or written to the
-end BIO then traverses the chain to the end (normally a source/sink
+first BIO then traverses the chain to the end (normally a source/sink
 BIO).
 
 =head1 SEE ALSO