Hello community, here is the log from the commit of package hylafax+ for openSUSE:Factory checked in at 2019-11-24 00:33:53 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/hylafax+ (Old) and /work/SRC/openSUSE:Factory/.hylafax+.new.26869 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "hylafax+" Sun Nov 24 00:33:53 2019 rev:29 rq:750328 version:7.0.1 Changes: -------- --- /work/SRC/openSUSE:Factory/hylafax+/hylafax+.changes 2019-11-24 00:31:49.703237070 +0100 +++ /work/SRC/openSUSE:Factory/.hylafax+.new.26869/hylafax+.changes 2019-11-24 00:33:56.731250274 +0100 @@ -1,0 +2,13 @@ +Fri Nov 22 15:00:52 UTC 2019 - Hans-Peter Jansen <[email protected]> + +- Version 7.0.1 +* create a client timeout setting and change the default from 60 to + 3600 seconds (26 Sep 2019) +* extend timeout for receiving ECM frames (21 Aug 2019) +* fix timeout in Class 1 frame reception (5 Aug 2019) +* improve Class 1 protocol handling when MaxRecvPages exceeded (31 Jul 2019) +* fix ModemGroup limit default (11 Jul 2019) +* fix recovery for SSL Fax write failures (6 Jun 2019) + + +------------------------------------------------------------------- Old: ---- hylafax-7.0.0.tar.gz New: ---- hylafax-7.0.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ hylafax+.spec ++++++ --- /var/tmp/diff_new_pack.mk9Jnx/_old 2019-11-24 00:33:57.723250377 +0100 +++ /var/tmp/diff_new_pack.mk9Jnx/_new 2019-11-24 00:33:57.727250377 +0100 @@ -19,7 +19,7 @@ %global faxspool %{_localstatedir}/spool/hylafax %define lib_version %(echo %{version} | tr \. _) Name: hylafax+ -Version: 7.0.0 +Version: 7.0.1 Release: 0 Summary: A fax server License: BSD-3-Clause ++++++ hylafax-7.0.0.tar.gz -> hylafax-7.0.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hylafax-7.0.0/CHANGES new/hylafax-7.0.1/CHANGES --- old/hylafax-7.0.0/CHANGES 2019-04-01 16:59:13.000000000 +0200 +++ new/hylafax-7.0.1/CHANGES 2019-09-27 04:47:27.000000000 +0200 @@ -2,6 +2,14 @@ New Changes +* create a client timeout setting and change the default from 60 to + 3600 seconds (26 Sep 2019) +* extend timeout for receiving ECM frames (21 Aug 2019) +* fix timeout in Class 1 frame reception (5 Aug 2019) +* improve Class 1 protocol handling when MaxRecvPages exceeded (31 Jul 2019) +* fix ModemGroup limit default (11 Jul 2019) +* fix recovery for SSL Fax write failures (6 Jun 2019) + (7.0.0) * add LDAP features for compatibility with ActiveDirectory (25 Mar-1 Apr 2019) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hylafax-7.0.0/VERSION new/hylafax-7.0.1/VERSION --- old/hylafax-7.0.0/VERSION 2018-11-09 22:11:38.000000000 +0100 +++ new/hylafax-7.0.1/VERSION 2019-09-27 04:47:27.000000000 +0200 @@ -1 +1 @@ -7.0.0 +7.0.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hylafax-7.0.0/faxd/Class1.c++ new/hylafax-7.0.1/faxd/Class1.c++ --- old/hylafax-7.0.0/faxd/Class1.c++ 2019-01-24 02:23:40.000000000 +0100 +++ new/hylafax-7.0.1/faxd/Class1.c++ 2019-09-27 04:47:27.000000000 +0200 @@ -309,6 +309,7 @@ sslfax.cleanup(sslFaxProcess); useSSLFax = false; isSSLFax = false; + suppressSSLFax = false; setSSLFaxFd(0); if (sslWatchModem) abortReceive(); sslWatchModem = false; @@ -368,6 +369,7 @@ useSSLFax = false; isSSLFax = false; wasSSLFax = false; + suppressSSLFax = false; remoteCSAinfo = ""; sslFaxPasscode = ""; remoteCSAType = 0x00; @@ -395,6 +397,7 @@ useSSLFax = false; isSSLFax = false; wasSSLFax = false; + suppressSSLFax = false; sslRcvCC = sslRcvNext = sslRcvBit = sslGotByte = 0; sslSawBlockEnd = false; sslWatchModem = false; @@ -1326,7 +1329,7 @@ bool rcpframe = false; start = Sys::now(); do { - if ((unsigned) Sys::now()-start >= 3) { + if ((unsigned) Sys::now()-start >= 30) { protoTrace("Timeout receiving HDLC frame"); return (false); } @@ -1723,7 +1726,7 @@ startTimeout(ms); } } - } while (((u_int) Sys::now()-start < conf.t1Timer) && !wasTimeout() && + } while (((u_int) Sys::now()-start < howmany(conf.t1Timer, 1000)) && !wasTimeout() && (lastResponse == AT_FCERROR || lastResponse == AT_NOCARRIER || (lastResponse == AT_ERROR && onhooks <= conf.class1HookSensitivity))); } if (readPending) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hylafax-7.0.0/faxd/Class1.h new/hylafax-7.0.1/faxd/Class1.h --- old/hylafax-7.0.0/faxd/Class1.h 2018-11-09 22:12:30.000000000 +0100 +++ new/hylafax-7.0.1/faxd/Class1.h 2019-09-27 04:47:27.000000000 +0200 @@ -135,6 +135,7 @@ bool useSSLFax; // whether or not we're doing SSL Fax bool isSSLFax; // whether or not SSL Fax handshaking succeeded bool wasSSLFax; // whether or not SSL Fax handshaking succeeded before + bool suppressSSLFax; // whether or not to suspend SSL Fax for this session fxStr remoteCSAinfo; // remote CSA string (host:port) u_char remoteCSAType; // remote CSA type #if defined(HAVE_SSL) @@ -260,7 +261,7 @@ bool setupReceive(); bool recvBegin(FaxSetup* setupinfo, fxStr& emsg); bool recvEOMBegin(FaxSetup* setupinfo, fxStr& emsg); - bool recvPage(TIFF*, u_int& ppm, fxStr& emsg, const fxStr& id); + bool recvPage(TIFF*, u_int& ppm, fxStr& emsg, const fxStr& id, u_int maxPages); bool recvEnd(FaxSetup* setupinfo, fxStr& emsg); void recvAbort(); void pokeConfig(bool isSend); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hylafax-7.0.0/faxd/Class1Recv.c++ new/hylafax-7.0.1/faxd/Class1Recv.c++ --- old/hylafax-7.0.0/faxd/Class1Recv.c++ 2019-03-19 02:30:33.000000000 +0100 +++ new/hylafax-7.0.1/faxd/Class1Recv.c++ 2019-09-27 04:47:27.000000000 +0200 @@ -652,7 +652,7 @@ * sending a post-page response in a multi-page document. */ bool -Class1Modem::recvPage(TIFF* tif, u_int& ppm, fxStr& emsg, const fxStr& id) +Class1Modem::recvPage(TIFF* tif, u_int& ppm, fxStr& emsg, const fxStr& id, u_int maxPages) { if (lastPPM == FCF_MPS && prevPage) { /* @@ -1146,6 +1146,10 @@ protoTrace("Protocol flow control unavailable due to pipe error."); TIFFWriteDirectory(tif); } + if (emsg == "" && prevPage > maxPages) { + protoTrace("Number of pages received (%d) exceeds maxRecvPages (%d).", prevPage, maxPages); + emsg = "Maximum receive page count exceeded"; + } if (emsg == "") { // confirm only if there was no error if (pageGood) { traceFCF("RECV send", sendERR ? FCF_ERR : FCF_MCF); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hylafax-7.0.0/faxd/Class1Send.c++ new/hylafax-7.0.1/faxd/Class1Send.c++ --- old/hylafax-7.0.0/faxd/Class1Send.c++ 2019-01-24 02:23:40.000000000 +0100 +++ new/hylafax-7.0.1/faxd/Class1Send.c++ 2019-09-27 04:47:27.000000000 +0200 @@ -397,7 +397,7 @@ } } #if defined(HAVE_SSL) - if (!isSSLFax && useSSLFax && remoteCSAType == 0x40 && remoteCSAinfo.length()) { + if (!suppressSSLFax && !isSSLFax && useSSLFax && remoteCSAType == 0x40 && remoteCSAinfo.length()) { protoTrace("Connecting to %s for SSL Fax transmission.", (const char*) remoteCSAinfo); SSLFax sslfax; sslFaxProcess = sslfax.startClient(remoteCSAinfo, sslFaxPasscode, rtcRev, conf.class1SSLFaxServerTimeout); @@ -694,7 +694,7 @@ if (!frameSent) return (false); #if defined(HAVE_SSL) - if (!isSSLFax && conf.class1SSLFaxSupport && conf.class1SSLFaxInfo.length() && \ + if (!suppressSSLFax && !isSSLFax && conf.class1SSLFaxSupport && conf.class1SSLFaxInfo.length() && \ (dis_caps.features & FaxParams::FEATURE_SSLFAX || (dis_caps.isBitEnabled(FaxParams::BITNUM_T37) && dis_caps.isBitEnabled(FaxParams::BITNUM_T38)))) { // We can't trust T.38 support indications to indicate that the remote device actually supports TSA frames. useSSLFax = true; @@ -1347,10 +1347,10 @@ } ecmStuffedBlock -= ecmStuffedBlockPos; } else { - if (!sendClass1Data(ecmStuffedBlock, ecmStuffedBlockPos, bitrev, true, getDataTimeout())) + if (!sendClass1Data(ecmStuffedBlock, ecmStuffedBlockPos, bitrev, true, getDataTimeout()) && !wasSSLFax) return (false); } - if (!isSSLFax && useV34) { + if (!isSSLFax && !wasSSLFax && useV34) { // switch to control channel buf[0] = DLE; buf[1] = 0x6D; // <DLE><ctrl> if (!putModemData(buf, 2)) return (false); @@ -1360,7 +1360,7 @@ protoTrace(emsg); return (false); } - } else if (!isSSLFax) { + } else if (!wasSSLFax && !isSSLFax) { // Wait for transmit buffer to empty. ATResponse r; while ((r = atResponse(rbuf, getDataTimeout())) == AT_OTHER); @@ -1380,6 +1380,7 @@ return (false); } } + if (wasSSLFax) wasSSLFax = false; if (flowControl == FLOW_XONXOFF) setXONXOFF(FLOW_NONE, FLOW_NONE, ACT_DRAIN); @@ -1812,6 +1813,15 @@ protoTrace("SENT %u bytes of data", cc); } endTimedTransfer(); + if (wasSSLFax) { + /* + * A value of false for rc here means that there was an error in writing the data. + * If there was an error writing to the modem, then this would be fatal. But, because + * it was an error writing SSL Fax data, then we need to fall back to the modem + * rather than turning the SSL Fax write error into a fatal condition. + */ + rc = true; + } return rc; } @@ -2223,12 +2233,12 @@ imagefd = 0; } } - if (rc || abortRequested()) + if (!wasSSLFax && (rc || abortRequested())) rc = sendRTC(params, ppmcmd, rowsperstrip, emsg); protoTrace("SEND end page"); if (params.ec == EC_DISABLE) { // these were already done by ECM protocol - if (!isSSLFax && rc) { + if (!wasSSLFax && !isSSLFax && rc) { /* * Wait for transmit buffer to empty. */ @@ -2252,6 +2262,14 @@ if (flowControl == FLOW_XONXOFF) setXONXOFF(FLOW_NONE, FLOW_NONE, ACT_DRAIN); } + if (wasSSLFax) { + /* + * Same reasoning here as in sendPageData(). + */ + wasSSLFax = false; + rc = true; + suppressSSLFax = true; // since we're likely to get RTN and go back to Phase B let's avoid restarting SSL Fax + } if (!rc && (emsg == "")) { emsg = "Unspecified Transmit Phase C error {E149}"; // XXX protoTrace(emsg); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hylafax-7.0.0/faxd/Class2.h new/hylafax-7.0.1/faxd/Class2.h --- old/hylafax-7.0.0/faxd/Class2.h 2016-01-13 22:06:22.000000000 +0100 +++ new/hylafax-7.0.1/faxd/Class2.h 2019-09-27 04:47:27.000000000 +0200 @@ -151,7 +151,7 @@ bool setupReceive(); bool recvBegin(FaxSetup* setupinfo, fxStr& emsg); bool recvEOMBegin(FaxSetup* setupinfo, fxStr& emsg); - bool recvPage(TIFF*, u_int& ppm, fxStr& emsg, const fxStr& id); + bool recvPage(TIFF*, u_int& ppm, fxStr& emsg, const fxStr& id, u_int maxPages); bool recvEnd(FaxSetup* setupinfo, fxStr& emsg); void recvAbort(); void pokeConfig(bool isSend); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hylafax-7.0.0/faxd/Class2Recv.c++ new/hylafax-7.0.1/faxd/Class2Recv.c++ --- old/hylafax-7.0.0/faxd/Class2Recv.c++ 2015-07-27 02:46:05.000000000 +0200 +++ new/hylafax-7.0.1/faxd/Class2Recv.c++ 2019-09-27 04:47:27.000000000 +0200 @@ -140,7 +140,7 @@ * received post-page-message. */ bool -Class2Modem::recvPage(TIFF* tif, u_int& ppm, fxStr& emsg, const fxStr& id) +Class2Modem::recvPage(TIFF* tif, u_int& ppm, fxStr& emsg, const fxStr& id, u_int maxPages) { int ppr; bool prevPage = false; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hylafax-7.0.0/faxd/FaxModem.h new/hylafax-7.0.1/faxd/FaxModem.h --- old/hylafax-7.0.0/faxd/FaxModem.h 2018-12-19 01:14:30.000000000 +0100 +++ new/hylafax-7.0.1/faxd/FaxModem.h 2019-09-27 04:47:27.000000000 +0200 @@ -312,7 +312,7 @@ virtual bool recvBegin(FaxSetup* setupinfo, fxStr& emsg); virtual void getDataStats(FaxSetup* setupinfo); virtual bool recvEOMBegin(FaxSetup* setupinfo, fxStr& emsg); - virtual bool recvPage(TIFF*, u_int& ppm, fxStr& em, const fxStr& id) = 0; + virtual bool recvPage(TIFF*, u_int& ppm, fxStr& em, const fxStr& id, u_int maxPages) = 0; virtual bool recvEnd(FaxSetup* setupinfo, fxStr& emsg) = 0; virtual void recvAbort() = 0; virtual void recvSucceeded(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hylafax-7.0.0/faxd/FaxRecv.c++ new/hylafax-7.0.1/faxd/FaxRecv.c++ --- old/hylafax-7.0.0/faxd/FaxRecv.c++ 2016-05-06 22:37:34.000000000 +0200 +++ new/hylafax-7.0.1/faxd/FaxRecv.c++ 2019-09-27 04:47:27.000000000 +0200 @@ -313,7 +313,7 @@ } do { ++recvPages; - if (!modem->recvPage(tif, ppm, emsg, id)) + if (!modem->recvPage(tif, ppm, emsg, id, maxRecvPages)) return (false); info.npages++; info.time = (u_int) getPageTransferTime(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hylafax-7.0.0/faxd/faxQueueApp.c++ new/hylafax-7.0.1/faxd/faxQueueApp.c++ --- old/hylafax-7.0.0/faxd/faxQueueApp.c++ 2018-12-20 01:58:27.000000000 +0100 +++ new/hylafax-7.0.1/faxd/faxQueueApp.c++ 2019-09-27 04:47:27.000000000 +0200 @@ -4083,7 +4083,7 @@ ; if (*cp == ':') { fxStr name(value, cp-value); - fxStr limit("1"); + fxStr limit("0"); for (cp++; *cp && isspace(*cp); cp++) ; const char* cp2 = strchr(cp, ':'); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hylafax-7.0.0/man/faxalter.1 new/hylafax-7.0.1/man/faxalter.1 --- old/hylafax-7.0.0/man/faxalter.1 2015-07-27 02:46:03.000000000 +0200 +++ new/hylafax-7.0.1/man/faxalter.1 2019-09-27 04:47:27.000000000 +0200 @@ -213,6 +213,7 @@ PassiveMode boolean \s-1false\s+1 whether or not to use passive mode Port integer \s-14559\s+1 port to use in contacting server Protocol string \s-1tcp\s+1 protocol to use in contacting server +Timeout integer \s-13600\s+1 timeout in seconds waiting for server response Verbose boolean \s-1No\s+1 whether or not to enable protocol tracing .fi .PP @@ -239,6 +240,9 @@ .B FAXSERVICE environment variable.) .TP 10 +.B Timeout +The timeout, in seconds, to wait for a server response. +.TP 10 .B Verbose Control protocol tracing. (Equivalent to the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hylafax-7.0.0/man/faxrm.1 new/hylafax-7.0.1/man/faxrm.1 --- old/hylafax-7.0.0/man/faxrm.1 2015-07-27 02:46:03.000000000 +0200 +++ new/hylafax-7.0.1/man/faxrm.1 2019-09-27 04:47:27.000000000 +0200 @@ -163,6 +163,7 @@ PassiveMode boolean \s-1false\s+1 whether or not to use passive mode Port integer \s-14559\s+1 port to use in contacting server Protocol string \s-1tcp\s+1 protocol to use in contacting server +Timeout integer \s-13600\s+1 timeout in seconds waiting for server response Verbose boolean \s-1No\s+1 whether or not to enable protocol tracing .fi .PP @@ -189,6 +190,9 @@ .B FAXSERVICE environment variable.) .TP 10 +.B Timeout +The timeout, in seconds, to wait for a server response. +.TP 10 .B Verbose Control protocol tracing. (Equivalent to the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hylafax-7.0.0/man/faxstat.1 new/hylafax-7.0.1/man/faxstat.1 --- old/hylafax-7.0.0/man/faxstat.1 2015-08-27 21:15:51.000000000 +0200 +++ new/hylafax-7.0.1/man/faxstat.1 2019-09-27 04:47:27.000000000 +0200 @@ -221,6 +221,7 @@ Port integer \s-14559\s+1 port to use in contacting server Protocol string \s-1tcp\s+1 protocol to use in contacting server RcvFmt string \s-1\fIsee below\fP\s+1 format string for received facsimile status results +Timeout integer \s-13600\s+1 timeout in seconds waiting for server response TimeZone string \s-1GMT\s+1 timezone to use for reporting dates and times Verbose boolean \s-1No\s+1 whether or not to enable protocol tracing .fi @@ -493,6 +494,9 @@ timezone of the server (``local'') or in GMT (``gmt''). By default times are reported in GMT. .TP 14 +.B Timeout +The timeout, in seconds, to wait for a server response. +.TP 14 .B Verbose Control protocol tracing. (Equivalent to the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hylafax-7.0.0/man/sendfax.1 new/hylafax-7.0.1/man/sendfax.1 --- old/hylafax-7.0.0/man/sendfax.1 2015-07-27 02:46:03.000000000 +0200 +++ new/hylafax-7.0.1/man/sendfax.1 2019-09-27 04:47:27.000000000 +0200 @@ -784,6 +784,7 @@ RetryTime string \- delay between failed attempts to send SendTime string \- time to send job TagLine string \- tagline format string +Timeout integer \s-13600\s+1 timeout in seconds waiting for server response TSI string \- sender identification to use TypeRules string \s-1\fIsee below\fP\s+1 file containing file typing rules VRes float \s-198.\s+1 vertical resolution @@ -1020,6 +1021,9 @@ The name of the file containing file type conversion rules. By default this is ${LIBDATA}/typerules. .TP 16 +.B Timeout +The timeout, in seconds, to wait for a server response. +.TP 16 .B Verbose Control protocol tracing. (Equivalent to the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hylafax-7.0.0/util/FaxClient.c++ new/hylafax-7.0.1/util/FaxClient.c++ --- old/hylafax-7.0.0/util/FaxClient.c++ 2017-09-05 22:16:43.000000000 +0200 +++ new/hylafax-7.0.1/util/FaxClient.c++ 2019-09-27 04:47:27.000000000 +0200 @@ -65,6 +65,7 @@ fdData = -1; state = 0; pasv = false; + timeout = 3600; setupConfig(); } @@ -245,6 +246,7 @@ }; FaxClient::F_numbertag FaxClient::numbers[] = { { "port", &FaxClient::port, (u_int) -1 }, +{ "timeout", &FaxClient::timeout, 3600 }, }; void @@ -693,13 +695,13 @@ } int -is_ready(int fd) +is_ready(int fd, u_int timeout) { fd_set rfds; FD_ZERO(&rfds); FD_SET(fd, &rfds); struct timeval tv; - tv.tv_sec = 60; // timeout after 60 seconds + tv.tv_sec = timeout; // timeout after this many seconds tv.tv_usec = 0; #if CONFIG_BADSELECTPROTO return (select(fd+1, (int*) &rfds, NULL, NULL, &tv)); @@ -743,7 +745,7 @@ } } } - ready = is_ready(fileno(fdIn)); + ready = is_ready(fileno(fdIn), timeout); if (ready > 0) { continue; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hylafax-7.0.0/util/FaxClient.h new/hylafax-7.0.1/util/FaxClient.h --- old/hylafax-7.0.0/util/FaxClient.h 2015-09-17 23:01:43.000000000 +0200 +++ new/hylafax-7.0.1/util/FaxClient.h 2019-09-27 04:47:27.000000000 +0200 @@ -116,6 +116,7 @@ fxStr proto; // protocol to use for service query fxStr lastResponse; // text message from last server response fxStr lastContinuation; // continuation message from last server response + u_int timeout; // timeout for server response u_int port; // server port to connect to u_int type; // data transfer type u_int stru; // file structure
