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

Juan Manuel Guerrero via RT rt at openssl.org
Thu May 12 19:44:04 UTC 2016


Am 10.05.2016 14:51, schrieb Richard Levitte via RT:
> 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
>

Hello Richard,

I have verified that every thing works flawlessly.  Please feel free to go ahead
and merge the DJGPP specific changes.

Kind regards,
Juan


-- 
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