Undo a90081576c94f9f54de1755188a00ccc1760549a
authorRich Salz <rsalz@akamai.com>
Sat, 9 Aug 2014 12:02:20 +0000 (08:02 -0400)
committerRich Salz <rsalz@akamai.com>
Sat, 9 Aug 2014 12:02:20 +0000 (08:02 -0400)
Undo unapproved commit that removed DJGPP and WATT32

19 files changed:
apps/s_client.c
apps/s_server.c
apps/s_socket.c
crypto/bio/b_sock.c
crypto/bio/bss_dgram.c
crypto/bio/bss_log.c
crypto/bio/bss_sock.c
crypto/des/read_pwd.c
crypto/md4/md4.c
crypto/md5/md5.c
crypto/o_dir.c
crypto/perlasm/x86asm.pl
crypto/ripemd/rmd160.c
crypto/ui/ui_openssl.c
crypto/x86cpuid.pl
demos/bio/sconnect.c
e_os.h
e_os2.h
engines/e_aep.c

index 1948328..e1be6a9 100644 (file)
@@ -308,6 +308,9 @@ static void sc_usage(void)
        BIO_printf(bio_err," -prexit       - print session information even on connection failure\n");
        BIO_printf(bio_err," -showcerts    - show all certificates in the chain\n");
        BIO_printf(bio_err," -debug        - extra output\n");
+#ifdef WATT32
+       BIO_printf(bio_err," -wdebug       - WATT-32 tcp debugging\n");
+#endif
        BIO_printf(bio_err," -msg          - Show protocol messages\n");
        BIO_printf(bio_err," -nbio_test    - more ssl protocol testing\n");
        BIO_printf(bio_err," -state        - print the 'ssl' states\n");
@@ -827,6 +830,10 @@ static char *jpake_secret = NULL;
                        c_tlsextdebug=1;
                else if (strcmp(*argv,"-status") == 0)
                        c_status_req=1;
+#endif
+#ifdef WATT32
+               else if (strcmp(*argv,"-wdebug") == 0)
+                       dbug_init();
 #endif
                else if (strcmp(*argv,"-msg") == 0)
                        c_msg=1;
index 4b93fde..1e15281 100644 (file)
@@ -2971,7 +2971,7 @@ static int www_body(char *hostname, int s, int stype, unsigned char *context)
                                BIO_printf(bio_s_out,"read R BLOCK\n");
 #if defined(OPENSSL_SYS_NETWARE)
             delay(1000);
-#elif !defined(OPENSSL_SYS_MSDOS) && !defined(__DJGPP__)
+#elif !defined(OPENSSL_SYS_MSDOS)
                                sleep(1);
 #endif
                                continue;
index 093b9c8..e83baf4 100644 (file)
@@ -178,7 +178,12 @@ static void sock_cleanup(void)
 
 static int ssl_sock_init(void)
        {
-#if defined(OPENSSL_SYS_WINDOWS)
+#ifdef WATT32
+       extern int _watt_do_exit;
+       _watt_do_exit = 0;
+       if (sock_init())
+               return (0);
+#elif defined(OPENSSL_SYS_WINDOWS)
        if (!wsa_init_done)
                {
                int err;
index 4544ab2..a026b3e 100644 (file)
@@ -494,6 +494,12 @@ int BIO_sock_init(void)
                        }
                }
 #endif /* OPENSSL_SYS_WINDOWS */
+#ifdef WATT32
+       extern int _watt_do_exit;
+       _watt_do_exit = 0;    /* don't make sock_init() call exit() */
+       if (sock_init())
+               return (-1);
+#endif
 
 #if defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK)
     WORD wVerReq;
@@ -543,6 +549,9 @@ int BIO_socket_ioctl(int fd, long type, void *arg)
        {
        int i;
 
+#ifdef __DJGPP__
+       i=ioctlsocket(fd,type,(char *)arg);
+#else
 # if defined(OPENSSL_SYS_VMS)
        /* 2011-02-18 SMS.
         * VMS ioctl() can't tolerate a 64-bit "void *arg", but we
@@ -565,8 +574,9 @@ int BIO_socket_ioctl(int fd, long type, void *arg)
 # else /* defined(OPENSSL_SYS_VMS) */
 #  define ARG arg
 # endif /* defined(OPENSSL_SYS_VMS) [else] */
-       i=ioctlsocket(fd,type,ARG);
 
+       i=ioctlsocket(fd,type,ARG);
+#endif /* __DJGPP__ */
        if (i < 0)
                SYSerr(SYS_F_IOCTLSOCKET,get_last_socket_error());
        return(i);
index 25d5195..9c09501 100644 (file)
          ((a)->s6_addr32[2] == htonl(0x0000ffff)))
 #endif
 
+#ifdef WATT32
+#define sock_write SockWrite  /* Watt-32 uses same names */
+#define sock_read  SockRead
+#define sock_puts  SockPuts
+#endif
+
 static int dgram_write(BIO *h, const char *buf, int num);
 static int dgram_read(BIO *h, char *buf, int size);
 static int dgram_puts(BIO *h, const char *str);
index 7b6eb73..2227b2b 100644 (file)
@@ -88,7 +88,7 @@
 #  include <sys/syslog.h>
 #elif defined(OPENSSL_SYS_NETWARE)
 #  define NO_SYSLOG
-#elif !defined(MSDOS) && !defined(OPENSSL_SYS_VXWORKS) && !defined(NO_SYSLOG)
+#elif (!defined(MSDOS) || defined(WATT32)) && !defined(OPENSSL_SYS_VXWORKS) && !defined(NO_SYSLOG)
 #  include <syslog.h>
 #endif
 
@@ -373,11 +373,15 @@ static void xcloselog(BIO* bp)
 {
 }
 
-#else /* Unix */
+#else /* Unix/Watt32 */
 
 static void xopenlog(BIO* bp, char* name, int level)
 {
+#ifdef WATT32   /* djgpp/DOS */
+       openlog(name, LOG_PID|LOG_CONS|LOG_NDELAY, level);
+#else
        openlog(name, LOG_PID|LOG_CONS, level);
+#endif
 }
 
 static void xsyslog(BIO *bp, int priority, const char *string)
index 4e1b3d5..3df3193 100644 (file)
 
 #include <openssl/bio.h>
 
+#ifdef WATT32
+#define sock_write SockWrite  /* Watt-32 uses same names */
+#define sock_read  SockRead
+#define sock_puts  SockPuts
+#endif
+
 static int sock_write(BIO *h, const char *buf, int num);
 static int sock_read(BIO *h, char *buf, int size);
 static int sock_puts(BIO *h, const char *str);
index 9042afe..ce5fa00 100644 (file)
@@ -266,7 +266,7 @@ int des_read_pw(char *buf, char *buff, int size, const char *prompt,
        long status;
        unsigned short channel = 0;
 #else
-#if !defined(OPENSSL_SYS_MSDOS)
+#if !defined(OPENSSL_SYS_MSDOS) || defined(__DJGPP__)
        TTY_STRUCT tty_orig,tty_new;
 #endif
 #endif
index f8a47fb..141415a 100644 (file)
@@ -64,7 +64,7 @@
 
 void do_fp(FILE *f);
 void pt(unsigned char *md);
-#if !defined(_OSD_POSIX)
+#if !defined(_OSD_POSIX) && !defined(__DJGPP__)
 int read(int, void *, unsigned int);
 #endif
 
index d171256..563733a 100644 (file)
@@ -64,7 +64,7 @@
 
 void do_fp(FILE *f);
 void pt(unsigned char *md);
-#if !defined(_OSD_POSIX)
+#if !defined(_OSD_POSIX) && !defined(__DJGPP__)
 int read(int, void *, unsigned int);
 #endif
 
index ded369f..42891ea 100644 (file)
@@ -70,7 +70,7 @@
 #include "o_dir.h"
 
 #define LPDIR_H
-#if defined OPENSSL_SYS_UNIX
+#if defined OPENSSL_SYS_UNIX || defined DJGPP
 #include "LPdir_unix.c"
 #elif defined OPENSSL_SYS_VMS
 #include "LPdir_vms.c"
index 6cf8054..cae156a 100644 (file)
@@ -277,7 +277,7 @@ sub ::asm_init
     {  print STDERR <<"EOF";
 Pick one target type from
        elf     - Linux, FreeBSD, Solaris x86, etc.
-       a.out   - elder OpenBSD, etc.
+       a.out   - DJGPP, elder OpenBSD, etc.
        coff    - GAS/COFF such as Win32 targets
        win32n  - Windows 95/Windows NT NASM format
        nw-nasm - NetWare NASM format
index 0fcd99f..b0ec574 100644 (file)
@@ -64,7 +64,7 @@
 
 void do_fp(FILE *f);
 void pt(unsigned char *md);
-#if !defined(_OSD_POSIX)
+#if !defined(_OSD_POSIX) && !defined(__DJGPP__)
 int read(int, void *, unsigned int);
 #endif
 
index 1b09b91..a38c758 100644 (file)
@@ -296,7 +296,7 @@ static long tty_orig[3], tty_new[3]; /* XXX   Is there any guarantee that this w
 static long status;
 static unsigned short channel = 0;
 #else
-#if !defined(OPENSSL_SYS_MSDOS)
+#if !defined(OPENSSL_SYS_MSDOS) || defined(__DJGPP__)
 static TTY_STRUCT tty_orig,tty_new;
 #endif
 #endif
index dca37e7..8677232 100644 (file)
@@ -168,7 +168,7 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
        &ret    ();
 &function_end_B("OPENSSL_rdtsc");
 
-# This works in Ring 0 only [read MS-DOS+privileged DPMI host],
+# This works in Ring 0 only [read DJGPP+MS-DOS+privileged DPMI host],
 # but it's safe to call it on any [supported] 32-bit platform...
 # Just check for [non-]zero return value...
 &function_begin_B("OPENSSL_instrument_halt","EXTRN\t_OPENSSL_ia32cap_P:DWORD");
@@ -202,6 +202,41 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
        &ret    ();
 &function_end_B("OPENSSL_instrument_halt");
 
+# Essentially there is only one use for this function. Under DJGPP:
+#
+#      #include <go32.h>
+#      ...
+#      i=OPENSSL_far_spin(_dos_ds,0x46c);
+#      ...
+# to obtain the number of spins till closest timer interrupt.
+
+&function_begin_B("OPENSSL_far_spin");
+       &pushf  ();
+       &pop    ("eax");
+       &bt     ("eax",9);
+       &jnc    (&label("nospin"));     # interrupts are disabled
+
+       &mov    ("eax",&DWP(4,"esp"));
+       &mov    ("ecx",&DWP(8,"esp"));
+       &data_word (0x90d88e1e);        # push %ds, mov %eax,%ds
+       &xor    ("eax","eax");
+       &mov    ("edx",&DWP(0,"ecx"));
+       &jmp    (&label("spin"));
+
+       &align  (16);
+&set_label("spin");
+       &inc    ("eax");
+       &cmp    ("edx",&DWP(0,"ecx"));
+       &je     (&label("spin"));
+
+       &data_word (0x1f909090);        # pop   %ds
+       &ret    ();
+
+&set_label("nospin");
+       &xor    ("eax","eax");
+       &xor    ("edx","edx");
+       &ret    ();
+&function_end_B("OPENSSL_far_spin");
 
 &function_begin_B("OPENSSL_wipe_cpu","EXTRN\t_OPENSSL_ia32cap_P:DWORD");
        &xor    ("eax","eax");
index 87b380b..880344e 100644 (file)
@@ -32,6 +32,11 @@ char *argv[];
        else
                host=argv[1];
 
+#ifdef WATT32
+       dbug_init();
+       sock_init();
+#endif
+
        /* Lets get nice error messages */
        SSL_load_error_strings();
 
diff --git a/e_os.h b/e_os.h
index 9a260a4..0a97895 100644 (file)
--- a/e_os.h
+++ b/e_os.h
@@ -150,6 +150,13 @@ extern "C" {
 #define clear_socket_error()   WSASetLastError(0)
 #define readsocket(s,b,n)      recv((s),(b),(n),0)
 #define writesocket(s,b,n)     send((s),(b),(n),0)
+#elif defined(__DJGPP__)
+#define WATT32
+#define get_last_socket_error()        errno
+#define clear_socket_error()   errno=0
+#define closesocket(s)         close_s(s)
+#define readsocket(s,b,n)      read_s(s,b,n)
+#define writesocket(s,b,n)     send(s,b,n,0)
 #elif defined(MAC_OS_pre_X)
 #define get_last_socket_error()        errno
 #define clear_socket_error()   errno=0
@@ -220,6 +227,19 @@ extern "C" {
 
 #if (defined(WINDOWS) || defined(MSDOS))
 
+#  ifdef __DJGPP__
+#    include <unistd.h>
+#    include <sys/stat.h>
+#    include <sys/socket.h>
+#    include <tcp.h>
+#    include <netdb.h>
+#    define _setmode setmode
+#    define _O_TEXT O_TEXT
+#    define _O_BINARY O_BINARY
+#    undef DEVRANDOM
+#    define DEVRANDOM "/dev/urandom\x24"
+#  endif /* __DJGPP__ */
+
 #  ifndef S_IFDIR
 #    define S_IFDIR    _S_IFDIR
 #  endif
@@ -228,7 +248,7 @@ extern "C" {
 #    define S_IFMT     _S_IFMT
 #  endif
 
-#  if !defined(WINNT)
+#  if !defined(WINNT) && !defined(__DJGPP__)
 #    define NO_SYSLOG
 #  endif
 #  define NO_DIRENT
@@ -479,7 +499,7 @@ static unsigned int _strlen31(const char *str)
 #      define SSLeay_Read(a,b,c)       (-1)
 #      define SHUTDOWN(fd)             close(fd)
 #      define SHUTDOWN2(fd)            close(fd)
-#    else
+#    elif !defined(__DJGPP__)
 #      if defined(_WIN32_WCE) && _WIN32_WCE<410
 #        define getservbyname _masked_declaration_getservbyname
 #      endif
@@ -506,6 +526,11 @@ static unsigned int _strlen31(const char *str)
 #      define SSLeay_Read(a,b,c)       recv((a),(b),(c),0)
 #      define SHUTDOWN(fd)             { shutdown((fd),0); closesocket(fd); }
 #      define SHUTDOWN2(fd)            { shutdown((fd),2); closesocket(fd); }
+#    else
+#      define SSLeay_Write(a,b,c)      write_s(a,b,c,0)
+#      define SSLeay_Read(a,b,c)       read_s(a,b,c)
+#      define SHUTDOWN(fd)             close_s(fd)
+#      define SHUTDOWN2(fd)            close_s(fd)
 #    endif
 
 #  elif defined(MAC_OS_pre_X)
diff --git a/e_os2.h b/e_os2.h
index d07c4b9..f4597a2 100644 (file)
--- a/e_os2.h
+++ b/e_os2.h
@@ -85,7 +85,7 @@ extern "C" {
 /* ---------------------- Microsoft operating systems ---------------------- */
 
 /* Note that MSDOS actually denotes 32-bit environments running on top of
-   MS-DOS. */
+   MS-DOS, such as DJGPP one. */
 #if defined(OPENSSL_SYSNAME_MSDOS)
 # undef OPENSSL_SYS_UNIX
 # define OPENSSL_SYS_MSDOS
index d27e562..a937226 100644 (file)
@@ -57,7 +57,7 @@
 #include <string.h>
 
 #include <openssl/e_os2.h>
-#if !defined(OPENSSL_SYS_MSDOS) || defined(__MINGW32__)
+#if !defined(OPENSSL_SYS_MSDOS) || defined(__DJGPP__) || defined(__MINGW32__)
 #include <sys/types.h>
 #include <unistd.h>
 #else