aboutsummaryrefslogtreecommitdiff
path: root/network/elinks
diff options
context:
space:
mode:
authorDave Woodfall <dave@slackbuilds.org>2020-01-09 10:14:49 +0000
committerWilly Sudiarto Raharjo <willysr@slackbuilds.org>2020-01-12 08:47:52 +0700
commit9044f879a9a70226159660117c245a425a808293 (patch)
tree8ebbaa9baafe6ee3abd5ad6a07775e6447c9204e /network/elinks
parent7bf5d624be78d025b436312d3a1dd7a60c2b26f9 (diff)
network/elinks: Add gopher patch for html entities
Diffstat (limited to 'network/elinks')
-rw-r--r--network/elinks/elinks.SlackBuild2
-rw-r--r--network/elinks/patches/0001-gopher_html_links.patch14
-rw-r--r--network/elinks/patches/0002-gopher_index_queries.patch62
-rw-r--r--network/elinks/patches/0003-gopher_directory_links.patch46
-rw-r--r--network/elinks/patches/0004-ssl_cert_verify.patch4
-rw-r--r--network/elinks/patches/0005-gopher_newlines_tabs_entity.patch51
-rw-r--r--network/elinks/patches/0006-gopher-indexes_nocr.patch23
-rw-r--r--network/elinks/patches/0006-indexes_nocr.patch62
-rw-r--r--network/elinks/patches/0007-gopher-move_null.patch (renamed from network/elinks/patches/0007-move_null.patch)10
-rw-r--r--network/elinks/patches/0008-gopher-encode-html.patch47
10 files changed, 127 insertions, 194 deletions
diff --git a/network/elinks/elinks.SlackBuild b/network/elinks/elinks.SlackBuild
index 48769d47717fb..129980d383864 100644
--- a/network/elinks/elinks.SlackBuild
+++ b/network/elinks/elinks.SlackBuild
@@ -23,7 +23,7 @@
PRGNAM=elinks
VERSION=${VERSION:-git20131231}
-BUILD=${BUILD:-10}
+BUILD=${BUILD:-11}
TAG=${TAG:-_SBo}
if [ -z "$ARCH" ]; then
diff --git a/network/elinks/patches/0001-gopher_html_links.patch b/network/elinks/patches/0001-gopher_html_links.patch
index c9ab73856da76..e2a927f9c8f4b 100644
--- a/network/elinks/patches/0001-gopher_html_links.patch
+++ b/network/elinks/patches/0001-gopher_html_links.patch
@@ -1,21 +1,21 @@
################################################################
-# There is a problem that html links that contain URL:htpp://...
+# 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.
-# dave@dawoodfall.net
+# dave@slackbuilds.org
###############################################################
diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c
--- a/src/protocol/gopher/gopher.c 2013-12-18 15:38:57.000000000 +0000
-+++ b/src/protocol/gopher/gopher.c 2017-11-15 23:10:19.758394411 +0000
++++ b/src/protocol/gopher/gopher.c 2020-01-08 05:34:02.300498220 +0000
@@ -277,6 +277,10 @@
struct string command;
enum gopher_entity entity = DEFAULT_GOPHER_ENTITY;
unsigned char *selector = conn->uri->data;
-+ unsigned char *URI = "hURI%3";
-+ unsigned char *URL = "hURL%3";
-+ unsigned char *CURI = "HURI%3";
-+ unsigned char *CURL = "HURL%3";
++ unsigned char const* URI = "hURI%3";
++ unsigned char const* URL = "hURL%3";
++ unsigned char const* CURI = "HURI%3";
++ unsigned char const* CURL = "HURL%3";
int selectorlen = conn->uri->datalen;
struct gopher_entity_info *entity_info;
size_t size;
diff --git a/network/elinks/patches/0002-gopher_index_queries.patch b/network/elinks/patches/0002-gopher_index_queries.patch
index ab970f60f7f62..ce92695a0a7c8 100644
--- a/network/elinks/patches/0002-gopher_index_queries.patch
+++ b/network/elinks/patches/0002-gopher_index_queries.patch
@@ -1,14 +1,14 @@
#######################################################################
# 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
+# 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.
-# dave@dawoodfall.net
+# 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 2017-11-24 19:12:52.495714437 +0000
-+++ b/src/protocol/gopher/gopher.c 2017-11-30 12:56:38.872336516 +0000
+--- 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"
@@ -44,14 +44,14 @@ diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c
struct module gopher_protocol_module = struct_module(
/* name: */ N_("Gopher"),
/* options: */ NULL,
-@@ -219,23 +247,31 @@
+@@ -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 seach= part */
++ /* fix query size to not include the search= part */
+ query += 8;
querylen = selector + selectorlen - query;
/* Exclude '?' */
@@ -61,13 +61,7 @@ diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c
if (querylen >= 7 && !c_strncasecmp(query, "search=", 7)) {
query += 7;
querylen -= 7;
- }
-+ debug_log("selector:", 1);
-+ debug_log(selector, 1);
-+ debug_log("query:", 1);
-+ debug_log(query, 1);
- }
-
+@@ -233,9 +263,11 @@
switch (entity) {
case GOPHER_INDEX:
/* No search required? */
@@ -80,18 +74,14 @@ diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c
}
add_uri_decoded(command, selector, selectorlen, 0);
-@@ -343,6 +379,10 @@
- gopher->entity = entity_info;
- gopher->commandlen = command.length;
-
-+debug_log("439 gopher->entity:", 1);
-+debug_log(gopher->entity, 1);
-+debug_log("437 command.source:", 1);
-+debug_log(command.source, 1);
- memcpy(gopher->command, command.source, command.length);
- done_string(&command);
-
-@@ -377,7 +417,7 @@
+@@ -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>"
@@ -100,21 +90,3 @@ diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c
"</table>"
"</form>",
addr, text);
-@@ -726,7 +766,8 @@
- /* Now read the data from the socket */
- switch (gopher->entity->type) {
- case GOPHER_DIRECTORY:
-- case GOPHER_INDEX:
-+/* Don't do directory list for cgi output (7)
-+ case GOPHER_INDEX: */
- state = read_gopher_directory_data(conn, rb);
- break;
-
-@@ -738,6 +779,7 @@
- state = connection_state(S_GOPHER_CSO_ERROR);
- break;
-
-+ case GOPHER_INDEX:
- case GOPHER_SOUND:
- case GOPHER_PLUS_SOUND:
- case GOPHER_PLUS_MOVIE:
diff --git a/network/elinks/patches/0003-gopher_directory_links.patch b/network/elinks/patches/0003-gopher_directory_links.patch
index dc80ef3728549..8c61f281bbd9a 100644
--- a/network/elinks/patches/0003-gopher_directory_links.patch
+++ b/network/elinks/patches/0003-gopher_directory_links.patch
@@ -2,41 +2,34 @@
# 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@dawoodfall.net
+# dave@slackbuilds.org
#######################################################################
diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c
---- a/src/protocol/gopher/gopher.c 2017-12-17 01:54:27.941645180 +0000
-+++ b/src/protocol/gopher/gopher.c 2017-12-17 21:52:05.072454433 +0000
-@@ -317,6 +317,9 @@
- unsigned char *URL = "hURL%3";
- unsigned char *CURI = "HURI%3";
- unsigned char *CURL = "HURL%3";
+--- 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;
-@@ -354,6 +357,26 @@
+@@ -350,6 +353,19 @@
selectorlen++;
}
-+ if (entity_info->type == '1')
-+ {
-+ if (strstr(selector, DIR) == selector)
-+ {
++ if (entity_info->type == '1') {
++ if (strstr(selector, DIR) == selector) {
+ *selector++;
+ selectorlen--;
+ }
-+ else
-+ {
++ else {
+ SLASHPOS = strstr(selector, SLASHDIR);
-+ if (SLASHPOS != NULL)
-+ {
-+ if (strlen(SLASHPOS) == 2)
-+ {
++ if (SLASHPOS != NULL && strlen(SLASHPOS) == 2) {
+ selectorlen--;
-+ }
+ }
+ }
+ }
@@ -44,18 +37,3 @@ diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c
state = add_gopher_command(conn, &command, entity, selector, selectorlen);
if (!is_in_state(state, S_CONN))
return state;
-@@ -379,10 +402,10 @@
- gopher->entity = entity_info;
- gopher->commandlen = command.length;
-
--debug_log("439 gopher->entity:", 1);
--debug_log(gopher->entity, 1);
--debug_log("437 command.source:", 1);
--debug_log(command.source, 1);
-+ debug_log("439 gopher->entity: ", 0);
-+ debug_log(gopher->entity, 1);
-+ debug_log("437 command.source: ", 0);
-+ debug_log(command.source, 1);
- memcpy(gopher->command, command.source, command.length);
- done_string(&command);
-
diff --git a/network/elinks/patches/0004-ssl_cert_verify.patch b/network/elinks/patches/0004-ssl_cert_verify.patch
index 4629da564a6e2..0cb51242f7c6a 100644
--- a/network/elinks/patches/0004-ssl_cert_verify.patch
+++ b/network/elinks/patches/0004-ssl_cert_verify.patch
@@ -3,8 +3,8 @@
# 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.
-# dave@dawoodfall.net
+# 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
diff --git a/network/elinks/patches/0005-gopher_newlines_tabs_entity.patch b/network/elinks/patches/0005-gopher_newlines_tabs_entity.patch
index f93b0d543140c..f27b655cc6129 100644
--- a/network/elinks/patches/0005-gopher_newlines_tabs_entity.patch
+++ b/network/elinks/patches/0005-gopher_newlines_tabs_entity.patch
@@ -2,11 +2,12 @@
# Some fixes for having line feeds in text without a carriage return.
# 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 2017-12-28 15:08:54.310546900 +0000
-+++ b/src/protocol/gopher/gopher.c 2017-12-28 20:26:00.635193897 +0000
-@@ -326,7 +326,7 @@
+--- 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 @@
/* Get entity type, and selector string. */
/* Pick up gopher_entity */
@@ -15,29 +16,7 @@ diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c
entity = *selector++;
selectorlen--;
}
-@@ -357,8 +357,7 @@
- selectorlen++;
- }
-
-- if (entity_info->type == '1')
-- {
-+ if (entity_info->type == '1') {
- if (strstr(selector, DIR) == selector)
- {
- *selector++;
-@@ -402,9 +401,9 @@
- gopher->entity = entity_info;
- gopher->commandlen = command.length;
-
-- debug_log("439 gopher->entity: ", 0);
-+ debug_log("404 gopher->entity: ", 0);
- debug_log(gopher->entity, 1);
-- debug_log("437 command.source: ", 0);
-+ debug_log("406 command.source: ", 0);
- debug_log(command.source, 1);
- memcpy(gopher->command, command.source, command.length);
- done_string(&command);
-@@ -486,6 +485,7 @@
+@@ -472,6 +472,7 @@
unsigned char *host = NULL;
unsigned char *port = NULL;
enum gopher_entity entity = *name++;
@@ -45,7 +24,7 @@ diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c
if (!entity) {
add_char_to_string(buffer, '\n');
-@@ -495,6 +495,7 @@
+@@ -481,6 +482,7 @@
if (*name) {
selector = strchr(name, ASCII_TAB);
if (selector) {
@@ -53,7 +32,7 @@ diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c
/* Terminate name */
*selector++ = '\0';
-@@ -565,7 +566,7 @@
+@@ -551,7 +553,7 @@
switch (entity) {
case GOPHER_WWW:
/* Gopher pointer to W3 */
@@ -62,7 +41,7 @@ diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c
add_gopher_link(buffer, name, selector);
break;
}
-@@ -617,7 +618,8 @@
+@@ -603,7 +605,8 @@
} else if (address.length > 0
&& strlcmp(address.source, address.length - 1,
@@ -72,16 +51,12 @@ diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c
add_gopher_link(buffer, name, address.source);
} else {
-@@ -639,6 +641,12 @@
+@@ -623,7 +626,7 @@
+ get_gopher_line_end(unsigned char *data, int datalen)
+ {
for (; datalen > 1; data++, datalen--)
- if (data[0] == ASCII_CR && data[1] == ASCII_LF)
+- if (data[0] == ASCII_CR && data[1] == ASCII_LF)
++ if (data[0] == ASCII_CR || data[0] == ASCII_LF)
return data + 2;
-+ else
-+ if(data[0] == ASCII_CR)
-+ return data + 2;
-+ else
-+ if(data[0] == ASCII_LF)
-+ return data + 2;
return NULL;
- }
diff --git a/network/elinks/patches/0006-gopher-indexes_nocr.patch b/network/elinks/patches/0006-gopher-indexes_nocr.patch
new file mode 100644
index 0000000000000..797c9a8b55c3b
--- /dev/null
+++ b/network/elinks/patches/0006-gopher-indexes_nocr.patch
@@ -0,0 +1,23 @@
+#######################################################################
+# 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/0006-indexes_nocr.patch b/network/elinks/patches/0006-indexes_nocr.patch
deleted file mode 100644
index 5c68cee8caa99..0000000000000
--- a/network/elinks/patches/0006-indexes_nocr.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-#######################################################################
-# Fixes index listings with only LF and no CRs.
-# dave@dawoodfall.net
-#######################################################################
-diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c
---- a/src/protocol/gopher/gopher.c 2017-12-29 17:14:24.247093626 +0000
-+++ b/src/protocol/gopher/gopher.c 2017-12-29 17:12:08.496272595 +0000
-@@ -638,15 +638,16 @@
- static unsigned char *
- get_gopher_line_end(unsigned char *data, int datalen)
- {
-- for (; datalen > 1; data++, datalen--)
-- if (data[0] == ASCII_CR && data[1] == ASCII_LF)
-+ for (; datalen > 1; data++, datalen--) {
-+ if (data[0] == ASCII_CR && data[1] == ASCII_LF)
- return data + 2;
- else
- if(data[0] == ASCII_CR)
-- return data + 2;
-- else
-- if(data[0] == ASCII_LF)
-- return data + 2;
-+ return data + 1;
-+ else
-+ if(data[0] == ASCII_LF)
-+ return data + 1;
-+ }
-
- return NULL;
- }
-@@ -796,9 +797,21 @@
-
- /* Now read the data from the socket */
- switch (gopher->entity->type) {
-+ case GOPHER_INDEX:
-+ /* Lines with no carriage returns */
-+ if (strchr(rb->data, ASCII_CR) == NULL) {
-+ unsigned char *tmp;
-+ tmp = malloc(rb->length + 3);
-+ memcpy(tmp, "i", 1);
-+ memcpy(tmp+1, rb->data, rb->length);
-+ tmp[rb->length]= '\r';
-+ tmp[rb->length+1]= '\n';
-+ rb->length+=3;
-+ memcpy(rb->data, tmp, rb->length);
-+ free(tmp);
-+ }
-+
- case GOPHER_DIRECTORY:
--/* Don't do directory list for cgi output (7)
-- case GOPHER_INDEX: */
- state = read_gopher_directory_data(conn, rb);
- break;
-
-@@ -810,7 +823,6 @@
- state = connection_state(S_GOPHER_CSO_ERROR);
- break;
-
-- case GOPHER_INDEX:
- case GOPHER_SOUND:
- case GOPHER_PLUS_SOUND:
- case GOPHER_PLUS_MOVIE:
diff --git a/network/elinks/patches/0007-move_null.patch b/network/elinks/patches/0007-gopher-move_null.patch
index 9d8037cc378ce..01751c497a323 100644
--- a/network/elinks/patches/0007-move_null.patch
+++ b/network/elinks/patches/0007-gopher-move_null.patch
@@ -1,11 +1,11 @@
###################################################################
# Move the added null terminator one char forwards
-# dave@dawoodfall.net
+# dave@slackbuilds.org
###################################################################
-diff --exclude .git -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c
---- a/src/protocol/gopher/gopher.c 2017-12-29 17:15:39.521209968 +0000
-+++ b/src/protocol/gopher/gopher.c 2018-01-17 05:46:45.660258482 +0000
-@@ -658,7 +658,7 @@
+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 @@
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/0008-gopher-encode-html.patch
new file mode 100644
index 0000000000000..21486ff1a4dd3
--- /dev/null
+++ b/network/elinks/patches/0008-gopher-encode-html.patch
@@ -0,0 +1,47 @@
+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 @@
+ return line[0] == '.' && !line[1] ? NULL : line;
+ }
+
++/* substring replacement */
++static void
++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 * pos;
++
++ if (!(pos = strstr(in_string, s_string)))
++ return;
++
++ 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));
++ in_string[0] = 0;
++ strcpy(in_string, temp);
++ return str_replace(in_string, s_string, r_string);
++}
++
+ /* Parse a Gopher Menu document */
+ static struct connection_state
+ read_gopher_directory_data(struct connection *conn, struct read_buffer *rb)
+@@ -682,6 +701,17 @@
+ return connection_state(S_OUT_OF_MEM);
+ }
+
++ /* Lines with characters that need to be converted to html */
++ if (strstr(rb->data, "<")) {
++ str_replace(rb->data, "<", "&lt;");
++ }
++ if (strstr(rb->data, ">")) {
++ str_replace(rb->data, ">", "&gt;");
++ }
++ if (strstr(rb->data, "\"")) {
++ str_replace(rb->data, "\"", "&quot;");
++ }
++
+ while ((end = get_gopher_line_end(rb->data, rb->length))) {
+ unsigned char *line = check_gopher_last_line(rb->data, end);
+