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.guerr...@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.guerr...@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 > levi...@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 -- openssl-dev mailing list To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev