[openssl-dev] [openssl.org #4217] Fixing DJGPP port of openssl master branch.

Richard Levitte via RT rt at openssl.org
Tue May 10 12:51:49 UTC 2016


Hi Juan,

sorry that I lost track of this, and thank you Matt for the ping.

I've made this a github PR, here: https://github.com/openssl/openssl/pull/1050

Could you verify that it still works correctly? Or anyone else that's
interested?
(we will proceed anyway if we haven't heard from you by the end of the week,
but it would be nice having things verified)

Cheers,
Richard

On Thu Jan 07 00:25:20 2016, juan.guerrero at gmx.de wrote:
> Am 05.01.2016 04:05, schrieb Juan Manuel Guerrero via RT:
> > Am 04.01.2016 21:22, schrieb Richard Levitte via RT:
> >> Hi Juan, and thanks.
> >>
> >> I'm looking at your fix, and have a couple of questions:
> [snip]
>
> This is the last and final patch to fix the DJGPP port. The only
> difference
> compared with the initial patch is that it checks mow all file names
> for LFN
> validity. The dirname part and the basename part of the file name are
> now
> checked for ilicit initial dots in the case that no LFN support is
> provided
> by the file system. I have attached the patch as gzip'ed file too.
>
> Similar patches are also provided for the openssl 1.0.1 branch and the
> openssl 1.0.2 branch too.
>
>
> Regards,
> Juan M. Guerrero
>
>
>
>
>
>
> 2016-01-06 Juan Manuel Guerrero <juan.guerrero at gmx.de>
>
> * Configure: Replaced -DTERMIO by -DTERMIOS in CFLAGS.
>
> * crypto/bio/bss_dgram.c [WATT32]: Remove obsolete redefinition of
> function names: sock_write, sock_read and sock_puts.
>
> * crypto/bio/bss_sock.c [WATT32]: For Watt-32 2.2.11 sock_write,
> sock_read and sock_puts are redefined to their private names so their
> names must be undefined first before they can be redefined again.
>
> * crypto/bio/bss_file.c (file_fopen) [OPENSSL_SYS_MSDOS]: Call
> dosify_filename to replace leading dot if file system does not support
> it.
> (dosify_filename): Replace leading dot in passed file name if file
> system does not support LFN. Replace all leading dots in the dirname
> part and the basname part of the file name.
>
> * e_os.h [__DJGPP__]: Undefine macro DEVRANDOM_EGD. Neither MS-DOS
> nor FreeDOS provide 'egd' sockets.
> New macro HAS_LFN_SUPPORT checks if underlying file system supports
> long file names or not.
> Include sys/un.h.
> Define WATT32_NO_OLDIES.
>
> * INSTALL.DJGPP: Update URL of WATT-32 library.
>
>
>
>
>
>
>
>
>
> diff --git a/Configurations/10-main.conf b/Configurations/10-main.conf
> index a82b95d..fad57a9 100644
> --- a/Configurations/10-main.conf
> +++ b/Configurations/10-main.conf
> @@ -1299,7 +1299,7 @@
> "DJGPP" => {
> inherit_from => [ asm("x86_asm") ],
> cc => "gcc",
> - cflags => "-I/dev/env/WATT_ROOT/inc -DTERMIO
> -DL_ENDIAN -fomit-frame-pointer -O2 -Wall",
> + cflags => "-I/dev/env/WATT_ROOT/inc -DTERMIOS
> -DL_ENDIAN -fomit-frame-pointer -O2 -Wall",
> sys_id => "MSDOS",
> lflags => "-L/dev/env/WATT_ROOT/lib -lwatt",
> bn_ops => "BN_LLONG ${x86_gcc_des}
> ${x86_gcc_opts}",
> diff --git a/INSTALL.DJGPP b/INSTALL.DJGPP
> index 1047ec9..23aed6a 100644
> --- a/INSTALL.DJGPP
> +++ b/INSTALL.DJGPP
> @@ -18,7 +18,7 @@
> files to download, see the DJGPP "ZIP PICKER" page at
> "http://www.delorie.com/djgpp/zip-picker.html". You also need to
> have
> the WATT-32 networking package installed before you try to compile
> - OpenSSL. This can be obtained from "http://www.bgnett.no/~giva/".
> + OpenSSL. This can be obtained from "http://www.watt-32.net/".
> The Makefile assumes that the WATT-32 code is in the directory
> specified by the environment variable WATT_ROOT. If you have watt-
> 32
> in directory "watt32" under your main DJGPP directory, specify
> diff --git a/crypto/bio/bss_dgram.c b/crypto/bio/bss_dgram.c
> index 5e934ce..ca318cf 100644
> --- a/crypto/bio/bss_dgram.c
> +++ b/crypto/bio/bss_dgram.c
> @@ -97,12 +97,6 @@
> ((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);
> diff --git a/crypto/bio/bss_file.c b/crypto/bio/bss_file.c
> index c09a9a9..f34161c 100644
> --- a/crypto/bio/bss_file.c
> +++ b/crypto/bio/bss_file.c
> @@ -95,6 +95,10 @@
>
> # if !defined(OPENSSL_NO_STDIO)
>
> +#ifdef OPENSSL_SYS_MSDOS
> +# include <libc/unconst.h>
> +static void dosify_filename(const char *filename);
> +#endif
> static int file_write(BIO *h, const char *buf, int num);
> static int file_read(BIO *h, char *buf, int size);
> static int file_puts(BIO *h, const char *str);
> @@ -161,6 +165,9 @@ static FILE *file_fopen(const char *filename,
> const char *mode)
> file = fopen(filename, mode);
> }
> # else
> +# ifdef OPENSSL_SYS_MSDOS
> + dosify_filename(filename);
> +# endif
> file = fopen(filename, mode);
> # endif
> return (file);
> @@ -467,6 +474,23 @@ static int file_puts(BIO *bp, const char *str)
> return (ret);
> }
>
> +#ifdef OPENSSL_SYS_MSDOS
> +static void dosify_filename(const char *filename)
> +{
> + if (filename && *filename && !HAS_LFN_SUPPORT(filename)) {
> + char *namestart = unconst(filename, char *);
> +
> + do {
> + if (namestart[0] == '/' && namestart[2] != '.' &&
> namestart[2] != '/') {
> +
> + /* Leading dot not allowed on plain DOS. */
> + if (namestart[1] == '.')
> + *++namestart = '_';
> + }
> + } while (*++namestart);
> + }
> +}
> +#endif
> #else
>
> static int file_write(BIO *b, const char *in, int inl)
> diff --git a/crypto/bio/bss_sock.c b/crypto/bio/bss_sock.c
> index 1673b32..5cef4f3 100644
> --- a/crypto/bio/bss_sock.c
> +++ b/crypto/bio/bss_sock.c
> @@ -66,7 +66,11 @@
> # include <openssl/bio.h>
>
> # ifdef WATT32
> -# define sock_write SockWrite /* Watt-32 uses same names */
> +/* Watt-32 uses same names */
> +# undef sock_write
> +# undef sock_read
> +# undef sock_puts
> +# define sock_write SockWrite
> # define sock_read SockRead
> # define sock_puts SockPuts
> # endif
> diff --git a/e_os.h b/e_os.h
> index 5ab4c89..6d52f13 100644
> --- a/e_os.h
> +++ b/e_os.h
> @@ -141,6 +141,7 @@ extern "C" {
> # define writesocket(s,b,n) send((s),(b),(n),0)
> # elif defined(__DJGPP__)
> # define WATT32
> +# define WATT32_NO_OLDIES
> # define get_last_socket_error() errno
> # define clear_socket_error() errno=0
> # define closesocket(s) close_s(s)
> @@ -194,11 +195,14 @@ extern "C" {
> # include <unistd.h>
> # include <sys/stat.h>
> # include <sys/socket.h>
> +# include <sys/un.h>
> # include <tcp.h>
> # include <netdb.h>
> # define _setmode setmode
> # define _O_TEXT O_TEXT
> # define _O_BINARY O_BINARY
> +# define HAS_LFN_SUPPORT(name) (pathconf((name), _PC_NAME_MAX) >
> 12)
> +# undef DEVRANDOM_EGD /* Neither MS-DOS nor FreeDOS provide 'egd'
> sockets. */
> # undef DEVRANDOM
> # define DEVRANDOM "/dev/urandom\x24"
> # endif /* __DJGPP__ */


--
Richard Levitte
levitte at openssl.org

-- 
Ticket here: http://rt.openssl.org/Ticket/Display.html?id=4217
Please log in as guest with password guest if prompted



More information about the openssl-dev mailing list