diff options
Diffstat (limited to 'network/elinks')
19 files changed, 405 insertions, 417 deletions
diff --git a/network/elinks/README b/network/elinks/README index 97574a8664..e40cc46f9e 100644 --- a/network/elinks/README +++ b/network/elinks/README @@ -1,10 +1,8 @@ -elinks (ELinks - Full-Featured Text WWW Browser) - -ELinks is an advanced and well-established feature-rich text mode web -(HTTP/FTP/..) browser. ELinks can render both frames and tables, is +Elinks is an advanced and well-established feature-rich text mode web +(HTTP/FTP/..) browser. Elinks can render both frames and tables, is highly customizable, and can be extended via Lua or Guile scripts. It -is very portable and runs on a variety of platforms. It also uses -SpiderMonkey javascript support. +is very portable and runs on a variety of platforms. It also has +(very limited) JavaScript support via SpiderMonkey (js185). There are a number of options that can be used to add support for other protocols etc. To enable or disable an option use the following @@ -14,8 +12,6 @@ MOUSE=no ./elinks.SlackBuild Several options can be combined together. -OPTIONS - Category Description Default Value System: @@ -55,12 +51,40 @@ DATA yes FSP no FTP yes FINGER no -GOPHER no +GOPHER (use internal gopher code, see note below) no NNTP no SMB no Note that Unicode combining characters is marked as experimental. -Optional dependencies apart from scripting languages stated above: +Contributed Patches: + +Thanks goes to B. Watson for the following two patches: + +No Suspend Patch + +Elinks sometimes has problems resuming if it has been suspended with ^Z. +To apply a patch that disables ^Z, ^S and ^Q suspend/pause/resume keys +so that they are available to bind in elinks: + + NO_SUSPEND=yes + +No Connect Patch. + +Sometimes when quitting and another client is running on the same +session-ring, the process will freeze and require killing manually. +This patch solves that by making elinks use '-no-connect 1' by default. +It won't be possible to open links in new windows with this, but using +URI passing is a workaround. + + NO_CONNECT=yes + +Auto-detected Dependencies: + +js185: SpiderMonkey (can be turned off in options). +tre: regexp support in searches. -tre: for regex search support +Other included patches help make the internal gopher support usable. By +default elinks will hand gopher URLs to lynx if the GOPHER option isn't +set. Using the internal gopher client has the advantage of having +combined http and gopher bookmarks, and a more uniform interface. diff --git a/network/elinks/elinks.SlackBuild b/network/elinks/elinks.SlackBuild index eafc45eb53..b402bed806 100644 --- a/network/elinks/elinks.SlackBuild +++ b/network/elinks/elinks.SlackBuild @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # Slackware build script for elinks # Copyright 2014 David Woodfall <dave@slackbuilds.org> @@ -21,10 +21,14 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +cd $(dirname $0) ; CWD=$(pwd) + PRGNAM=elinks -VERSION=${VERSION:-git20131231} -BUILD=${BUILD:-11} +VERSION=${VERSION:-20170723_f86be65} +COMMIT=${VERSION#*_} +BUILD=${BUILD:-1} TAG=${TAG:-_SBo} +PKGTYPE=${PKGTYPE:-tgz} if [ -z "$ARCH" ]; then case "$( uname -m )" in @@ -34,50 +38,62 @@ if [ -z "$ARCH" ]; then esac fi -CWD=$(pwd) +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + TMP=${TMP:-/tmp/SBo} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} -# Added -fno-strict-aliasing -Wno-pointer-sign for a much more peaceful build -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-g0 -O0 -march=i486 -mtune=i686 -fno-strict-aliasing -Wno-pointer-sign" - LIBDIRSUFFIX="" -elif [ "$ARCH" = "i586" ]; then - SLKCFLAGS="-g0 -O0 -march=i586 -mtune=i686 -fno-strict-aliasing -Wno-pointer-sign" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "i686" ]; then - SLKCFLAGS="-g0 -O0 -march=i686 -mtune=i686 -fno-strict-aliasing -Wno-pointer-sign" + SLKCFLAGS="-O2 -march=i686 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "x86_64" ]; then - SLKCFLAGS="-g0 -O0 -fPIC -fno-strict-aliasing -Wno-pointer-sign" - SLKLDFLAGS="-m64" + SLKCFLAGS="-O2 -fPIC" LIBDIRSUFFIX="64" else - SLKCFLAGS="-go -O0" + SLKCFLAGS="-O2" LIBDIRSUFFIX="" fi +# A much more peaceful build +SLKCFLAGS="$SLKCFLAGS -fno-strict-aliasing -Wno-pointer-sign" + set -e rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT cd $TMP -rm -rf $PRGNAM-$VERSION -tar xvf $CWD/$PRGNAM-$VERSION.tar.xz -cd $PRGNAM-$VERSION +rm -rf $PRGNAM-$COMMIT +tar xvf $CWD/$COMMIT.tar.?z || tar xvf $CWD/$PRGNAM-$COMMIT.tar.?z +cd $PRGNAM-$COMMIT chown -R root:root . find -L . \ - \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ -o -perm 511 \) -exec chmod 755 {} \; -o \ - \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ - -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +# fix documentation generation on 15.0. +# xmlto needs --skip-validation or it fails. +sed -i 's/$(XMLTO) -o/$(XMLTO) --skip-validation -o/' doc/Makefile -for patch in $CWD/patches/* -do +for patch in $CWD/patches/*; do patch --verbose -p1 < $patch done +# patches for no suspend (^Z) and -no-connect by default +# courtesy of B. Watson. +[ "${NO_SUSPEND:-no}" = "yes" ] && + patch --verbose -p1 -i $CWD/option-patches/0010-* +[ "${NO_CONNECT:-no}" = "yes" ] && + patch --verbose -p1 -i $CWD/option-patches/0020-* + # System [ "${FASTMEM:-no}" = "yes" ] && fastmem="--enable-fastmem" [ "${CGI:-no}" = "yes" ] && cgi="--enable-cgi" @@ -114,8 +130,11 @@ done [ "${NNTP:-no}" = "yes" ] && nntp="--enable-nntp" [ "${SMB:-no}" = "yes" ] && smb="--enable-smb" -autoreconf -CFLAGS="$SLKCFLAGS -L/usr/lib64" \ +# quiet some more warnings +sed "s,^aclocal,& -Wnone," -i autogen.sh + +./autogen.sh +CFLAGS="$SLKCFLAGS -L/usr/lib$LIBDIRSUFFIX" \ ./configure \ --prefix=/usr \ --libdir=/usr/lib$LIBDIRSUFFIX \ @@ -124,6 +143,7 @@ CFLAGS="$SLKCFLAGS -L/usr/lib64" \ --mandir=/usr/man \ --infodir=/usr/info \ --docdir=/usr/doc/$PRGNAM-$VERSION \ + --htmldir=/usr/doc/$PRGNAM-$VERSION/html \ $fastmem \ $cgi \ $combining \ @@ -153,23 +173,26 @@ CFLAGS="$SLKCFLAGS -L/usr/lib64" \ --build=$ARCH-slackware-linux make +# html doesn't install so we copy it later +make -C doc html make install DESTDIR=$PKG -find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ - | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true - -find $PKG/usr/man -type f -exec gzip -9 {} \; -for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done +strip --strip-unneeded $PKG/usr/bin/$PRGNAM +gzip -9 $PKG/usr/man/man?/*.? mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION + cp -a \ - AUTHORS COPYING ChangeLog INSTALL NEWS README THANKS TODO doc/html doc/*txt \ - contrib \ + AUTHORS BUGS COPYING NEWS README SITES THANKS TODO ChangeLog contrib \ + doc/*txt doc/manual.html-chunked \ $PKG/usr/doc/$PRGNAM-$VERSION cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild +# don't need these +find $PKG \( -name ".gitignore" -o -name "manual.proc" \) -delete + mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc cd $PKG -/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/network/elinks/elinks.info b/network/elinks/elinks.info index 17553cf0cf..e543517b54 100644 --- a/network/elinks/elinks.info +++ b/network/elinks/elinks.info @@ -1,10 +1,10 @@ PRGNAM="elinks" -VERSION="git20131231" -HOMEPAGE="http://elinks.or.cz" -DOWNLOAD="http://www.unrealize.co.uk/source/elinks-git20131231.tar.xz" -MD5SUM="3b3b57ac6b9bafe123d046f342272d17" +VERSION="20170723_f86be65" +HOMEPAGE="http://elinks.cz" +DOWNLOAD="https://repo.or.cz/elinks.git/snapshot/f86be65.tar.gz" +MD5SUM="660ae64c253f1e2014064dc1a3fbed80" DOWNLOAD_x86_64="" MD5SUM_x86_64="" REQUIRES="" -MAINTAINER="David Woodfall" +MAINTAINER="D Woodfall" EMAIL="dave@slackbuilds.org" diff --git a/network/elinks/option-patches/0010-disable-suspend-pause.patch b/network/elinks/option-patches/0010-disable-suspend-pause.patch new file mode 100644 index 0000000000..9a85ad5669 --- /dev/null +++ b/network/elinks/option-patches/0010-disable-suspend-pause.patch @@ -0,0 +1,19 @@ +diff -Naur elinks-git20131231/src/terminal/kbd.c elinks-git20131231.patched/src/terminal/kbd.c +--- elinks-git20131231/src/terminal/kbd.c 2013-12-18 10:38:57.000000000 -0500 ++++ elinks-git20131231.patched/src/terminal/kbd.c 2020-06-25 01:32:29.333043353 -0400 +@@ -263,6 +263,15 @@ + t.c_lflag |= TOSTOP; + #endif + t.c_oflag |= OPOST; ++ ++ /* 20200625 bkw: patched code disables suspend (normally ^Z), ++ pause (normally ^S) and resume (normally ^Q). This allows ++ us to use those keys for normal keybinds. If we're running ++ elinks in tmux or screen, or in X with multiple terminals, ++ or the Linux console (multiple consoles), we don't really ++ need ^Z anyway. */ ++ t.c_cc[VSUSP] = t.c_cc[VSTOP] = t.c_cc[VSTART] = vdisable; ++ + if (tcsetattr(itrm->in.ctl, TCSANOW, &t)) return -1; + + return 0; diff --git a/network/elinks/option-patches/0020-no-connect-by-default.patch b/network/elinks/option-patches/0020-no-connect-by-default.patch new file mode 100644 index 0000000000..e36c9aa006 --- /dev/null +++ b/network/elinks/option-patches/0020-no-connect-by-default.patch @@ -0,0 +1,62 @@ +diff -Naur elinks-git20131231/doc/man/man1/elinks.1.in elinks-git20131231.patched/doc/man/man1/elinks.1.in +--- elinks-git20131231/doc/man/man1/elinks.1.in 2013-12-18 10:38:57.000000000 -0500 ++++ elinks-git20131231.patched/doc/man/man1/elinks.1.in 2020-06-25 03:02:54.523412259 -0400 +@@ -141,12 +141,13 @@ + Look up specified host and print all DNS resolved IP addresses\&. + .RE + .PP +-\fB\-no\-connect\fR \fI[0|1]\fR (default: 0) ++\fB\-no\-connect\fR \fI[0|1]\fR (default: 1) + .RS 4 + Run + ELinks +-as a separate instance instead of connecting to an existing instance\&. Note that normally no runtime state files (bookmarks, history, etc\&.) are written to the disk when this option is used\&. See also +-\-touch\-files\&. ++as a separate instance instead of connecting to an existing instance\&. Enabled ++by default in this build; use \fB\-no\-connect 0\fR to connect to an existing ++instance\&. + .RE + .PP + \fB\-no\-home\fR \fI[0|1]\fR (default: 0) +@@ -238,13 +239,13 @@ + Print given URLs in source form to stdout\&. + .RE + .PP +-\fB\-touch\-files\fR \fI[0|1]\fR (default: 0) ++\fB\-touch\-files\fR \fI[0|1]\fR (default: 1) + .RS 4 + When enabled, runtime state files (bookmarks, history, etc\&.) are written to disk, even when + \-no\-connect + or + \-session\-ring +-is used\&. The option has no effect if not used in conjunction with any of these options\&. ++is used\&. The option has no effect if not used in conjunction with any of these options\&. This option is enabled by default; use \fB\-touch\-files 0\fR to disable\&. + .RE + .PP + \fB\-verbose\fR \fI<num>\fR (default: 1) +diff -Naur elinks-git20131231/src/config/cmdline.c elinks-git20131231.patched/src/config/cmdline.c +--- elinks-git20131231/src/config/cmdline.c 2013-12-18 10:38:57.000000000 -0500 ++++ elinks-git20131231.patched/src/config/cmdline.c 2020-06-25 02:58:31.595442844 -0400 +@@ -848,11 +848,9 @@ + "addresses.")), + + INIT_OPT_BOOL("", N_("Run as separate instance"), +- "no-connect", 0, 0, ++ "no-connect", 0, 1, + N_("Run ELinks as a separate instance instead of connecting " +- "to an existing instance. Note that normally no runtime state " +- "files (bookmarks, history, etc.) are written to the disk " +- "when this option is used. See also -touch-files.")), ++ "to an existing instance. Enabled by default in this build.")), + + INIT_OPT_BOOL("", N_("Disable use of files in ~/.elinks"), + "no-home", 0, 0, +@@ -921,7 +919,7 @@ + INIT_OPT_COMMAND("", NULL, "stdin", OPT_HIDDEN, redir_cmd, NULL), + + INIT_OPT_BOOL("", N_("Touch files in ~/.elinks when running with -no-connect/-session-ring"), +- "touch-files", 0, 0, ++ "touch-files", 0, 1, + N_("When enabled, runtime state files (bookmarks, history, " + "etc.) are written to disk, even when -no-connect or " + "-session-ring is used. The option has no effect if not used " diff --git a/network/elinks/patches/0002-gopher_index_queries.patch b/network/elinks/patches/0002-gopher_index_queries.patch deleted file mode 100644 index ce92695a0a..0000000000 --- a/network/elinks/patches/0002-gopher_index_queries.patch +++ /dev/null @@ -1,92 +0,0 @@ -####################################################################### -# elinks by default generates its own search query form when it sees -# a type 7 index entity. The problem is that it didn't read the -# served results page and instead generated another search page after -# you had entered the first. This patch fixes that and in my tests it -# seems to work so far. I've also added a primitive debug log. -# dave@slackbuilds.org -####################################################################### -diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c ---- a/src/protocol/gopher/gopher.c 2020-01-08 05:37:57.443382095 +0000 -+++ b/src/protocol/gopher/gopher.c 2020-01-08 05:36:42.849199857 +0000 -@@ -43,6 +43,34 @@ - #include "util/memory.h" - #include "util/string.h" - -+#ifdef HAVE_FCNTL_H -+#include <fcntl.h> /* OS/2 needs this after sys/types.h */ -+#endif -+ -+/* To enable logging for debugging purposes. */ -+#if 0 -+ -+#define LOGFILE "/tmp/log" -+ -+static void -+debug_log(unsigned char *data, int NL) -+{ -+ int fd = open(LOGFILE, O_WRONLY | O_APPEND | O_CREAT, 0622); -+ -+ if (fd == -1) return; -+ -+ set_bin(fd); -+ write(fd, data, strlen(data)); -+ if (NL) -+ write(fd, "\n", 1); -+ close(fd); -+} -+#undef LOGFILE -+ -+#else -+#define debug_log(data, len) -+#endif -+ - struct module gopher_protocol_module = struct_module( - /* name: */ N_("Gopher"), - /* options: */ NULL, -@@ -219,11 +247,13 @@ - if (query) selectorlen -= 1; - query = NULL; - querylen = 0; -- } else { -- query += 1; -+ } else if (entity == GOPHER_INDEX) { -+ /* fix query size to not include the search= part */ -+ query += 8; - querylen = selector + selectorlen - query; - /* Exclude '?' */ -- selectorlen -= querylen + 1; -+ /* fix selector length to fit with query */ -+ selectorlen -= querylen + 8; - if (querylen >= 7 && !c_strncasecmp(query, "search=", 7)) { - query += 7; - querylen -= 7; -@@ -233,9 +263,11 @@ - switch (entity) { - case GOPHER_INDEX: - /* No search required? */ -+ /* Don't display the form page */ - if (!query) { - done_string(command); -- return init_gopher_index_cache_entry(conn); -+ add_uri_decoded(command, selector, selectorlen, 0); -+ break; - } - - add_uri_decoded(command, selector, selectorlen, 0); -@@ -371,13 +403,14 @@ - add_gopher_search_field(struct string *buffer, const unsigned char *text, - const unsigned char *addr) - { -+ /* Not *every* query is a search */ - add_format_to_string(buffer, - "<form action=\"%s\">" - "<table>" - "<td> </td>" - "<td>%s:</td>" - "<td><input maxlength=\"256\" name=\"search\" value=\"\"></td>" -- "<td><input type=submit value=\"Search\"></td>" -+ "<td><input type=submit value=\"Submit\"></td>" - "</table>" - "</form>", - addr, text); diff --git a/network/elinks/patches/0003-gopher_directory_links.patch b/network/elinks/patches/0003-gopher_directory_links.patch deleted file mode 100644 index 8c61f281bb..0000000000 --- a/network/elinks/patches/0003-gopher_directory_links.patch +++ /dev/null @@ -1,39 +0,0 @@ -####################################################################### -# elinks does not follow links to directories on other servers -# properly. This adds a '/' before the '1' at the start of a link and -# removes any trailing 1. -# dave@slackbuilds.org -####################################################################### -diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c ---- a/src/protocol/gopher/gopher.c 2020-01-08 04:56:18.809169382 +0000 -+++ b/src/protocol/gopher/gopher.c 2020-01-08 04:52:43.722879240 +0000 -@@ -313,6 +313,9 @@ - unsigned char const* URL = "hURL%3"; - unsigned char const* CURI = "HURI%3"; - unsigned char const* CURL = "HURL%3"; -+ unsigned char *DIR = "1"; -+ unsigned char *SLASHDIR = "/1"; -+ unsigned char *SLASHPOS; - int selectorlen = conn->uri->datalen; - struct gopher_entity_info *entity_info; - size_t size; -@@ -350,6 +353,19 @@ - selectorlen++; - } - -+ if (entity_info->type == '1') { -+ if (strstr(selector, DIR) == selector) { -+ *selector++; -+ selectorlen--; -+ } -+ else { -+ SLASHPOS = strstr(selector, SLASHDIR); -+ if (SLASHPOS != NULL && strlen(SLASHPOS) == 2) { -+ selectorlen--; -+ } -+ } -+ } -+ - state = add_gopher_command(conn, &command, entity, selector, selectorlen); - if (!is_in_state(state, S_CONN)) - return state; diff --git a/network/elinks/patches/0004-ssl_cert_verify.patch b/network/elinks/patches/0004-ssl_cert_verify.patch deleted file mode 100644 index 0cb51242f7..0000000000 --- a/network/elinks/patches/0004-ssl_cert_verify.patch +++ /dev/null @@ -1,161 +0,0 @@ -############################################################################## -# elinks does not verify ssl host names with openssl -# This is a modifed version of the patch here that fixes that issue: -# http://lists.linuxfromscratch.org/pipermail/elinks-dev/2015-June/002099.html -# This patch turns on verification by default, and differentiates -# between host verification fail and normal SSL errors, but more needs doing. -# dave@slackbuilds.org -############################################################################## ---- a/configure.in 2017-12-21 15:58:12.470247050 +0000 -+++ b/configure.in 2017-12-21 16:10:27.406938487 +0000 -@@ -1132,6 +1132,9 @@ - fi - - AC_MSG_RESULT($cf_result) -+if test "$cf_result" = yes; then -+ AC_CHECK_FUNCS(X509_VERIFY_PARAM_set1_host) -+fi - - # ---- GNU TLS - -diff -Naur a/src/network/ssl/socket.c b/src/network/ssl/socket.c ---- a/src/network/ssl/socket.c 2017-12-21 15:58:12.553249389 +0000 -+++ b/src/network/ssl/socket.c 2017-12-21 16:11:47.532190591 +0000 -@@ -7,6 +7,9 @@ - #ifdef CONFIG_OPENSSL - #include <openssl/ssl.h> - #include <openssl/x509v3.h> -+#ifdef HAVE_X509_VERIFY_PARAM_SET1_HOST -+#include <openssl/x509_vfy.h> -+#endif - #define USE_OPENSSL - #elif defined(CONFIG_NSS_COMPAT_OSSL) - #include <nss_compat_ossl/nss_compat_ossl.h> -@@ -168,6 +171,30 @@ - - #ifdef USE_OPENSSL - -+#ifdef HAVE_X509_VERIFY_PARAM_SET1_HOST -+/* activate the OpenSSL-provided host name check */ -+static int -+ossl_set_hostname(void *ssl, unsigned char *server_name) -+{ -+ int ret = -1; -+ -+ X509_VERIFY_PARAM *vpm = X509_VERIFY_PARAM_new(); -+ if (vpm) { -+ if (X509_VERIFY_PARAM_set1_host(vpm, (char *) server_name, 0) -+ && SSL_set1_param(ssl, vpm)) -+ { -+ /* successfully activated the OpenSSL host name check */ -+ ret = 0; -+ } -+ -+ X509_VERIFY_PARAM_free(vpm); -+ } -+ -+ return ret; -+} -+ -+#else /* HAVE_X509_VERIFY_PARAM_SET1_HOST */ -+ - /** Checks whether the host component of a URI matches a host name in - * the server certificate. - * -@@ -360,6 +387,7 @@ - mem_free(host_in_uri); - return matched; - } -+#endif /* HAVE_X509_VERIFY_PARAM_SET1_HOST */ - - #endif /* USE_OPENSSL */ - -@@ -389,7 +417,10 @@ - - default: - socket->no_tls = !socket->no_tls; -- socket->ops->retry(socket, connection_state(S_SSL_ERROR)); -+ if (SSL_VERIFY_FAIL_IF_NO_PEER_CERT != NULL) -+ socket->ops->retry(socket, connection_state(S_SSL_CERTFAIL)); -+ else -+ socket->ops->retry(socket, connection_state(S_SSL_ERROR)); - } - } - -@@ -400,6 +431,9 @@ - int ret; - unsigned char *server_name; - struct connection *conn = socket->conn; -+#ifdef USE_OPENSSL -+ int (*verify_callback_ptr)(int, X509_STORE_CTX *); -+#endif /* USE_OPENSSL */ - - /* TODO: Recode server_name to UTF-8. */ - server_name = get_uri_string(conn->proxied_uri, URI_HOST); -@@ -418,6 +452,23 @@ - return -1; - } - -+#ifdef USE_OPENSSL -+#ifdef HAVE_X509_VERIFY_PARAM_SET1_HOST -+ /* activate the OpenSSL-provided host name check */ -+ if (ossl_set_hostname(socket->ssl, server_name)) { -+ mem_free_if(server_name); -+ socket->ops->done(socket, connection_state(S_SSL_ERROR)); -+ return -1; -+ } -+ -+ /* verify_callback() is not needed with X509_VERIFY_PARAM_set1_host() */ -+ verify_callback_ptr = NULL; -+#else -+ /* use our own callback implementing the host name check */ -+ verify_callback_ptr = verify_callback; -+#endif -+#endif /* USE_OPENSSL */ -+ - mem_free_if(server_name); - - if (socket->no_tls) -@@ -429,7 +480,7 @@ - if (get_opt_bool("connection.ssl.cert_verify", NULL)) - SSL_set_verify(socket->ssl, SSL_VERIFY_PEER - | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, -- verify_callback); -+ verify_callback_ptr); - - if (get_opt_bool("connection.ssl.client_cert.enable", NULL)) { - unsigned char *client_cert; -diff -Naur a/src/network/ssl/ssl.c b/src/network/ssl/ssl.c ---- a/src/network/ssl/ssl.c 2017-12-21 15:58:12.553249389 +0000 -+++ b/src/network/ssl/ssl.c 2017-12-21 16:11:03.378949490 +0000 -@@ -109,7 +109,7 @@ - - static union option_info openssl_options[] = { - INIT_OPT_BOOL("connection.ssl", N_("Verify certificates"), -- "cert_verify", 0, 0, -+ "cert_verify", 0, 1, - N_("Verify the peer's SSL certificate. Note that this " - "needs extensive configuration of OpenSSL by the user.")), - -diff -Naur a/src/network/state.c b/src/network/state.c ---- a/src/network/state.c 2017-12-21 15:58:12.553249389 +0000 -+++ b/src/network/state.c 2017-12-21 16:10:20.579746621 +0000 -@@ -88,6 +88,7 @@ - - #ifdef CONFIG_SSL - {S_SSL_ERROR, N_("SSL error")}, -+ {S_SSL_CERTFAIL, N_("SSL Host Verification Failed.")}, - #else - {S_SSL_ERROR, N_("This version of ELinks does not contain SSL/TLS support")}, - #endif -diff -Naur a/src/network/state.h b/src/network/state.h ---- a/src/network/state.h 2017-12-21 15:58:12.553249389 +0000 -+++ b/src/network/state.h 2017-12-21 16:10:03.057254202 +0000 -@@ -67,6 +67,7 @@ - S_ENCODE_ERROR = -100017, - S_SSL_ERROR = -100018, - S_NO_FORCED_DNS = -100019, -+ S_SSL_CERTFAIL = -100020, - - S_HTTP_ERROR = -100100, - S_HTTP_204 = -100101, diff --git a/network/elinks/patches/0006-gopher-indexes_nocr.patch b/network/elinks/patches/0006-gopher-indexes_nocr.patch deleted file mode 100644 index 797c9a8b55..0000000000 --- a/network/elinks/patches/0006-gopher-indexes_nocr.patch +++ /dev/null @@ -1,23 +0,0 @@ -####################################################################### -# Fixes index listings with only LF and no CRs. -# dave@slackbuilds.org -####################################################################### -diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c ---- a/src/protocol/gopher/gopher.c 2020-01-08 07:39:33.403725857 +0000 -+++ b/src/protocol/gopher/gopher.c 2020-01-08 07:40:30.587406965 +0000 -@@ -779,6 +779,15 @@ - switch (gopher->entity->type) { - case GOPHER_DIRECTORY: - case GOPHER_INDEX: -+ /* Lines with no carriage returns */ -+ if (strchr(rb->data, ASCII_CR) == NULL) { -+ unsigned char *tmp = malloc(rb->length + 3); -+ tmp[0] = 'i'; -+ tmp = stpcpy(stpcpy(stpcpy(tmp, rb->data), '\r'), '\n'); -+ rb->length += 3; -+ memcpy(rb->data, tmp, rb->length); -+ free(tmp); -+ } - state = read_gopher_directory_data(conn, rb); - break; - diff --git a/network/elinks/patches/0010-force-text-wrap.patch b/network/elinks/patches/0010-force-text-wrap.patch new file mode 100644 index 0000000000..4705cb0893 --- /dev/null +++ b/network/elinks/patches/0010-force-text-wrap.patch @@ -0,0 +1,26 @@ +# This wraps <pre> text too when "W" is pressed. +# (main toggle-wrap-text) +diff --git a/src/document/html/renderer.c b/src/document/html/renderer.c +index 6470c54..a40a4ef 100644 +--- a/src/document/html/renderer.c ++++ b/src/document/html/renderer.c +@@ -1801,7 +1801,7 @@ put_chars(struct html_context *html_context, unsigned char *chars, int charslen) + + renderer_context.nobreak = 0; + +- if (!(html_context->options->wrap || html_is_preformatted())) { ++ if (html_context->options->wrap || !html_is_preformatted()) { + while (part->cx > overlap(par_format) + && part->cx > par_format.leftmargin) { + int x = split_line(html_context); +@@ -1822,9 +1822,7 @@ put_chars(struct html_context *html_context, unsigned char *chars, int charslen) + int_lower_bound(&part->max_width, part->xa + + par_format.leftmargin + par_format.rightmargin + - (chars[charslen - 1] == ' ' +- && !html_is_preformatted())); +- return; +- ++ && (html_context->options->wrap || !html_is_preformatted()))); + } + + #undef overlap diff --git a/network/elinks/patches/0001-gopher_html_links.patch b/network/elinks/patches/0020-gopher-html-links.patch index e2a927f9c8..38a2dd0b10 100644 --- a/network/elinks/patches/0001-gopher_html_links.patch +++ b/network/elinks/patches/0020-gopher-html-links.patch @@ -1,8 +1,5 @@ ################################################################ -# There is a problem that html links that contain URL:http:// -# aren't being followed. This fixes that issue and also chtml. -# Normally those kind of links go to a redirect page that the -# server generates, which then sends you on your way. +# Fix for HTML links that contain URL:http:// # dave@slackbuilds.org ############################################################### diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c @@ -25,13 +22,13 @@ diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c + if(strstr(selector, URL) != NULL || strstr(selector, URI) != NULL) { + entity = GOPHER_HTML; -+ *selector++; ++ selector++; + selectorlen--; + } + + if(strstr(selector, CURL) != NULL || strstr(selector, CURI) != NULL) { + entity = GOPHER_CHTML; -+ *selector++; ++ selector++; + selectorlen--; + } + diff --git a/network/elinks/patches/0030-gopher-index-queries.patch b/network/elinks/patches/0030-gopher-index-queries.patch new file mode 100644 index 0000000000..662fd13a7f --- /dev/null +++ b/network/elinks/patches/0030-gopher-index-queries.patch @@ -0,0 +1,113 @@ +####################################################################### +# Fix for type 7 entities. +# dave@slackbuilds.org +####################################################################### +diff -Naur '--exclude=.git' bb/src/protocol/gopher/gopher.c cc/src/protocol/gopher/gopher.c +--- bb/src/protocol/gopher/gopher.c 2020-01-13 22:35:13.663935305 +0000 ++++ cc/src/protocol/gopher/gopher.c 2020-01-13 23:16:00.053003768 +0000 +@@ -197,7 +197,7 @@ + command->length = strlen(command->source); + } + +-static struct connection_state init_gopher_index_cache_entry(struct connection *conn); ++/* static struct connection_state init_gopher_index_cache_entry(struct connection *conn); */ + + static struct connection_state + add_gopher_command(struct connection *conn, struct string *command, +@@ -205,7 +205,7 @@ + unsigned char *selector, int selectorlen) + { + unsigned char *query; +- int querylen; ++ int querylen = 0; + + if (!init_string(command)) + return connection_state(S_OUT_OF_MEM); +@@ -218,13 +218,14 @@ + /* Exclude '?' */ + if (query) selectorlen -= 1; + query = NULL; +- querylen = 0; +- } else { +- query += 1; ++ } else if (entity == GOPHER_INDEX) { ++ /* fix query size to not include the search= part */ ++ query += 8; + querylen = selector + selectorlen - query; + /* Exclude '?' */ +- selectorlen -= querylen + 1; +- if (querylen >= 7 && !c_strncasecmp(query, "search=", 7)) { ++ /* fix selector length to fit with query */ ++ selectorlen -= querylen + 8; ++ if (querylen >= 7 && !c_strncasecmp(query, "submit=", 7)) { + query += 7; + querylen -= 7; + } +@@ -233,9 +234,11 @@ + switch (entity) { + case GOPHER_INDEX: + /* No search required? */ ++ /* Don't display the form page */ + if (!query) { + done_string(command); +- return init_gopher_index_cache_entry(conn); ++ add_uri_decoded(command, selector, selectorlen, 0); ++ break; + } + + add_uri_decoded(command, selector, selectorlen, 0); +@@ -371,13 +374,14 @@ + add_gopher_search_field(struct string *buffer, const unsigned char *text, + const unsigned char *addr) + { ++ /* Not *every* query is a search! */ + add_format_to_string(buffer, + "<form action=\"%s\">" + "<table>" + "<td> </td>" + "<td>%s:</td>" +- "<td><input maxlength=\"256\" name=\"search\" value=\"\"></td>" +- "<td><input type=submit value=\"Search\"></td>" ++ "<td><input maxlength=\"256\" name=\"submit\" value=\"\"></td>" ++ "<td><input type=submit value=\"Submit\"></td>" + "</table>" + "</form>", + addr, text); +@@ -662,6 +666,7 @@ + } + + /* Display a Gopher Index document. */ ++/* Use the page that the gopher site sends us + static struct connection_state + init_gopher_index_cache_entry(struct connection *conn) + { +@@ -674,9 +679,9 @@ + + where = get_uri_string(conn->uri, URI_PUBLIC); + +- /* TODO: Use different function when using UTF-8 ++ TODO: Use different function when using UTF-8 + * in terminal (decode_uri_for_display replaces +- * bytes of UTF-8 characters width '*'). */ ++ * bytes of UTF-8 characters width '*'). * + if (where) decode_uri_for_display(where); + + add_format_to_string(&buffer, +@@ -695,7 +700,7 @@ + + mem_free_if(where); + +- /* FIXME: I think this needs a form or something */ ++ * FIXME: I think this needs a form or something * + + add_fragment(conn->cached, conn->from, buffer.source, buffer.length); + conn->from += buffer.length; +@@ -707,7 +712,7 @@ + ? connection_state(S_OK) + : connection_state(S_OUT_OF_MEM); + } +- ++*/ + + static void + read_gopher_response_data(struct socket *socket, struct read_buffer *rb) diff --git a/network/elinks/patches/0040-gopher-directory-links.patch b/network/elinks/patches/0040-gopher-directory-links.patch new file mode 100644 index 0000000000..15a89fac2f --- /dev/null +++ b/network/elinks/patches/0040-gopher-directory-links.patch @@ -0,0 +1,26 @@ +####################################################################### +# Fix remote directory links. +# dave@slackbuilds.org +####################################################################### +diff -Naur -x .git bb/src/protocol/gopher/gopher.c cc/src/protocol/gopher/gopher.c +--- bb/src/protocol/gopher/gopher.c 2020-01-13 23:22:18.918292198 +0000 ++++ cc/src/protocol/gopher/gopher.c 2020-01-13 23:21:00.631960039 +0000 +@@ -321,6 +321,18 @@ + selectorlen++; + } + ++ if (entity_info->type == '1') { ++ if (strchr(selector, '1') == (char *) selector) { ++ selector++; ++ selectorlen--; ++ } ++ else { ++ if ((char *) selector == "/1") { ++ selectorlen--; ++ } ++ } ++ } ++ + state = add_gopher_command(conn, &command, entity, selector, selectorlen); + if (!is_in_state(state, S_CONN)) + return state; diff --git a/network/elinks/patches/0005-gopher_newlines_tabs_entity.patch b/network/elinks/patches/0050-gopher-newlines-tabs-entity.patch index f27b655cc6..b255fb4f98 100644 --- a/network/elinks/patches/0005-gopher_newlines_tabs_entity.patch +++ b/network/elinks/patches/0050-gopher-newlines-tabs-entity.patch @@ -1,13 +1,13 @@ ##################################################################### -# Some fixes for having line feeds in text without a carriage return. +# Fix line feeds without carriage returns. # Make sure that only lines with tabs are treated as links. # Support links that don't begin with a '/'. # dave@slackbuilds.org ##################################################################### -diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c ---- a/src/protocol/gopher/gopher.c 2020-01-08 05:43:40.148408539 +0000 -+++ b/src/protocol/gopher/gopher.c 2020-01-08 05:43:26.357005028 +0000 -@@ -322,7 +322,7 @@ +diff -Naur -x .git bb/src/protocol/gopher/gopher.c cc/src/protocol/gopher/gopher.c +--- bb/src/protocol/gopher/gopher.c 2020-01-14 03:19:39.956296190 +0000 ++++ cc/src/protocol/gopher/gopher.c 2020-01-14 03:20:05.295045232 +0000 +@@ -290,7 +290,7 @@ /* Get entity type, and selector string. */ /* Pick up gopher_entity */ @@ -16,42 +16,36 @@ diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c entity = *selector++; selectorlen--; } -@@ -472,6 +472,7 @@ - unsigned char *host = NULL; - unsigned char *port = NULL; - enum gopher_entity entity = *name++; -+ int link = 0; - - if (!entity) { - add_char_to_string(buffer, '\n'); -@@ -481,6 +482,7 @@ - if (*name) { - selector = strchr(name, ASCII_TAB); - if (selector) { -+ link = 1; - /* Terminate name */ - *selector++ = '\0'; - -@@ -551,7 +553,7 @@ - switch (entity) { - case GOPHER_WWW: - /* Gopher pointer to W3 */ -- if (selector) { -+ if (selector && link == 1) { - add_gopher_link(buffer, name, selector); - break; +@@ -333,6 +333,18 @@ } -@@ -603,7 +605,8 @@ + } + ++ if (entity_info->type == '1') { ++ if (strchr(selector, '1') == (char *) selector) { ++ selector++; ++ selectorlen--; ++ } ++ else { ++ if ((char *) selector == "/1") { ++ selectorlen--; ++ } ++ } ++ } ++ + state = add_gopher_command(conn, &command, entity, selector, selectorlen); + if (!is_in_state(state, S_CONN)) + return state; +@@ -570,7 +582,8 @@ } else if (address.length > 0 && strlcmp(address.source, address.length - 1, - "gopher://error.host:1/", -1)) { + "gopher://error.host:1/", -1) -+ && link == 1) { ++ && selector) { add_gopher_link(buffer, name, address.source); } else { -@@ -623,7 +626,7 @@ +@@ -590,7 +603,7 @@ get_gopher_line_end(unsigned char *data, int datalen) { for (; datalen > 1; data++, datalen--) diff --git a/network/elinks/patches/0060-gopher-indexes-nocr.patch b/network/elinks/patches/0060-gopher-indexes-nocr.patch new file mode 100644 index 0000000000..9e4a441db6 --- /dev/null +++ b/network/elinks/patches/0060-gopher-indexes-nocr.patch @@ -0,0 +1,19 @@ +####################################################################### +# Fix index listings with only LF and no CRs. +# dave@slackbuilds.org +####################################################################### +diff -Naur '--exclude=.git' bb/src/protocol/gopher/gopher.c cc/src/protocol/gopher/gopher.c +--- bb/src/protocol/gopher/gopher.c 2020-01-14 06:42:11.030536586 +0000 ++++ cc/src/protocol/gopher/gopher.c 2020-01-14 06:42:26.710000886 +0000 +@@ -757,6 +757,11 @@ + switch (gopher->entity->type) { + case GOPHER_DIRECTORY: + case GOPHER_INDEX: ++ /* Lines with no carriage returns */ ++ if (strchr(rb->data, ASCII_CR) == NULL) { ++ strncat(rb->data, "\r\n", 2); ++ rb->length += 3; ++ } + state = read_gopher_directory_data(conn, rb); + break; + diff --git a/network/elinks/patches/0007-gopher-move_null.patch b/network/elinks/patches/0070-gopher-move-null.patch index 01751c497a..8f259e55cf 100644 --- a/network/elinks/patches/0007-gopher-move_null.patch +++ b/network/elinks/patches/0070-gopher-move-null.patch @@ -1,11 +1,11 @@ ################################################################### -# Move the added null terminator one char forwards +# Move the null terminator one char forwards. # dave@slackbuilds.org ################################################################### -diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c ---- a/src/protocol/gopher/gopher.c 2020-01-08 06:52:23.491455711 +0000 -+++ b/src/protocol/gopher/gopher.c 2020-01-08 06:51:41.160210431 +0000 -@@ -638,7 +638,7 @@ +diff -Naur -x .git bb/src/protocol/gopher/gopher.c cc/src/protocol/gopher/gopher.c +--- bb/src/protocol/gopher/gopher.c 2020-01-14 03:24:11.259323801 +0000 ++++ cc/src/protocol/gopher/gopher.c 2020-01-14 03:24:49.452454019 +0000 +@@ -615,7 +615,7 @@ assert(line < end); /* Just to be safe NUL terminate the line */ diff --git a/network/elinks/patches/0008-gopher-encode-html.patch b/network/elinks/patches/0080-gopher-html-entities.patch index 21486ff1a4..750d1a49de 100644 --- a/network/elinks/patches/0008-gopher-encode-html.patch +++ b/network/elinks/patches/0080-gopher-html-entities.patch @@ -1,7 +1,10 @@ -diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c ---- a/src/protocol/gopher/gopher.c 2020-01-09 09:19:54.983674477 +0000 -+++ b/src/protocol/gopher/gopher.c 2020-01-09 09:21:58.885286474 +0000 -@@ -663,6 +663,25 @@ +################################################################### +# Encode < > to HTML. +################################################################### +diff -Naur '--exclude=.git' bb/src/protocol/gopher/gopher.c cc/src/protocol/gopher/gopher.c +--- bb/src/protocol/gopher/gopher.c 2020-01-14 03:26:41.791778387 +0000 ++++ cc/src/protocol/gopher/gopher.c 2020-01-14 06:19:56.964025440 +0000 +@@ -620,6 +620,25 @@ return line[0] == '.' && !line[1] ? NULL : line; } @@ -10,7 +13,7 @@ diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c +str_replace(char * in_string, char * s_string, char * r_string) +{ + /* max == replace all characters */ -+ char temp[strlen(in_string) * (strlen(r_string) - strlen(s_string))]; ++ char temp[strlen(in_string) * (strlen(r_string) - strlen(s_string)) + 1]; + char * pos; + + if (!(pos = strstr(in_string, s_string))) @@ -18,7 +21,7 @@ diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c + + strncpy(temp, in_string, pos - in_string); + temp[pos - in_string] = 0; -+ sprintf(temp + (pos - in_string), "%s%s", r_string, pos + strlen(s_string)); ++ sprintf(temp + (pos - in_string), "%s%s", r_string, pos + 1); + in_string[0] = 0; + strcpy(in_string, temp); + return str_replace(in_string, s_string, r_string); @@ -27,7 +30,7 @@ diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c /* Parse a Gopher Menu document */ static struct connection_state read_gopher_directory_data(struct connection *conn, struct read_buffer *rb) -@@ -682,6 +701,17 @@ +@@ -639,6 +658,14 @@ return connection_state(S_OUT_OF_MEM); } @@ -38,9 +41,6 @@ diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c + if (strstr(rb->data, ">")) { + str_replace(rb->data, ">", ">"); + } -+ if (strstr(rb->data, "\"")) { -+ str_replace(rb->data, "\"", """); -+ } + while ((end = get_gopher_line_end(rb->data, rb->length))) { unsigned char *line = check_gopher_last_line(rb->data, end); diff --git a/network/elinks/patches/0010-fix-lib-path.patch b/network/elinks/patches/0090-fix-lib-path.patch index 2cdee67fbd..2cdee67fbd 100644 --- a/network/elinks/patches/0010-fix-lib-path.patch +++ b/network/elinks/patches/0090-fix-lib-path.patch diff --git a/network/elinks/slack-desc b/network/elinks/slack-desc index 13590c62fd..7ae5ceddeb 100644 --- a/network/elinks/slack-desc +++ b/network/elinks/slack-desc @@ -13,7 +13,7 @@ elinks: web (HTTP/FTP/..) browser. ELinks can render both frames and tables, elinks: is highly customizable, and can be extended via Lua or Guile scripts. elinks: It is very portable and runs on a variety of platforms. elinks: -elinks: For more information, see: http://elinks.or.cz +elinks: Homepage: http://elinks.cz elinks: elinks: elinks: |