From cb31af92a4f095445d13903d0b051ef6e04eb620 Mon Sep 17 00:00:00 2001 From: Jakub Jelen Date: Tue, 23 Feb 2016 17:47:09 +0100 Subject: [PATCH] Working xgets with long lines * previously, the long line led to infinite loop * now we get warning in /var/log/secure (and line is ignored) --- tcp_wrappers-7.6-xgets.patch | 45 ++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/tcp_wrappers-7.6-xgets.patch b/tcp_wrappers-7.6-xgets.patch index 2c7d81f..522f6e9 100644 --- a/tcp_wrappers-7.6-xgets.patch +++ b/tcp_wrappers-7.6-xgets.patch @@ -1,12 +1,49 @@ -diff -up tcp_wrappers_7.6/misc.c.xgets tcp_wrappers_7.6/misc.c ---- tcp_wrappers_7.6/misc.c.xgets 2011-08-15 05:50:26.403091995 -0400 -+++ tcp_wrappers_7.6/misc.c 2011-08-15 05:51:02.289091985 -0400 -@@ -35,7 +35,7 @@ FILE *fp; +commit 3ae65dc9a1c78c3088a08091f5d948fbbb8929af +Author: Jakub Jelen +Date: Tue Feb 23 17:28:15 2016 +0100 + + tcp_wrappers-7.6-xgets.patch + +diff --git a/misc.c b/misc.c +index b248a5d..204546c 100644 +--- a/misc.c ++++ b/misc.c +@@ -35,20 +35,32 @@ FILE *fp; + { int got; char *start = ptr; ++ int c, last; - while (fgets(ptr, len, fp)) { + while (len && fgets(ptr, len, fp)) { got = strlen(ptr); if (got >= 1 && ptr[got - 1] == '\n') { tcpd_context.line++; + if (got >= 2 && ptr[got - 2] == '\\') { +- got -= 2; ++ got -= 2; + } else { +- return (start); ++ return (start); + } ++ ptr += got; ++ len -= got; ++ ptr[0] = 0; ++ } else { ++ /* over buffer len */ ++ last = (got >= 1) ? ptr[got - 1] : '\0'; ++ while ((c = fgetc(fp)) != EOF) { ++ if (c == '\n') { ++ tcpd_context.line++; ++ if (last != '\\') ++ return (start); ++ } ++ last = c; ++ } + } +- ptr += got; +- len -= got; +- ptr[0] = 0; + } + return (ptr > start ? start : 0); + }