This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "IPFire 2.x development tree".
The branch, next has been updated
via 2ad1b18bdb9558521441de2596556580c9d9ac8f (commit)
via 0fb42e01c576d55e5954cd1ff19d8e3fb5824d71 (commit)
via d33ad4bdfe737056aaf373c569dc63744d231e96 (commit)
via b1c695e872f0b1968dadee7fc38cf3258423c3ac (commit)
via 3174d9c6b610c1f1ce1e7a8828a4575def2e2392 (commit)
via bc4d4da87009ebffcd93d30dcbfffff797b92588 (commit)
via 63f7d7475e97d74d4bcd23bd739b6b1721e55e14 (commit)
via 3e151d19f9b813206e36da6b66fdc8cc99cdd26f (commit)
via 424a332fd38ab844094d3e978cf5e159ead64b6c (commit)
via cebad6e2b938071e1da2bea9dfa3fe09169ee5a0 (commit)
via 59b9a6bd22c0a5236b291ad7a50395032d600739 (commit)
via 6a9bcd6c1d7ac0f8f4926a886beb8b3989227874 (commit)
via 39ff91ecf8d22a4752e3eeef8ae5cf60e497cb44 (commit)
via 607365bccb704be5402c4a5cb310662c22e69fb1 (commit)
via e6341c5856ad6d7ed390d1a9ffbfadf449daebd8 (commit)
via eedf7b06c0c4a598b78dd87edb0f49a7f2bb061c (commit)
via ec01ebe246072cae77bc53d3c1fc09ad8277a89f (commit)
via 3c33d9d8545c46d2446244e7d20eb25f3d2f2d90 (commit)
via cae6916d598b08d79d91e92733f676be4a4bb10c (commit)
via ec5b30f39b40787f400b7aded50af60b1b2305b5 (commit)
via 58b3c9b58ab833cf5c3ab3d90a6f7d5ff3cf7879 (commit)
via d3ef457692dfcaed7f81c6a5641093c5845d441c (commit)
via a3f4b8c6f73bd4680f9e87eee9c758d3e010a774 (commit)
via bb64cd092ce7b5338a7cc8882c9fbfc8262efbce (commit)
via a18addb94621b1e43b78dcb713ad2d88de800d37 (commit)
via 7b2d933055e8a86eba8398a474fdf9badc2295f0 (commit)
via 3cd8d550109b03d6187f73463a118f74664242a3 (commit)
via 0df1839239a2beb0f1d4dc3475c35143280abff2 (commit)
via efa43d82b5376401971a7835b53a89581d8db26e (commit)
via fe9fb3868241f671c6914962cc8564ec82504ab2 (commit)
via 41fe437400011524c0708bbbf4b59fcc98b017ab (commit)
via 04a42c81f5e4104bf58487fcf234431e307799a1 (commit)
via 6f828b103e29c3795d3ea6bff68584ff1a0c9afc (commit)
via 6a56ee2a3e808d108890691308f7c6510d2a30cc (commit)
via ff42e562249eca0fea2ad842264a5594a43d7c8f (commit)
via 28797d488e51901076a350242c014ff140e58d5f (commit)
via 57ff953341c1ffc7114bd256e34b2982ad6687e2 (commit)
via f3acac7f1168ee5d7ce6c58ed6e7034d3a7c7e42 (commit)
via 5c0345f5c1c247c8fc33c9447221caa134f27d86 (commit)
via 95f1c332d8c63896b540c3a07335236ef08cee01 (commit)
via c5f0c44451737c543021e4ba958404a019ed7562 (commit)
via 2c0ee2b9624c4c7c3b3ce7b1deadae9df6ca9a32 (commit)
via f41d936026b576ef7207754fa1d667d983fded06 (commit)
via 6e8e8ee41cfcec7338a5674c21c0e8aa62a59a04 (commit)
via 700f11b305e941bb42b0a0b4e451af962b1bc23d (commit)
from 4863f2096cde6fd93618d1f774c6d16499ee3f63 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 2ad1b18bdb9558521441de2596556580c9d9ac8f
Author: Michael Tremer michael.tremer@ipfire.org
Date: Mon Oct 14 19:11:37 2019 +0200
vpnmain.cgi+ovpnmain.cgi: Fix file upload with new versions of Perl
File uploads did not work since Perl was upgraded. This patch
fixes that problem by only checking if an object was returned
instead of performing a string comparison.
Signed-off-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 0fb42e01c576d55e5954cd1ff19d8e3fb5824d71
Author: Arne Fitzenreiter arne_f@ipfire.org
Date: Mon Oct 14 18:09:39 2019 +0000
core137: add qos changes to updater
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit d33ad4bdfe737056aaf373c569dc63744d231e96
Author: Michael Tremer michael.tremer@ipfire.org
Date: Mon Oct 14 16:46:27 2019 +0000
QoS: Increase queue size and quantum for fq_codel
This optimises the QoS to process more bandwidth.
The limit variable sets the maximum number of packets in the
queue which was regularly exceeded on fast connections with
the old setting. This now allows up to 10G of data transfer
and is set to the default of fq_codel.
Quantum sets how many bytes can be read from the queue per
iteration. This is now set to the default again, which is
the size of an Ethernet frame including its header.
Signed-off-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit b1c695e872f0b1968dadee7fc38cf3258423c3ac
Author: Michael Tremer michael.tremer@ipfire.org
Date: Mon Oct 14 16:46:26 2019 +0000
QoS: No longer set TOS bits for ACK packets
Signed-off-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 3174d9c6b610c1f1ce1e7a8828a4575def2e2392
Author: Michael Tremer michael.tremer@ipfire.org
Date: Mon Oct 14 16:46:25 2019 +0000
QoS: Drop support for setting TOS bits per class
This is useless since no ISP will evaluate those settings
any more and it has a rather large impact on throughput.
Signed-off-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit bc4d4da87009ebffcd93d30dcbfffff797b92588
Author: Michael Tremer michael.tremer@ipfire.org
Date: Mon Oct 14 16:46:24 2019 +0000
QoS: Drop support for subclasses
This feature was never properly implemented and the UI was dead
Signed-off-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 63f7d7475e97d74d4bcd23bd739b6b1721e55e14
Author: Michael Tremer michael.tremer@ipfire.org
Date: Mon Oct 14 16:46:23 2019 +0000
QoS: Drop tc filter rules to move marked packets into the correct class
This is no longer necessary since we are now using CLASSIFY
Signed-off-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 3e151d19f9b813206e36da6b66fdc8cc99cdd26f
Author: Michael Tremer michael.tremer@ipfire.org
Date: Mon Oct 14 16:46:22 2019 +0000
QoS: Use CLASSIFY iptables target instead of MARK
We have been running into loads of conflicts by using MARK for
various components on the OS (suricata, IPsec, QoS, ...) which
was sometimes hard to resolve.
iptables comes with a target which directly sorts packets into
the correct class which results in less code and not using the
mark.
Signed-off-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 424a332fd38ab844094d3e978cf5e159ead64b6c
Author: Michael Tremer michael.tremer@ipfire.org
Date: Mon Oct 14 16:46:21 2019 +0000
QoS: Move packet classification to FORWARD chain for ingress
Signed-off-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit cebad6e2b938071e1da2bea9dfa3fe09169ee5a0
Author: Michael Tremer michael.tremer@ipfire.org
Date: Mon Oct 14 16:46:20 2019 +0000
QoS: Suppress an error message when cleaning up from previous runs
Signed-off-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 59b9a6bd22c0a5236b291ad7a50395032d600739
Author: Michael Tremer michael.tremer@ipfire.org
Date: Mon Oct 14 16:46:19 2019 +0000
linux+iptables: Drop support for IMQ
This is no longer needed since we are using IFB now
Signed-off-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 6a9bcd6c1d7ac0f8f4926a886beb8b3989227874
Author: Michael Tremer michael.tremer@ipfire.org
Date: Mon Oct 14 16:46:17 2019 +0000
QoS: Start qosd immediately
Signed-off-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 39ff91ecf8d22a4752e3eeef8ae5cf60e497cb44
Author: Michael Tremer michael.tremer@ipfire.org
Date: Mon Oct 14 16:46:18 2019 +0000
QoS: Do not delete egress qdisc after classes have been created
Signed-off-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 607365bccb704be5402c4a5cb310662c22e69fb1
Author: Michael Tremer michael.tremer@ipfire.org
Date: Mon Oct 14 16:46:16 2019 +0000
QoS: Silence RRD tool warnings
Signed-off-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit e6341c5856ad6d7ed390d1a9ffbfadf449daebd8
Author: Michael Tremer michael.tremer@ipfire.org
Date: Mon Oct 14 16:46:15 2019 +0000
QoS: Process incoming packets in PREROUTING only
Signed-off-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit eedf7b06c0c4a598b78dd87edb0f49a7f2bb061c
Author: Michael Tremer michael.tremer@ipfire.org
Date: Mon Oct 14 16:46:14 2019 +0000
QoS: Tidy up qdiscs after QoS is being stopped
Signed-off-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit ec01ebe246072cae77bc53d3c1fc09ad8277a89f
Author: Michael Tremer michael.tremer@ipfire.org
Date: Mon Oct 14 16:46:13 2019 +0000
Revert "Make IMQ Switchable between PREROUTING and POSTROUTING"
This reverts commit 88b8ffac6b258e7b7687eb26111134bf435e23ca.
Signed-off-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 3c33d9d8545c46d2446244e7d20eb25f3d2f2d90
Author: Michael Tremer michael.tremer@ipfire.org
Date: Mon Oct 14 16:46:12 2019 +0000
QoS: Use Intermediate Functional Block
This is an alternative implementation to the Intermediate Queuing
Device (IMQ) which is an out-of-tree kernel patch and has been
criticised for being slow, especially with mutliple processors.
IFB is part of the mainline kernel and a lot less code.
Signed-off-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit cae6916d598b08d79d91e92733f676be4a4bb10c
Author: Michael Tremer michael.tremer@ipfire.org
Date: Mon Oct 14 16:46:11 2019 +0000
QoS: Do not manually load iptables modules
This should not be necessary and causes the script to
wait for two seconds.
Signed-off-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit ec5b30f39b40787f400b7aded50af60b1b2305b5
Author: Arne Fitzenreiter arne_f@ipfire.org
Date: Mon Oct 14 17:57:58 2019 +0000
core137: add updated sysctl.conf
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 58b3c9b58ab833cf5c3ab3d90a6f7d5ff3cf7879
Author: Michael Tremer michael.tremer@ipfire.org
Date: Mon Oct 14 16:44:54 2019 +0000
sysctl: Adopt more settings from the IBM HPC guidelines
https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/Welco...
Since we have already configured most of our IP/TCP stack
for low latency and fast throughput, these settings complete
those efforts.
Signed-off-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit d3ef457692dfcaed7f81c6a5641093c5845d441c
Author: Arne Fitzenreiter arne_f@ipfire.org
Date: Mon Oct 14 17:49:32 2019 +0000
core137: add updated 99-geoip-database
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit a3f4b8c6f73bd4680f9e87eee9c758d3e010a774
Author: Michael Tremer michael.tremer@ipfire.org
Date: Mon Oct 14 16:43:58 2019 +0000
99-geoip-database: Fix download
This script started a fresh download every time it was called,
which is unnecessary.
The check to skip the download did not work because it was
looking for the old data format.
Signed-off-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit bb64cd092ce7b5338a7cc8882c9fbfc8262efbce
Author: Arne Fitzenreiter arne_f@ipfire.org
Date: Mon Oct 14 17:46:27 2019 +0000
core137: add updated xt_geoip_update
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit a18addb94621b1e43b78dcb713ad2d88de800d37
Author: Daniel Weismüller daniel.weismueller@ipfire.org
Date: Mon Oct 14 16:47:56 2019 +0200
xt_geoip_update: Always call the cleanup function when some step fails
Signed-off-by: Daniel Weismüller daniel.weismueller@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 7b2d933055e8a86eba8398a474fdf9badc2295f0
Author: Daniel Weismüller daniel.weismueller@ipfire.org
Date: Mon Oct 14 16:47:55 2019 +0200
xt_geoip_update: Do not create temporary directories again
These already exist
Signed-off-by: Daniel Weismüller daniel.weismueller@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 3cd8d550109b03d6187f73463a118f74664242a3
Author: Daniel Weismüller daniel.weismueller@ipfire.org
Date: Mon Oct 14 16:47:54 2019 +0200
xt_geoip_update: Use /var/tmp for temporary data
Since we have some systems that are restricted to only 2GB of
space on /, we need to move this to where we have enough space.
Signed-off-by: Daniel Weismüller daniel.weismueller@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 0df1839239a2beb0f1d4dc3475c35143280abff2
Author: Daniel Weismüller daniel.weismueller@ipfire.org
Date: Mon Oct 14 16:47:53 2019 +0200
xt_geoip_update: Perform cleanup after successful operation
The temporary files were never being cleaned up after the script
has finished compiling the database.
Signed-off-by: Daniel Weismüller daniel.weismueller@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit efa43d82b5376401971a7835b53a89581d8db26e
Author: Arne Fitzenreiter arne_f@ipfire.org
Date: Mon Oct 14 17:42:35 2019 +0000
core137: add dns.cgi to update
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit fe9fb3868241f671c6914962cc8564ec82504ab2
Author: peter.mueller@ipfire.org peter.mueller@ipfire.org
Date: Sun Oct 13 11:13:00 2019 +0000
fix link to public DNS server list in dns.cgi
Fixes: #11851
Reported-by: Dani W assgex@gmail.com
Signed-off-by: Peter Müller peter.mueller@ipfire.org
Reviewed-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 41fe437400011524c0708bbbf4b59fcc98b017ab
Author: peter.mueller@ipfire.org peter.mueller@ipfire.org
Date: Sun Oct 13 11:09:00 2019 +0000
fix typo in hostapd initscript
Fixes: #11237
Reported-by: Tom Rymes tomvend@rymes.com
Signed-off-by: Peter Müller peter.mueller@ipfire.org
Reviewed-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 04a42c81f5e4104bf58487fcf234431e307799a1
Author: peter.mueller@ipfire.org peter.mueller@ipfire.org
Date: Sun Oct 13 09:39:00 2019 +0000
rust: fix year in LFS file
Tempus fugit, I know... :-)
Cc: Stefan Schantl stefan.schantl@ipfire.org
Signed-off-by: Peter Müller peter.mueller@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 6f828b103e29c3795d3ea6bff68584ff1a0c9afc
Author: Arne Fitzenreiter arne_f@ipfire.org
Date: Mon Oct 14 17:36:36 2019 +0000
core137: add updated ruleset-sources
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 6a56ee2a3e808d108890691308f7c6510d2a30cc
Author: Stefan Schantl stefan.schantl@ipfire.org
Date: Fri Oct 11 20:44:00 2019 +0200
ruleset-sources: Update snort dl urls.
Signed-off-by: Stefan Schantl stefan.schantl@ipfire.org
Reviewed-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit ff42e562249eca0fea2ad842264a5594a43d7c8f
Author: Arne Fitzenreiter arne_f@ipfire.org
Date: Mon Oct 14 17:30:37 2019 +0000
core137: add updated backup.pl
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 28797d488e51901076a350242c014ff140e58d5f
Author: Tim FitzGeorge ipfr@tfitzgeorge.me.uk
Date: Fri Oct 11 19:42:05 2019 +0100
Restart logging after restoring backup
Send SIGHUP to syslogd and suricata after restoring backup. This ensures that
if the restored backup includes log files that any new log messages get
appended to the restored log files. Otherwise they will be written to the
old log files which are pending deletion.
httpd is told to restart using apachectl, which is the equivalent of sending
a signal. 'graceful' (USR1) is used rather than 'restart' (HUP) because the
latter immediately kills the process restoring the backup, preventing
converters from running.
Fixes: 12196
Signed-off-by: Tim FitzGeorge ipfr@tfitzgeorge.me.uk
Reviewed-by: Michael Tremer michael.tremer@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 57ff953341c1ffc7114bd256e34b2982ad6687e2
Author: Arne Fitzenreiter arne_f@ipfire.org
Date: Mon Oct 14 17:22:44 2019 +0000
core137: add ipset to update
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit f3acac7f1168ee5d7ce6c58ed6e7034d3a7c7e42
Author: Erik Kapfer ummeegge@ipfire.org
Date: Thu Oct 10 18:30:48 2019 +0200
ipset: Update to version 7.3
Some kernel part fixes are included. For a overview of the changelog,
take a look in here --> http://ipset.netfilter.org/changelog.html .
Signed-off-by: Erik Kapfer ummeegge@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 5c0345f5c1c247c8fc33c9447221caa134f27d86
Author: peter.mueller@ipfire.org peter.mueller@ipfire.org
Date: Mon Oct 7 18:19:00 2019 +0000
ship updated bash and readline
Signed-off-by: Peter Müller peter.mueller@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 95f1c332d8c63896b540c3a07335236ef08cee01
Author: peter.mueller@ipfire.org peter.mueller@ipfire.org
Date: Mon Oct 7 18:19:00 2019 +0000
bash/readline: drop orphaned patches
Signed-off-by: Peter Müller peter.mueller@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit c5f0c44451737c543021e4ba958404a019ed7562
Author: peter.mueller@ipfire.org peter.mueller@ipfire.org
Date: Mon Oct 7 18:18:00 2019 +0000
readline: add patch 001 for version 8.0
Signed-off-by: Peter Müller peter.mueller@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 2c0ee2b9624c4c7c3b3ce7b1deadae9df6ca9a32
Author: peter.mueller@ipfire.org peter.mueller@ipfire.org
Date: Mon Oct 7 18:18:00 2019 +0000
bash: add patches 001 - 011 for 5.0 version
Signed-off-by: Peter Müller peter.mueller@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit f41d936026b576ef7207754fa1d667d983fded06
Author: peter.mueller@ipfire.org peter.mueller@ipfire.org
Date: Mon Oct 7 18:17:00 2019 +0000
update rootfiles for bash and readline
Signed-off-by: Peter Müller peter.mueller@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 6e8e8ee41cfcec7338a5674c21c0e8aa62a59a04
Author: peter.mueller@ipfire.org peter.mueller@ipfire.org
Date: Mon Oct 7 18:16:00 2019 +0000
readline: update to 8.0
Signed-off-by: Peter Müller peter.mueller@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
commit 700f11b305e941bb42b0a0b4e451af962b1bc23d
Author: peter.mueller@ipfire.org peter.mueller@ipfire.org
Date: Mon Oct 7 18:15:00 2019 +0000
bash: update to 5.0
Signed-off-by: Peter Müller peter.mueller@ipfire.org
Signed-off-by: Arne Fitzenreiter arne_f@ipfire.org
-----------------------------------------------------------------------
Summary of changes:
config/backup/backup.pl | 5 +
config/etc/sysctl.conf | 7 +
config/kernel/kernel.config.aarch64-ipfire | 7 -
.../kernel/kernel.config.armv5tel-ipfire-kirkwood | 7 -
config/kernel/kernel.config.armv5tel-ipfire-multi | 7 -
config/kernel/kernel.config.i586-ipfire | 7 -
config/kernel/kernel.config.i586-ipfire-pae | 7 -
config/kernel/kernel.config.x86_64-ipfire | 7 -
config/qos/makeqosscripts.pl | 261 +--
config/rootfiles/common/aarch64/linux | 13 -
config/rootfiles/common/armv5tel/linux-kirkwood | 13 -
config/rootfiles/common/armv5tel/linux-multi | 13 -
config/rootfiles/common/bash | 5 +
config/rootfiles/common/i586/linux | 13 -
config/rootfiles/common/iptables | 1 -
config/rootfiles/common/readline | 8 +-
config/rootfiles/common/x86_64/linux | 13 -
.../{oldcore/66 => core/137}/filelists/bash | 0
config/rootfiles/core/137/filelists/files | 8 +
.../{oldcore/106 => core/137}/filelists/ipset | 0
.../{oldcore/66 => core/137}/filelists/readline | 0
config/rootfiles/core/137/update.sh | 5 +
config/rootfiles/packages/linux-pae | 13 -
config/suricata/ruleset-sources | 4 +-
doc/language_issues.de | 4 +
doc/language_issues.en | 4 -
doc/language_issues.es | 4 +
doc/language_issues.fr | 4 +
doc/language_issues.it | 4 +
doc/language_issues.nl | 4 +
doc/language_issues.pl | 4 +
doc/language_issues.ru | 4 +
doc/language_issues.tr | 4 +
html/cgi-bin/dns.cgi | 4 +-
html/cgi-bin/ovpnmain.cgi | 16 +-
html/cgi-bin/qos.cgi | 209 --
html/cgi-bin/vpnmain.cgi | 10 +-
lfs/bash | 10 +-
lfs/hostapd | 2 +-
lfs/ipset | 4 +-
lfs/iptables | 3 -
lfs/linux | 3 -
lfs/readline | 10 +-
lfs/rust | 2 +-
.../networking/red.up/99-geoip-database | 23 +-
src/initscripts/packages/hostapd | 2 +-
src/patches/bash/bash43-001 | 58 -
src/patches/bash/bash43-002 | 62 -
src/patches/bash/bash43-003 | 48 -
src/patches/bash/bash43-004 | 47 -
src/patches/bash/bash43-005 | 63 -
src/patches/bash/bash43-006 | 48 -
src/patches/bash/bash43-007 | 50 -
src/patches/bash/bash43-008 | 188 --
src/patches/bash/bash43-009 | 64 -
src/patches/bash/bash43-010 | 157 --
src/patches/bash/bash43-011 | 49 -
src/patches/bash/bash43-012 | 43 -
src/patches/bash/bash43-013 | 66 -
src/patches/bash/bash43-014 | 102 -
src/patches/bash/bash43-015 | 58 -
src/patches/bash/bash43-016 | 132 --
src/patches/bash/bash43-017 | 51 -
src/patches/bash/bash43-018 | 44 -
src/patches/bash/bash43-019 | 84 -
src/patches/bash/bash43-020 | 110 -
src/patches/bash/bash43-021 | 52 -
src/patches/bash/bash43-022 | 56 -
src/patches/bash/bash43-023 | 104 -
src/patches/bash/bash43-024 | 54 -
src/patches/bash/bash43-025 | 123 --
src/patches/bash/bash43-026 | 60 -
src/patches/bash/bash43-027 | 221 --
src/patches/bash/bash43-028 | 2265 --------------------
src/patches/bash/bash43-029 | 59 -
src/patches/bash/bash43-030 | 2064 ------------------
src/patches/bash/bash50-001 | 166 ++
src/patches/bash/bash50-002 | 113 +
src/patches/bash/bash50-003 | 239 +++
src/patches/bash/bash50-004 | 53 +
src/patches/bash/bash50-005 | 110 +
src/patches/bash/bash50-006 | 47 +
src/patches/bash/bash50-007 | 62 +
src/patches/bash/bash50-008 | 68 +
src/patches/bash/bash50-009 | 42 +
src/patches/bash/bash50-010 | 172 ++
src/patches/bash/bash50-011 | 59 +
src/patches/iptables-1.4.12-IMQ-test4.diff | 141 --
src/patches/linux/linux-4.14-imq.diff | 1759 ---------------
src/patches/readline/readline63-001 | 43 -
src/patches/readline/readline63-002 | 44 -
src/patches/readline/readline63-003 | 47 -
src/patches/readline/readline63-004 | 45 -
src/patches/readline/readline63-005 | 58 -
src/patches/readline/readline63-006 | 63 -
src/patches/readline/readline80-001 | 38 +
src/scripts/xt_geoip_update | 38 +-
97 files changed, 1326 insertions(+), 9421 deletions(-)
copy config/rootfiles/{oldcore/66 => core/137}/filelists/bash (100%)
copy config/rootfiles/{oldcore/106 => core/137}/filelists/ipset (100%)
copy config/rootfiles/{oldcore/66 => core/137}/filelists/readline (100%)
delete mode 100644 src/patches/bash/bash43-001
delete mode 100644 src/patches/bash/bash43-002
delete mode 100644 src/patches/bash/bash43-003
delete mode 100644 src/patches/bash/bash43-004
delete mode 100644 src/patches/bash/bash43-005
delete mode 100644 src/patches/bash/bash43-006
delete mode 100644 src/patches/bash/bash43-007
delete mode 100644 src/patches/bash/bash43-008
delete mode 100644 src/patches/bash/bash43-009
delete mode 100644 src/patches/bash/bash43-010
delete mode 100644 src/patches/bash/bash43-011
delete mode 100644 src/patches/bash/bash43-012
delete mode 100644 src/patches/bash/bash43-013
delete mode 100644 src/patches/bash/bash43-014
delete mode 100644 src/patches/bash/bash43-015
delete mode 100644 src/patches/bash/bash43-016
delete mode 100644 src/patches/bash/bash43-017
delete mode 100644 src/patches/bash/bash43-018
delete mode 100644 src/patches/bash/bash43-019
delete mode 100644 src/patches/bash/bash43-020
delete mode 100644 src/patches/bash/bash43-021
delete mode 100644 src/patches/bash/bash43-022
delete mode 100644 src/patches/bash/bash43-023
delete mode 100644 src/patches/bash/bash43-024
delete mode 100644 src/patches/bash/bash43-025
delete mode 100644 src/patches/bash/bash43-026
delete mode 100644 src/patches/bash/bash43-027
delete mode 100644 src/patches/bash/bash43-028
delete mode 100644 src/patches/bash/bash43-029
delete mode 100644 src/patches/bash/bash43-030
create mode 100644 src/patches/bash/bash50-001
create mode 100644 src/patches/bash/bash50-002
create mode 100644 src/patches/bash/bash50-003
create mode 100644 src/patches/bash/bash50-004
create mode 100644 src/patches/bash/bash50-005
create mode 100644 src/patches/bash/bash50-006
create mode 100644 src/patches/bash/bash50-007
create mode 100644 src/patches/bash/bash50-008
create mode 100644 src/patches/bash/bash50-009
create mode 100644 src/patches/bash/bash50-010
create mode 100644 src/patches/bash/bash50-011
delete mode 100644 src/patches/iptables-1.4.12-IMQ-test4.diff
delete mode 100644 src/patches/linux/linux-4.14-imq.diff
delete mode 100644 src/patches/readline/readline63-001
delete mode 100644 src/patches/readline/readline63-002
delete mode 100644 src/patches/readline/readline63-003
delete mode 100644 src/patches/readline/readline63-004
delete mode 100644 src/patches/readline/readline63-005
delete mode 100644 src/patches/readline/readline63-006
create mode 100644 src/patches/readline/readline80-001
Difference in files:
diff --git a/config/backup/backup.pl b/config/backup/backup.pl
index 6ac4e4967..b1dd1d297 100644
--- a/config/backup/backup.pl
+++ b/config/backup/backup.pl
@@ -71,6 +71,11 @@ restore_backup() {
tar xvzpf "${filename}" -C /
+ # Restart syslogd, httpd and suricata in case we've just loaded old logs
+ apachectl -k graceful
+ /bin/kill -HUP `cat /var/run/suricata.pid 2> /dev/null` 2> /dev/null
+ /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null
+
# Run converters
# Outgoing Firewall
diff --git a/config/etc/sysctl.conf b/config/etc/sysctl.conf
index 9a943fffa..d11e53c88 100644
--- a/config/etc/sysctl.conf
+++ b/config/etc/sysctl.conf
@@ -76,9 +76,16 @@ vm.swappiness = 1
kernel.sched_migration_cost_ns = 5000000
# Increase kernel buffer size maximums
+net.ipv4.tcp_mem = 16777216 16777216 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 16384 16777216
net.ipv4.udp_mem = 3145728 4194304 16777216
+# Prefer low latency over higher throughput
+net.ipv4.tcp_low_latency=1
+
+# Reserve more socket space for the TCP window
+net.ipv4.tcp_adv_win_scale=2
+
# Enable TCP fast-open
net.ipv4.tcp_fastopen = 3
diff --git a/config/kernel/kernel.config.aarch64-ipfire b/config/kernel/kernel.config.aarch64-ipfire
index f9a73b850..e4634855c 100644
--- a/config/kernel/kernel.config.aarch64-ipfire
+++ b/config/kernel/kernel.config.aarch64-ipfire
@@ -908,7 +908,6 @@ CONFIG_NETFILTER_XT_TARGET_HMARK=m
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
CONFIG_NETFILTER_XT_TARGET_LED=m
CONFIG_NETFILTER_XT_TARGET_LOG=m
-CONFIG_NETFILTER_XT_TARGET_IMQ=m
CONFIG_NETFILTER_XT_TARGET_MARK=m
CONFIG_NETFILTER_XT_NAT=m
CONFIG_NETFILTER_XT_TARGET_NETMAP=m
@@ -1992,12 +1991,6 @@ CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_NETPOLL=y
CONFIG_NET_POLL_CONTROLLER=y
-CONFIG_IMQ=m
-# CONFIG_IMQ_BEHAVIOR_AA is not set
-CONFIG_IMQ_BEHAVIOR_AB=y
-# CONFIG_IMQ_BEHAVIOR_BA is not set
-# CONFIG_IMQ_BEHAVIOR_BB is not set
-CONFIG_IMQ_NUM_DEVS=2
CONFIG_TUN=m
CONFIG_TAP=m
# CONFIG_TUN_VNET_CROSS_LE is not set
diff --git a/config/kernel/kernel.config.armv5tel-ipfire-kirkwood b/config/kernel/kernel.config.armv5tel-ipfire-kirkwood
index b133a6d8c..b07ee985d 100644
--- a/config/kernel/kernel.config.armv5tel-ipfire-kirkwood
+++ b/config/kernel/kernel.config.armv5tel-ipfire-kirkwood
@@ -894,7 +894,6 @@ CONFIG_NETFILTER_XT_TARGET_HMARK=m
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
CONFIG_NETFILTER_XT_TARGET_LED=m
CONFIG_NETFILTER_XT_TARGET_LOG=m
-CONFIG_NETFILTER_XT_TARGET_IMQ=m
CONFIG_NETFILTER_XT_TARGET_MARK=m
CONFIG_NETFILTER_XT_NAT=m
CONFIG_NETFILTER_XT_TARGET_NETMAP=m
@@ -1955,12 +1954,6 @@ CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_NETPOLL=y
CONFIG_NET_POLL_CONTROLLER=y
-CONFIG_IMQ=m
-# CONFIG_IMQ_BEHAVIOR_AA is not set
-CONFIG_IMQ_BEHAVIOR_AB=y
-# CONFIG_IMQ_BEHAVIOR_BA is not set
-# CONFIG_IMQ_BEHAVIOR_BB is not set
-CONFIG_IMQ_NUM_DEVS=2
CONFIG_TUN=m
CONFIG_TAP=m
# CONFIG_TUN_VNET_CROSS_LE is not set
diff --git a/config/kernel/kernel.config.armv5tel-ipfire-multi b/config/kernel/kernel.config.armv5tel-ipfire-multi
index c7cc2ec25..5185e0e7e 100644
--- a/config/kernel/kernel.config.armv5tel-ipfire-multi
+++ b/config/kernel/kernel.config.armv5tel-ipfire-multi
@@ -1166,7 +1166,6 @@ CONFIG_NETFILTER_XT_TARGET_HMARK=m
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
CONFIG_NETFILTER_XT_TARGET_LED=m
CONFIG_NETFILTER_XT_TARGET_LOG=m
-CONFIG_NETFILTER_XT_TARGET_IMQ=m
CONFIG_NETFILTER_XT_TARGET_MARK=m
CONFIG_NETFILTER_XT_NAT=m
CONFIG_NETFILTER_XT_TARGET_NETMAP=m
@@ -2263,12 +2262,6 @@ CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_NETPOLL=y
CONFIG_NET_POLL_CONTROLLER=y
-CONFIG_IMQ=m
-# CONFIG_IMQ_BEHAVIOR_AA is not set
-CONFIG_IMQ_BEHAVIOR_AB=y
-# CONFIG_IMQ_BEHAVIOR_BA is not set
-# CONFIG_IMQ_BEHAVIOR_BB is not set
-CONFIG_IMQ_NUM_DEVS=2
CONFIG_TUN=m
CONFIG_TAP=m
# CONFIG_TUN_VNET_CROSS_LE is not set
diff --git a/config/kernel/kernel.config.i586-ipfire b/config/kernel/kernel.config.i586-ipfire
index e149ccdec..fd8b7a9fe 100644
--- a/config/kernel/kernel.config.i586-ipfire
+++ b/config/kernel/kernel.config.i586-ipfire
@@ -1102,7 +1102,6 @@ CONFIG_NETFILTER_XT_TARGET_HMARK=m
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
CONFIG_NETFILTER_XT_TARGET_LED=m
CONFIG_NETFILTER_XT_TARGET_LOG=m
-CONFIG_NETFILTER_XT_TARGET_IMQ=m
CONFIG_NETFILTER_XT_TARGET_MARK=m
CONFIG_NETFILTER_XT_NAT=m
CONFIG_NETFILTER_XT_TARGET_NETMAP=m
@@ -2171,12 +2170,6 @@ CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_NETPOLL=y
CONFIG_NET_POLL_CONTROLLER=y
-CONFIG_IMQ=m
-# CONFIG_IMQ_BEHAVIOR_AA is not set
-CONFIG_IMQ_BEHAVIOR_AB=y
-# CONFIG_IMQ_BEHAVIOR_BA is not set
-# CONFIG_IMQ_BEHAVIOR_BB is not set
-CONFIG_IMQ_NUM_DEVS=2
CONFIG_TUN=m
CONFIG_TAP=m
# CONFIG_TUN_VNET_CROSS_LE is not set
diff --git a/config/kernel/kernel.config.i586-ipfire-pae b/config/kernel/kernel.config.i586-ipfire-pae
index eb2e87453..49f9d7dad 100644
--- a/config/kernel/kernel.config.i586-ipfire-pae
+++ b/config/kernel/kernel.config.i586-ipfire-pae
@@ -1120,7 +1120,6 @@ CONFIG_NETFILTER_XT_TARGET_HMARK=m
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
CONFIG_NETFILTER_XT_TARGET_LED=m
CONFIG_NETFILTER_XT_TARGET_LOG=m
-CONFIG_NETFILTER_XT_TARGET_IMQ=m
CONFIG_NETFILTER_XT_TARGET_MARK=m
CONFIG_NETFILTER_XT_NAT=m
CONFIG_NETFILTER_XT_TARGET_NETMAP=m
@@ -2191,12 +2190,6 @@ CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_NETPOLL=y
CONFIG_NET_POLL_CONTROLLER=y
-CONFIG_IMQ=m
-# CONFIG_IMQ_BEHAVIOR_AA is not set
-CONFIG_IMQ_BEHAVIOR_AB=y
-# CONFIG_IMQ_BEHAVIOR_BA is not set
-# CONFIG_IMQ_BEHAVIOR_BB is not set
-CONFIG_IMQ_NUM_DEVS=2
CONFIG_TUN=m
CONFIG_TAP=m
# CONFIG_TUN_VNET_CROSS_LE is not set
diff --git a/config/kernel/kernel.config.x86_64-ipfire b/config/kernel/kernel.config.x86_64-ipfire
index 618a52f5b..7f345d65c 100644
--- a/config/kernel/kernel.config.x86_64-ipfire
+++ b/config/kernel/kernel.config.x86_64-ipfire
@@ -1094,7 +1094,6 @@ CONFIG_NETFILTER_XT_TARGET_HMARK=m
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
CONFIG_NETFILTER_XT_TARGET_LED=m
CONFIG_NETFILTER_XT_TARGET_LOG=m
-CONFIG_NETFILTER_XT_TARGET_IMQ=m
CONFIG_NETFILTER_XT_TARGET_MARK=m
CONFIG_NETFILTER_XT_NAT=y
CONFIG_NETFILTER_XT_TARGET_NETMAP=m
@@ -2148,12 +2147,6 @@ CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_NETPOLL=y
CONFIG_NET_POLL_CONTROLLER=y
-CONFIG_IMQ=m
-# CONFIG_IMQ_BEHAVIOR_AA is not set
-CONFIG_IMQ_BEHAVIOR_AB=y
-# CONFIG_IMQ_BEHAVIOR_BA is not set
-# CONFIG_IMQ_BEHAVIOR_BB is not set
-CONFIG_IMQ_NUM_DEVS=2
CONFIG_TUN=m
CONFIG_TAP=m
# CONFIG_TUN_VNET_CROSS_LE is not set
diff --git a/config/qos/makeqosscripts.pl b/config/qos/makeqosscripts.pl
index bc460db92..ff4cbcb12 100644
--- a/config/qos/makeqosscripts.pl
+++ b/config/qos/makeqosscripts.pl
@@ -35,30 +35,26 @@ my $errormessage = "";
my $c = "";
my $direntry = "";
my $classentry = "";
-my $subclassentry = "";
my $l7ruleentry = "";
my $portruleentry = "";
my $tosruleentry = "";
my @tmp = ();
my @classes = ();
-my @subclasses = ();
my @l7rules = ();
my @portrules = ();
my @tosrules = ();
my @tmpline = ();
my @classline = ();
-my @subclassline = ();
my @tosruleline = ();
my @l7ruleline = ();
my @portruleline = ();
my @proto = ();
my %selected= () ;
my $classfile = "/var/ipfire/qos/classes";
-my $subclassfile = "/var/ipfire/qos/subclasses";
my $level7file = "/var/ipfire/qos/level7config";
my $portfile = "/var/ipfire/qos/portconfig";
my $tosfile = "/var/ipfire/qos/tosconfig";
-my $fqcodel_options = "limit 800 quantum 500";
+my $fqcodel_options = "limit 10240 quantum 1514";
&General::readhash("${General::swroot}/ethernet/settings", %netsettings);
@@ -75,16 +71,12 @@ $qossettings{'RED_DEV'} = `cat /var/ipfire/red/iface`;
$qossettings{'IMQ_DEV'} = 'imq0';
$qossettings{'TOS'} = '';
$qossettings{'VALID'} = 'yes';
-$qossettings{'IMQ_MODE'} = 'PREROUTING';
&General::readhash("${General::swroot}/qos/settings", %qossettings);
open( FILE, "< $classfile" ) or die "Unable to read $classfile";
@classes = <FILE>;
close FILE;
-open( FILE, "< $subclassfile" ) or die "Unable to read $subclassfile";
-@subclasses = <FILE>;
-close FILE;
open( FILE, "< $level7file" ) or die "Unable to read $level7file";
@l7rules = <FILE>;
close FILE;
@@ -132,23 +124,15 @@ case "$1" in
tc -s class show dev $qossettings{'IMQ_DEV'}
exit 0
;;
- filter)
- echo "[filter]"
- tc -s filter show dev $qossettings{'RED_DEV'}
- tc -s filter show dev $qossettings{'IMQ_DEV'}
- exit 0
- ;;
iptables)
echo "[iptables]"
iptables -t mangle -n -L QOS-OUT -v -x 2> /dev/null
iptables -t mangle -n -L QOS-INC -v -x 2> /dev/null
- iptables -t mangle -n -L QOS-TOS -v -x 2> /dev/null
exit 0
;;
esac
$0 $1 qdisc
$0 $1 class
- $0 $1 filter
$0 $1 iptables
exit 0
;;
@@ -191,27 +175,6 @@ foreach $classentry (sort @classes)
print "\n";
}
}
-foreach $subclassentry (sort @subclasses) {
- @subclassline = split( /;/, $subclassentry );
- if ($qossettings{'RED_DEV'} eq $subclassline[0]) {
- $qossettings{'DEVICE'} = $subclassline[0];
- $qossettings{'CLASS'} = $subclassline[1];
- $qossettings{'SCLASS'} = $subclassline[2];
- $qossettings{'SPRIO'} = $subclassline[3];
- $qossettings{'SRATE'} = $subclassline[4];
- $qossettings{'SCEIL'} = $subclassline[5];
- $qossettings{'SBURST'} = $subclassline[6];
- $qossettings{'SCBURST'} = $subclassline[7];
- print "\ttc class add dev $qossettings{'DEVICE'} parent 1:$qossettings{'CLASS'} classid 1:$qossettings{'SCLASS'} htb rate $qossettings{'SRATE'}kbit ceil $qossettings{'SCEIL'}kbit prio $qossettings{'SPRIO'} ";
- if ($qossettings{'SBURST'} > 0) {
- print "burst $qossettings{'SBURST'}k ";
- }
- if (($qossettings{'SCBURST'} ne '') && ($qossettings{'SCBURST'} ne 0)) {
- print "cburst $qossettings{'CBURST'}k";
- }
- print "\n";
- }
-}
print "\n\t### ATTACH QDISC TO LEAF CLASSES\n";
foreach $classentry (sort @classes)
@@ -223,77 +186,38 @@ foreach $classentry (sort @classes)
print "\ttc qdisc add dev $qossettings{'DEVICE'} parent 1:$qossettings{'CLASS'} handle $qossettings{'CLASS'}: fq_codel $fqcodel_options\n";
}
}
-foreach $subclassentry (sort @subclasses) {
- @subclassline = split( /;/, $subclassentry );
- if ($qossettings{'RED_DEV'} eq $subclassline[0]) {
- $qossettings{'DEVICE'} = $subclassline[0];
- $qossettings{'SCLASS'} = $subclassline[2];
- print "\ttc qdisc add dev $qossettings{'DEVICE'} parent 1:$qossettings{'SCLASS'} handle $qossettings{'SCLASS'}: fq_codel $fqcodel_options\n";
- }
-}
-print "\n\t### FILTER TRAFFIC INTO CLASSES\n";
-foreach $classentry (sort @classes)
-{
- @classline = split( /;/, $classentry );
- if ($qossettings{'RED_DEV'} eq $classline[0]) {
- $qossettings{'DEVICE'} = $classline[0];
- $qossettings{'CLASS'} = $classline[1];
- print "\ttc filter add dev $qossettings{'DEVICE'} parent 1:0 prio 0 protocol ip handle $qossettings{'CLASS'} fw flowid 1:$qossettings{'CLASS'}\n";
- }
-}
-foreach $subclassentry (sort @subclasses) {
- @subclassline = split( /;/, $subclassentry );
- if ($qossettings{'RED_DEV'} eq $subclassline[0]) {
- $qossettings{'DEVICE'} = $subclassline[0];
- $qossettings{'CLASS'} = $subclassline[1];
- $qossettings{'SCLASS'} = $subclassline[2];
- print "\ttc filter add dev $qossettings{'DEVICE'} parent 1:0 prio 0 protocol ip handle $qossettings{'SCLASS'} fw flowid 1:$qossettings{'SCLASS'}\n";
- }
-}
print <<END
- ### add l7-filter to PREROUTING chain to see all traffic
- iptables -t mangle -A PREROUTING -m layer7 --l7proto unset
-
### ADD QOS-OUT CHAIN TO THE MANGLE TABLE IN IPTABLES
iptables -t mangle -N QOS-OUT
- iptables -t mangle -N QOS-TOS
iptables -t mangle -I POSTROUTING -o $qossettings{'RED_DEV'} -j QOS-OUT
- iptables -t mangle -A POSTROUTING -o $qossettings{'RED_DEV'} -j QOS-TOS
### Don't change mark on traffic for the ipsec tunnel
iptables -t mangle -A QOS-OUT -m mark --mark 50 -j RETURN
### MARK ACKs
- iptables -t mangle -A QOS-OUT -p tcp --tcp-flags SYN,RST SYN -j TOS --set-tos 4
- iptables -t mangle -A QOS-OUT -p tcp --tcp-flags SYN,RST SYN -j MARK --set-mark $qossettings{'ACK'}
+ iptables -t mangle -A QOS-OUT -p tcp --tcp-flags SYN,RST SYN -j CLASSIFY --set-class 1:$qossettings{'ACK'}
iptables -t mangle -A QOS-OUT -p tcp --tcp-flags SYN,RST SYN -j RETURN
- iptables -t mangle -A QOS-OUT -p icmp -m length --length 40:100 -j MARK --set-mark $qossettings{'ACK'}
+ iptables -t mangle -A QOS-OUT -p icmp -m length --length 40:100 -j CLASSIFY --set-class 1:$qossettings{'ACK'}
iptables -t mangle -A QOS-OUT -p icmp -m length --length 40:100 -j RETURN
- iptables -t mangle -A QOS-OUT -p tcp --syn -m length --length 40:68 -j TOS --set-tos 4
- iptables -t mangle -A QOS-OUT -p tcp --syn -m length --length 40:68 -j MARK --set-mark $qossettings{'ACK'}
+ iptables -t mangle -A QOS-OUT -p tcp --syn -m length --length 40:68 -j CLASSIFY --set-class 1:$qossettings{'ACK'}
iptables -t mangle -A QOS-OUT -p tcp --syn -m length --length 40:68 -j RETURN
- iptables -t mangle -A QOS-OUT -p tcp --tcp-flags ALL SYN,ACK -m length --length 40:68 -j TOS --set-tos 4
- iptables -t mangle -A QOS-OUT -p tcp --tcp-flags ALL SYN,ACK -m length --length 40:68 -j MARK --set-mark $qossettings{'ACK'}
+ iptables -t mangle -A QOS-OUT -p tcp --tcp-flags ALL SYN,ACK -m length --length 40:68 -j CLASSIFY --set-class 1:$qossettings{'ACK'}
iptables -t mangle -A QOS-OUT -p tcp --tcp-flags ALL SYN,ACK -m length --length 40:68 -j RETURN
- iptables -t mangle -A QOS-OUT -p tcp --tcp-flags ALL ACK -m length --length 40:100 -j TOS --set-tos 4
- iptables -t mangle -A QOS-OUT -p tcp --tcp-flags ALL ACK -m length --length 40:100 -j MARK --set-mark $qossettings{'ACK'}
+ iptables -t mangle -A QOS-OUT -p tcp --tcp-flags ALL ACK -m length --length 40:100 -j CLASSIFY --set-class 1:$qossettings{'ACK'}
iptables -t mangle -A QOS-OUT -p tcp --tcp-flags ALL ACK -m length --length 40:100 -j RETURN
- iptables -t mangle -A QOS-OUT -p tcp --tcp-flags ALL RST -j TOS --set-tos 4
- iptables -t mangle -A QOS-OUT -p tcp --tcp-flags ALL RST -j MARK --set-mark $qossettings{'ACK'}
+ iptables -t mangle -A QOS-OUT -p tcp --tcp-flags ALL RST -j CLASSIFY --set-class 1:$qossettings{'ACK'}
iptables -t mangle -A QOS-OUT -p tcp --tcp-flags ALL RST -j RETURN
- iptables -t mangle -A QOS-OUT -p tcp --tcp-flags ALL ACK,RST -j TOS --set-tos 4
- iptables -t mangle -A QOS-OUT -p tcp --tcp-flags ALL ACK,RST -j MARK --set-mark $qossettings{'ACK'}
+ iptables -t mangle -A QOS-OUT -p tcp --tcp-flags ALL ACK,RST -j CLASSIFY --set-class 1:$qossettings{'ACK'}
iptables -t mangle -A QOS-OUT -p tcp --tcp-flags ALL ACK,RST -j RETURN
- iptables -t mangle -A QOS-OUT -p tcp --tcp-flags ALL ACK,FIN -j TOS --set-tos 4
- iptables -t mangle -A QOS-OUT -p tcp --tcp-flags ALL ACK,FIN -j MARK --set-mark $qossettings{'ACK'}
+ iptables -t mangle -A QOS-OUT -p tcp --tcp-flags ALL ACK,FIN -j CLASSIFY --set-class 1:$qossettings{'ACK'}
iptables -t mangle -A QOS-OUT -p tcp --tcp-flags ALL ACK,FIN -j RETURN
### SET TOS
@@ -306,7 +230,7 @@ END
$qossettings{'TOS'} = abs $tosruleline[2] * 2;
if ( $tosruleline[1] eq $qossettings{'RED_DEV'} )
{
- print "\tiptables -t mangle -A QOS-OUT -m tos --tos $qossettings{'TOS'} -j MARK --set-mark $qossettings{'CLASS'}\n";
+ print "\tiptables -t mangle -A QOS-OUT -m tos --tos $qossettings{'TOS'} -j CLASSIFY --set-class 1:$qossettings{'CLASS'}\n";
print "\tiptables -t mangle -A QOS-OUT -m tos --tos $qossettings{'TOS'} -j RETURN\n";
}
}
@@ -341,7 +265,7 @@ print "\n\t### SET PORT-RULES\n";
if ($qossettings{'DPORT'} ne ''){
print "--dport $qossettings{'DPORT'} ";
}
- print "-j MARK --set-mark $qossettings{'CLASS'}\n";
+ print "-j CLASSIFY --set-class 1:$qossettings{'CLASS'}\n";
print "\tiptables -t mangle -A QOS-OUT ";
if ($qossettings{'QIP'} ne ''){
print "-s $qossettings{'QIP'} ";
@@ -362,7 +286,6 @@ print "\n\t### SET PORT-RULES\n";
print "-j RETURN\n\n";
}
}
-
print <<END
### SET LEVEL7-RULES
@@ -385,7 +308,7 @@ END
if ($qossettings{'DIP'} ne ''){
print "-d $qossettings{'DIP'} ";
}
- print "-m layer7 --l7dir /etc/l7-protocols/protocols --l7proto $qossettings{'L7PROT'} -j MARK --set-mark $qossettings{'CLASS'}\n";
+ print "-m layer7 --l7dir /etc/l7-protocols/protocols --l7proto $qossettings{'L7PROT'} -j CLASSIFY --set-class 1:$qossettings{'CLASS'}\n";
print "\tiptables -t mangle -A QOS-OUT ";
if ($qossettings{'QIP'} ne ''){
print "-s $qossettings{'QIP'} ";
@@ -400,20 +323,27 @@ END
print <<END
### REDUNDANT: SET ALL NONMARKED PACKETS TO DEFAULT CLASS
- iptables -t mangle -A QOS-OUT -m mark --mark 0 -j MARK --set-mark $qossettings{'DEFCLASS_OUT'}
+ iptables -t mangle -A QOS-OUT -j CLASSIFY --set-class 1:$qossettings{'DEFCLASS_OUT'}
###
### $qossettings{'IMQ_DEV'}
###
+ tc qdisc del dev $qossettings{'RED_DEV'} ingress >/dev/null 2>&1
+ tc qdisc add dev $qossettings{'RED_DEV'} handle ffff: ingress
+
### BRING UP $qossettings{'IMQ_DEV'}
- if [ `lsmod | grep -q ipt_IMQ` ]; then
- insmod ipt_IMQ
- sleep 2
+ if [ ! -d "/sys/class/net/$qossettings{'IMQ_DEV'}" ]; then
+ ip link add name $qossettings{'IMQ_DEV'} type ifb
fi
- modprobe imq numdevs=1 numqueues=$(grep -c "^processor" /proc/cpuinfo || echo 1)
+
+ #tc qdisc del dev $qossettings{'IMQ_DEV'} root
+ #tc qdisc del dev $qossettings{'IMQ_DEV'} ingress
ip link set $qossettings{'IMQ_DEV'} up
+ tc filter add dev $qossettings{'RED_DEV'} parent ffff: protocol all u32 match u32 0 0 \
+ action mirred egress redirect dev $qossettings{'IMQ_DEV'}
+
### ADD HTB QDISC FOR $qossettings{'IMQ_DEV'}
tc qdisc del dev $qossettings{'IMQ_DEV'} root >/dev/null 2>&1
tc qdisc add dev $qossettings{'IMQ_DEV'} root handle 2: htb default $qossettings{'DEFCLASS_INC'}
@@ -445,27 +375,6 @@ foreach $classentry (sort @classes)
print "\n";
}
}
-foreach $subclassentry (sort @subclasses) {
- @subclassline = split( /;/, $subclassentry );
- if ($qossettings{'IMQ_DEV'} eq $subclassline[0]) {
- $qossettings{'DEVICE'} = $subclassline[0];
- $qossettings{'CLASS'} = $subclassline[1];
- $qossettings{'SCLASS'} = $subclassline[2];
- $qossettings{'SPRIO'} = $subclassline[3];
- $qossettings{'SRATE'} = $subclassline[4];
- $qossettings{'SCEIL'} = $subclassline[5];
- $qossettings{'SBURST'} = $subclassline[6];
- $qossettings{'SCBURST'} = $subclassline[7];
- print "\ttc class add dev $qossettings{'DEVICE'} parent 2:$qossettings{'CLASS'} classid 2:$qossettings{'SCLASS'} htb rate $qossettings{'SRATE'}kbit ceil $qossettings{'SCEIL'}kbit prio $qossettings{'SPRIO'} ";
- if ($qossettings{'SBURST'} > 0) {
- print "burst $qossettings{'SBURST'}k ";
- }
- if (($qossettings{'SCBURST'} ne '') && ($qossettings{'SCBURST'} ne 0)) {
- print "cburst $qossettings{'CBURST'}k";
- }
- print "\n";
- }
-}
print "\n\t### ATTACH QDISC TO LEAF CLASSES\n";
foreach $classentry (sort @classes)
@@ -477,69 +386,15 @@ foreach $classentry (sort @classes)
print "\ttc qdisc add dev $qossettings{'DEVICE'} parent 2:$qossettings{'CLASS'} handle $qossettings{'CLASS'}: fq_codel $fqcodel_options\n";
}
}
-foreach $subclassentry (sort @subclasses) {
- @subclassline = split( /;/, $subclassentry );
- if ($qossettings{'IMQ_DEV'} eq $subclassline[0]) {
- $qossettings{'DEVICE'} = $subclassline[0];
- $qossettings{'SCLASS'} = $subclassline[2];
- print "\ttc qdisc add dev $qossettings{'DEVICE'} parent 2:$qossettings{'SCLASS'} handle $qossettings{'SCLASS'}: fq_codel $fqcodel_options\n";
- }
-}
-print "\n\t### FILTER TRAFFIC INTO CLASSES\n";
-foreach $classentry (sort @classes)
-{
- @classline = split( /;/, $classentry );
- if ($qossettings{'IMQ_DEV'} eq $classline[0]) {
- $qossettings{'DEVICE'} = $classline[0];
- $qossettings{'CLASS'} = $classline[1];
- print "\ttc filter add dev $qossettings{'DEVICE'} parent 2:0 prio 0 protocol ip handle $qossettings{'CLASS'} fw flowid 2:$qossettings{'CLASS'}\n";
- }
-}
-foreach $subclassentry (sort @subclasses) {
- @subclassline = split( /;/, $subclassentry );
- if ($qossettings{'IMQ_DEV'} eq $subclassline[0]) {
- $qossettings{'DEVICE'} = $subclassline[0];
- $qossettings{'CLASS'} = $subclassline[1];
- $qossettings{'SCLASS'} = $subclassline[2];
- print "\ttc filter add dev $qossettings{'DEVICE'} parent 2:0 prio 0 protocol ip handle $qossettings{'SCLASS'} fw flowid 2:$qossettings{'SCLASS'}\n";
- }
-}
-
-if ( $qossettings{'IMQ_MODE'} eq 'POSTROUTING' )
-{
-print <<END
-
- ### ADD QOS-INC CHAIN TO THE MANGLE TABLE IN IPTABLES
- iptables -t mangle -N QOS-INC
- iptables -t mangle -A POSTROUTING -i $qossettings{'RED_DEV'} -p ah -j RETURN
- iptables -t mangle -A POSTROUTING -i $qossettings{'RED_DEV'} -p esp -j RETURN
- iptables -t mangle -A POSTROUTING -i $qossettings{'RED_DEV'} -p ip -j RETURN
- iptables -t mangle -A POSTROUTING -m mark ! --mark 0 ! -o $qossettings{'RED_DEV'} -j IMQ --todev 0
- iptables -t mangle -I FORWARD -i $qossettings{'RED_DEV'} -j QOS-INC
- iptables -t mangle -A FORWARD -i $qossettings{'RED_DEV'} -j QOS-TOS
-
- ### SET TOS
-END
-;
-}
-else
-{
print <<END
### ADD QOS-INC CHAIN TO THE MANGLE TABLE IN IPTABLES
iptables -t mangle -N QOS-INC
- iptables -t mangle -A PREROUTING -i $qossettings{'RED_DEV'} -p ah -j RETURN
- iptables -t mangle -A PREROUTING -i $qossettings{'RED_DEV'} -p esp -j RETURN
- iptables -t mangle -A PREROUTING -i $qossettings{'RED_DEV'} -p ip -j RETURN
- iptables -t mangle -A PREROUTING -i $qossettings{'RED_DEV'} -j IMQ --todev 0
- iptables -t mangle -I PREROUTING -i $qossettings{'RED_DEV'} -j QOS-INC
- iptables -t mangle -A PREROUTING -i $qossettings{'RED_DEV'} -j QOS-TOS
+ iptables -t mangle -A FORWARD -i $qossettings{'RED_DEV'} -j QOS-INC
### SET TOS
END
;
-}
-
foreach $tosruleentry (sort @tosrules)
{
@tosruleline = split( /;/, $tosruleentry );
@@ -547,7 +402,7 @@ END
$qossettings{'TOS'} = abs $tosruleline[2] * 2;
if ( $tosruleline[1] eq $qossettings{'IMQ_DEV'} )
{
- print "\tiptables -t mangle -A QOS-INC -m tos --tos $qossettings{'TOS'} -j MARK --set-mark $qossettings{'CLASS'}\n";
+ print "\tiptables -t mangle -A QOS-INC -m tos --tos $qossettings{'TOS'} -j CLASSIFY --set-class 2:$qossettings{'CLASS'}\n";
print "\tiptables -t mangle -A QOS-INC -m tos --tos $qossettings{'TOS'} -j RETURN\n";
}
@@ -583,7 +438,7 @@ print "\n\t### SET PORT-RULES\n";
if ($qossettings{'DPORT'} ne ''){
print "--dport $qossettings{'DPORT'} ";
}
- print "-j MARK --set-mark $qossettings{'CLASS'}\n";
+ print "-j CLASSIFY --set-class 2:$qossettings{'CLASS'}\n";
print "\tiptables -t mangle -A QOS-INC ";
if ($qossettings{'QIP'} ne ''){
print "-s $qossettings{'QIP'} ";
@@ -627,7 +482,7 @@ END
if ($qossettings{'DIP'} ne ''){
print "-d $qossettings{'DIP'} ";
}
- print "-m layer7 --l7dir /etc/l7-protocols/protocols --l7proto $qossettings{'L7PROT'} -j MARK --set-mark $qossettings{'CLASS'}\n";
+ print "-m layer7 --l7dir /etc/l7-protocols/protocols --l7proto $qossettings{'L7PROT'} -j CLASSIFY --set-class 2:$qossettings{'CLASS'}\n";
print "\tiptables -t mangle -A QOS-INC ";
if ($qossettings{'QIP'} ne ''){
print "-s $qossettings{'QIP'} ";
@@ -641,41 +496,14 @@ END
print <<END
### REDUNDANT: SET ALL NONMARKED PACKETS TO DEFAULT CLASS
- iptables -t mangle -A QOS-INC -m mark --mark 0 -j MARK --set-mark $qossettings{'DEFCLASS_INC'}
-
- ### SETTING TOS BITS
-END
-;
- foreach $classentry (sort @classes)
- {
- @classline = split( /;/, $classentry );
- $qossettings{'CLASS'} = $classline[1];
- $qossettings{'TOS'} = abs $classline[7] * 2;
- if ($qossettings{'TOS'} ne "0") {
- print "\tiptables -t mangle -A QOS-TOS -m mark --mark $qossettings{'CLASS'} -j TOS --set-tos $qossettings{'TOS'}\n";
- print "\tiptables -t mangle -A QOS-TOS -m mark --mark $qossettings{'CLASS'} -j RETURN\n";
- }
- }
- foreach $subclassentry (sort @subclasses)
- {
- @subclassline = split( /;/, $subclassentry );
- $qossettings{'SUBCLASS'} = $subclassline[1];
- $qossettings{'TOS'} = $subclassline[8];
- $qossettings{'TOS'} = abs $qossettings{'TOS'} * 2;
- if ($qossettings{'TOS'} ne "0") {
- print "\tiptables -t mangle -A QOS-TOS -m mark --mark $qossettings{'SUBCLASS'} -j TOS --set-tos $qossettings{'TOS'}\n";
- print "\tiptables -t mangle -A QOS-TOS -m mark --mark $qossettings{'SUBCLASS'} -j RETURN\n";
- }
- }
-
-print <<END
+ iptables -t mangle -A QOS-INC -j CLASSIFY --set-class 2:$qossettings{'DEFCLASS_INC'}
## STARTING COLLECTOR
- ( sleep 10 && /usr/local/bin/qosd $qossettings{'RED_DEV'} >/dev/null 2>&1) &
- ( sleep 10 && /usr/local/bin/qosd $qossettings{'IMQ_DEV'} >/dev/null 2>&1) &
+ /usr/local/bin/qosd $qossettings{'RED_DEV'} >/dev/null 2>&1
+ /usr/local/bin/qosd $qossettings{'IMQ_DEV'} >/dev/null 2>&1
for i in $(ls $RRDLOG/class_*.rrd); do
- rrdtool update $i $(date +%s):
+ rrdtool update $i $(date +%s): 2>/dev/null
done
echo "Quality of Service was successfully started!"
@@ -684,38 +512,25 @@ print <<END
clear|stop)
### RESET EVERYTHING TO A KNOWN STATE
killall qosd >/dev/null 2>&1
- (sleep 3 && killall -9 qosd &>/dev/null) &
+
# DELETE QDISCS
tc qdisc del dev $qossettings{'RED_DEV'} root >/dev/null 2>&1
+ tc qdisc del dev $qossettings{'RED_DEV'} ingress >/dev/null 2>&1
tc qdisc add root dev $qossettings{'RED_DEV'} fq_codel >/dev/null 2>&1
tc qdisc del dev $qossettings{'IMQ_DEV'} root >/dev/null 2>&1
+ tc qdisc del dev $qossettings{'IMQ_DEV'} ingress >/dev/null 2>&1
tc qdisc add root dev $qossettings{'IMQ_DEV'} fq_codel >/dev/null 2>&1
# STOP IMQ-DEVICE
ip link set $qossettings{'IMQ_DEV'} down >/dev/null 2>&1
- iptables -t mangle --delete POSTROUTING -i $qossettings{'RED_DEV'} -p ah -j RETURN >/dev/null 2>&1
- iptables -t mangle --delete POSTROUTING -i $qossettings{'RED_DEV'} -p esp -j RETURN >/dev/null 2>&1
- iptables -t mangle --delete POSTROUTING -i $qossettings{'RED_DEV'} -p ip -j RETURN >/dev/null 2>&1
- iptables -t mangle --delete PREROUTING -i $qossettings{'RED_DEV'} -p ah -j RETURN >/dev/null 2>&1
- iptables -t mangle --delete PREROUTING -i $qossettings{'RED_DEV'} -p esp -j RETURN >/dev/null 2>&1
- iptables -t mangle --delete PREROUTING -i $qossettings{'RED_DEV'} -p ip -j RETURN >/dev/null 2>&1
- iptables -t mangle --delete POSTROUTING -m mark ! --mark 0 ! -o $qossettings{'RED_DEV'} -j IMQ --todev 0 >/dev/null 2>&1
- iptables -t mangle --delete PREROUTING -i $qossettings{'RED_DEV'} -j IMQ --todev 0 >/dev/null 2>&1
- # rmmod imq # this crash on 2.6.25.xx
+ ip link del $qossettings{'IMQ_DEV'} >/dev/null 2>&1
+
# REMOVE & FLUSH CHAINS
iptables -t mangle --delete POSTROUTING -o $qossettings{'RED_DEV'} -j QOS-OUT >/dev/null 2>&1
- iptables -t mangle --delete POSTROUTING -o $qossettings{'RED_DEV'} -j QOS-TOS >/dev/null 2>&1
+ iptables -t mangle --delete FORWARD -i $qossettings{'RED_DEV'} -j QOS-INC >/dev/null 2>&1
iptables -t mangle --flush QOS-OUT >/dev/null 2>&1
iptables -t mangle --delete-chain QOS-OUT >/dev/null 2>&1
- iptables -t mangle --delete FORWARD -i $qossettings{'RED_DEV'} -j QOS-INC >/dev/null 2>&1
- iptables -t mangle --delete FORWARD -i $qossettings{'RED_DEV'} -j QOS-TOS >/dev/null 2>&1
- iptables -t mangle --delete PREROUTING -i $qossettings{'RED_DEV'} -j QOS-INC >/dev/null 2>&1
- iptables -t mangle --delete PREROUTING -i $qossettings{'RED_DEV'} -j QOS-TOS >/dev/null 2>&1
iptables -t mangle --flush QOS-INC >/dev/null 2>&1
iptables -t mangle --delete-chain QOS-INC >/dev/null 2>&1
- iptables -t mangle --flush QOS-TOS >/dev/null 2>&1
- iptables -t mangle --delete-chain QOS-TOS >/dev/null 2>&1
- # remove l7-filter
- iptables -t mangle --delete PREROUTING -m layer7 --l7proto unset
rmmod sch_htb >/dev/null 2>&1
diff --git a/config/rootfiles/common/aarch64/linux b/config/rootfiles/common/aarch64/linux
index 0451cadcd..d8e93542d 100644
--- a/config/rootfiles/common/aarch64/linux
+++ b/config/rootfiles/common/aarch64/linux
@@ -7648,12 +7648,6 @@ etc/modprobe.d/ipv6.conf
#lib/modules/KVER-ipfire/build/include/config/illegal
#lib/modules/KVER-ipfire/build/include/config/illegal/pointer
#lib/modules/KVER-ipfire/build/include/config/illegal/pointer/value.h
-#lib/modules/KVER-ipfire/build/include/config/imq
-#lib/modules/KVER-ipfire/build/include/config/imq.h
-#lib/modules/KVER-ipfire/build/include/config/imq/behavior
-#lib/modules/KVER-ipfire/build/include/config/imq/behavior/ab.h
-#lib/modules/KVER-ipfire/build/include/config/imq/num
-#lib/modules/KVER-ipfire/build/include/config/imq/num/devs.h
#lib/modules/KVER-ipfire/build/include/config/inet
#lib/modules/KVER-ipfire/build/include/config/inet.h
#lib/modules/KVER-ipfire/build/include/config/inet/ah.h
@@ -8793,7 +8787,6 @@ etc/modprobe.d/ipv6.conf
#lib/modules/KVER-ipfire/build/include/config/netfilter/xt/target/hl.h
#lib/modules/KVER-ipfire/build/include/config/netfilter/xt/target/hmark.h
#lib/modules/KVER-ipfire/build/include/config/netfilter/xt/target/idletimer.h
-#lib/modules/KVER-ipfire/build/include/config/netfilter/xt/target/imq.h
#lib/modules/KVER-ipfire/build/include/config/netfilter/xt/target/led.h
#lib/modules/KVER-ipfire/build/include/config/netfilter/xt/target/log.h
#lib/modules/KVER-ipfire/build/include/config/netfilter/xt/target/mark.h
@@ -12157,7 +12150,6 @@ etc/modprobe.d/ipv6.conf
#lib/modules/KVER-ipfire/build/include/linux/iio/triggered_event.h
#lib/modules/KVER-ipfire/build/include/linux/iio/types.h
#lib/modules/KVER-ipfire/build/include/linux/ima.h
-#lib/modules/KVER-ipfire/build/include/linux/imq.h
#lib/modules/KVER-ipfire/build/include/linux/imx-media.h
#lib/modules/KVER-ipfire/build/include/linux/in.h
#lib/modules/KVER-ipfire/build/include/linux/in6.h
@@ -12770,7 +12762,6 @@ etc/modprobe.d/ipv6.conf
#lib/modules/KVER-ipfire/build/include/linux/netfilter/nfnetlink.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter/nfnetlink_acct.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter/x_tables.h
-#lib/modules/KVER-ipfire/build/include/linux/netfilter/xt_IMQ.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter/xt_hashlimit.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter/xt_physdev.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter_arp
@@ -12784,11 +12775,9 @@ etc/modprobe.d/ipv6.conf
#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv4
#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv4.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv4/ip_tables.h
-#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv4/ipt_IMQ.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv6
#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv6.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv6/ip6_tables.h
-#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv6/ip6t_IMQ.h
#lib/modules/KVER-ipfire/build/include/linux/netlink.h
#lib/modules/KVER-ipfire/build/include/linux/netpoll.h
#lib/modules/KVER-ipfire/build/include/linux/nfs.h
@@ -18482,7 +18471,6 @@ lib/modules/KVER-ipfire/kernel
#lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/wiznet/w5300.ko.xz
#lib/modules/KVER-ipfire/kernel/drivers/net/geneve.ko.xz
#lib/modules/KVER-ipfire/kernel/drivers/net/ifb.ko.xz
-#lib/modules/KVER-ipfire/kernel/drivers/net/imq.ko.xz
#lib/modules/KVER-ipfire/kernel/drivers/net/ipvlan
#lib/modules/KVER-ipfire/kernel/drivers/net/ipvlan/ipvlan.ko.xz
#lib/modules/KVER-ipfire/kernel/drivers/net/ipvlan/ipvtap.ko.xz
@@ -19450,7 +19438,6 @@ lib/modules/KVER-ipfire/kernel
#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_HL.ko.xz
#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_HMARK.ko.xz
#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_IDLETIMER.ko.xz
-#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_IMQ.ko.xz
#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_LED.ko.xz
#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_LOG.ko.xz
#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_NETMAP.ko.xz
diff --git a/config/rootfiles/common/armv5tel/linux-kirkwood b/config/rootfiles/common/armv5tel/linux-kirkwood
index 78d0050de..2269896d8 100644
--- a/config/rootfiles/common/armv5tel/linux-kirkwood
+++ b/config/rootfiles/common/armv5tel/linux-kirkwood
@@ -7370,12 +7370,6 @@ boot/vmlinuz-KVER-ipfire-kirkwood
#lib/modules/KVER-ipfire-kirkwood/build/include/config/iio/kfifo
#lib/modules/KVER-ipfire-kirkwood/build/include/config/iio/kfifo/buf.h
#lib/modules/KVER-ipfire-kirkwood/build/include/config/iio/trigger.h
-#lib/modules/KVER-ipfire-kirkwood/build/include/config/imq
-#lib/modules/KVER-ipfire-kirkwood/build/include/config/imq.h
-#lib/modules/KVER-ipfire-kirkwood/build/include/config/imq/behavior
-#lib/modules/KVER-ipfire-kirkwood/build/include/config/imq/behavior/ab.h
-#lib/modules/KVER-ipfire-kirkwood/build/include/config/imq/num
-#lib/modules/KVER-ipfire-kirkwood/build/include/config/imq/num/devs.h
#lib/modules/KVER-ipfire-kirkwood/build/include/config/inet
#lib/modules/KVER-ipfire-kirkwood/build/include/config/inet.h
#lib/modules/KVER-ipfire-kirkwood/build/include/config/inet/ah.h
@@ -8455,7 +8449,6 @@ boot/vmlinuz-KVER-ipfire-kirkwood
#lib/modules/KVER-ipfire-kirkwood/build/include/config/netfilter/xt/target/hl.h
#lib/modules/KVER-ipfire-kirkwood/build/include/config/netfilter/xt/target/hmark.h
#lib/modules/KVER-ipfire-kirkwood/build/include/config/netfilter/xt/target/idletimer.h
-#lib/modules/KVER-ipfire-kirkwood/build/include/config/netfilter/xt/target/imq.h
#lib/modules/KVER-ipfire-kirkwood/build/include/config/netfilter/xt/target/led.h
#lib/modules/KVER-ipfire-kirkwood/build/include/config/netfilter/xt/target/log.h
#lib/modules/KVER-ipfire-kirkwood/build/include/config/netfilter/xt/target/mark.h
@@ -11454,7 +11447,6 @@ boot/vmlinuz-KVER-ipfire-kirkwood
#lib/modules/KVER-ipfire-kirkwood/build/include/linux/iio/triggered_event.h
#lib/modules/KVER-ipfire-kirkwood/build/include/linux/iio/types.h
#lib/modules/KVER-ipfire-kirkwood/build/include/linux/ima.h
-#lib/modules/KVER-ipfire-kirkwood/build/include/linux/imq.h
#lib/modules/KVER-ipfire-kirkwood/build/include/linux/imx-media.h
#lib/modules/KVER-ipfire-kirkwood/build/include/linux/in.h
#lib/modules/KVER-ipfire-kirkwood/build/include/linux/in6.h
@@ -12067,7 +12059,6 @@ boot/vmlinuz-KVER-ipfire-kirkwood
#lib/modules/KVER-ipfire-kirkwood/build/include/linux/netfilter/nfnetlink.h
#lib/modules/KVER-ipfire-kirkwood/build/include/linux/netfilter/nfnetlink_acct.h
#lib/modules/KVER-ipfire-kirkwood/build/include/linux/netfilter/x_tables.h
-#lib/modules/KVER-ipfire-kirkwood/build/include/linux/netfilter/xt_IMQ.h
#lib/modules/KVER-ipfire-kirkwood/build/include/linux/netfilter/xt_hashlimit.h
#lib/modules/KVER-ipfire-kirkwood/build/include/linux/netfilter/xt_physdev.h
#lib/modules/KVER-ipfire-kirkwood/build/include/linux/netfilter_arp
@@ -12081,11 +12072,9 @@ boot/vmlinuz-KVER-ipfire-kirkwood
#lib/modules/KVER-ipfire-kirkwood/build/include/linux/netfilter_ipv4
#lib/modules/KVER-ipfire-kirkwood/build/include/linux/netfilter_ipv4.h
#lib/modules/KVER-ipfire-kirkwood/build/include/linux/netfilter_ipv4/ip_tables.h
-#lib/modules/KVER-ipfire-kirkwood/build/include/linux/netfilter_ipv4/ipt_IMQ.h
#lib/modules/KVER-ipfire-kirkwood/build/include/linux/netfilter_ipv6
#lib/modules/KVER-ipfire-kirkwood/build/include/linux/netfilter_ipv6.h
#lib/modules/KVER-ipfire-kirkwood/build/include/linux/netfilter_ipv6/ip6_tables.h
-#lib/modules/KVER-ipfire-kirkwood/build/include/linux/netfilter_ipv6/ip6t_IMQ.h
#lib/modules/KVER-ipfire-kirkwood/build/include/linux/netlink.h
#lib/modules/KVER-ipfire-kirkwood/build/include/linux/netpoll.h
#lib/modules/KVER-ipfire-kirkwood/build/include/linux/nfs.h
@@ -17461,7 +17450,6 @@ lib/modules/KVER-ipfire-kirkwood/kernel
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/rocker/rocker.ko.xz
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/geneve.ko.xz
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ifb.ko.xz
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/imq.ko.xz
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ipvlan
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ipvlan/ipvlan.ko.xz
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ipvlan/ipvtap.ko.xz
@@ -18392,7 +18380,6 @@ lib/modules/KVER-ipfire-kirkwood/kernel
#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_HL.ko.xz
#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_HMARK.ko.xz
#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_IDLETIMER.ko.xz
-#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_IMQ.ko.xz
#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_LED.ko.xz
#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_LOG.ko.xz
#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_NETMAP.ko.xz
diff --git a/config/rootfiles/common/armv5tel/linux-multi b/config/rootfiles/common/armv5tel/linux-multi
index 08a5f601c..1e7a090d9 100644
--- a/config/rootfiles/common/armv5tel/linux-multi
+++ b/config/rootfiles/common/armv5tel/linux-multi
@@ -8353,12 +8353,6 @@ etc/modprobe.d/ipv6.conf
#lib/modules/KVER-ipfire-multi/build/include/config/iio/kfifo
#lib/modules/KVER-ipfire-multi/build/include/config/iio/kfifo/buf.h
#lib/modules/KVER-ipfire-multi/build/include/config/iio/trigger.h
-#lib/modules/KVER-ipfire-multi/build/include/config/imq
-#lib/modules/KVER-ipfire-multi/build/include/config/imq.h
-#lib/modules/KVER-ipfire-multi/build/include/config/imq/behavior
-#lib/modules/KVER-ipfire-multi/build/include/config/imq/behavior/ab.h
-#lib/modules/KVER-ipfire-multi/build/include/config/imq/num
-#lib/modules/KVER-ipfire-multi/build/include/config/imq/num/devs.h
#lib/modules/KVER-ipfire-multi/build/include/config/imx
#lib/modules/KVER-ipfire-multi/build/include/config/imx/dma.h
#lib/modules/KVER-ipfire-multi/build/include/config/imx/gpcv2.h
@@ -9588,7 +9582,6 @@ etc/modprobe.d/ipv6.conf
#lib/modules/KVER-ipfire-multi/build/include/config/netfilter/xt/target/hl.h
#lib/modules/KVER-ipfire-multi/build/include/config/netfilter/xt/target/hmark.h
#lib/modules/KVER-ipfire-multi/build/include/config/netfilter/xt/target/idletimer.h
-#lib/modules/KVER-ipfire-multi/build/include/config/netfilter/xt/target/imq.h
#lib/modules/KVER-ipfire-multi/build/include/config/netfilter/xt/target/led.h
#lib/modules/KVER-ipfire-multi/build/include/config/netfilter/xt/target/log.h
#lib/modules/KVER-ipfire-multi/build/include/config/netfilter/xt/target/mark.h
@@ -13192,7 +13185,6 @@ etc/modprobe.d/ipv6.conf
#lib/modules/KVER-ipfire-multi/build/include/linux/iio/triggered_event.h
#lib/modules/KVER-ipfire-multi/build/include/linux/iio/types.h
#lib/modules/KVER-ipfire-multi/build/include/linux/ima.h
-#lib/modules/KVER-ipfire-multi/build/include/linux/imq.h
#lib/modules/KVER-ipfire-multi/build/include/linux/imx-media.h
#lib/modules/KVER-ipfire-multi/build/include/linux/in.h
#lib/modules/KVER-ipfire-multi/build/include/linux/in6.h
@@ -13805,7 +13797,6 @@ etc/modprobe.d/ipv6.conf
#lib/modules/KVER-ipfire-multi/build/include/linux/netfilter/nfnetlink.h
#lib/modules/KVER-ipfire-multi/build/include/linux/netfilter/nfnetlink_acct.h
#lib/modules/KVER-ipfire-multi/build/include/linux/netfilter/x_tables.h
-#lib/modules/KVER-ipfire-multi/build/include/linux/netfilter/xt_IMQ.h
#lib/modules/KVER-ipfire-multi/build/include/linux/netfilter/xt_hashlimit.h
#lib/modules/KVER-ipfire-multi/build/include/linux/netfilter/xt_physdev.h
#lib/modules/KVER-ipfire-multi/build/include/linux/netfilter_arp
@@ -13819,11 +13810,9 @@ etc/modprobe.d/ipv6.conf
#lib/modules/KVER-ipfire-multi/build/include/linux/netfilter_ipv4
#lib/modules/KVER-ipfire-multi/build/include/linux/netfilter_ipv4.h
#lib/modules/KVER-ipfire-multi/build/include/linux/netfilter_ipv4/ip_tables.h
-#lib/modules/KVER-ipfire-multi/build/include/linux/netfilter_ipv4/ipt_IMQ.h
#lib/modules/KVER-ipfire-multi/build/include/linux/netfilter_ipv6
#lib/modules/KVER-ipfire-multi/build/include/linux/netfilter_ipv6.h
#lib/modules/KVER-ipfire-multi/build/include/linux/netfilter_ipv6/ip6_tables.h
-#lib/modules/KVER-ipfire-multi/build/include/linux/netfilter_ipv6/ip6t_IMQ.h
#lib/modules/KVER-ipfire-multi/build/include/linux/netlink.h
#lib/modules/KVER-ipfire-multi/build/include/linux/netpoll.h
#lib/modules/KVER-ipfire-multi/build/include/linux/nfs.h
@@ -19598,7 +19587,6 @@ lib/modules/KVER-ipfire-multi/kernel
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/wiznet/w5300.ko.xz
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/geneve.ko.xz
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ifb.ko.xz
-#lib/modules/KVER-ipfire-multi/kernel/drivers/net/imq.ko.xz
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ipvlan
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ipvlan/ipvlan.ko.xz
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ipvlan/ipvtap.ko.xz
@@ -20588,7 +20576,6 @@ lib/modules/KVER-ipfire-multi/kernel
#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_HL.ko.xz
#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_HMARK.ko.xz
#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_IDLETIMER.ko.xz
-#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_IMQ.ko.xz
#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_LED.ko.xz
#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_LOG.ko.xz
#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_NETMAP.ko.xz
diff --git a/config/rootfiles/common/bash b/config/rootfiles/common/bash
index 84f587f3c..27344c31b 100644
--- a/config/rootfiles/common/bash
+++ b/config/rootfiles/common/bash
@@ -1,6 +1,9 @@
bin/sh
bin/bash
#bin/bashbug
+#usr/lib/bash
+#usr/lib/pkgconfig/bash.pc
+#usr/include/bash
#usr/share/doc/bash
#usr/share/doc/bash/CHANGES
#usr/share/doc/bash/COMPAT
@@ -39,8 +42,10 @@ bin/bash
#usr/share/locale/it/LC_MESSAGES/bash.mo
#usr/share/locale/ja/LC_MESSAGES/bash.mo
#usr/share/locale/lt/LC_MESSAGES/bash.mo
+#usr/share/locale/nb/LC_MESSAGES/bash.mo
#usr/share/locale/nl/LC_MESSAGES/bash.mo
#usr/share/locale/pl/LC_MESSAGES/bash.mo
+#usr/share/locale/pt/LC_MESSAGES/bash.mo
#usr/share/locale/pt_BR/LC_MESSAGES/bash.mo
#usr/share/locale/ro/LC_MESSAGES/bash.mo
#usr/share/locale/ru/LC_MESSAGES/bash.mo
diff --git a/config/rootfiles/common/i586/linux b/config/rootfiles/common/i586/linux
index 1a1ca83a7..1fe01233f 100644
--- a/config/rootfiles/common/i586/linux
+++ b/config/rootfiles/common/i586/linux
@@ -8187,12 +8187,6 @@ etc/modprobe.d/ipv6.conf
#lib/modules/KVER-ipfire/build/include/config/illegal
#lib/modules/KVER-ipfire/build/include/config/illegal/pointer
#lib/modules/KVER-ipfire/build/include/config/illegal/pointer/value.h
-#lib/modules/KVER-ipfire/build/include/config/imq
-#lib/modules/KVER-ipfire/build/include/config/imq.h
-#lib/modules/KVER-ipfire/build/include/config/imq/behavior
-#lib/modules/KVER-ipfire/build/include/config/imq/behavior/ab.h
-#lib/modules/KVER-ipfire/build/include/config/imq/num
-#lib/modules/KVER-ipfire/build/include/config/imq/num/devs.h
#lib/modules/KVER-ipfire/build/include/config/inet
#lib/modules/KVER-ipfire/build/include/config/inet.h
#lib/modules/KVER-ipfire/build/include/config/inet/ah.h
@@ -9472,7 +9466,6 @@ etc/modprobe.d/ipv6.conf
#lib/modules/KVER-ipfire/build/include/config/netfilter/xt/target/hl.h
#lib/modules/KVER-ipfire/build/include/config/netfilter/xt/target/hmark.h
#lib/modules/KVER-ipfire/build/include/config/netfilter/xt/target/idletimer.h
-#lib/modules/KVER-ipfire/build/include/config/netfilter/xt/target/imq.h
#lib/modules/KVER-ipfire/build/include/config/netfilter/xt/target/led.h
#lib/modules/KVER-ipfire/build/include/config/netfilter/xt/target/log.h
#lib/modules/KVER-ipfire/build/include/config/netfilter/xt/target/mark.h
@@ -13456,7 +13449,6 @@ etc/modprobe.d/ipv6.conf
#lib/modules/KVER-ipfire/build/include/linux/iio/triggered_event.h
#lib/modules/KVER-ipfire/build/include/linux/iio/types.h
#lib/modules/KVER-ipfire/build/include/linux/ima.h
-#lib/modules/KVER-ipfire/build/include/linux/imq.h
#lib/modules/KVER-ipfire/build/include/linux/imx-media.h
#lib/modules/KVER-ipfire/build/include/linux/in.h
#lib/modules/KVER-ipfire/build/include/linux/in6.h
@@ -14069,7 +14061,6 @@ etc/modprobe.d/ipv6.conf
#lib/modules/KVER-ipfire/build/include/linux/netfilter/nfnetlink.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter/nfnetlink_acct.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter/x_tables.h
-#lib/modules/KVER-ipfire/build/include/linux/netfilter/xt_IMQ.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter/xt_hashlimit.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter/xt_physdev.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter_arp
@@ -14083,11 +14074,9 @@ etc/modprobe.d/ipv6.conf
#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv4
#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv4.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv4/ip_tables.h
-#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv4/ipt_IMQ.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv6
#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv6.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv6/ip6_tables.h
-#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv6/ip6t_IMQ.h
#lib/modules/KVER-ipfire/build/include/linux/netlink.h
#lib/modules/KVER-ipfire/build/include/linux/netpoll.h
#lib/modules/KVER-ipfire/build/include/linux/nfs.h
@@ -20196,7 +20185,6 @@ lib/modules/KVER-ipfire/kernel
#lib/modules/KVER-ipfire/kernel/drivers/net/hyperv
#lib/modules/KVER-ipfire/kernel/drivers/net/hyperv/hv_netvsc.ko.xz
#lib/modules/KVER-ipfire/kernel/drivers/net/ifb.ko.xz
-#lib/modules/KVER-ipfire/kernel/drivers/net/imq.ko.xz
#lib/modules/KVER-ipfire/kernel/drivers/net/ipvlan
#lib/modules/KVER-ipfire/kernel/drivers/net/ipvlan/ipvlan.ko.xz
#lib/modules/KVER-ipfire/kernel/drivers/net/ipvlan/ipvtap.ko.xz
@@ -21531,7 +21519,6 @@ lib/modules/KVER-ipfire/kernel
#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_HL.ko.xz
#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_HMARK.ko.xz
#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_IDLETIMER.ko.xz
-#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_IMQ.ko.xz
#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_LED.ko.xz
#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_LOG.ko.xz
#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_NETMAP.ko.xz
diff --git a/config/rootfiles/common/iptables b/config/rootfiles/common/iptables
index 389518646..0f8f1cf8c 100644
--- a/config/rootfiles/common/iptables
+++ b/config/rootfiles/common/iptables
@@ -64,7 +64,6 @@ lib/xtables/libxt_CT.so
lib/xtables/libxt_DSCP.so
lib/xtables/libxt_HMARK.so
lib/xtables/libxt_IDLETIMER.so
-lib/xtables/libxt_IMQ.so
lib/xtables/libxt_LED.so
lib/xtables/libxt_MARK.so
lib/xtables/libxt_NFLOG.so
diff --git a/config/rootfiles/common/readline b/config/rootfiles/common/readline
index b2ac26dd4..3fecb6805 100644
--- a/config/rootfiles/common/readline
+++ b/config/rootfiles/common/readline
@@ -8,11 +8,11 @@
#usr/include/readline/rltypedefs.h
#usr/include/readline/tilde.h
#usr/lib/libhistory.so
-usr/lib/libhistory.so.6
-usr/lib/libhistory.so.6.3
+usr/lib/libhistory.so.8
+usr/lib/libhistory.so.8.0
#usr/lib/libreadline.so
-usr/lib/libreadline.so.6
-usr/lib/libreadline.so.6.3
+usr/lib/libreadline.so.8
+usr/lib/libreadline.so.8.0
#usr/share/doc/readline
#usr/share/doc/readline/CHANGES
#usr/share/doc/readline/INSTALL
diff --git a/config/rootfiles/common/x86_64/linux b/config/rootfiles/common/x86_64/linux
index 755d7627a..68f907faa 100644
--- a/config/rootfiles/common/x86_64/linux
+++ b/config/rootfiles/common/x86_64/linux
@@ -8265,12 +8265,6 @@ etc/modprobe.d/ipv6.conf
#lib/modules/KVER-ipfire/build/include/config/illegal
#lib/modules/KVER-ipfire/build/include/config/illegal/pointer
#lib/modules/KVER-ipfire/build/include/config/illegal/pointer/value.h
-#lib/modules/KVER-ipfire/build/include/config/imq
-#lib/modules/KVER-ipfire/build/include/config/imq.h
-#lib/modules/KVER-ipfire/build/include/config/imq/behavior
-#lib/modules/KVER-ipfire/build/include/config/imq/behavior/ab.h
-#lib/modules/KVER-ipfire/build/include/config/imq/num
-#lib/modules/KVER-ipfire/build/include/config/imq/num/devs.h
#lib/modules/KVER-ipfire/build/include/config/inet
#lib/modules/KVER-ipfire/build/include/config/inet.h
#lib/modules/KVER-ipfire/build/include/config/inet/ah.h
@@ -9529,7 +9523,6 @@ etc/modprobe.d/ipv6.conf
#lib/modules/KVER-ipfire/build/include/config/netfilter/xt/target/hl.h
#lib/modules/KVER-ipfire/build/include/config/netfilter/xt/target/hmark.h
#lib/modules/KVER-ipfire/build/include/config/netfilter/xt/target/idletimer.h
-#lib/modules/KVER-ipfire/build/include/config/netfilter/xt/target/imq.h
#lib/modules/KVER-ipfire/build/include/config/netfilter/xt/target/led.h
#lib/modules/KVER-ipfire/build/include/config/netfilter/xt/target/log.h
#lib/modules/KVER-ipfire/build/include/config/netfilter/xt/target/mark.h
@@ -13471,7 +13464,6 @@ etc/modprobe.d/ipv6.conf
#lib/modules/KVER-ipfire/build/include/linux/iio/triggered_event.h
#lib/modules/KVER-ipfire/build/include/linux/iio/types.h
#lib/modules/KVER-ipfire/build/include/linux/ima.h
-#lib/modules/KVER-ipfire/build/include/linux/imq.h
#lib/modules/KVER-ipfire/build/include/linux/imx-media.h
#lib/modules/KVER-ipfire/build/include/linux/in.h
#lib/modules/KVER-ipfire/build/include/linux/in6.h
@@ -14084,7 +14076,6 @@ etc/modprobe.d/ipv6.conf
#lib/modules/KVER-ipfire/build/include/linux/netfilter/nfnetlink.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter/nfnetlink_acct.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter/x_tables.h
-#lib/modules/KVER-ipfire/build/include/linux/netfilter/xt_IMQ.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter/xt_hashlimit.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter/xt_physdev.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter_arp
@@ -14098,11 +14089,9 @@ etc/modprobe.d/ipv6.conf
#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv4
#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv4.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv4/ip_tables.h
-#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv4/ipt_IMQ.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv6
#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv6.h
#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv6/ip6_tables.h
-#lib/modules/KVER-ipfire/build/include/linux/netfilter_ipv6/ip6t_IMQ.h
#lib/modules/KVER-ipfire/build/include/linux/netlink.h
#lib/modules/KVER-ipfire/build/include/linux/netpoll.h
#lib/modules/KVER-ipfire/build/include/linux/nfs.h
@@ -20209,7 +20198,6 @@ lib/modules/KVER-ipfire/kernel
#lib/modules/KVER-ipfire/kernel/drivers/net/hyperv
#lib/modules/KVER-ipfire/kernel/drivers/net/hyperv/hv_netvsc.ko.xz
#lib/modules/KVER-ipfire/kernel/drivers/net/ifb.ko.xz
-#lib/modules/KVER-ipfire/kernel/drivers/net/imq.ko.xz
#lib/modules/KVER-ipfire/kernel/drivers/net/ipvlan
#lib/modules/KVER-ipfire/kernel/drivers/net/ipvlan/ipvlan.ko.xz
#lib/modules/KVER-ipfire/kernel/drivers/net/ipvlan/ipvtap.ko.xz
@@ -21522,7 +21510,6 @@ lib/modules/KVER-ipfire/kernel
#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_HL.ko.xz
#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_HMARK.ko.xz
#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_IDLETIMER.ko.xz
-#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_IMQ.ko.xz
#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_LED.ko.xz
#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_LOG.ko.xz
#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_NETMAP.ko.xz
diff --git a/config/rootfiles/core/137/filelists/bash b/config/rootfiles/core/137/filelists/bash
new file mode 120000
index 000000000..de970cb1d
--- /dev/null
+++ b/config/rootfiles/core/137/filelists/bash
@@ -0,0 +1 @@
+../../../common/bash
\ No newline at end of file
diff --git a/config/rootfiles/core/137/filelists/files b/config/rootfiles/core/137/filelists/files
index 72f83ef89..33f86862f 100644
--- a/config/rootfiles/core/137/filelists/files
+++ b/config/rootfiles/core/137/filelists/files
@@ -5,7 +5,15 @@ var/ipfire/langs
etc/logrotate.conf
etc/rc.d/init.d/firewall
etc/rc.d/init.d/unbound
+etc/rc.d/init.d/networking/red.up/99-geoip-database
+etc/sysctl.conf
+srv/web/ipfire/cgi-bin/dns.cgi
srv/web/ipfire/cgi-bin/ovpnmain.cgi
+srv/web/ipfire/cgi-bin/qos.cgi
srv/web/ipfire/cgi-bin/vpnmain.cgi
usr/lib/firewall/rules.pl
usr/sbin/firewall-policy
+usr/local/bin/xt_geoip_update
+var/ipfire/backup/bin/backup.pl
+var/ipfire/qos/bin/makeqosscripts.pl
+var/ipfire/suricata/ruleset-sources
diff --git a/config/rootfiles/core/137/filelists/ipset b/config/rootfiles/core/137/filelists/ipset
new file mode 120000
index 000000000..2b43691f2
--- /dev/null
+++ b/config/rootfiles/core/137/filelists/ipset
@@ -0,0 +1 @@
+../../../common/ipset
\ No newline at end of file
diff --git a/config/rootfiles/core/137/filelists/readline b/config/rootfiles/core/137/filelists/readline
new file mode 120000
index 000000000..84209f189
--- /dev/null
+++ b/config/rootfiles/core/137/filelists/readline
@@ -0,0 +1 @@
+../../../common/readline
\ No newline at end of file
diff --git a/config/rootfiles/core/137/update.sh b/config/rootfiles/core/137/update.sh
index a78d50a4a..98fdff83d 100644
--- a/config/rootfiles/core/137/update.sh
+++ b/config/rootfiles/core/137/update.sh
@@ -82,6 +82,7 @@ rm -f /etc/sysconfig/lm_sensors
# Remove files
# Stop services
+qosctrl stop
# Extract files
extract_files
@@ -98,6 +99,10 @@ ldconfig
/etc/init.d/unbound restart
/etc/init.d/collectd restart
+# generate new qos script
+qosctrl generate
+qosctrl start
+
# Search sensors again after reboot into the new kernel
rm -f /etc/sysconfig/lm_sensors
diff --git a/config/rootfiles/packages/linux-pae b/config/rootfiles/packages/linux-pae
index 590595828..f3966ce75 100644
--- a/config/rootfiles/packages/linux-pae
+++ b/config/rootfiles/packages/linux-pae
@@ -8189,12 +8189,6 @@ boot/vmlinuz-KVER-ipfire-pae
#lib/modules/KVER-ipfire-pae/build/include/config/illegal
#lib/modules/KVER-ipfire-pae/build/include/config/illegal/pointer
#lib/modules/KVER-ipfire-pae/build/include/config/illegal/pointer/value.h
-#lib/modules/KVER-ipfire-pae/build/include/config/imq
-#lib/modules/KVER-ipfire-pae/build/include/config/imq.h
-#lib/modules/KVER-ipfire-pae/build/include/config/imq/behavior
-#lib/modules/KVER-ipfire-pae/build/include/config/imq/behavior/ab.h
-#lib/modules/KVER-ipfire-pae/build/include/config/imq/num
-#lib/modules/KVER-ipfire-pae/build/include/config/imq/num/devs.h
#lib/modules/KVER-ipfire-pae/build/include/config/inet
#lib/modules/KVER-ipfire-pae/build/include/config/inet.h
#lib/modules/KVER-ipfire-pae/build/include/config/inet/ah.h
@@ -9474,7 +9468,6 @@ boot/vmlinuz-KVER-ipfire-pae
#lib/modules/KVER-ipfire-pae/build/include/config/netfilter/xt/target/hl.h
#lib/modules/KVER-ipfire-pae/build/include/config/netfilter/xt/target/hmark.h
#lib/modules/KVER-ipfire-pae/build/include/config/netfilter/xt/target/idletimer.h
-#lib/modules/KVER-ipfire-pae/build/include/config/netfilter/xt/target/imq.h
#lib/modules/KVER-ipfire-pae/build/include/config/netfilter/xt/target/led.h
#lib/modules/KVER-ipfire-pae/build/include/config/netfilter/xt/target/log.h
#lib/modules/KVER-ipfire-pae/build/include/config/netfilter/xt/target/mark.h
@@ -13526,7 +13519,6 @@ boot/vmlinuz-KVER-ipfire-pae
#lib/modules/KVER-ipfire-pae/build/include/linux/iio/triggered_event.h
#lib/modules/KVER-ipfire-pae/build/include/linux/iio/types.h
#lib/modules/KVER-ipfire-pae/build/include/linux/ima.h
-#lib/modules/KVER-ipfire-pae/build/include/linux/imq.h
#lib/modules/KVER-ipfire-pae/build/include/linux/imx-media.h
#lib/modules/KVER-ipfire-pae/build/include/linux/in.h
#lib/modules/KVER-ipfire-pae/build/include/linux/in6.h
@@ -14139,7 +14131,6 @@ boot/vmlinuz-KVER-ipfire-pae
#lib/modules/KVER-ipfire-pae/build/include/linux/netfilter/nfnetlink.h
#lib/modules/KVER-ipfire-pae/build/include/linux/netfilter/nfnetlink_acct.h
#lib/modules/KVER-ipfire-pae/build/include/linux/netfilter/x_tables.h
-#lib/modules/KVER-ipfire-pae/build/include/linux/netfilter/xt_IMQ.h
#lib/modules/KVER-ipfire-pae/build/include/linux/netfilter/xt_hashlimit.h
#lib/modules/KVER-ipfire-pae/build/include/linux/netfilter/xt_physdev.h
#lib/modules/KVER-ipfire-pae/build/include/linux/netfilter_arp
@@ -14153,11 +14144,9 @@ boot/vmlinuz-KVER-ipfire-pae
#lib/modules/KVER-ipfire-pae/build/include/linux/netfilter_ipv4
#lib/modules/KVER-ipfire-pae/build/include/linux/netfilter_ipv4.h
#lib/modules/KVER-ipfire-pae/build/include/linux/netfilter_ipv4/ip_tables.h
-#lib/modules/KVER-ipfire-pae/build/include/linux/netfilter_ipv4/ipt_IMQ.h
#lib/modules/KVER-ipfire-pae/build/include/linux/netfilter_ipv6
#lib/modules/KVER-ipfire-pae/build/include/linux/netfilter_ipv6.h
#lib/modules/KVER-ipfire-pae/build/include/linux/netfilter_ipv6/ip6_tables.h
-#lib/modules/KVER-ipfire-pae/build/include/linux/netfilter_ipv6/ip6t_IMQ.h
#lib/modules/KVER-ipfire-pae/build/include/linux/netlink.h
#lib/modules/KVER-ipfire-pae/build/include/linux/netpoll.h
#lib/modules/KVER-ipfire-pae/build/include/linux/nfs.h
@@ -20267,7 +20256,6 @@ lib/modules/KVER-ipfire-pae/kernel
#lib/modules/KVER-ipfire-pae/kernel/drivers/net/hyperv
#lib/modules/KVER-ipfire-pae/kernel/drivers/net/hyperv/hv_netvsc.ko.xz
#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ifb.ko.xz
-#lib/modules/KVER-ipfire-pae/kernel/drivers/net/imq.ko.xz
#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ipvlan
#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ipvlan/ipvlan.ko.xz
#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ipvlan/ipvtap.ko.xz
@@ -21618,7 +21606,6 @@ lib/modules/KVER-ipfire-pae/kernel
#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_HL.ko.xz
#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_HMARK.ko.xz
#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_IDLETIMER.ko.xz
-#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_IMQ.ko.xz
#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_LED.ko.xz
#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_LOG.ko.xz
#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_NETMAP.ko.xz
diff --git a/config/suricata/ruleset-sources b/config/suricata/ruleset-sources
index 8ec848202..ef8d8482b 100644
--- a/config/suricata/ruleset-sources
+++ b/config/suricata/ruleset-sources
@@ -1,8 +1,8 @@
# Ruleset for registered sourcefire users.
-registered = https://www.snort.org/rules/snortrules-snapshot-29130.tar.gz?oinkcode=<oinkcode>
+registered = https://www.snort.org/rules/snortrules-snapshot-29150.tar.gz?oinkcode=<oinkcode>
# Ruleset for registered sourcefire users with valid subscription.
-subscripted = https://www.snort.org/rules/snortrules-snapshot-29130.tar.gz?oinkcode=<oinkcode>
+subscripted = https://www.snort.org/rules/snortrules-snapshot-29150.tar.gz?oinkcode=<oinkcode>
# Community rules from sourcefire.
community = https://www.snort.org/rules/community
diff --git a/doc/language_issues.de b/doc/language_issues.de
index 412efdc47..61b1c8078 100644
--- a/doc/language_issues.de
+++ b/doc/language_issues.de
@@ -30,6 +30,7 @@ WARNING: translation string unused: Queuelenght
WARNING: translation string unused: Remote IP
WARNING: translation string unused: Remote VPN IP
WARNING: translation string unused: Resolv
+WARNING: translation string unused: Subclass
WARNING: translation string unused: TOS Bits
WARNING: translation string unused: Verbose
WARNING: translation string unused: access allowed
@@ -39,6 +40,7 @@ WARNING: translation string unused: add cron
WARNING: translation string unused: add network
WARNING: translation string unused: add new ovpn
WARNING: translation string unused: add service
+WARNING: translation string unused: add subclass
WARNING: translation string unused: add xtaccess
WARNING: translation string unused: add-route
WARNING: translation string unused: addon
@@ -140,6 +142,7 @@ WARNING: translation string unused: ccd maxclients
WARNING: translation string unused: cfg restart
WARNING: translation string unused: check for net traffic update
WARNING: translation string unused: choose config
+WARNING: translation string unused: class in use
WARNING: translation string unused: clear cache
WARNING: translation string unused: compression
WARNING: translation string unused: connect
@@ -548,6 +551,7 @@ WARNING: translation string unused: proxy no proxy extend
WARNING: translation string unused: proxy no proxy local
WARNING: translation string unused: proxy port
WARNING: translation string unused: psk
+WARNING: translation string unused: qos add subclass
WARNING: translation string unused: reboot ask
WARNING: translation string unused: reboot question
WARNING: translation string unused: reboot schedule
diff --git a/doc/language_issues.en b/doc/language_issues.en
index 9ca53b50a..3581a688a 100644
--- a/doc/language_issues.en
+++ b/doc/language_issues.en
@@ -80,7 +80,6 @@ WARNING: untranslated string: Scan for Files = Scan for files
WARNING: untranslated string: Scan for Songs = unknown string
WARNING: untranslated string: Scan from Directory = Scan from directory
WARNING: untranslated string: Set time on boot = Force setting the system clock on boot
-WARNING: untranslated string: Subclass = Subclass
WARNING: untranslated string: TOS Rule = TOS-Rule
WARNING: untranslated string: TOS rule = TOS rule
WARNING: untranslated string: The class number does not match the specified interface. = The class number does not match the specified interface.
@@ -107,7 +106,6 @@ WARNING: untranslated string: add new alias = Add a new alias
WARNING: untranslated string: add new lease = Add a new fixed lease
WARNING: untranslated string: add printer = Add printer
WARNING: untranslated string: add share = Add share
-WARNING: untranslated string: add subclass = Add subclass
WARNING: untranslated string: add user = Add user
WARNING: untranslated string: added from dhcp lease list = Added from DHCP lease list
WARNING: untranslated string: addons = Addons
@@ -465,7 +463,6 @@ WARNING: untranslated string: check all = Check all
WARNING: untranslated string: check vpn lr = Check
WARNING: untranslated string: cipher = Encryption:
WARNING: untranslated string: city = City
-WARNING: untranslated string: class in use = The class is already in use.
WARNING: untranslated string: clear playlist = Empty playlist
WARNING: untranslated string: clenabled = Provide time to local network
WARNING: untranslated string: click to disable = Enabled (click to disable)
@@ -1517,7 +1514,6 @@ WARNING: untranslated string: proxy reports weekly = Weekly reports
WARNING: untranslated string: ptr = PTR
WARNING: untranslated string: pulse = Pulse
WARNING: untranslated string: pulse dial = Pulse dial:
-WARNING: untranslated string: qos add subclass = Add subclass
WARNING: untranslated string: qos enter bandwidths = You will need to enter your downstream and upstream bandwidth!
WARNING: untranslated string: qos graphs = Qos Graphs
WARNING: untranslated string: qos warning = The rule <strong>must</strong> be saved, otherwise it will be discarded!
diff --git a/doc/language_issues.es b/doc/language_issues.es
index 2af165d6b..a4c5bf1f5 100644
--- a/doc/language_issues.es
+++ b/doc/language_issues.es
@@ -9,6 +9,7 @@ WARNING: translation string unused: Queuelenght
WARNING: translation string unused: Remote IP
WARNING: translation string unused: Remote VPN IP
WARNING: translation string unused: Resolv
+WARNING: translation string unused: Subclass
WARNING: translation string unused: TOS Bits
WARNING: translation string unused: Verbose
WARNING: translation string unused: access allowed
@@ -18,6 +19,7 @@ WARNING: translation string unused: add cron
WARNING: translation string unused: add network
WARNING: translation string unused: add new ovpn
WARNING: translation string unused: add service
+WARNING: translation string unused: add subclass
WARNING: translation string unused: add xtaccess
WARNING: translation string unused: add-route
WARNING: translation string unused: admin user password has been changed
@@ -129,6 +131,7 @@ WARNING: translation string unused: cfg restart
WARNING: translation string unused: check for net traffic update
WARNING: translation string unused: choose config
WARNING: translation string unused: choose media
+WARNING: translation string unused: class in use
WARNING: translation string unused: clear cache
WARNING: translation string unused: compression
WARNING: translation string unused: connect
@@ -475,6 +478,7 @@ WARNING: translation string unused: proxy no proxy extend
WARNING: translation string unused: proxy no proxy local
WARNING: translation string unused: proxy port
WARNING: translation string unused: psk
+WARNING: translation string unused: qos add subclass
WARNING: translation string unused: quick control
WARNING: translation string unused: reboot ask
WARNING: translation string unused: reboot question
diff --git a/doc/language_issues.fr b/doc/language_issues.fr
index f48d65a80..3d657059f 100644
--- a/doc/language_issues.fr
+++ b/doc/language_issues.fr
@@ -31,6 +31,7 @@ WARNING: translation string unused: Queuelenght
WARNING: translation string unused: Remote IP
WARNING: translation string unused: Remote VPN IP
WARNING: translation string unused: Resolv
+WARNING: translation string unused: Subclass
WARNING: translation string unused: TOS Bits
WARNING: translation string unused: Verbose
WARNING: translation string unused: access allowed
@@ -40,6 +41,7 @@ WARNING: translation string unused: add cron
WARNING: translation string unused: add network
WARNING: translation string unused: add new ovpn
WARNING: translation string unused: add service
+WARNING: translation string unused: add subclass
WARNING: translation string unused: add xtaccess
WARNING: translation string unused: add-route
WARNING: translation string unused: admin user password has been changed
@@ -159,6 +161,7 @@ WARNING: translation string unused: cfg restart
WARNING: translation string unused: check for net traffic update
WARNING: translation string unused: choose config
WARNING: translation string unused: choose media
+WARNING: translation string unused: class in use
WARNING: translation string unused: clear cache
WARNING: translation string unused: compression
WARNING: translation string unused: connect
@@ -577,6 +580,7 @@ WARNING: translation string unused: proxy no proxy extend
WARNING: translation string unused: proxy no proxy local
WARNING: translation string unused: proxy port
WARNING: translation string unused: psk
+WARNING: translation string unused: qos add subclass
WARNING: translation string unused: quick control
WARNING: translation string unused: reboot ask
WARNING: translation string unused: reboot question
diff --git a/doc/language_issues.it b/doc/language_issues.it
index 59c649954..973a7c12c 100644
--- a/doc/language_issues.it
+++ b/doc/language_issues.it
@@ -10,6 +10,7 @@ WARNING: translation string unused: Queuelenght
WARNING: translation string unused: Remote IP
WARNING: translation string unused: Remote VPN IP
WARNING: translation string unused: Resolv
+WARNING: translation string unused: Subclass
WARNING: translation string unused: TOS Bits
WARNING: translation string unused: Verbose
WARNING: translation string unused: access allowed
@@ -19,6 +20,7 @@ WARNING: translation string unused: add cron
WARNING: translation string unused: add network
WARNING: translation string unused: add new ovpn
WARNING: translation string unused: add service
+WARNING: translation string unused: add subclass
WARNING: translation string unused: add xtaccess
WARNING: translation string unused: add-route
WARNING: translation string unused: admin user password has been changed
@@ -137,6 +139,7 @@ WARNING: translation string unused: cfg restart
WARNING: translation string unused: check for net traffic update
WARNING: translation string unused: choose config
WARNING: translation string unused: choose media
+WARNING: translation string unused: class in use
WARNING: translation string unused: clear cache
WARNING: translation string unused: compression
WARNING: translation string unused: connect
@@ -552,6 +555,7 @@ WARNING: translation string unused: proxy no proxy extend
WARNING: translation string unused: proxy no proxy local
WARNING: translation string unused: proxy port
WARNING: translation string unused: psk
+WARNING: translation string unused: qos add subclass
WARNING: translation string unused: quick control
WARNING: translation string unused: reboot ask
WARNING: translation string unused: reboot question
diff --git a/doc/language_issues.nl b/doc/language_issues.nl
index 836745e5a..2d5e06726 100644
--- a/doc/language_issues.nl
+++ b/doc/language_issues.nl
@@ -10,6 +10,7 @@ WARNING: translation string unused: Queuelenght
WARNING: translation string unused: Remote IP
WARNING: translation string unused: Remote VPN IP
WARNING: translation string unused: Resolv
+WARNING: translation string unused: Subclass
WARNING: translation string unused: TOS Bits
WARNING: translation string unused: Verbose
WARNING: translation string unused: access allowed
@@ -19,6 +20,7 @@ WARNING: translation string unused: add cron
WARNING: translation string unused: add network
WARNING: translation string unused: add new ovpn
WARNING: translation string unused: add service
+WARNING: translation string unused: add subclass
WARNING: translation string unused: add xtaccess
WARNING: translation string unused: add-route
WARNING: translation string unused: admin user password has been changed
@@ -136,6 +138,7 @@ WARNING: translation string unused: cfg restart
WARNING: translation string unused: check for net traffic update
WARNING: translation string unused: choose config
WARNING: translation string unused: choose media
+WARNING: translation string unused: class in use
WARNING: translation string unused: clear cache
WARNING: translation string unused: compression
WARNING: translation string unused: connect
@@ -547,6 +550,7 @@ WARNING: translation string unused: proxy no proxy extend
WARNING: translation string unused: proxy no proxy local
WARNING: translation string unused: proxy port
WARNING: translation string unused: psk
+WARNING: translation string unused: qos add subclass
WARNING: translation string unused: quick control
WARNING: translation string unused: reboot ask
WARNING: translation string unused: reboot question
diff --git a/doc/language_issues.pl b/doc/language_issues.pl
index 2af165d6b..a4c5bf1f5 100644
--- a/doc/language_issues.pl
+++ b/doc/language_issues.pl
@@ -9,6 +9,7 @@ WARNING: translation string unused: Queuelenght
WARNING: translation string unused: Remote IP
WARNING: translation string unused: Remote VPN IP
WARNING: translation string unused: Resolv
+WARNING: translation string unused: Subclass
WARNING: translation string unused: TOS Bits
WARNING: translation string unused: Verbose
WARNING: translation string unused: access allowed
@@ -18,6 +19,7 @@ WARNING: translation string unused: add cron
WARNING: translation string unused: add network
WARNING: translation string unused: add new ovpn
WARNING: translation string unused: add service
+WARNING: translation string unused: add subclass
WARNING: translation string unused: add xtaccess
WARNING: translation string unused: add-route
WARNING: translation string unused: admin user password has been changed
@@ -129,6 +131,7 @@ WARNING: translation string unused: cfg restart
WARNING: translation string unused: check for net traffic update
WARNING: translation string unused: choose config
WARNING: translation string unused: choose media
+WARNING: translation string unused: class in use
WARNING: translation string unused: clear cache
WARNING: translation string unused: compression
WARNING: translation string unused: connect
@@ -475,6 +478,7 @@ WARNING: translation string unused: proxy no proxy extend
WARNING: translation string unused: proxy no proxy local
WARNING: translation string unused: proxy port
WARNING: translation string unused: psk
+WARNING: translation string unused: qos add subclass
WARNING: translation string unused: quick control
WARNING: translation string unused: reboot ask
WARNING: translation string unused: reboot question
diff --git a/doc/language_issues.ru b/doc/language_issues.ru
index b904157b1..06e68dfd3 100644
--- a/doc/language_issues.ru
+++ b/doc/language_issues.ru
@@ -10,6 +10,7 @@ WARNING: translation string unused: Queuelenght
WARNING: translation string unused: Remote IP
WARNING: translation string unused: Remote VPN IP
WARNING: translation string unused: Resolv
+WARNING: translation string unused: Subclass
WARNING: translation string unused: TOS Bits
WARNING: translation string unused: Verbose
WARNING: translation string unused: access allowed
@@ -19,6 +20,7 @@ WARNING: translation string unused: add cron
WARNING: translation string unused: add network
WARNING: translation string unused: add new ovpn
WARNING: translation string unused: add service
+WARNING: translation string unused: add subclass
WARNING: translation string unused: add xtaccess
WARNING: translation string unused: add-route
WARNING: translation string unused: admin user password has been changed
@@ -130,6 +132,7 @@ WARNING: translation string unused: cfg restart
WARNING: translation string unused: check for net traffic update
WARNING: translation string unused: choose config
WARNING: translation string unused: choose media
+WARNING: translation string unused: class in use
WARNING: translation string unused: clear cache
WARNING: translation string unused: compression
WARNING: translation string unused: connect
@@ -478,6 +481,7 @@ WARNING: translation string unused: proxy no proxy extend
WARNING: translation string unused: proxy no proxy local
WARNING: translation string unused: proxy port
WARNING: translation string unused: psk
+WARNING: translation string unused: qos add subclass
WARNING: translation string unused: quick control
WARNING: translation string unused: reboot ask
WARNING: translation string unused: reboot question
diff --git a/doc/language_issues.tr b/doc/language_issues.tr
index cf773d8cb..5bbf9a1b5 100644
--- a/doc/language_issues.tr
+++ b/doc/language_issues.tr
@@ -31,6 +31,7 @@ WARNING: translation string unused: Queuelenght
WARNING: translation string unused: Remote IP
WARNING: translation string unused: Remote VPN IP
WARNING: translation string unused: Resolv
+WARNING: translation string unused: Subclass
WARNING: translation string unused: TOS Bits
WARNING: translation string unused: Verbose
WARNING: translation string unused: access allowed
@@ -40,6 +41,7 @@ WARNING: translation string unused: add cron
WARNING: translation string unused: add network
WARNING: translation string unused: add new ovpn
WARNING: translation string unused: add service
+WARNING: translation string unused: add subclass
WARNING: translation string unused: add xtaccess
WARNING: translation string unused: add-route
WARNING: translation string unused: admin user password has been changed
@@ -159,6 +161,7 @@ WARNING: translation string unused: cfg restart
WARNING: translation string unused: check for net traffic update
WARNING: translation string unused: choose config
WARNING: translation string unused: choose media
+WARNING: translation string unused: class in use
WARNING: translation string unused: clear cache
WARNING: translation string unused: compression
WARNING: translation string unused: connect
@@ -580,6 +583,7 @@ WARNING: translation string unused: proxy no proxy extend
WARNING: translation string unused: proxy no proxy local
WARNING: translation string unused: proxy port
WARNING: translation string unused: psk
+WARNING: translation string unused: qos add subclass
WARNING: translation string unused: quick control
WARNING: translation string unused: reboot ask
WARNING: translation string unused: reboot question
diff --git a/html/cgi-bin/dns.cgi b/html/cgi-bin/dns.cgi
index 314107df9..eee7a90b4 100644
--- a/html/cgi-bin/dns.cgi
+++ b/html/cgi-bin/dns.cgi
@@ -2,7 +2,7 @@
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007 Michael Tremer & Christian Schmidt #
+# Copyright (C) 2007-2019 IPFire Team info@ipfire.org #
# #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
@@ -91,7 +91,7 @@ print <<END
<table border="0" width='100%'>
<tr>
- <td colspan="2"><font class='base'>$Lang::tr{'dns desc'}<br /><img src="/images/dns_link.png" border="0" align="absmiddle"/><a href="http://wiki.ipfire.org/en/dns/public-servers" target="_blank">$Lang::tr{'dns list'}</a></font></td>
+ <td colspan="2"><font class='base'>$Lang::tr{'dns desc'}<br /><img src="/images/dns_link.png" border="0" align="absmiddle"/><a href="https://wiki.ipfire.org/dns/public-servers" target="_blank">$Lang::tr{'dns list'}</a></font></td>
</tr>
<tr>
<td colspan="2"> </td>
diff --git a/html/cgi-bin/ovpnmain.cgi b/html/cgi-bin/ovpnmain.cgi
index 5b8ca9731..970444a55 100644
--- a/html/cgi-bin/ovpnmain.cgi
+++ b/html/cgi-bin/ovpnmain.cgi
@@ -1372,7 +1372,7 @@ END
### Upload DH key
###
} elsif ($cgiparams{'ACTION'} eq $Lang::tr{'upload dh key'}) {
- if (ref ($cgiparams{'FH'}) ne 'Fh') {
+ unless (ref ($cgiparams{'FH'})) {
$errormessage = $Lang::tr{'there was no file upload'};
goto UPLOADCA_ERROR;
}
@@ -1429,7 +1429,7 @@ END
}
}
- if (ref ($cgiparams{'FH'}) ne 'Fh') {
+ unless (ref ($cgiparams{'FH'})) {
$errormessage = $Lang::tr{'there was no file upload'};
goto UPLOADCA_ERROR;
}
@@ -1662,8 +1662,7 @@ END
}
}
} elsif ($cgiparams{'ACTION'} eq $Lang::tr{'upload p12 file'}) {
-
- if (ref ($cgiparams{'FH'}) ne 'Fh') {
+ unless (ref ($cgiparams{'FH'})) {
$errormessage = $Lang::tr{'there was no file upload'};
goto ROOTCERT_ERROR;
}
@@ -3218,9 +3217,8 @@ END
&General::readhasharray("${General::swroot}/ovpn/ovpnconfig", %confighash);
-# Check if a file is uploaded
-
- if (ref ($cgiparams{'FH'}) ne 'Fh') {
+ # Check if a file is uploaded
+ unless (ref ($cgiparams{'FH'})) {
$errormessage = $Lang::tr{'there was no file upload'};
goto N2N_ERROR;
}
@@ -4009,7 +4007,7 @@ if ($cgiparams{'TYPE'} eq 'net') {
$errormessage = $Lang::tr{'cant change certificates'};
goto VPNCONF_ERROR;
}
- if (ref ($cgiparams{'FH'}) ne 'Fh') {
+ unless (ref ($cgiparams{'FH'})) {
$errormessage = $Lang::tr{'there was no file upload'};
goto VPNCONF_ERROR;
}
@@ -4056,7 +4054,7 @@ if ($cgiparams{'TYPE'} eq 'net') {
$errormessage = $Lang::tr{'cant change certificates'};
goto VPNCONF_ERROR;
}
- if (ref ($cgiparams{'FH'}) ne 'Fh') {
+ unless (ref ($cgiparams{'FH'})) {
$errormessage = $Lang::tr{'there was no file upload'};
goto VPNCONF_ERROR;
}
diff --git a/html/cgi-bin/qos.cgi b/html/cgi-bin/qos.cgi
index b7af11204..8211a3ca0 100644
--- a/html/cgi-bin/qos.cgi
+++ b/html/cgi-bin/qos.cgi
@@ -38,19 +38,16 @@ my $errormessage = "";
my $c = "";
my $direntry = "";
my $classentry = "";
-my $subclassentry = "";
my $l7ruleentry = "";
my $portruleentry = "";
my $tosruleentry = "";
my @tmp = ();
my @classes = ();
-my @subclasses = ();
my @l7rules = ();
my @portrules = ();
my @tosrules = ();
my @tmpline = ();
my @classline = ();
-my @subclassline = ();
my @l7ruleline = ();
my @portruleline = ();
my @tosruleline = ();
@@ -58,7 +55,6 @@ my @proto = ();
my %selected= ();
my @checked = ();
my $classfile = "/var/ipfire/qos/classes";
-my $subclassfile = "/var/ipfire/qos/subclasses";
my $level7file = "/var/ipfire/qos/level7config";
my $portfile = "/var/ipfire/qos/portconfig";
my $tosfile = "/var/ipfire/qos/tosconfig";
@@ -85,7 +81,6 @@ $qossettings{'IMQ_DEV_SEL'} = '';
$qossettings{'PRIO'} = '';
$qossettings{'SPD'} = '';
$qossettings{'CLASS'} = '';
-$qossettings{'SCLASS'} = '';
$qossettings{'QPORT'} = '';
$qossettings{'DPORT'} = '';
$qossettings{'QIP'} = '';
@@ -98,7 +93,6 @@ $qossettings{'MAXBWDTH'} = '';
$qossettings{'BURST'} = '';
$qossettings{'CBURST'} = '';
$qossettings{'DOCLASS'} = '';
-$qossettings{'DOSCLASS'} = '';
$qossettings{'DOLEVEL7'} = '';
$qossettings{'DOPORT'} = '';
$qossettings{'CLASS'} = '';
@@ -194,60 +188,12 @@ elsif ($qossettings{'DOCLASS'} eq $Lang::tr{'delete'})
}
}
close FILE;
- open( FILE, "< $subclassfile" ) or die "Unable to read $classfile";
- @tmp = <FILE>;
- close FILE;
- open( FILE, "> $subclassfile" ) or die "Unable to write $classfile";
- foreach $subclassentry (sort @tmp)
- {
- @tmpline = split( /;/, $subclassentry );
- if ( $tmpline[1] ne $qossettings{'CLASS'} )
- {
- print FILE $subclassentry;
- }
- }
- close FILE;
$message = "$Lang::tr{'Class'} $qossettings{'CLASS'} $Lang::tr{'Class was deleted'}";
}
############################################################################################################################
############################################################################################################################
-if ($qossettings{'DOSCLASS'} eq $Lang::tr{'save'})
-{
- &validsubclass();
- &validminbwdth();
- if ( $qossettings{'VALID'} eq 'yes' ) {
- open( FILE, ">> $subclassfile" ) or die "Unable to write $subclassfile";
- print FILE <<END
-$qossettings{'DEVICE'};$qossettings{'CLASS'};$qossettings{'SCLASS'};$qossettings{'PRIO'};$qossettings{'MINBWDTH'};$qossettings{'MAXBWDTH'};$qossettings{'BURST'};$qossettings{'CBURST'};$qossettings{'TOS'};
-END
-;
- close FILE;
- } else {
- $qossettings{'ACTION'} = $Lang::tr{'qos add subclass'};
- }
-} elsif ($qossettings{'DOSCLASS'} eq $Lang::tr{'delete'})
-{
- open( FILE, "< $subclassfile" ) or die "Unable to read $classfile";
- @tmp = <FILE>;
- close FILE;
- open( FILE, "> $subclassfile" ) or die "Unable to write $classfile";
- foreach $subclassentry (sort @tmp)
- {
- @tmpline = split( /;/, $subclassentry );
- if ( $tmpline[2] ne $qossettings{'CLASS'} )
- {
- print FILE $subclassentry;
- }
- }
- close FILE;
- $message = "$Lang::tr{'Subclass'} $qossettings{'CLASS'} $Lang::tr{'was deleted'}.";
-}
-
-############################################################################################################################
-############################################################################################################################
-
if ($qossettings{'DOLEVEL7'} eq $Lang::tr{'save'})
{
if ( $qossettings{'QIP'} ne '' ) {
@@ -612,13 +558,6 @@ elsif ($qossettings{'ACTION'} eq $Lang::tr{'parentclass add'} )
&Header::closepage();
exit
}
-elsif ($qossettings{'ACTION'} eq $Lang::tr{'qos add subclass'})
-{
- &subclass();
- &Header::closebigbox();
- &Header::closepage();
- exit
-}
elsif ($qossettings{'ACTION'} eq $Lang::tr{'Add Rule'})
{
&Header::openbox('100%', 'center', $Lang::tr{'Add Rule'});
@@ -944,18 +883,6 @@ END
<tr><td width='33%' align='right'>Ceilburst:
<td width='33%' align='left'><input type='text' size='20' name='CBURST' maxlength='8' value="$qossettings{'CBURST'}" />
<td width='33%' align='center'>
-END
-;
- $selected{'TOS'}{$qossettings{'TOS'}} = "selected='selected'";
-print <<END
- <tr><td width='33%' align='right'>TOS-Bit:
- <td width='33%' align='left'><select name='TOS'>
- <option value='0' $selected{'TOS'}{'0'}>$Lang::tr{'disabled'} (0)</option>
- <option value='8' $selected{'TOS'}{'8'}>$Lang::tr{'min delay'} (8)</option>
- <option value='4' $selected{'TOS'}{'4'}>$Lang::tr{'max throughput'} (4)</option>
- <option value='2' $selected{'TOS'}{'2'}>$Lang::tr{'max reliability'} (2)</option>
- <option value='1' $selected{'TOS'}{'1'}>$Lang::tr{'min costs'} (1)</option></select>
- <td width='33%' align='center'>
<tr><td width='33%' align='right'>$Lang::tr{'remark'}:
<td width='66%' colspan='2' align='left'><input type='text' name='REMARK' size='40' maxlength='40' value="$qossettings{'REMARK'}" />
<tr><td width='33%' align='right'><img src='/blob.gif' alt='*' /> $Lang::tr{'required field'}
@@ -967,81 +894,6 @@ END
&Header::closebox();
}
-sub subclass {
- &Header::openbox('100%', 'center', $Lang::tr{'Subclass'});
- print <<END
- <form method='post' action='$ENV{'SCRIPT_NAME'}'>
- <table width='66%'>
-END
-;
- if ( $message ne "" ) {
- print "<tr><td colspan='3' align='center'>$message";
- }
- print <<END
- <tr><td colspan='3' width='100%'>$Lang::tr{'current class'}: $qossettings{'CLASS'}
- <tr><td width='100%' colspan='3'>$Lang::tr{'enter data'}
- <tr><td width='33%' align='right'>$Lang::tr{'Subclass'}:<td width='33%' align='left'><select name='SCLASS'>
-END
-;
- if ($qossettings{'CLASS'} >= 100 && $qossettings{'CLASS'} < 121) {
- $qossettings{'DEVICE'} = $qossettings{'RED_DEV'};
- for ( $c = 1000 ; $c <= 1020 ; $c++ )
- {
- if ( $qossettings{'SCLASS'} ne $c )
- { print "<option value='$c'>$c</option>\n"; }
- else { print "<option selected value='$c'>$c</option>\n"; }
- }
- } elsif ($qossettings{'CLASS'} >= 200 && $qossettings{'CLASS'} < 221) {
- $qossettings{'DEVICE'} = $qossettings{'IMQ_DEV'};
- for ( $c = 2000 ; $c <= 2020 ; $c++ )
- {
- if ( $qossettings{'SCLASS'} ne $c )
- { print "<option value='$c'>$c</option>\n"; }
- else { print "<option selected value='$c'>$c</option>\n"; }
- }
- }
- print <<END
- </select>
- <td width='33%' align='center'>
- <tr><td width='33%' align='right'>$Lang::tr{'priority'}:<td width='33%' align='left'><select name='PRIO'>
-END
-;
- for ( $c = 1 ; $c <= 7 ; $c++ )
- {
- if ( $qossettings{'PRIO'} ne $c )
- { print "<option value='$c'>$c</option>\n"; }
- else { print "<option selected value='$c'>$c</option>\n"; }
- }
- print <<END
- <td width='33%' align='center'>
- <tr><td width='33%' align='right'>$Lang::tr{'guaranteed bandwith'}:
- <td width='33%' align='left'><input type='text' name='MINBWDTH' maxlength='8' required='1' value="$qossettings{'MINBWDTH'}" />
- <td width='33%' align='center'>
- <tr><td width='33%' align='right'>$Lang::tr{'max bandwith'}:
- <td width='33%' align='left'><input type='text' name='MAXBWDTH' maxlength='8' required='1' value="$qossettings{'MAXBWDTH'}" />
- <td width='33%' align='center'>
- <tr><td width='33%' align='right'>Burst:
- <td width='33%' align='left'><input type='text' name='BURST' maxlength='8' value="$qossettings{'BURST'}" />
- <td width='33%' align='center'>
- <tr><td width='33%' align='right'>Ceilburst:
- <td width='33%' align='left'><input type='text' name='CBURST' maxlength='8' value="$qossettings{'CBURST'}" />
- <td width='33%' align='center'>
- <tr><td width='33%' align='right'>TOS-Bit:
- <td width='33%' align='left'><select name='TOS'>
- <option value='0'>$Lang::tr{'disabled'} (0)</option>
- <option value='8'>$Lang::tr{'min delay'} (8)</option>
- <option value='4'>$Lang::tr{'max throughput'} (4)</option>
- <option value='2'>$Lang::tr{'max reliability'} (2)</option>
- <option value='1'>$Lang::tr{'min costs'} (1)</option></select>
- <td width='33%' align='center'><input type='hidden' name='CLASS' value="$qossettings{'CLASS'}" />
- <input type='hidden' name='DEVICE' value="$qossettings{'DEVICE'}" />
- <input type='submit' name='DOSCLASS' value='$Lang::tr{'save'}' /> <input type='reset' value='$Lang::tr{'reset'}' />
- </table></form>
-END
-;
- &Header::closebox();
-}
-
sub level7rule {
&Header::openbox('100%', 'center', $Lang::tr{'Level7 Rule'});
print <<END
@@ -1164,9 +1016,6 @@ sub showclasses {
@classes = <FILE>;
close FILE;
if (@classes) {
- open( FILE, "< $subclassfile" ) or die "Unable to read $subclassfile";
- @subclasses = <FILE>;
- close FILE;
open( FILE, "< $level7file" ) or die "Unable to read $level7file";
@l7rules = <FILE>;
close FILE;
@@ -1203,11 +1052,6 @@ sub showclasses {
<td align='center' bgcolor='$color{'color22'}'>$classline[7]</td>
<td align='right' bgcolor='$color{'color22'}'>
<table border='0'><tr>
- <td><form method='post' action='$ENV{'SCRIPT_NAME'}'>
- <input type='hidden' name='CLASS' value='$classline[1]' />
- <input type='hidden' name='ACTION' value='$Lang::tr{'qos add subclass'}' />
- <input type='image' alt='$Lang::tr{'add subclass'}' title='$Lang::tr{'add subclass'}' src='/images/addblue.gif' />
- </form>
<td><form method='post' action='$ENV{'SCRIPT_NAME'}'>
<input type='hidden' name='CLASS' value='$classline[1]' />
<input type='hidden' name='ACTION' value='$Lang::tr{'Add Rule'}' />
@@ -1386,41 +1230,6 @@ END
}
END
;
- foreach $subclassentry (sort @subclasses)
- {
- @subclassline = split( /;/, $subclassentry );
- if ( $subclassline[1] eq $classline[1] ) {
- print <<END
- <tr><td align='center' bgcolor='#FAFAFA'>$Lang::tr{'Subclass'}:
- <td align='center' bgcolor='#FAFAFA'>$subclassline[2]
- <td align='center' bgcolor='#FAFAFA'>$subclassline[3]
- <td align='center' bgcolor='#FAFAFA'>$subclassline[4]
- <td align='center' bgcolor='#FAFAFA'>$subclassline[5]
- <td align='center' bgcolor='#FAFAFA'>$subclassline[6]
- <td align='center' bgcolor='#FAFAFA'>$subclassline[7]
- <td align='center' bgcolor='#FAFAFA'>$subclassline[8]
- <td align='right' bgcolor='#FAFAFA'>
- <table border='0'><tr>
- <td><form method='post' action='$ENV{'SCRIPT_NAME'}'>
- <input type='hidden' name='CLASS' value='$subclassline[2]' />
- <input type='hidden' name='ACTION' value='$Lang::tr{'Add Rule'}' />
- <input type='image' alt='$Lang::tr{'Add Rule'}' title='$Lang::tr{'Add Rule'}' src='/images/addgreen.gif' />
- </form>
- <td><form method='post' action='$ENV{'SCRIPT_NAME'}'>
- <input type='hidden' name='CLASS' value='$subclassline[2]' />
- <input type='hidden' name='DOSCLASS' value='$Lang::tr{'edit'}' />
- <input type='image' alt='$Lang::tr{'edit'}' title='$Lang::tr{'edit'}' src='/images/edit.gif' />
- </form>
- <td><form method='post' action='$ENV{'SCRIPT_NAME'}'>
- <input type='hidden' name='CLASS' value='$subclassline[2]' />
- <input type='hidden' name='DOSCLASS' value='$Lang::tr{'delete'}' />
- <input type='image' alt='$Lang::tr{'delete'}' title='$Lang::tr{'delete'}' src='/images/delete.gif' />
- </form>
- </table>
-END
-;
- }
- }
print <<END
</table>
END
@@ -1488,21 +1297,3 @@ sub validclass {
}
}
}
-
-sub validsubclass {
- if ( $qossettings{'VALID'} eq 'yes' ) {
- open( FILE, "< $subclassfile" ) or die "Unable to read $subclassfile";
- @tmp = <FILE>;
- close FILE;
- foreach $subclassentry (sort @tmp)
- {
- @tmpline = split( /;/, $subclassentry );
- if ( $tmpline[2] eq $qossettings{'SCLASS'} )
- {
- $qossettings{'VALID'} = 'no';
- $message = "$Lang::tr{'class in use'}";
- last
- }
- }
- }
-}
diff --git a/html/cgi-bin/vpnmain.cgi b/html/cgi-bin/vpnmain.cgi
index 1cd7cb84b..33b504bc9 100644
--- a/html/cgi-bin/vpnmain.cgi
+++ b/html/cgi-bin/vpnmain.cgi
@@ -604,7 +604,7 @@ END
}
}
- if (ref ($cgiparams{'FH'}) ne 'Fh') {
+ unless (ref ($cgiparams{'FH'})) {
$errormessage = $Lang::tr{'there was no file upload'};
goto UPLOADCA_ERROR;
}
@@ -830,7 +830,7 @@ END
} elsif ($cgiparams{'ACTION'} eq $Lang::tr{'upload p12 file'}) {
&General::log("ipsec", "Importing from p12...");
- if (ref ($cgiparams{'FH'}) ne 'Fh') {
+ unless (ref ($cgiparams{'FH'})) {
$errormessage = $Lang::tr{'there was no file upload'};
goto ROOTCERT_ERROR;
}
@@ -1531,7 +1531,7 @@ END
$errormessage = $Lang::tr{'cant change certificates'};
goto VPNCONF_ERROR;
}
- if (ref ($cgiparams{'FH'}) ne 'Fh') {
+ unless (ref ($cgiparams{'FH'})) {
$errormessage = $Lang::tr{'there was no file upload'};
goto VPNCONF_ERROR;
}
@@ -1568,7 +1568,7 @@ END
} elsif ($cgiparams{'AUTH'} eq 'pkcs12') {
&General::log("ipsec", "Importing from p12...");
- if (ref ($cgiparams{'FH'}) ne 'Fh') {
+ unless (ref ($cgiparams{'FH'})) {
$errormessage = $Lang::tr{'there was no file upload'};
goto ROOTCERT_ERROR;
}
@@ -1658,7 +1658,7 @@ END
$errormessage = $Lang::tr{'cant change certificates'};
goto VPNCONF_ERROR;
}
- if (ref ($cgiparams{'FH'}) ne 'Fh') {
+ unless (ref ($cgiparams{'FH'})) {
$errormessage = $Lang::tr{'there was no file upload'};
goto VPNCONF_ERROR;
}
diff --git a/lfs/bash b/lfs/bash
index 09b4e71e6..79c21896b 100644
--- a/lfs/bash
+++ b/lfs/bash
@@ -1,7 +1,7 @@
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007-2018 IPFire Team info@ipfire.org #
+# Copyright (C) 2007-2019 IPFire Team info@ipfire.org #
# #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
@@ -24,7 +24,7 @@
include Config
-VER = 4.3
+VER = 5.0
THISAPP = bash-$(VER)
DL_FILE = $(THISAPP).tar.gz
@@ -53,7 +53,7 @@ objects = $(DL_FILE)
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 81348932d5da294953e15d4814c74dd1
+$(DL_FILE)_MD5 = 2b44b47b905be16f45709648f671820b
install : $(TARGET)
@@ -87,8 +87,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
sed -e "s/filename, RTLD_LAZY/filename, RTLD_NOW/" \
-i $(DIR_APP)/builtins/enable.def
- for i in $$(seq 1 30); do \
- cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash/bash43-$$(printf "%03d" "$${i}") || exit 1; \
+ for i in $$(seq 1 11); do \
+ cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash/bash50-$$(printf "%03d" "$${i}") || exit 1; \
done
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash-4.0-paths-1.patch
diff --git a/lfs/hostapd b/lfs/hostapd
index c02c9724c..382482230 100644
--- a/lfs/hostapd
+++ b/lfs/hostapd
@@ -32,7 +32,7 @@ DL_FROM = $(URL_IPFIRE)
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = hostapd
-PAK_VER = 49
+PAK_VER = 50
DEPS = ""
diff --git a/lfs/ipset b/lfs/ipset
index 3382c668c..fb6a2f38f 100644
--- a/lfs/ipset
+++ b/lfs/ipset
@@ -24,7 +24,7 @@
include Config
-VER = 7.1
+VER = 7.3
THISAPP = ipset-$(VER)
DL_FILE = $(THISAPP).tar.bz2
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 72b477d1ce076d681b0799f88280f2f3
+$(DL_FILE)_MD5 = a041d186097a23f1f87208f11144907e
install : $(TARGET)
diff --git a/lfs/iptables b/lfs/iptables
index b91e41797..e2012ecb6 100644
--- a/lfs/iptables
+++ b/lfs/iptables
@@ -79,9 +79,6 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
cd $(DIR_APP) && cp -vf $(DIR_SRC)/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/* \
./extensions/
- # imq
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/iptables-1.4.12-IMQ-test4.diff
-
cd $(DIR_APP) && ./configure \
--prefix=/usr \
--libdir=/lib \
diff --git a/lfs/linux b/lfs/linux
index dbf9fe194..677e9afed 100644
--- a/lfs/linux
+++ b/lfs/linux
@@ -118,9 +118,6 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
ln -svf linux-$(VER) $(DIR_SRC)/linux
- # Linux Intermediate Queueing Device
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/linux-4.14-imq.diff
-
# Layer7-patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/linux-4.14-layer7.patch
diff --git a/lfs/readline b/lfs/readline
index 3e9e2a3d5..4f7329766 100644
--- a/lfs/readline
+++ b/lfs/readline
@@ -1,7 +1,7 @@
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007-2018 IPFire Team info@ipfire.org #
+# Copyright (C) 2007-2019 IPFire Team info@ipfire.org #
# #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
@@ -24,7 +24,7 @@
include Config
-VER = 6.3
+VER = 8.0
THISAPP = readline-$(VER)
DL_FILE = $(THISAPP).tar.gz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 33c8fb279e981274f485fd91da77e94a
+$(DL_FILE)_MD5 = 7e6c1f16aee3244a69aba6e438295ca3
install : $(TARGET)
@@ -71,9 +71,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
@$(PREBUILD)
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
- for i in $$(seq 1 6); do \
- cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/readline/readline63-$$(printf "%03d" "$${i}") || exit 1; \
- done
+ cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/readline/readline80-001
cd $(DIR_APP) && ./configure --prefix=/usr --disable-static
cd $(DIR_APP) && make $(MAKETUNING) SHLIB_LIBS=-lncurses
diff --git a/lfs/rust b/lfs/rust
index e4241bfb4..47e9a0ea5 100644
--- a/lfs/rust
+++ b/lfs/rust
@@ -1,7 +1,7 @@
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007-2018 IPFire Team info@ipfire.org #
+# Copyright (C) 2007-2019 IPFire Team info@ipfire.org #
# #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
diff --git a/src/initscripts/networking/red.up/99-geoip-database b/src/initscripts/networking/red.up/99-geoip-database
index 335006a69..9b024a8d0 100644
--- a/src/initscripts/networking/red.up/99-geoip-database
+++ b/src/initscripts/networking/red.up/99-geoip-database
@@ -1,22 +1,19 @@
#!/bin/bash
-# Get the GeoIP database if no one exists yet.
+# Get the GeoIP database if no one exists yet
-DIR="/usr/share/xt_geoip/*"
+database_exists() {
+ local file
+ for file in /usr/share/xt_geoip/*.iv4; do
+ [ -e "${file}" ] && return 0
+ done
-found=false
-
-# Check if the directory contains any data.
-for i in $DIR; do
- # Ignore "." and ".."
- if [ -d "$i" ]; then
- found=true
- break
- fi
-done
+ # Does not exist
+ return 1
+}
# Download ruleset if none has been found.
-if ! ${found}; then
+if ! database_exists; then
/usr/local/bin/xt_geoip_update >/dev/null 2>&1 &
fi
diff --git a/src/initscripts/packages/hostapd b/src/initscripts/packages/hostapd
index 27e79f0a7..5945375f3 100644
--- a/src/initscripts/packages/hostapd
+++ b/src/initscripts/packages/hostapd
@@ -32,7 +32,7 @@ case "${1}" in
# Check if INTERFACE is an actual wireless device
if [ ! -d "/sys/class/net/${INTERFACE}/wireless" ]; then
- boot_mesg "Interface $INTERFACE is no wireless device." ${FAILURE}
+ boot_mesg "Interface $INTERFACE is not a wireless device." ${FAILURE}
echo_failure
exit 0
fi
diff --git a/src/patches/bash/bash43-001 b/src/patches/bash/bash43-001
deleted file mode 100644
index ea1c6b265..000000000
--- a/src/patches/bash/bash43-001
+++ /dev/null
@@ -1,58 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-001
-
-Bug-Reported-by: NBaH nbah@sfr.fr
-Bug-Reference-ID: ler0b5$iu9$1@speranza.aioe.org
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00092.html
-
-Bug-Description:
-
-A missing check for a valid option prevented `test -R' from working. There
-is another problem that causes bash to look up the wrong variable name when
-processing the argument to `test -R'.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3/test.c 2014-02-04 16:52:58.000000000 -0500
---- test.c 2014-02-28 21:22:44.000000000 -0500
-***************
-*** 647,652 ****
-
- case 'R':
-! v = find_variable (arg);
-! return (v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v) ? TRUE : FALSE);
- }
-
---- 647,652 ----
-
- case 'R':
-! v = find_variable_noref (arg);
-! return ((v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v)) ? TRUE : FALSE);
- }
-
-***************
-*** 724,727 ****
---- 724,728 ----
- case 'u': case 'v': case 'w': case 'x': case 'z':
- case 'G': case 'L': case 'O': case 'S': case 'N':
-+ case 'R':
- return (1);
- }
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 0
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 1
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-002 b/src/patches/bash/bash43-002
deleted file mode 100644
index 735b7b81a..000000000
--- a/src/patches/bash/bash43-002
+++ /dev/null
@@ -1,62 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-002
-
-Bug-Reported-by: Moe Tunes moetunes42@gmail.com
-Bug-Reference-ID: 53103F49.3070100@gmail.com
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00086.html
-
-Bug-Description:
-
-A change to save state while running the DEBUG trap caused pipelines to hang
-on systems which need process group synchronization while building pipelines.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3/trap.c 2014-02-05 10:03:21.000000000 -0500
---- trap.c 2014-02-28 09:51:43.000000000 -0500
-***************
-*** 921,925 ****
-
- #if defined (JOB_CONTROL)
-! save_pipeline (1); /* XXX only provides one save level */
- #endif
-
---- 921,926 ----
-
- #if defined (JOB_CONTROL)
-! if (sig != DEBUG_TRAP) /* run_debug_trap does this */
-! save_pipeline (1); /* XXX only provides one save level */
- #endif
-
-***************
-*** 941,945 ****
-
- #if defined (JOB_CONTROL)
-! restore_pipeline (1);
- #endif
-
---- 942,947 ----
-
- #if defined (JOB_CONTROL)
-! if (sig != DEBUG_TRAP) /* run_debug_trap does this */
-! restore_pipeline (1);
- #endif
-
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 1
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 2
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-003 b/src/patches/bash/bash43-003
deleted file mode 100644
index 0f32f410d..000000000
--- a/src/patches/bash/bash43-003
+++ /dev/null
@@ -1,48 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-003
-
-Bug-Reported-by: Anatol Pomozov anatol.pomozov@gmail.com
-Bug-Reference-ID: CAOMFOmXy3mT2So5GQ5F-smCVArQuAeBwZ2QKzgCtMeXJoDeYOQ@mail.gmail.com
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2014-03/msg00010.html
-
-Bug-Description:
-
-When in callback mode, some readline commands can cause readline to seg
-fault by passing invalid contexts to callback functions.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3/lib/readline/readline.c 2013-10-28 14:58:06.000000000 -0400
---- lib/readline/readline.c 2014-03-10 14:15:02.000000000 -0400
-***************
-*** 745,749 ****
-
- RL_CHECK_SIGNALS ();
-! if (r == 0) /* success! */
- {
- _rl_keyseq_chain_dispose ();
---- 745,750 ----
-
- RL_CHECK_SIGNALS ();
-! /* We only treat values < 0 specially to simulate recursion. */
-! if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0)) /* success! or failure! */
- {
- _rl_keyseq_chain_dispose ();
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 2
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 3
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-004 b/src/patches/bash/bash43-004
deleted file mode 100644
index 010f04a2a..000000000
--- a/src/patches/bash/bash43-004
+++ /dev/null
@@ -1,47 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-004
-
-Bug-Reported-by: Daan van Rossum daan@flash.uchicago.edu
-Bug-Reference-ID: 20140307072523.GA14250@flash.uchicago.edu
-Bug-Reference-URL:
-
-Bug-Description:
-
-The `.' command in vi mode cannot undo multi-key commands beginning with
-`c', `d', and `y' (command plus motion specifier).
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3/lib/readline/readline.c 2013-10-28 14:58:06.000000000 -0400
---- lib/readline/readline.c 2014-03-07 15:20:33.000000000 -0500
-***************
-*** 965,969 ****
- if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
- key != ANYOTHERKEY &&
-! rl_key_sequence_length == 1 && /* XXX */
- _rl_vi_textmod_command (key))
- _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
---- 965,969 ----
- if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
- key != ANYOTHERKEY &&
-! _rl_dispatching_keymap == vi_movement_keymap &&
- _rl_vi_textmod_command (key))
- _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 3
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 4
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-005 b/src/patches/bash/bash43-005
deleted file mode 100644
index bcd40697c..000000000
--- a/src/patches/bash/bash43-005
+++ /dev/null
@@ -1,63 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-005
-
-Bug-Reported-by: David Sines dave.gma@googlemail.com
-Bug-Reference-ID: CAO3BAa_CK_Rgkhdfzs+NJ4KFYdB9qW3pvXQK0xLCi6GMmDU8bw@mail.gmail.com
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00037.html
-
-Bug-Description:
-
-When in Posix mode, bash did not correctly interpret the ANSI-C-style
-$'...' quoting mechanism when performing pattern substitution word
-expansions within double quotes.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3/parse.y 2014-02-11 09:42:10.000000000 -0500
---- parse.y 2014-03-07 20:57:15.000000000 -0500
-***************
-*** 3399,3403 ****
- unescaped double-quotes or single-quotes, if any, shall occur." */
- /* This was changed in Austin Group Interp 221 */
-! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == ''')
- continue;
-
---- 3399,3403 ----
- unescaped double-quotes or single-quotes, if any, shall occur." */
- /* This was changed in Austin Group Interp 221 */
-! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == ''')
- continue;
-
-*** ../bash-4.3/y.tab.c 2014-02-11 10:57:47.000000000 -0500
---- y.tab.c 2014-03-28 10:41:15.000000000 -0400
-***************
-*** 5711,5715 ****
- unescaped double-quotes or single-quotes, if any, shall occur." */
- /* This was changed in Austin Group Interp 221 */
-! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == ''')
- continue;
-
---- 5711,5715 ----
- unescaped double-quotes or single-quotes, if any, shall occur." */
- /* This was changed in Austin Group Interp 221 */
-! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == ''')
- continue;
-
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 4
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 5
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-006 b/src/patches/bash/bash43-006
deleted file mode 100644
index 24ff057a5..000000000
--- a/src/patches/bash/bash43-006
+++ /dev/null
@@ -1,48 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-006
-
-Bug-Reported-by: Eduardo A . Bustamante Lopez dualbus@gmail.com
-Bug-Reference-ID: 20140228170013.GA16015@dualbus.me
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00091.html
-
-Bug-Description:
-
-A shell that started with job control active but was not interactive left
-the terminal in the wrong process group when exiting, causing its parent
-shell to get a stop signal when it attempted to read from the terminal.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3/jobs.c 2014-01-10 09:05:34.000000000 -0500
---- jobs.c 2014-03-02 18:05:09.000000000 -0500
-***************
-*** 4375,4379 ****
- end_job_control ()
- {
-! if (interactive_shell) /* XXX - should it be interactive? */
- {
- terminate_stopped_jobs ();
---- 4375,4379 ----
- end_job_control ()
- {
-! if (interactive_shell || job_control) /* XXX - should it be just job_control? */
- {
- terminate_stopped_jobs ();
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 5
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 6
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-007 b/src/patches/bash/bash43-007
deleted file mode 100644
index 0d62c9ec6..000000000
--- a/src/patches/bash/bash43-007
+++ /dev/null
@@ -1,50 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-007
-
-Bug-Reported-by: geir.hauge@gmail.com
-Bug-Reference-ID: 20140318093650.B181C1C5B0B@gina.itea.ntnu.no
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00095.html
-
-Bug-Description:
-
-Using compound assignments for associative arrays like
-
-assoc=( [x]= [y]=bar )
-
-left the value corresponding to the key `x' NULL. This caused subsequent
-lookups to interpret it as unset.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3/arrayfunc.c 2013-08-02 16:19:59.000000000 -0400
---- arrayfunc.c 2014-03-18 11:08:15.000000000 -0400
-***************
-*** 598,601 ****
---- 598,606 ----
- {
- val = expand_assignment_string_to_string (val, 0);
-+ if (val == 0)
-+ {
-+ val = (char *)xmalloc (1);
-+ val[0] = '\0'; /* like do_assignment_internal */
-+ }
- free_val = 1;
- }
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 6
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 7
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-008 b/src/patches/bash/bash43-008
deleted file mode 100644
index 0ae7c9522..000000000
--- a/src/patches/bash/bash43-008
+++ /dev/null
@@ -1,188 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-008
-
-Bug-Reported-by: Stephane Chazelas stephane.chazelas@gmail.com
-Bug-Reference-ID: 20140318135901.GB22158@chaz.gmail.com
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00098.html
-
-Bug-Description:
-
-Some extended glob patterns incorrectly matched filenames with a leading
-dot, regardless of the setting of the `dotglob' option.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3/lib/glob/gmisc.c 2013-10-28 14:45:25.000000000 -0400
---- lib/glob/gmisc.c 2014-03-19 09:16:08.000000000 -0400
-***************
-*** 211,214 ****
---- 211,215 ----
- case '!':
- case '@':
-+ case '?':
- return (pat[1] == LPAREN);
- default:
-*** ../bash-4.3/lib/glob/glob.c 2014-01-31 21:43:51.000000000 -0500
---- lib/glob/glob.c 2014-03-20 09:01:26.000000000 -0400
-***************
-*** 180,202 ****
- int flags;
- {
-! char *pp, *pe, *t;
-! int n, r;
-
- pp = pat + 2;
-! pe = pp + strlen (pp) - 1; /*(*/
-! if (*pe != ')')
-! return 0;
-! if ((t = strchr (pp, '|')) == 0) /* easy case first */
- {
- *pe = '\0';
- r = skipname (pp, dname, flags); /*(*/
- *pe = ')';
- return r;
- }
- while (t = glob_patscan (pp, pe, '|'))
- {
- n = t[-1];
- t[-1] = '\0';
- r = skipname (pp, dname, flags);
- t[-1] = n;
- if (r == 0) /* if any pattern says not skip, we don't skip */
---- 180,215 ----
- int flags;
- {
-! char *pp, *pe, *t, *se;
-! int n, r, negate;
-
-+ negate = *pat == '!';
- pp = pat + 2;
-! se = pp + strlen (pp) - 1; /* end of string */
-! pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */
-! /* we should check for invalid extglob pattern here */
-! /* if pe != se we have more of the pattern at the end of the extglob
-! pattern. Check the easy case first ( */
-! if (pe == se && *pe == ')' && (t = strchr (pp, '|')) == 0)
- {
- *pe = '\0';
-+ #if defined (HANDLE_MULTIBYTE)
-+ r = mbskipname (pp, dname, flags);
-+ #else
- r = skipname (pp, dname, flags); /*(*/
-+ #endif
- *pe = ')';
- return r;
- }
-+
-+ /* check every subpattern */
- while (t = glob_patscan (pp, pe, '|'))
- {
- n = t[-1];
- t[-1] = '\0';
-+ #if defined (HANDLE_MULTIBYTE)
-+ r = mbskipname (pp, dname, flags);
-+ #else
- r = skipname (pp, dname, flags);
-+ #endif
- t[-1] = n;
- if (r == 0) /* if any pattern says not skip, we don't skip */
-***************
-*** 205,219 ****
- } /*(*/
-
-! if (pp == pe) /* glob_patscan might find end of pattern */
- return r;
-
-! *pe = '\0';
-! # if defined (HANDLE_MULTIBYTE)
-! r = mbskipname (pp, dname, flags); /*(*/
-! # else
-! r = skipname (pp, dname, flags); /*(*/
-! # endif
-! *pe = ')';
-! return r;
- }
- #endif
---- 218,227 ----
- } /*(*/
-
-! /* glob_patscan might find end of pattern */
-! if (pp == se)
- return r;
-
-! /* but if it doesn't then we didn't match a leading dot */
-! return 0;
- }
- #endif
-***************
-*** 278,289 ****
- {
- #if EXTENDED_GLOB
-! wchar_t *pp, *pe, *t, n;
-! int r;
-
- pp = pat + 2;
-! pe = pp + wcslen (pp) - 1; /*(*/
-! if (*pe != L')')
-! return 0;
-! if ((t = wcschr (pp, L'|')) == 0)
- {
- *pe = L'\0';
---- 286,298 ----
- {
- #if EXTENDED_GLOB
-! wchar_t *pp, *pe, *t, n, *se;
-! int r, negate;
-
-+ negate = *pat == L'!';
- pp = pat + 2;
-! se = pp + wcslen (pp) - 1; /*(*/
-! pe = glob_patscan_wc (pp, se, 0);
-!
-! if (pe == se && *pe == ')' && (t = wcschr (pp, L'|')) == 0)
- {
- *pe = L'\0';
-***************
-*** 292,295 ****
---- 301,306 ----
- return r;
- }
-+
-+ /* check every subpattern */
- while (t = glob_patscan_wc (pp, pe, '|'))
- {
-***************
-*** 306,313 ****
- return r;
-
-! *pe = L'\0';
-! r = wchkname (pp, dname); /*(*/
-! *pe = L')';
-! return r;
- #else
- return (wchkname (pat, dname));
---- 317,322 ----
- return r;
-
-! /* but if it doesn't then we didn't match a leading dot */
-! return 0;
- #else
- return (wchkname (pat, dname));
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 7
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 8
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-009 b/src/patches/bash/bash43-009
deleted file mode 100644
index 015835cde..000000000
--- a/src/patches/bash/bash43-009
+++ /dev/null
@@ -1,64 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-009
-
-Bug-Reported-by: Matthias Klose doko@debian.org
-Bug-Reference-ID: 53346FC8.6090005@debian.org
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00171.html
-
-Bug-Description:
-
-There is a problem with unsigned sign extension when attempting to reallocate
-the input line when it is fewer than 3 characters long and there has been a
-history expansion. The sign extension causes the shell to not reallocate the
-line, which results in a segmentation fault when it writes past the end.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3-patched/parse.y 2014-02-11 09:42:10.000000000 -0500
---- parse.y 2014-03-27 16:33:29.000000000 -0400
-***************
-*** 2425,2429 ****
- if (shell_input_line_terminator != EOF)
- {
-! if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3)
- shell_input_line = (char *)xrealloc (shell_input_line,
- 1 + (shell_input_line_size += 2));
---- 2425,2429 ----
- if (shell_input_line_terminator != EOF)
- {
-! if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size))
- shell_input_line = (char *)xrealloc (shell_input_line,
- 1 + (shell_input_line_size += 2));
-*** ../bash-4.3-patched/y.tab.c 2014-03-28 11:17:06.000000000 -0400
---- y.tab.c 2014-04-07 11:48:31.000000000 -0400
-***************
-*** 4737,4741 ****
- if (shell_input_line_terminator != EOF)
- {
-! if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3)
- shell_input_line = (char *)xrealloc (shell_input_line,
- 1 + (shell_input_line_size += 2));
---- 4737,4741 ----
- if (shell_input_line_terminator != EOF)
- {
-! if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size))
- shell_input_line = (char *)xrealloc (shell_input_line,
- 1 + (shell_input_line_size += 2));
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 8
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 9
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-010 b/src/patches/bash/bash43-010
deleted file mode 100644
index 835a96ead..000000000
--- a/src/patches/bash/bash43-010
+++ /dev/null
@@ -1,157 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-010
-
-Bug-Reported-by: Albert Shih Albert.Shih@obspm.fr
-Bug-Reference-ID: Wed, 5 Mar 2014 23:01:40 +0100
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00028.html
-
-Bug-Description:
-
-Patch (apply with `patch -p0'):
-
-This patch changes the behavior of programmable completion to compensate
-for two assumptions made by the bash-completion package. Bash-4.3 changed
-to dequote the argument to programmable completion only under certain
-circumstances, to make the behavior of compgen more consistent when run
-from the command line -- closer to the behavior when run by a shell function
-run as part of programmable completion. Bash-completion can pass quoted
-arguments to compgen when the original word to be completed was not quoted,
-expecting programmable completion to dequote the word before attempting
-completion.
-
-This patch fixes two cases:
-
-1. An empty string that bash-completion passes to compgen as a quoted null
- string ('').
-
-2. An unquoted word that bash-completion quotes using single quotes or
- backslashes before passing it to compgen.
-
-In these cases, since readline did not detect a quote character in the original
-word to be completed, bash-4.3
-
-*** ../bash-4.3/externs.h 2014-01-02 14:58:20.000000000 -0500
---- externs.h 2014-03-13 14:42:57.000000000 -0400
-***************
-*** 325,328 ****
---- 325,329 ----
- extern char *sh_backslash_quote_for_double_quotes __P((char *));
- extern int sh_contains_shell_metas __P((char *));
-+ extern int sh_contains_quotes __P((char *));
-
- /* declarations for functions defined in lib/sh/spell.c */
-*** ../bash-4.3/lib/sh/shquote.c 2013-03-31 21:53:32.000000000 -0400
---- lib/sh/shquote.c 2014-03-13 14:42:57.000000000 -0400
-***************
-*** 312,313 ****
---- 312,327 ----
- return (0);
- }
-+
-+ int
-+ sh_contains_quotes (string)
-+ char *string;
-+ {
-+ char *s;
-+
-+ for (s = string; s && *s; s++)
-+ {
-+ if (*s == ''' || *s == '"' || *s == '\')
-+ return 1;
-+ }
-+ return 0;
-+ }
-*** ../bash-4.3/pcomplete.c 2013-08-26 15:23:45.000000000 -0400
---- pcomplete.c 2014-03-25 17:23:23.000000000 -0400
-***************
-*** 184,187 ****
---- 184,188 ----
- COMPSPEC *pcomp_curcs;
- const char *pcomp_curcmd;
-+ const char *pcomp_curtxt;
-
- #ifdef DEBUG
-***************
-*** 754,757 ****
---- 755,784 ----
- dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
- }
-+ /* Intended to solve a mismatched assumption by bash-completion. If
-+ the text to be completed is empty, but bash-completion turns it into
-+ a quoted string ('') assuming that this code will dequote it before
-+ calling readline, do the dequoting. */
-+ else if (iscompgen && iscompleting &&
-+ pcomp_curtxt && *pcomp_curtxt == 0 &&
-+ text && (*text == ''' || *text == '"') && text[1] == text[0] && text[2] == 0 &&
-+ rl_filename_dequoting_function)
-+ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
-+ /* Another mismatched assumption by bash-completion. If compgen is being
-+ run as part of bash-completion, and the argument to compgen is not
-+ the same as the word originally passed to the programmable completion
-+ code, dequote the argument if it has quote characters. It's an
-+ attempt to detect when bash-completion is quoting its filename
-+ argument before calling compgen. */
-+ /* We could check whether gen_shell_function_matches is in the call
-+ stack by checking whether the gen-shell-function-matches tag is in
-+ the unwind-protect stack, but there's no function to do that yet.
-+ We could simply check whether we're executing in a function by
-+ checking variable_context, and may end up doing that. */
-+ else if (iscompgen && iscompleting && rl_filename_dequoting_function &&
-+ pcomp_curtxt && text &&
-+ STREQ (pcomp_curtxt, text) == 0 &&
-+ variable_context &&
-+ sh_contains_quotes (text)) /* guess */
-+ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
- else
- dfn = savestring (text);
-***************
-*** 1523,1527 ****
- {
- COMPSPEC *cs, *oldcs;
-! const char *oldcmd;
- STRINGLIST *ret;
-
---- 1550,1554 ----
- {
- COMPSPEC *cs, *oldcs;
-! const char *oldcmd, *oldtxt;
- STRINGLIST *ret;
-
-***************
-*** 1546,1552 ****
---- 1573,1581 ----
- oldcs = pcomp_curcs;
- oldcmd = pcomp_curcmd;
-+ oldtxt = pcomp_curtxt;
-
- pcomp_curcs = cs;
- pcomp_curcmd = cmd;
-+ pcomp_curtxt = word;
-
- ret = gen_compspec_completions (cs, cmd, word, start, end, foundp);
-***************
-*** 1554,1557 ****
---- 1583,1587 ----
- pcomp_curcs = oldcs;
- pcomp_curcmd = oldcmd;
-+ pcomp_curtxt = oldtxt;
-
- /* We need to conditionally handle setting *retryp here */
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 9
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 10
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-011 b/src/patches/bash/bash43-011
deleted file mode 100644
index cdc1572ee..000000000
--- a/src/patches/bash/bash43-011
+++ /dev/null
@@ -1,49 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-011
-
-Bug-Reported-by: Egmont Koblinger egmont@gmail.com
-Bug-Reference-ID: CAGWcZk+bU5Jo1M+tutGvL-250UBE9DXjpeJVofYJSFcqFEVfMg@mail.gmail.com
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00153.html
-
-Bug-Description:
-
-The signal handling changes to bash and readline (to avoid running any code
-in a signal handler context) cause the cursor to be placed on the wrong
-line of a multi-line command after a ^C interrupts editing.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3-patched/lib/readline/display.c 2013-12-27 13:10:56.000000000 -0500
---- lib/readline/display.c 2014-03-27 11:52:45.000000000 -0400
-***************
-*** 2678,2682 ****
- if (_rl_echoing_p)
- {
-! _rl_move_vert (_rl_vis_botlin);
- _rl_vis_botlin = 0;
- fflush (rl_outstream);
---- 2678,2683 ----
- if (_rl_echoing_p)
- {
-! if (_rl_vis_botlin > 0) /* minor optimization plus bug fix */
-! _rl_move_vert (_rl_vis_botlin);
- _rl_vis_botlin = 0;
- fflush (rl_outstream);
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 10
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 11
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-012 b/src/patches/bash/bash43-012
deleted file mode 100644
index 176fa15bd..000000000
--- a/src/patches/bash/bash43-012
+++ /dev/null
@@ -1,43 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-012
-
-Bug-Reported-by: Eduardo A. Bustamante Lópezdualbus@gmail.com
-Bug-Reference-ID: 5346B54C.4070205@case.edu
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00051.html
-
-Bug-Description:
-
-When a SIGCHLD trap runs a command containing a shell builtin while
-a script is running `wait' to wait for all running children to complete,
-the SIGCHLD trap will not be run once for each child that terminates.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3-patched/jobs.c 2014-03-28 10:54:19.000000000 -0400
---- jobs.c 2014-04-15 08:47:03.000000000 -0400
-***************
-*** 3598,3601 ****
---- 3598,3602 ----
- unwind_protect_pointer (the_pipeline);
- unwind_protect_pointer (subst_assign_varlist);
-+ unwind_protect_pointer (this_shell_builtin);
-
- /* We have to add the commands this way because they will be run
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 11
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 12
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-013 b/src/patches/bash/bash43-013
deleted file mode 100644
index 8f4006b48..000000000
--- a/src/patches/bash/bash43-013
+++ /dev/null
@@ -1,66 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-013
-
-Bug-Reported-by: Trond.Endrestol@ximalas.info
-Bug-Reference-ID: alpine.BSF.2.03.1404192114310.1973@enterprise.ximalas.info
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00069.html
-
-Bug-Description:
-
-Using reverse-i-search when horizontal scrolling is enabled does not redisplay
-the entire line containing the successful search results.
-
-Patch (apply with `patch -p0'):
-*** ../bash-4.3-patched/lib/readline/display.c 2014-04-08 18:19:36.000000000 -0400
---- lib/readline/display.c 2014-04-20 18:32:52.000000000 -0400
-***************
-*** 1638,1642 ****
- the spot of first difference is before the end of the invisible chars,
- lendiff needs to be adjusted. */
-! if (current_line == 0 && !_rl_horizontal_scroll_mode &&
- current_invis_chars != visible_wrap_offset)
- {
---- 1638,1642 ----
- the spot of first difference is before the end of the invisible chars,
- lendiff needs to be adjusted. */
-! if (current_line == 0 && /* !_rl_horizontal_scroll_mode && */
- current_invis_chars != visible_wrap_offset)
- {
-***************
-*** 1826,1831 ****
- _rl_last_c_pos += bytes_to_insert;
-
- if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new)))
-! goto clear_rest_of_line;
- }
- }
---- 1826,1836 ----
- _rl_last_c_pos += bytes_to_insert;
-
-+ /* XXX - we only want to do this if we are at the end of the line
-+ so we move there with _rl_move_cursor_relative */
- if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new)))
-! {
-! _rl_move_cursor_relative (ne-new, new);
-! goto clear_rest_of_line;
-! }
- }
- }
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 12
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 13
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-014 b/src/patches/bash/bash43-014
deleted file mode 100644
index f8371967f..000000000
--- a/src/patches/bash/bash43-014
+++ /dev/null
@@ -1,102 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-014
-
-Bug-Reported-by: Greg Wooledge wooledg@eeg.ccf.org
-Bug-Reference-ID: 20140418202123.GB7660@eeg.ccf.org
-Bug-Reference-URL: http://lists.gnu.org/archive/html/help-bash/2014-04/msg00004.html
-
-Bug-Description:
-
-Under certain circumstances, $@ is expanded incorrectly in contexts where
-word splitting is not performed.
-
-Patch (apply with `patch -p0'):
-*** ../bash-4.3-patched/subst.c 2014-01-23 16:26:37.000000000 -0500
---- subst.c 2014-04-19 15:41:26.000000000 -0400
-***************
-*** 3249,3254 ****
---- 3249,3256 ----
- return ((char *)NULL);
-
-+ expand_no_split_dollar_star = 1;
- w->flags |= W_NOSPLIT2;
- l = call_expand_word_internal (w, 0, 0, (int *)0, (int *)0);
-+ expand_no_split_dollar_star = 0;
- if (l)
- {
-***************
-*** 7848,7851 ****
---- 7850,7857 ----
- according to POSIX.2, this expands to a list of the positional
- parameters no matter what IFS is set to. */
-+ /* XXX - what to do when in a context where word splitting is not
-+ performed? Even when IFS is not the default, posix seems to imply
-+ that we behave like unquoted $* ? Maybe we should use PF_NOSPLIT2
-+ here. */
- temp = string_list_dollar_at (list, (pflags & PF_ASSIGNRHS) ? (quoted|Q_DOUBLE_QUOTES) : quoted);
-
-***************
-*** 8817,8820 ****
---- 8823,8827 ----
- {
- char *ifs_chars;
-+ char *tstring;
-
- ifs_chars = (quoted_dollar_at || has_dollar_at) ? ifs_value : (char *)NULL;
-***************
-*** 8831,8834 ****
---- 8838,8865 ----
- if (split_on_spaces)
- list = list_string (istring, " ", 1); /* XXX quoted == 1? */
-+ /* If we have $@ (has_dollar_at != 0) and we are in a context where we
-+ don't want to split the result (W_NOSPLIT2), and we are not quoted,
-+ we have already separated the arguments with the first character of
-+ $IFS. In this case, we want to return a list with a single word
-+ with the separator possibly replaced with a space (it's what other
-+ shells seem to do).
-+ quoted_dollar_at is internal to this function and is set if we are
-+ passed an argument that is unquoted (quoted == 0) but we encounter a
-+ double-quoted $@ while expanding it. */
-+ else if (has_dollar_at && quoted_dollar_at == 0 && ifs_chars && quoted == 0 && (word->flags & W_NOSPLIT2))
-+ {
-+ /* Only split and rejoin if we have to */
-+ if (*ifs_chars && *ifs_chars != ' ')
-+ {
-+ list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1);
-+ tstring = string_list (list);
-+ }
-+ else
-+ tstring = istring;
-+ tword = make_bare_word (tstring);
-+ if (tstring != istring)
-+ free (tstring);
-+ goto set_word_flags;
-+ }
- else if (has_dollar_at && ifs_chars)
- list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1);
-***************
-*** 8836,8839 ****
---- 8867,8871 ----
- {
- tword = make_bare_word (istring);
-+ set_word_flags:
- if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) || (quoted_state == WHOLLY_QUOTED))
- tword->flags |= W_QUOTED;
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 13
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 14
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-015 b/src/patches/bash/bash43-015
deleted file mode 100644
index 9c4e5ea48..000000000
--- a/src/patches/bash/bash43-015
+++ /dev/null
@@ -1,58 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-015
-
-Bug-Reported-by: Clark Wang dearvoid@gmail.com
-Bug-Reference-ID: CADv8-og2TOSoabXeNVXVGaXN3tEMHnYVq1rwOLe5meaRPSGRig@mail.gmail.com
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00095.html
-
-Bug-Description:
-
-When completing directory names, the directory name is dequoted twice.
-This causes problems for directories with single and double quotes in
-their names.
-
-Patch (apply with `patch -p0'):
-*** ../bash-4.3-patched/bashline.c 2014-02-09 19:56:58.000000000 -0500
---- bashline.c 2014-04-25 14:57:52.000000000 -0400
-***************
-*** 4168,4174 ****
-
- qc = rl_dispatching ? rl_completion_quote_character : 0;
-! dfn = bash_dequote_filename ((char *)text, qc);
- m1 = rl_completion_matches (dfn, rl_filename_completion_function);
-! free (dfn);
-
- if (m1 == 0 || m1[0] == 0)
---- 4209,4222 ----
-
- qc = rl_dispatching ? rl_completion_quote_character : 0;
-! /* If rl_completion_found_quote != 0, rl_completion_matches will call the
-! filename dequoting function, causing the directory name to be dequoted
-! twice. */
-! if (rl_dispatching && rl_completion_found_quote == 0)
-! dfn = bash_dequote_filename ((char *)text, qc);
-! else
-! dfn = (char *)text;
- m1 = rl_completion_matches (dfn, rl_filename_completion_function);
-! if (dfn != text)
-! free (dfn);
-
- if (m1 == 0 || m1[0] == 0)
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 14
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 15
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-016 b/src/patches/bash/bash43-016
deleted file mode 100644
index 882d5939b..000000000
--- a/src/patches/bash/bash43-016
+++ /dev/null
@@ -1,132 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-016
-
-Bug-Reported-by: Pierre Gaston pierre.gaston@gmail.com
-Bug-Reference-ID: CAPSX3sTCD61k1VQLJ5r-LWzEt+e7Xc-fxXmwn2u8EA5gJJej8Q@mail.gmail.com
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00100.html
-
-Bug-Description:
-
-An extended glob pattern containing a slash (`/') causes the globbing code
-to misinterpret it as a directory separator.
-
-Patch (apply with `patch -p0'):
-*** ../bash-4.3-patched/lib/glob/glob.c 2014-03-28 10:54:23.000000000 -0400
---- lib/glob/glob.c 2014-05-02 10:24:28.000000000 -0400
-***************
-*** 124,127 ****
---- 124,129 ----
- extern wchar_t *glob_patscan_wc __P((wchar_t *, wchar_t *, int));
-
-+ extern char *glob_dirscan __P((char *, int));
-+
- /* Compile `glob_loop.c' for single-byte characters. */
- #define CHAR unsigned char
-***************
-*** 188,191 ****
---- 190,196 ----
- pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */
- /* we should check for invalid extglob pattern here */
-+ if (pe == 0)
-+ return 0;
-+
- /* if pe != se we have more of the pattern at the end of the extglob
- pattern. Check the easy case first ( */
-***************
-*** 1016,1020 ****
- char **result;
- unsigned int result_size;
-! char *directory_name, *filename, *dname;
- unsigned int directory_len;
- int free_dirname; /* flag */
---- 1021,1025 ----
- char **result;
- unsigned int result_size;
-! char *directory_name, *filename, *dname, *fn;
- unsigned int directory_len;
- int free_dirname; /* flag */
-***************
-*** 1032,1035 ****
---- 1037,1052 ----
- /* Find the filename. */
- filename = strrchr (pathname, '/');
-+ #if defined (EXTENDED_GLOB)
-+ if (filename && extended_glob)
-+ {
-+ fn = glob_dirscan (pathname, '/');
-+ #if DEBUG_MATCHING
-+ if (fn != filename)
-+ fprintf (stderr, "glob_filename: glob_dirscan: fn (%s) != filename (%s)\n", fn ? fn : "(null)", filename);
-+ #endif
-+ filename = fn;
-+ }
-+ #endif
-+
- if (filename == NULL)
- {
-*** ../bash-4.3-patched/lib/glob/gmisc.c 2014-03-28 10:54:23.000000000 -0400
---- lib/glob/gmisc.c 2014-05-02 09:35:57.000000000 -0400
-***************
-*** 43,46 ****
---- 43,48 ----
- #define WRPAREN L')'
-
-+ extern char *glob_patscan __P((char *, char *, int));
-+
- /* Return 1 of the first character of WSTRING could match the first
- character of pattern WPAT. Wide character version. */
-***************
-*** 376,377 ****
---- 378,410 ----
- return matlen;
- }
-+
-+ /* Skip characters in PAT and return the final occurrence of DIRSEP. This
-+ is only called when extended_glob is set, so we have to skip over extglob
-+ patterns x(...) */
-+ char *
-+ glob_dirscan (pat, dirsep)
-+ char *pat;
-+ int dirsep;
-+ {
-+ char *p, *d, *pe, *se;
-+
-+ d = pe = se = 0;
-+ for (p = pat; p && *p; p++)
-+ {
-+ if (extglob_pattern_p (p))
-+ {
-+ if (se == 0)
-+ se = p + strlen (p) - 1;
-+ pe = glob_patscan (p + 2, se, 0);
-+ if (pe == 0)
-+ continue;
-+ else if (*pe == 0)
-+ break;
-+ p = pe - 1; /* will do increment above */
-+ continue;
-+ }
-+ if (*p == dirsep)
-+ d = p;
-+ }
-+ return d;
-+ }
-
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 15
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 16
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-017 b/src/patches/bash/bash43-017
deleted file mode 100644
index 4016fb934..000000000
--- a/src/patches/bash/bash43-017
+++ /dev/null
@@ -1,51 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-017
-
-Bug-Reported-by: Dan Douglas ormaaj@gmail.com
-Bug-Reference-ID: 7781746.RhfoTROLxF@smorgbox
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-05/msg00026.html
-
-Bug-Description:
-
-The code that creates local variables should not clear the `invisible'
-attribute when returning an existing local variable. Let the code that
-actually assigns a value clear it.
-
-Patch (apply with `patch -p0'):
-*** ../bash-4.3-patched/variables.c 2014-02-14 11:55:12.000000000 -0500
---- variables.c 2014-05-07 10:53:57.000000000 -0400
-***************
-*** 2198,2205 ****
- old_var = find_variable (name);
- if (old_var && local_p (old_var) && old_var->context == variable_context)
-! {
-! VUNSETATTR (old_var, att_invisible); /* XXX */
-! return (old_var);
-! }
-
- was_tmpvar = old_var && tempvar_p (old_var);
---- 2260,2264 ----
- old_var = find_variable (name);
- if (old_var && local_p (old_var) && old_var->context == variable_context)
-! return (old_var);
-
- was_tmpvar = old_var && tempvar_p (old_var);
-
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 16
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 17
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-018 b/src/patches/bash/bash43-018
deleted file mode 100644
index 39499f663..000000000
--- a/src/patches/bash/bash43-018
+++ /dev/null
@@ -1,44 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-018
-
-Bug-Reported-by: Geir Hauge geir.hauge@gmail.com
-Bug-Reference-ID: CAO-BiTLOvfPXDypg61jcBausADrxUKJejakV2WTWP26cW0=rgA@mail.gmail.com
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-05/msg00040.html
-
-Bug-Description:
-
-When assigning an array variable using the compound assignment syntax,
-but using `declare' with the rhs of the compound assignment quoted, the
-shell did not mark the variable as visible after successfully performing
-the assignment.
-
-Patch (apply with `patch -p0'):
-*** ../bash-4.3-patched/arrayfunc.c 2014-03-28 10:54:21.000000000 -0400
---- arrayfunc.c 2014-05-12 11:19:00.000000000 -0400
-***************
-*** 180,183 ****
---- 180,184 ----
- FREE (newval);
-
-+ VUNSETATTR (entry, att_invisible); /* no longer invisible */
- return (entry);
- }
-
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 17
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 18
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-019 b/src/patches/bash/bash43-019
deleted file mode 100644
index a93714beb..000000000
--- a/src/patches/bash/bash43-019
+++ /dev/null
@@ -1,84 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-019
-
-Bug-Reported-by: John Lenton
-Bug-Reference-ID:
-Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1317476
-
-Bug-Description:
-
-The -t timeout option to `read' does not work when the -e option is used.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3-patched/lib/readline/input.c 2014-01-10 15:07:08.000000000 -0500
---- lib/readline/input.c 2014-05-22 18:40:59.000000000 -0400
-***************
-*** 535,540 ****
---- 538,551 ----
- else if (_rl_caught_signal == SIGHUP || _rl_caught_signal == SIGTERM)
- return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF);
-+ /* keyboard-generated signals of interest */
- else if (_rl_caught_signal == SIGINT || _rl_caught_signal == SIGQUIT)
- RL_CHECK_SIGNALS ();
-+ /* non-keyboard-generated signals of interest */
-+ else if (_rl_caught_signal == SIGALRM
-+ #if defined (SIGVTALRM)
-+ || _rl_caught_signal == SIGVTALRM
-+ #endif
-+ )
-+ RL_CHECK_SIGNALS ();
-
- if (rl_signal_event_hook)
-*** ../bash-4.3-patched/builtins/read.def 2013-09-02 11:54:00.000000000 -0400
---- builtins/read.def 2014-05-08 11:43:35.000000000 -0400
-***************
-*** 443,447 ****
- #if defined (READLINE)
- if (edit)
-! add_unwind_protect (reset_attempted_completion_function, (char *)NULL);
- #endif
- falarm (tmsec, tmusec);
---- 443,450 ----
- #if defined (READLINE)
- if (edit)
-! {
-! add_unwind_protect (reset_attempted_completion_function, (char *)NULL);
-! add_unwind_protect (bashline_reset_event_hook, (char *)NULL);
-! }
- #endif
- falarm (tmsec, tmusec);
-***************
-*** 1022,1025 ****
---- 1025,1029 ----
- old_attempted_completion_function = rl_attempted_completion_function;
- rl_attempted_completion_function = (rl_completion_func_t *)NULL;
-+ bashline_set_event_hook ();
- if (itext)
- {
-***************
-*** 1033,1036 ****
---- 1037,1041 ----
- rl_attempted_completion_function = old_attempted_completion_function;
- old_attempted_completion_function = (rl_completion_func_t *)NULL;
-+ bashline_reset_event_hook ();
-
- if (ret == 0)
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 18
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 19
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-020 b/src/patches/bash/bash43-020
deleted file mode 100644
index 5f533ef8d..000000000
--- a/src/patches/bash/bash43-020
+++ /dev/null
@@ -1,110 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-020
-
-Bug-Reported-by: Jared Yanovich slovichon@gmail.com
-Bug-Reference-ID: 20140417073654.GB26875@nightderanger.psc.edu
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00065.html
-
-Bug-Description:
-
-When PS2 contains a command substitution, here-documents entered in an
-interactive shell can sometimes cause a segmentation fault.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3-patched/shell.h 2012-12-25 21:11:01.000000000 -0500
---- shell.h 2014-06-03 09:24:28.000000000 -0400
-***************
-*** 169,173 ****
- int expand_aliases;
- int echo_input_at_read;
-!
- } sh_parser_state_t;
-
---- 169,174 ----
- int expand_aliases;
- int echo_input_at_read;
-! int need_here_doc;
-!
- } sh_parser_state_t;
-
-*** ../bash-4.3-patched/parse.y 2014-05-14 09:16:40.000000000 -0400
---- parse.y 2014-04-30 09:27:59.000000000 -0400
-***************
-*** 2643,2647 ****
-
- r = 0;
-! while (need_here_doc)
- {
- parser_state |= PST_HEREDOC;
---- 2643,2647 ----
-
- r = 0;
-! while (need_here_doc > 0)
- {
- parser_state |= PST_HEREDOC;
-***************
-*** 6076,6079 ****
---- 6076,6080 ----
- ps->expand_aliases = expand_aliases;
- ps->echo_input_at_read = echo_input_at_read;
-+ ps->need_here_doc = need_here_doc;
-
- ps->token = token;
-***************
-*** 6124,6127 ****
---- 6125,6129 ----
- expand_aliases = ps->expand_aliases;
- echo_input_at_read = ps->echo_input_at_read;
-+ need_here_doc = ps->need_here_doc;
-
- FREE (token);
-*** ../bash-4.3-patched/y.tab.c 2014-04-07 11:56:12.000000000 -0400
---- y.tab.c 2014-07-30 09:55:57.000000000 -0400
-***************
-*** 4955,4959 ****
-
- r = 0;
-! while (need_here_doc)
- {
- parser_state |= PST_HEREDOC;
---- 5151,5155 ----
-
- r = 0;
-! while (need_here_doc > 0)
- {
- parser_state |= PST_HEREDOC;
-***************
-*** 8388,8391 ****
---- 8584,8588 ----
- ps->expand_aliases = expand_aliases;
- ps->echo_input_at_read = echo_input_at_read;
-+ ps->need_here_doc = need_here_doc;
-
- ps->token = token;
-***************
-*** 8436,8439 ****
---- 8633,8637 ----
- expand_aliases = ps->expand_aliases;
- echo_input_at_read = ps->echo_input_at_read;
-+ need_here_doc = ps->need_here_doc;
-
- FREE (token);
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 19
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 20
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-021 b/src/patches/bash/bash43-021
deleted file mode 100644
index fd1c945ec..000000000
--- a/src/patches/bash/bash43-021
+++ /dev/null
@@ -1,52 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-021
-
-Bug-Reported-by: Jared Yanovich slovichon@gmail.com
-Bug-Reference-ID: 20140625225019.GJ17044@nightderanger.psc.edu
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00070.html
-
-Bug-Description:
-
-When the readline `revert-all-at-newline' option is set, pressing newline
-when the current line is one retrieved from history results in a double free
-and a segmentation fault.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3-patched/lib/readline/misc.c 2012-09-01 18:03:11.000000000 -0400
---- lib/readline/misc.c 2014-06-30 13:41:19.000000000 -0400
-***************
-*** 462,465 ****
---- 462,466 ----
- /* Set up rl_line_buffer and other variables from history entry */
- rl_replace_from_history (entry, 0); /* entry->line is now current */
-+ entry->data = 0; /* entry->data is now current undo list */
- /* Undo all changes to this history entry */
- while (rl_undo_list)
-***************
-*** 469,473 ****
- FREE (entry->line);
- entry->line = savestring (rl_line_buffer);
-- entry->data = 0;
- }
- entry = previous_history ();
---- 470,473 ----
-
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 20
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 21
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-022 b/src/patches/bash/bash43-022
deleted file mode 100644
index 7ce39ec0a..000000000
--- a/src/patches/bash/bash43-022
+++ /dev/null
@@ -1,56 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-022
-
-Bug-Reported-by: scorp.dev.null@gmail.com
-Bug-Reference-ID: E1WxXw8-0007iE-Bi@pcm14
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00061.html
-
-Bug-Description:
-
-Using nested pipelines within loops with the `lastpipe' option set can result
-in a segmentation fault.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3-patched/execute_cmd.c 2014-01-31 10:54:52.000000000 -0500
---- execute_cmd.c 2014-06-19 08:05:49.000000000 -0400
-***************
-*** 2410,2414 ****
- lstdin = wait_for (lastpid);
- #if defined (JOB_CONTROL)
-! exec_result = job_exit_status (lastpipe_jid);
- #endif
- unfreeze_jobs_list ();
---- 2425,2438 ----
- lstdin = wait_for (lastpid);
- #if defined (JOB_CONTROL)
-! /* If wait_for removes the job from the jobs table, use result of last
-! command as pipeline's exit status as usual. The jobs list can get
-! frozen and unfrozen at inconvenient times if there are multiple pipelines
-! running simultaneously. */
-! if (INVALID_JOB (lastpipe_jid) == 0)
-! exec_result = job_exit_status (lastpipe_jid);
-! else if (pipefail_opt)
-! exec_result = exec_result | lstdin; /* XXX */
-! /* otherwise we use exec_result */
-!
- #endif
- unfreeze_jobs_list ();
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 21
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 22
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-023 b/src/patches/bash/bash43-023
deleted file mode 100644
index d1e4e9d7c..000000000
--- a/src/patches/bash/bash43-023
+++ /dev/null
@@ -1,104 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-023
-
-Bug-Reported-by: Tim Friske me@timfriske.com
-Bug-Reference-ID: CAM1RzOcOR9zzC2i+aeES6LtbHNHoOV+0pZEYPrqxv_QAii-RXA@mail.gmail.com
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00056.html
-
-Bug-Description:
-
-Bash does not correctly parse process substitution constructs that contain
-unbalanced parentheses as part of the contained command.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3-patched/subst.h 2014-01-11 21:02:27.000000000 -0500
---- subst.h 2014-07-20 17:25:01.000000000 -0400
-***************
-*** 83,87 ****
- Start extracting at (SINDEX) as if we had just seen "<(".
- Make (SINDEX) get the position just after the matching ")". */
-! extern char *extract_process_subst __P((char *, char *, int *));
- #endif /* PROCESS_SUBSTITUTION */
-
---- 83,87 ----
- Start extracting at (SINDEX) as if we had just seen "<(".
- Make (SINDEX) get the position just after the matching ")". */
-! extern char *extract_process_subst __P((char *, char *, int *, int));
- #endif /* PROCESS_SUBSTITUTION */
-
-*** ../bash-4.3-patched/subst.c 2014-05-15 08:26:45.000000000 -0400
---- subst.c 2014-07-20 17:26:44.000000000 -0400
-***************
-*** 1193,1202 ****
- Make (SINDEX) get the position of the matching ")". */ /*))*/
- char *
-! extract_process_subst (string, starter, sindex)
- char *string;
- char *starter;
- int *sindex;
- {
- return (extract_delimited_string (string, sindex, starter, "(", ")", SX_COMMAND));
- }
- #endif /* PROCESS_SUBSTITUTION */
---- 1193,1208 ----
- Make (SINDEX) get the position of the matching ")". */ /*))*/
- char *
-! extract_process_subst (string, starter, sindex, xflags)
- char *string;
- char *starter;
- int *sindex;
-+ int xflags;
- {
-+ #if 0
- return (extract_delimited_string (string, sindex, starter, "(", ")", SX_COMMAND));
-+ #else
-+ xflags |= (no_longjmp_on_fatal_error ? SX_NOLONGJMP : 0);
-+ return (xparse_dolparen (string, string+*sindex, sindex, xflags));
-+ #endif
- }
- #endif /* PROCESS_SUBSTITUTION */
-***************
-*** 1786,1790 ****
- if (string[si] == '\0')
- CQ_RETURN(si);
-! temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si);
- free (temp); /* no SX_ALLOC here */
- i = si;
---- 1792,1796 ----
- if (string[si] == '\0')
- CQ_RETURN(si);
-! temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si, 0);
- free (temp); /* no SX_ALLOC here */
- i = si;
-***************
-*** 8250,8254 ****
- t_index = sindex + 1; /* skip past both '<' and LPAREN */
-
-! temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index); /*))*/
- sindex = t_index;
-
---- 8256,8260 ----
- t_index = sindex + 1; /* skip past both '<' and LPAREN */
-
-! temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index, 0); /*))*/
- sindex = t_index;
-
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 22
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 23
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-024 b/src/patches/bash/bash43-024
deleted file mode 100644
index a24b8fbbc..000000000
--- a/src/patches/bash/bash43-024
+++ /dev/null
@@ -1,54 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-024
-
-Bug-Reported-by: Corentin Peuvrel cpeuvrel@pom-monitoring.com
-Bug-Reference-ID: 53CE9E5D.6050203@pom-monitoring.com
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-07/msg00021.html
-
-Bug-Description:
-
-Indirect variable references do not work correctly if the reference
-variable expands to an array reference using a subscript other than 0
-(e.g., foo='bar[1]' ; echo ${!foo}).
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3-patched/subst.c 2014-06-03 09:32:44.000000000 -0400
---- subst.c 2014-07-23 09:58:19.000000000 -0400
-***************
-*** 7375,7379 ****
-
- if (want_indir)
-! tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
- else
- tdesc = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND|(pflags&(PF_NOSPLIT2|PF_ASSIGNRHS)), &ind);
---- 7445,7455 ----
-
- if (want_indir)
-! {
-! tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
-! /* Turn off the W_ARRAYIND flag because there is no way for this function
-! to return the index we're supposed to be using. */
-! if (tdesc && tdesc->flags)
-! tdesc->flags &= ~W_ARRAYIND;
-! }
- else
- tdesc = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND|(pflags&(PF_NOSPLIT2|PF_ASSIGNRHS)), &ind);
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 23
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 24
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-025 b/src/patches/bash/bash43-025
deleted file mode 100644
index 721aca030..000000000
--- a/src/patches/bash/bash43-025
+++ /dev/null
@@ -1,123 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-025
-
-Bug-Reported-by: Stephane Chazelas stephane.chazelas@gmail.com
-Bug-Reference-ID:
-Bug-Reference-URL:
-
-Bug-Description:
-
-Under certain circumstances, bash will execute user code while processing the
-environment for exported function definitions.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3-patched/builtins/common.h 2013-07-08 16:54:47.000000000 -0400
---- builtins/common.h 2014-09-12 14:25:47.000000000 -0400
-***************
-*** 34,37 ****
---- 49,54 ----
- #define SEVAL_PARSEONLY 0x020
- #define SEVAL_NOLONGJMP 0x040
-+ #define SEVAL_FUNCDEF 0x080 /* only allow function definitions */
-+ #define SEVAL_ONECMD 0x100 /* only allow a single command */
-
- /* Flags for describe_command, shared between type.def and command.def */
-*** ../bash-4.3-patched/builtins/evalstring.c 2014-02-11 09:42:10.000000000 -0500
---- builtins/evalstring.c 2014-09-14 14:15:13.000000000 -0400
-***************
-*** 309,312 ****
---- 313,324 ----
- struct fd_bitmap *bitmap;
-
-+ if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def)
-+ {
-+ internal_warning ("%s: ignoring function definition attempt", from_file);
-+ should_jump_to_top_level = 0;
-+ last_result = last_command_exit_value = EX_BADUSAGE;
-+ break;
-+ }
-+
- bitmap = new_fd_bitmap (FD_BITMAP_SIZE);
- begin_unwind_frame ("pe_dispose");
-***************
-*** 369,372 ****
---- 381,387 ----
- dispose_fd_bitmap (bitmap);
- discard_unwind_frame ("pe_dispose");
-+
-+ if (flags & SEVAL_ONECMD)
-+ break;
- }
- }
-*** ../bash-4.3-patched/variables.c 2014-05-15 08:26:50.000000000 -0400
---- variables.c 2014-09-14 14:23:35.000000000 -0400
-***************
-*** 359,369 ****
- strcpy (temp_string + char_index + 1, string);
-
-! if (posixly_correct == 0 || legal_identifier (name))
-! parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST);
-!
-! /* Ancient backwards compatibility. Old versions of bash exported
-! functions like name()=() {...} */
-! if (name[char_index - 1] == ')' && name[char_index - 2] == '(')
-! name[char_index - 2] = '\0';
-
- if (temp_var = find_function (name))
---- 364,372 ----
- strcpy (temp_string + char_index + 1, string);
-
-! /* Don't import function names that are invalid identifiers from the
-! environment, though we still allow them to be defined as shell
-! variables. */
-! if (legal_identifier (name))
-! parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
-
- if (temp_var = find_function (name))
-***************
-*** 382,389 ****
- report_error (_("error importing function definition for `%s'"), name);
- }
--
-- /* ( */
-- if (name[char_index - 1] == ')' && name[char_index - 2] == '\0')
-- name[char_index - 2] = '('; /* ) */
- }
- #if defined (ARRAY_VARS)
---- 385,388 ----
-*** ../bash-4.3-patched/subst.c 2014-08-11 11:16:35.000000000 -0400
---- subst.c 2014-09-12 15:31:04.000000000 -0400
-***************
-*** 8048,8052 ****
- goto return0;
- }
-! else if (var = find_variable_last_nameref (temp1))
- {
- temp = nameref_cell (var);
---- 8118,8124 ----
- goto return0;
- }
-! else if (var && (invisible_p (var) || var_isset (var) == 0))
-! temp = (char *)NULL;
-! else if ((var = find_variable_last_nameref (temp1)) && var_isset (var) && invisible_p (var) == 0)
- {
- temp = nameref_cell (var);
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 24
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 25
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-026 b/src/patches/bash/bash43-026
deleted file mode 100644
index e48141b01..000000000
--- a/src/patches/bash/bash43-026
+++ /dev/null
@@ -1,60 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-026
-
-Bug-Reported-by: Tavis Ormandy <taviso () cmpxchg8b com>
-Bug-Reference-ID:
-Bug-Reference-URL:
http://twitter.com/taviso/statuses/514887394294652929
-
-Bug-Description:
-
-Under certain circumstances, bash can incorrectly save a lookahead character and
-return it on a subsequent call, even when reading a new line.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3.25/parse.y 2014-07-30 10:14:31.000000000 -0400
---- parse.y 2014-09-25 20:20:21.000000000 -0400
-***************
-*** 2954,2957 ****
---- 2954,2959 ----
- word_desc_to_read = (WORD_DESC *)NULL;
-
-+ eol_ungetc_lookahead = 0;
-+
- current_token = '\n'; /* XXX */
- last_read_token = '\n';
-*** ../bash-4.3.25/y.tab.c 2014-07-30 10:14:32.000000000 -0400
---- y.tab.c 2014-09-25 20:21:48.000000000 -0400
-***************
-*** 5266,5269 ****
---- 5266,5271 ----
- word_desc_to_read = (WORD_DESC *)NULL;
-
-+ eol_ungetc_lookahead = 0;
-+
- current_token = '\n'; /* XXX */
- last_read_token = '\n';
-***************
-*** 8540,8542 ****
- }
- #endif /* HANDLE_MULTIBYTE */
--
---- 8542,8543 ----
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 25
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 26
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-027 b/src/patches/bash/bash43-027
deleted file mode 100644
index ef48bd82d..000000000
--- a/src/patches/bash/bash43-027
+++ /dev/null
@@ -1,221 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-027
-
-Bug-Reported-by: Florian Weimer
fweimer@redhat.com
-Bug-Reference-ID:
-Bug-Reference-URL:
-
-Bug-Description:
-
-This patch changes the encoding bash uses for exported functions to avoid
-clashes with shell variables and to avoid depending only on an environment
-variable's contents to determine whether or not to interpret it as a shell
-function.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3.26/variables.c 2014-09-25 23:02:18.000000000 -0400
---- variables.c 2014-09-27 20:52:04.000000000 -0400
-***************
-*** 84,87 ****
---- 84,92 ----
- #define ifsname(s) ((s)[0] == 'I' && (s)[1] == 'F' && (s)[2] == 'S' && (s)[3] == '\0')
-
-+ #define BASHFUNC_PREFIX "BASH_FUNC_"
-+ #define BASHFUNC_PREFLEN 10 /* == strlen(BASHFUNC_PREFIX */
-+ #define BASHFUNC_SUFFIX "%%"
-+ #define BASHFUNC_SUFFLEN 2 /* == strlen(BASHFUNC_SUFFIX) */
-+
- extern char **environ;
-
-***************
-*** 280,284 ****
- static void dispose_temporary_env __P((sh_free_func_t *));
-
-! static inline char *mk_env_string __P((const char *, const char *));
- static char **make_env_array_from_var_list __P((SHELL_VAR **));
- static char **make_var_export_array __P((VAR_CONTEXT *));
---- 285,289 ----
- static void dispose_temporary_env __P((sh_free_func_t *));
-
-! static inline char *mk_env_string __P((const char *, const char *, int));
- static char **make_env_array_from_var_list __P((SHELL_VAR **));
- static char **make_var_export_array __P((VAR_CONTEXT *));
-***************
-*** 350,369 ****
- /* If exported function, define it now. Don't import functions from
- the environment in privileged mode. */
-! if (privmode == 0 && read_but_dont_execute == 0 && STREQN ("() {", string, 4))
- {
- string_length = strlen (string);
-! temp_string = (char *)xmalloc (3 + string_length + char_index);
-
-! strcpy (temp_string, name);
-! temp_string[char_index] = ' ';
-! strcpy (temp_string + char_index + 1, string);
-
- /* Don't import function names that are invalid identifiers from the
- environment, though we still allow them to be defined as shell
- variables. */
-! if (legal_identifier (name))
-! parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
-
-! if (temp_var = find_function (name))
- {
- VSETATTR (temp_var, (att_exported|att_imported));
---- 355,385 ----
- /* If exported function, define it now. Don't import functions from
- the environment in privileged mode. */
-! if (privmode == 0 && read_but_dont_execute == 0 &&
-! STREQN (BASHFUNC_PREFIX, name, BASHFUNC_PREFLEN) &&
-! STREQ (BASHFUNC_SUFFIX, name + char_index - BASHFUNC_SUFFLEN) &&
-! STREQN ("() {", string, 4))
- {
-+ size_t namelen;
-+ char *tname; /* desired imported function name */
-+
-+ namelen = char_index - BASHFUNC_PREFLEN - BASHFUNC_SUFFLEN;
-+
-+ tname = name + BASHFUNC_PREFLEN; /* start of func name */
-+ tname[namelen] = '\0'; /* now tname == func name */
-+
- string_length = strlen (string);
-! temp_string = (char *)xmalloc (namelen + string_length + 2);
-
-! memcpy (temp_string, tname, namelen);
-! temp_string[namelen] = ' ';
-! memcpy (temp_string + namelen + 1, string, string_length + 1);
-
- /* Don't import function names that are invalid identifiers from the
- environment, though we still allow them to be defined as shell
- variables. */
-! if (absolute_program (tname) == 0 && (posixly_correct == 0 || legal_identifier (tname)))
-! parse_and_execute (temp_string, tname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
-
-! if (temp_var = find_function (tname))
- {
- VSETATTR (temp_var, (att_exported|att_imported));
-***************
-*** 378,383 ****
- }
- last_command_exit_value = 1;
-! report_error (_("error importing function definition for `%s'"), name);
- }
- }
- #if defined (ARRAY_VARS)
---- 394,402 ----
- }
- last_command_exit_value = 1;
-! report_error (_("error importing function definition for `%s'"), tname);
- }
-+
-+ /* Restore original suffix */
-+ tname[namelen] = BASHFUNC_SUFFIX[0];
- }
- #if defined (ARRAY_VARS)
-***************
-*** 2955,2959 ****
-
- INVALIDATE_EXPORTSTR (var);
-! var->exportstr = mk_env_string (name, value);
-
- array_needs_making = 1;
---- 2974,2978 ----
-
- INVALIDATE_EXPORTSTR (var);
-! var->exportstr = mk_env_string (name, value, 0);
-
- array_needs_making = 1;
-***************
-*** 3853,3871 ****
-
- static inline char *
-! mk_env_string (name, value)
- const char *name, *value;
- {
-! int name_len, value_len;
-! char *p;
-
- name_len = strlen (name);
- value_len = STRLEN (value);
-! p = (char *)xmalloc (2 + name_len + value_len);
-! strcpy (p, name);
-! p[name_len] = '=';
- if (value && *value)
-! strcpy (p + name_len + 1, value);
- else
-! p[name_len + 1] = '\0';
- return (p);
- }
---- 3872,3911 ----
-
- static inline char *
-! mk_env_string (name, value, isfunc)
- const char *name, *value;
-+ int isfunc;
- {
-! size_t name_len, value_len;
-! char *p, *q;
-
- name_len = strlen (name);
- value_len = STRLEN (value);
-!
-! /* If we are exporting a shell function, construct the encoded function
-! name. */
-! if (isfunc && value)
-! {
-! p = (char *)xmalloc (BASHFUNC_PREFLEN + name_len + BASHFUNC_SUFFLEN + value_len + 2);
-! q = p;
-! memcpy (q, BASHFUNC_PREFIX, BASHFUNC_PREFLEN);
-! q += BASHFUNC_PREFLEN;
-! memcpy (q, name, name_len);
-! q += name_len;
-! memcpy (q, BASHFUNC_SUFFIX, BASHFUNC_SUFFLEN);
-! q += BASHFUNC_SUFFLEN;
-! }
-! else
-! {
-! p = (char *)xmalloc (2 + name_len + value_len);
-! memcpy (p, name, name_len);
-! q = p + name_len;
-! }
-!
-! q[0] = '=';
- if (value && *value)
-! memcpy (q + 1, value, value_len + 1);
- else
-! q[1] = '\0';
-!
- return (p);
- }
-***************
-*** 3953,3957 ****
- using the cached exportstr... */
- list[list_index] = USE_EXPORTSTR ? savestring (value)
-! : mk_env_string (var->name, value);
-
- if (USE_EXPORTSTR == 0)
---- 3993,3997 ----
- using the cached exportstr... */
- list[list_index] = USE_EXPORTSTR ? savestring (value)
-! : mk_env_string (var->name, value, function_p (var));
-
- if (USE_EXPORTSTR == 0)
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 26
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 27
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-028 b/src/patches/bash/bash43-028
deleted file mode 100644
index 7448cf814..000000000
--- a/src/patches/bash/bash43-028
+++ /dev/null
@@ -1,2265 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-028
-
-Bug-Reported-by: Florian Weimer
fweimer@redhat.com
-Bug-Reference-ID:
-Bug-Reference-URL:
-
-Bug-Description:
-
-There are two local buffer overflows in parse.y that can cause the shell
-to dump core when given many here-documents attached to a single command
-or many nested loops.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3-patched/parse.y 2014-09-25 23:02:35.000000000 -0400
---- parse.y 2014-09-29 16:47:03.000000000 -0400
-***************
-*** 169,172 ****
---- 169,175 ----
- static int reserved_word_acceptable __P((int));
- static int yylex __P((void));
-+
-+ static void push_heredoc __P((REDIRECT *));
-+ static char *mk_alexpansion __P((char *));
- static int alias_expand_token __P((char *));
- static int time_command_acceptable __P((void));
-***************
-*** 266,270 ****
- /* Variables to manage the task of reading here documents, because we need to
- defer the reading until after a complete command has been collected. */
-! static REDIRECT *redir_stack[10];
- int need_here_doc;
-
---- 269,275 ----
- /* Variables to manage the task of reading here documents, because we need to
- defer the reading until after a complete command has been collected. */
-! #define HEREDOC_MAX 16
-!
-! static REDIRECT *redir_stack[HEREDOC_MAX];
- int need_here_doc;
-
-***************
-*** 308,312 ****
- index is decremented after a case, select, or for command is parsed. */
- #define MAX_CASE_NEST 128
-! static int word_lineno[MAX_CASE_NEST];
- static int word_top = -1;
-
---- 313,317 ----
- index is decremented after a case, select, or for command is parsed. */
- #define MAX_CASE_NEST 128
-! static int word_lineno[MAX_CASE_NEST+1];
- static int word_top = -1;
-
-***************
-*** 521,525 ****
- redir.filename = $2;
- $$ = make_redirection (source, r_reading_until, redir, 0);
-! redir_stack[need_here_doc++] = $$;
- }
- | NUMBER LESS_LESS WORD
---- 526,530 ----
- redir.filename = $2;
- $$ = make_redirection (source, r_reading_until, redir, 0);
-! push_heredoc ($$);
- }
- | NUMBER LESS_LESS WORD
-***************
-*** 528,532 ****
- redir.filename = $3;
- $$ = make_redirection (source, r_reading_until, redir, 0);
-! redir_stack[need_here_doc++] = $$;
- }
- | REDIR_WORD LESS_LESS WORD
---- 533,537 ----
- redir.filename = $3;
- $$ = make_redirection (source, r_reading_until, redir, 0);
-! push_heredoc ($$);
- }
- | REDIR_WORD LESS_LESS WORD
-***************
-*** 535,539 ****
- redir.filename = $3;
- $$ = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN);
-! redir_stack[need_here_doc++] = $$;
- }
- | LESS_LESS_MINUS WORD
---- 540,544 ----
- redir.filename = $3;
- $$ = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN);
-! push_heredoc ($$);
- }
- | LESS_LESS_MINUS WORD
-***************
-*** 542,546 ****
- redir.filename = $2;
- $$ = make_redirection (source, r_deblank_reading_until, redir, 0);
-! redir_stack[need_here_doc++] = $$;
- }
- | NUMBER LESS_LESS_MINUS WORD
---- 547,551 ----
- redir.filename = $2;
- $$ = make_redirection (source, r_deblank_reading_until, redir, 0);
-! push_heredoc ($$);
- }
- | NUMBER LESS_LESS_MINUS WORD
-***************
-*** 549,553 ****
- redir.filename = $3;
- $$ = make_redirection (source, r_deblank_reading_until, redir, 0);
-! redir_stack[need_here_doc++] = $$;
- }
- | REDIR_WORD LESS_LESS_MINUS WORD
---- 554,558 ----
- redir.filename = $3;
- $$ = make_redirection (source, r_deblank_reading_until, redir, 0);
-! push_heredoc ($$);
- }
- | REDIR_WORD LESS_LESS_MINUS WORD
-***************
-*** 556,560 ****
- redir.filename = $3;
- $$ = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN);
-! redir_stack[need_here_doc++] = $$;
- }
- | LESS_LESS_LESS WORD
---- 561,565 ----
- redir.filename = $3;
- $$ = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN);
-! push_heredoc ($$);
- }
- | LESS_LESS_LESS WORD
-***************
-*** 2637,2640 ****
---- 2642,2660 ----
- static int esacs_needed_count;
-
-+ static void
-+ push_heredoc (r)
-+ REDIRECT *r;
-+ {
-+ if (need_here_doc >= HEREDOC_MAX)
-+ {
-+ last_command_exit_value = EX_BADUSAGE;
-+ need_here_doc = 0;
-+ report_syntax_error (_("maximum here-document count exceeded"));
-+ reset_parser ();
-+ exit_shell (last_command_exit_value);
-+ }
-+ redir_stack[need_here_doc++] = r;
-+ }
-+
- void
- gather_here_documents ()
-*** ../bash-4.3.27/y.tab.c 2014-10-01 11:38:24.000000000 -0400
---- y.tab.c 2014-10-01 12:46:11.000000000 -0400
-***************
-*** 169,173 ****
-
- /* Copy the first part of user declarations. */
-! #line 21 "/usr/homes/chet/src/bash/src/parse.y"
-
- #include "config.h"
---- 169,173 ----
-
- /* Copy the first part of user declarations. */
-! #line 21 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-
- #include "config.h"
-***************
-*** 320,323 ****
---- 320,326 ----
- static int reserved_word_acceptable __P((int));
- static int yylex __P((void));
-+
-+ static void push_heredoc __P((REDIRECT *));
-+ static char *mk_alexpansion __P((char *));
- static int alias_expand_token __P((char *));
- static int time_command_acceptable __P((void));
-***************
-*** 417,421 ****
- /* Variables to manage the task of reading here documents, because we need to
- defer the reading until after a complete command has been collected. */
-! static REDIRECT *redir_stack[10];
- int need_here_doc;
-
---- 420,426 ----
- /* Variables to manage the task of reading here documents, because we need to
- defer the reading until after a complete command has been collected. */
-! #define HEREDOC_MAX 16
-!
-! static REDIRECT *redir_stack[HEREDOC_MAX];
- int need_here_doc;
-
-***************
-*** 459,463 ****
- index is decremented after a case, select, or for command is parsed. */
- #define MAX_CASE_NEST 128
-! static int word_lineno[MAX_CASE_NEST];
- static int word_top = -1;
-
---- 464,468 ----
- index is decremented after a case, select, or for command is parsed. */
- #define MAX_CASE_NEST 128
-! static int word_lineno[MAX_CASE_NEST+1];
- static int word_top = -1;
-
-***************
-*** 493,497 ****
- #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
- typedef union YYSTYPE
-! #line 324 "/usr/homes/chet/src/bash/src/parse.y"
- {
- WORD_DESC *word; /* the word that we read. */
---- 498,502 ----
- #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
- typedef union YYSTYPE
-! #line 329 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- WORD_DESC *word; /* the word that we read. */
-***************
-*** 504,508 ****
- }
- /* Line 193 of yacc.c. */
-! #line 507 "y.tab.c"
- YYSTYPE;
- # define yystype YYSTYPE /* obsolescent; will be withdrawn */
---- 509,513 ----
- }
- /* Line 193 of yacc.c. */
-! #line 512 "y.tab.c"
- YYSTYPE;
- # define yystype YYSTYPE /* obsolescent; will be withdrawn */
-***************
-*** 517,521 ****
-
- /* Line 216 of yacc.c. */
-! #line 520 "y.tab.c"
-
- #ifdef short
---- 522,526 ----
-
- /* Line 216 of yacc.c. */
-! #line 525 "y.tab.c"
-
- #ifdef short
-***************
-*** 887,907 ****
- static const yytype_uint16 yyrline[] =
- {
-! 0, 377, 377, 388, 397, 412, 422, 424, 428, 434,
-! 440, 446, 452, 458, 464, 470, 476, 482, 488, 494,
-! 500, 506, 512, 518, 525, 532, 539, 546, 553, 560,
-! 566, 572, 578, 584, 590, 596, 602, 608, 614, 620,
-! 626, 632, 638, 644, 650, 656, 662, 668, 674, 680,
-! 686, 692, 700, 702, 704, 708, 712, 723, 725, 729,
-! 731, 733, 749, 751, 755, 757, 759, 761, 763, 765,
-! 767, 769, 771, 773, 775, 779, 784, 789, 794, 799,
-! 804, 809, 814, 821, 826, 831, 836, 843, 848, 853,
-! 858, 863, 868, 875, 880, 885, 892, 895, 898, 902,
-! 904, 935, 942, 947, 964, 969, 986, 993, 995, 997,
-! 1002, 1006, 1010, 1014, 1016, 1018, 1022, 1023, 1027, 1029,
-! 1031, 1033, 1037, 1039, 1041, 1043, 1045, 1047, 1051, 1053,
-! 1062, 1070, 1071, 1077, 1078, 1085, 1089, 1091, 1093, 1100,
-! 1102, 1104, 1108, 1109, 1112, 1114, 1116, 1120, 1121, 1130,
-! 1143, 1159, 1174, 1176, 1178, 1185, 1188, 1192, 1194, 1200,
-! 1206, 1223, 1243, 1245, 1268, 1272, 1274, 1276
- };
- #endif
---- 892,912 ----
- static const yytype_uint16 yyrline[] =
- {
-! 0, 382, 382, 393, 402, 417, 427, 429, 433, 439,
-! 445, 451, 457, 463, 469, 475, 481, 487, 493, 499,
-! 505, 511, 517, 523, 530, 537, 544, 551, 558, 565,
-! 571, 577, 583, 589, 595, 601, 607, 613, 619, 625,
-! 631, 637, 643, 649, 655, 661, 667, 673, 679, 685,
-! 691, 697, 705, 707, 709, 713, 717, 728, 730, 734,
-! 736, 738, 754, 756, 760, 762, 764, 766, 768, 770,
-! 772, 774, 776, 778, 780, 784, 789, 794, 799, 804,
-! 809, 814, 819, 826, 831, 836, 841, 848, 853, 858,
-! 863, 868, 873, 880, 885, 890, 897, 900, 903, 907,
-! 909, 940, 947, 952, 969, 974, 991, 998, 1000, 1002,
-! 1007, 1011, 1015, 1019, 1021, 1023, 1027, 1028, 1032, 1034,
-! 1036, 1038, 1042, 1044, 1046, 1048, 1050, 1052, 1056, 1058,
-! 1067, 1075, 1076, 1082, 1083, 1090, 1094, 1096, 1098, 1105,
-! 1107, 1109, 1113, 1114, 1117, 1119, 1121, 1125, 1126, 1135,
-! 1148, 1164, 1179, 1181, 1183, 1190, 1193, 1197, 1199, 1205,
-! 1211, 1228, 1248, 1250, 1273, 1277, 1279, 1281
- };
- #endif
-***************
-*** 2094,2098 ****
- {
- case 2:
-! #line 378 "/usr/homes/chet/src/bash/src/parse.y"
- {
- /* Case of regular command. Discard the error
---- 2099,2103 ----
- {
- case 2:
-! #line 383 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- /* Case of regular command. Discard the error
-***************
-*** 2108,2112 ****
-
- case 3:
-! #line 389 "/usr/homes/chet/src/bash/src/parse.y"
- {
- /* Case of regular command, but not a very
---- 2113,2117 ----
-
- case 3:
-! #line 394 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- /* Case of regular command, but not a very
-***************
-*** 2120,2124 ****
-
- case 4:
-! #line 398 "/usr/homes/chet/src/bash/src/parse.y"
- {
- /* Error during parsing. Return NULL command. */
---- 2125,2129 ----
-
- case 4:
-! #line 403 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- /* Error during parsing. Return NULL command. */
-***************
-*** 2138,2142 ****
-
- case 5:
-! #line 413 "/usr/homes/chet/src/bash/src/parse.y"
- {
- /* Case of EOF seen by itself. Do ignoreeof or
---- 2143,2147 ----
-
- case 5:
-! #line 418 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- /* Case of EOF seen by itself. Do ignoreeof or
-***************
-*** 2149,2163 ****
-
- case 6:
-! #line 423 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
- break;
-
- case 7:
-! #line 425 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(2) - (2)].word), (yyvsp[(1) - (2)].word_list)); }
- break;
-
- case 8:
-! #line 429 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = 1;
---- 2154,2168 ----
-
- case 6:
-! #line 428 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
- break;
-
- case 7:
-! #line 430 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(2) - (2)].word), (yyvsp[(1) - (2)].word_list)); }
- break;
-
- case 8:
-! #line 434 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
-***************
-*** 2168,2172 ****
-
- case 9:
-! #line 435 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = 0;
---- 2173,2177 ----
-
- case 9:
-! #line 440 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
-***************
-*** 2177,2181 ****
-
- case 10:
-! #line 441 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2182,2186 ----
-
- case 10:
-! #line 446 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2186,2190 ****
-
- case 11:
-! #line 447 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2191,2195 ----
-
- case 11:
-! #line 452 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2195,2199 ****
-
- case 12:
-! #line 453 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2200,2204 ----
-
- case 12:
-! #line 458 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2204,2208 ****
-
- case 13:
-! #line 459 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2209,2213 ----
-
- case 13:
-! #line 464 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2213,2217 ****
-
- case 14:
-! #line 465 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = 1;
---- 2218,2222 ----
-
- case 14:
-! #line 470 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
-***************
-*** 2222,2226 ****
-
- case 15:
-! #line 471 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2227,2231 ----
-
- case 15:
-! #line 476 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2231,2235 ****
-
- case 16:
-! #line 477 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2236,2240 ----
-
- case 16:
-! #line 482 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2240,2244 ****
-
- case 17:
-! #line 483 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = 1;
---- 2245,2249 ----
-
- case 17:
-! #line 488 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
-***************
-*** 2249,2253 ****
-
- case 18:
-! #line 489 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2254,2258 ----
-
- case 18:
-! #line 494 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2258,2262 ****
-
- case 19:
-! #line 495 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2263,2267 ----
-
- case 19:
-! #line 500 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2267,2271 ****
-
- case 20:
-! #line 501 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = 0;
---- 2272,2276 ----
-
- case 20:
-! #line 506 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
-***************
-*** 2276,2280 ****
-
- case 21:
-! #line 507 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2281,2285 ----
-
- case 21:
-! #line 512 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2285,2289 ****
-
- case 22:
-! #line 513 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2290,2294 ----
-
- case 22:
-! #line 518 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2294,2358 ****
-
- case 23:
-! #line 519 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = 0;
- redir.filename = (yyvsp[(2) - (2)].word);
- (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0);
-! redir_stack[need_here_doc++] = (yyval.redirect);
- }
- break;
-
- case 24:
-! #line 526 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0);
-! redir_stack[need_here_doc++] = (yyval.redirect);
- }
- break;
-
- case 25:
-! #line 533 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN);
-! redir_stack[need_here_doc++] = (yyval.redirect);
- }
- break;
-
- case 26:
-! #line 540 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = 0;
- redir.filename = (yyvsp[(2) - (2)].word);
- (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0);
-! redir_stack[need_here_doc++] = (yyval.redirect);
- }
- break;
-
- case 27:
-! #line 547 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0);
-! redir_stack[need_here_doc++] = (yyval.redirect);
- }
- break;
-
- case 28:
-! #line 554 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN);
-! redir_stack[need_here_doc++] = (yyval.redirect);
- }
- break;
-
- case 29:
-! #line 561 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = 0;
---- 2299,2363 ----
-
- case 23:
-! #line 524 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
- redir.filename = (yyvsp[(2) - (2)].word);
- (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0);
-! push_heredoc ((yyval.redirect));
- }
- break;
-
- case 24:
-! #line 531 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0);
-! push_heredoc ((yyval.redirect));
- }
- break;
-
- case 25:
-! #line 538 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN);
-! push_heredoc ((yyval.redirect));
- }
- break;
-
- case 26:
-! #line 545 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
- redir.filename = (yyvsp[(2) - (2)].word);
- (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0);
-! push_heredoc ((yyval.redirect));
- }
- break;
-
- case 27:
-! #line 552 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0);
-! push_heredoc ((yyval.redirect));
- }
- break;
-
- case 28:
-! #line 559 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN);
-! push_heredoc ((yyval.redirect));
- }
- break;
-
- case 29:
-! #line 566 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
-***************
-*** 2363,2367 ****
-
- case 30:
-! #line 567 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2368,2372 ----
-
- case 30:
-! #line 572 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2372,2376 ****
-
- case 31:
-! #line 573 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2377,2381 ----
-
- case 31:
-! #line 578 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2381,2385 ****
-
- case 32:
-! #line 579 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = 0;
---- 2386,2390 ----
-
- case 32:
-! #line 584 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
-***************
-*** 2390,2394 ****
-
- case 33:
-! #line 585 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2395,2399 ----
-
- case 33:
-! #line 590 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2399,2403 ****
-
- case 34:
-! #line 591 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2404,2408 ----
-
- case 34:
-! #line 596 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2408,2412 ****
-
- case 35:
-! #line 597 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = 1;
---- 2413,2417 ----
-
- case 35:
-! #line 602 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
-***************
-*** 2417,2421 ****
-
- case 36:
-! #line 603 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2422,2426 ----
-
- case 36:
-! #line 608 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2426,2430 ****
-
- case 37:
-! #line 609 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2431,2435 ----
-
- case 37:
-! #line 614 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2435,2439 ****
-
- case 38:
-! #line 615 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = 0;
---- 2440,2444 ----
-
- case 38:
-! #line 620 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
-***************
-*** 2444,2448 ****
-
- case 39:
-! #line 621 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2449,2453 ----
-
- case 39:
-! #line 626 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2453,2457 ****
-
- case 40:
-! #line 627 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2458,2462 ----
-
- case 40:
-! #line 632 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2462,2466 ****
-
- case 41:
-! #line 633 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = 1;
---- 2467,2471 ----
-
- case 41:
-! #line 638 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
-***************
-*** 2471,2475 ****
-
- case 42:
-! #line 639 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2476,2480 ----
-
- case 42:
-! #line 644 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2480,2484 ****
-
- case 43:
-! #line 645 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2485,2489 ----
-
- case 43:
-! #line 650 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2489,2493 ****
-
- case 44:
-! #line 651 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = 1;
---- 2494,2498 ----
-
- case 44:
-! #line 656 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
-***************
-*** 2498,2502 ****
-
- case 45:
-! #line 657 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2503,2507 ----
-
- case 45:
-! #line 662 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2507,2511 ****
-
- case 46:
-! #line 663 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2512,2516 ----
-
- case 46:
-! #line 668 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2516,2520 ****
-
- case 47:
-! #line 669 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = 0;
---- 2521,2525 ----
-
- case 47:
-! #line 674 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
-***************
-*** 2525,2529 ****
-
- case 48:
-! #line 675 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2530,2534 ----
-
- case 48:
-! #line 680 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2534,2538 ****
-
- case 49:
-! #line 681 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2539,2543 ----
-
- case 49:
-! #line 686 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2543,2547 ****
-
- case 50:
-! #line 687 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = 1;
---- 2548,2552 ----
-
- case 50:
-! #line 692 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
-***************
-*** 2552,2556 ****
-
- case 51:
-! #line 693 "/usr/homes/chet/src/bash/src/parse.y"
- {
- source.dest = 1;
---- 2557,2561 ----
-
- case 51:
-! #line 698 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
-***************
-*** 2561,2580 ****
-
- case 52:
-! #line 701 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
- break;
-
- case 53:
-! #line 703 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
- break;
-
- case 54:
-! #line 705 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; }
- break;
-
- case 55:
-! #line 709 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.redirect) = (yyvsp[(1) - (1)].redirect);
---- 2566,2585 ----
-
- case 52:
-! #line 706 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
- break;
-
- case 53:
-! #line 708 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
- break;
-
- case 54:
-! #line 710 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; }
- break;
-
- case 55:
-! #line 714 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.redirect) = (yyvsp[(1) - (1)].redirect);
-***************
-*** 2583,2587 ****
-
- case 56:
-! #line 713 "/usr/homes/chet/src/bash/src/parse.y"
- {
- register REDIRECT *t;
---- 2588,2592 ----
-
- case 56:
-! #line 718 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- register REDIRECT *t;
-***************
-*** 2595,2619 ****
-
- case 57:
-! #line 724 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); }
- break;
-
- case 58:
-! #line 726 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); }
- break;
-
- case 59:
-! #line 730 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); }
- break;
-
- case 60:
-! #line 732 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 61:
-! #line 734 "/usr/homes/chet/src/bash/src/parse.y"
- {
- COMMAND *tc;
---- 2600,2624 ----
-
- case 57:
-! #line 729 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); }
- break;
-
- case 58:
-! #line 731 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); }
- break;
-
- case 59:
-! #line 735 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); }
- break;
-
- case 60:
-! #line 737 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 61:
-! #line 739 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- COMMAND *tc;
-***************
-*** 2634,2703 ****
-
- case 62:
-! #line 750 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 63:
-! #line 752 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 64:
-! #line 756 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 65:
-! #line 758 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 66:
-! #line 760 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
- break;
-
- case 67:
-! #line 762 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
- break;
-
- case 68:
-! #line 764 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 69:
-! #line 766 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 70:
-! #line 768 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 71:
-! #line 770 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 72:
-! #line 772 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 73:
-! #line 774 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 74:
-! #line 776 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 75:
-! #line 780 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
---- 2639,2708 ----
-
- case 62:
-! #line 755 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 63:
-! #line 757 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 64:
-! #line 761 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 65:
-! #line 763 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 66:
-! #line 765 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
- break;
-
- case 67:
-! #line 767 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
- break;
-
- case 68:
-! #line 769 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 69:
-! #line 771 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 70:
-! #line 773 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 71:
-! #line 775 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 72:
-! #line 777 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 73:
-! #line 779 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 74:
-! #line 781 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 75:
-! #line 785 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
-***************
-*** 2707,2711 ****
-
- case 76:
-! #line 785 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
---- 2712,2716 ----
-
- case 76:
-! #line 790 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
-***************
-*** 2715,2719 ****
-
- case 77:
-! #line 790 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
---- 2720,2724 ----
-
- case 77:
-! #line 795 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
-***************
-*** 2723,2727 ****
-
- case 78:
-! #line 795 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
---- 2728,2732 ----
-
- case 78:
-! #line 800 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
-***************
-*** 2731,2735 ****
-
- case 79:
-! #line 800 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
---- 2736,2740 ----
-
- case 79:
-! #line 805 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
-***************
-*** 2739,2743 ****
-
- case 80:
-! #line 805 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
---- 2744,2748 ----
-
- case 80:
-! #line 810 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
-***************
-*** 2747,2751 ****
-
- case 81:
-! #line 810 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
---- 2752,2756 ----
-
- case 81:
-! #line 815 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
-***************
-*** 2755,2759 ****
-
- case 82:
-! #line 815 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
---- 2760,2764 ----
-
- case 82:
-! #line 820 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
-***************
-*** 2763,2767 ****
-
- case 83:
-! #line 822 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
---- 2768,2772 ----
-
- case 83:
-! #line 827 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
-***************
-*** 2771,2775 ****
-
- case 84:
-! #line 827 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
---- 2776,2780 ----
-
- case 84:
-! #line 832 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
-***************
-*** 2779,2783 ****
-
- case 85:
-! #line 832 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
---- 2784,2788 ----
-
- case 85:
-! #line 837 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
-***************
-*** 2787,2791 ****
-
- case 86:
-! #line 837 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
---- 2792,2796 ----
-
- case 86:
-! #line 842 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
-***************
-*** 2795,2799 ****
-
- case 87:
-! #line 844 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
---- 2800,2804 ----
-
- case 87:
-! #line 849 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
-***************
-*** 2803,2807 ****
-
- case 88:
-! #line 849 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
---- 2808,2812 ----
-
- case 88:
-! #line 854 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
-***************
-*** 2811,2815 ****
-
- case 89:
-! #line 854 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
---- 2816,2820 ----
-
- case 89:
-! #line 859 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
-***************
-*** 2819,2823 ****
-
- case 90:
-! #line 859 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
---- 2824,2828 ----
-
- case 90:
-! #line 864 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
-***************
-*** 2827,2831 ****
-
- case 91:
-! #line 864 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
---- 2832,2836 ----
-
- case 91:
-! #line 869 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
-***************
-*** 2835,2839 ****
-
- case 92:
-! #line 869 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
---- 2840,2844 ----
-
- case 92:
-! #line 874 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
-***************
-*** 2843,2847 ****
-
- case 93:
-! #line 876 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (PATTERN_LIST *)NULL, word_lineno[word_top]);
---- 2848,2852 ----
-
- case 93:
-! #line 881 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (PATTERN_LIST *)NULL, word_lineno[word_top]);
-***************
-*** 2851,2855 ****
-
- case 94:
-! #line 881 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_case_command ((yyvsp[(2) - (7)].word), (yyvsp[(5) - (7)].pattern), word_lineno[word_top]);
---- 2856,2860 ----
-
- case 94:
-! #line 886 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_case_command ((yyvsp[(2) - (7)].word), (yyvsp[(5) - (7)].pattern), word_lineno[word_top]);
-***************
-*** 2859,2863 ****
-
- case 95:
-! #line 886 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (yyvsp[(5) - (6)].pattern), word_lineno[word_top]);
---- 2864,2868 ----
-
- case 95:
-! #line 891 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (yyvsp[(5) - (6)].pattern), word_lineno[word_top]);
-***************
-*** 2867,2891 ****
-
- case 96:
-! #line 893 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = make_function_def ((yyvsp[(1) - (5)].word), (yyvsp[(5) - (5)].command), function_dstart, function_bstart); }
- break;
-
- case 97:
-! #line 896 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = make_function_def ((yyvsp[(2) - (6)].word), (yyvsp[(6) - (6)].command), function_dstart, function_bstart); }
- break;
-
- case 98:
-! #line 899 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = make_function_def ((yyvsp[(2) - (4)].word), (yyvsp[(4) - (4)].command), function_dstart, function_bstart); }
- break;
-
- case 99:
-! #line 903 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 100:
-! #line 905 "/usr/homes/chet/src/bash/src/parse.y"
- {
- COMMAND *tc;
---- 2872,2896 ----
-
- case 96:
-! #line 898 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_function_def ((yyvsp[(1) - (5)].word), (yyvsp[(5) - (5)].command), function_dstart, function_bstart); }
- break;
-
- case 97:
-! #line 901 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_function_def ((yyvsp[(2) - (6)].word), (yyvsp[(6) - (6)].command), function_dstart, function_bstart); }
- break;
-
- case 98:
-! #line 904 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_function_def ((yyvsp[(2) - (4)].word), (yyvsp[(4) - (4)].command), function_dstart, function_bstart); }
- break;
-
- case 99:
-! #line 908 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 100:
-! #line 910 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- COMMAND *tc;
-***************
-*** 2919,2923 ****
-
- case 101:
-! #line 936 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command));
---- 2924,2928 ----
-
- case 101:
-! #line 941 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command));
-***************
-*** 2927,2931 ****
-
- case 102:
-! #line 943 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command));
---- 2932,2936 ----
-
- case 102:
-! #line 948 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command));
-***************
-*** 2935,2939 ****
-
- case 103:
-! #line 948 "/usr/homes/chet/src/bash/src/parse.y"
- {
- COMMAND *tc;
---- 2940,2944 ----
-
- case 103:
-! #line 953 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- COMMAND *tc;
-***************
-*** 2955,2959 ****
-
- case 104:
-! #line 965 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command));
---- 2960,2964 ----
-
- case 104:
-! #line 970 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command));
-***************
-*** 2963,2967 ****
-
- case 105:
-! #line 970 "/usr/homes/chet/src/bash/src/parse.y"
- {
- COMMAND *tc;
---- 2968,2972 ----
-
- case 105:
-! #line 975 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- COMMAND *tc;
-***************
-*** 2983,2987 ****
-
- case 106:
-! #line 987 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command)));
---- 2988,2992 ----
-
- case 106:
-! #line 992 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command)));
-***************
-*** 2991,3105 ****
-
- case 107:
-! #line 994 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); }
- break;
-
- case 108:
-! #line 996 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (7)].command), (yyvsp[(4) - (7)].command), (yyvsp[(6) - (7)].command)); }
- break;
-
- case 109:
-! #line 998 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(5) - (6)].command)); }
- break;
-
- case 110:
-! #line 1003 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); }
- break;
-
- case 111:
-! #line 1007 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); }
- break;
-
- case 112:
-! #line 1011 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = (yyvsp[(2) - (3)].command); }
- break;
-
- case 113:
-! #line 1015 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); }
- break;
-
- case 114:
-! #line 1017 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(6) - (6)].command)); }
- break;
-
- case 115:
-! #line 1019 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (yyvsp[(5) - (5)].command)); }
- break;
-
- case 117:
-! #line 1024 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); }
- break;
-
- case 118:
-! #line 1028 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); }
- break;
-
- case 119:
-! #line 1030 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); }
- break;
-
- case 120:
-! #line 1032 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); }
- break;
-
- case 121:
-! #line 1034 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); }
- break;
-
- case 122:
-! #line 1038 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
- break;
-
- case 123:
-! #line 1040 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
- break;
-
- case 124:
-! #line 1042 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
- break;
-
- case 125:
-! #line 1044 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
- break;
-
- case 126:
-! #line 1046 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
- break;
-
- case 127:
-! #line 1048 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
- break;
-
- case 128:
-! #line 1052 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
- break;
-
- case 129:
-! #line 1054 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); }
- break;
-
- case 130:
-! #line 1063 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = (yyvsp[(2) - (2)].command);
---- 2996,3110 ----
-
- case 107:
-! #line 999 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); }
- break;
-
- case 108:
-! #line 1001 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (7)].command), (yyvsp[(4) - (7)].command), (yyvsp[(6) - (7)].command)); }
- break;
-
- case 109:
-! #line 1003 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(5) - (6)].command)); }
- break;
-
- case 110:
-! #line 1008 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); }
- break;
-
- case 111:
-! #line 1012 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); }
- break;
-
- case 112:
-! #line 1016 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(2) - (3)].command); }
- break;
-
- case 113:
-! #line 1020 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); }
- break;
-
- case 114:
-! #line 1022 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(6) - (6)].command)); }
- break;
-
- case 115:
-! #line 1024 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (yyvsp[(5) - (5)].command)); }
- break;
-
- case 117:
-! #line 1029 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); }
- break;
-
- case 118:
-! #line 1033 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); }
- break;
-
- case 119:
-! #line 1035 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); }
- break;
-
- case 120:
-! #line 1037 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); }
- break;
-
- case 121:
-! #line 1039 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); }
- break;
-
- case 122:
-! #line 1043 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
- break;
-
- case 123:
-! #line 1045 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
- break;
-
- case 124:
-! #line 1047 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
- break;
-
- case 125:
-! #line 1049 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
- break;
-
- case 126:
-! #line 1051 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
- break;
-
- case 127:
-! #line 1053 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
- break;
-
- case 128:
-! #line 1057 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
- break;
-
- case 129:
-! #line 1059 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); }
- break;
-
- case 130:
-! #line 1068 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = (yyvsp[(2) - (2)].command);
-***************
-*** 3110,3114 ****
-
- case 132:
-! #line 1072 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = (yyvsp[(2) - (2)].command);
---- 3115,3119 ----
-
- case 132:
-! #line 1077 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = (yyvsp[(2) - (2)].command);
-***************
-*** 3117,3121 ****
-
- case 134:
-! #line 1079 "/usr/homes/chet/src/bash/src/parse.y"
- {
- if ((yyvsp[(1) - (3)].command)->type == cm_connection)
---- 3122,3126 ----
-
- case 134:
-! #line 1084 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- if ((yyvsp[(1) - (3)].command)->type == cm_connection)
-***************
-*** 3127,3141 ****
-
- case 136:
-! #line 1090 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
- break;
-
- case 137:
-! #line 1092 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
- break;
-
- case 138:
-! #line 1094 "/usr/homes/chet/src/bash/src/parse.y"
- {
- if ((yyvsp[(1) - (4)].command)->type == cm_connection)
---- 3132,3146 ----
-
- case 136:
-! #line 1095 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
- break;
-
- case 137:
-! #line 1097 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
- break;
-
- case 138:
-! #line 1099 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- if ((yyvsp[(1) - (4)].command)->type == cm_connection)
-***************
-*** 3147,3181 ****
-
- case 139:
-! #line 1101 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
- break;
-
- case 140:
-! #line 1103 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
- break;
-
- case 141:
-! #line 1105 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 144:
-! #line 1113 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.number) = '\n'; }
- break;
-
- case 145:
-! #line 1115 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.number) = ';'; }
- break;
-
- case 146:
-! #line 1117 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.number) = yacc_EOF; }
- break;
-
- case 149:
-! #line 1131 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = (yyvsp[(1) - (1)].command);
---- 3152,3186 ----
-
- case 139:
-! #line 1106 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
- break;
-
- case 140:
-! #line 1108 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
- break;
-
- case 141:
-! #line 1110 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 144:
-! #line 1118 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.number) = '\n'; }
- break;
-
- case 145:
-! #line 1120 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.number) = ';'; }
- break;
-
- case 146:
-! #line 1122 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.number) = yacc_EOF; }
- break;
-
- case 149:
-! #line 1136 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = (yyvsp[(1) - (1)].command);
-***************
-*** 3193,3197 ****
-
- case 150:
-! #line 1144 "/usr/homes/chet/src/bash/src/parse.y"
- {
- if ((yyvsp[(1) - (2)].command)->type == cm_connection)
---- 3198,3202 ----
-
- case 150:
-! #line 1149 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- if ((yyvsp[(1) - (2)].command)->type == cm_connection)
-***************
-*** 3212,3216 ****
-
- case 151:
-! #line 1160 "/usr/homes/chet/src/bash/src/parse.y"
- {
- (yyval.command) = (yyvsp[(1) - (2)].command);
---- 3217,3221 ----
-
- case 151:
-! #line 1165 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = (yyvsp[(1) - (2)].command);
-***************
-*** 3228,3242 ****
-
- case 152:
-! #line 1175 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
- break;
-
- case 153:
-! #line 1177 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
- break;
-
- case 154:
-! #line 1179 "/usr/homes/chet/src/bash/src/parse.y"
- {
- if ((yyvsp[(1) - (3)].command)->type == cm_connection)
---- 3233,3247 ----
-
- case 152:
-! #line 1180 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
- break;
-
- case 153:
-! #line 1182 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
- break;
-
- case 154:
-! #line 1184 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- if ((yyvsp[(1) - (3)].command)->type == cm_connection)
-***************
-*** 3248,3267 ****
-
- case 155:
-! #line 1186 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); }
- break;
-
- case 156:
-! #line 1189 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 157:
-! #line 1193 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 158:
-! #line 1195 "/usr/homes/chet/src/bash/src/parse.y"
- {
- if ((yyvsp[(2) - (2)].command))
---- 3253,3272 ----
-
- case 155:
-! #line 1191 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); }
- break;
-
- case 156:
-! #line 1194 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 157:
-! #line 1198 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 158:
-! #line 1200 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- if ((yyvsp[(2) - (2)].command))
-***************
-*** 3272,3276 ****
-
- case 159:
-! #line 1201 "/usr/homes/chet/src/bash/src/parse.y"
- {
- if ((yyvsp[(2) - (2)].command))
---- 3277,3281 ----
-
- case 159:
-! #line 1206 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- if ((yyvsp[(2) - (2)].command))
-***************
-*** 3281,3285 ****
-
- case 160:
-! #line 1207 "/usr/homes/chet/src/bash/src/parse.y"
- {
- ELEMENT x;
---- 3286,3290 ----
-
- case 160:
-! #line 1212 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- ELEMENT x;
-***************
-*** 3301,3305 ****
-
- case 161:
-! #line 1224 "/usr/homes/chet/src/bash/src/parse.y"
- {
- ELEMENT x;
---- 3306,3310 ----
-
- case 161:
-! #line 1229 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- ELEMENT x;
-***************
-*** 3322,3331 ****
-
- case 162:
-! #line 1244 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); }
- break;
-
- case 163:
-! #line 1246 "/usr/homes/chet/src/bash/src/parse.y"
- {
- /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
---- 3327,3336 ----
-
- case 162:
-! #line 1249 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); }
- break;
-
- case 163:
-! #line 1251 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
-***************
-*** 3353,3372 ****
-
- case 164:
-! #line 1269 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 165:
-! #line 1273 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.number) = CMD_TIME_PIPELINE; }
- break;
-
- case 166:
-! #line 1275 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
- break;
-
- case 167:
-! #line 1277 "/usr/homes/chet/src/bash/src/parse.y"
- { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
- break;
---- 3358,3377 ----
-
- case 164:
-! #line 1274 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 165:
-! #line 1278 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.number) = CMD_TIME_PIPELINE; }
- break;
-
- case 166:
-! #line 1280 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
- break;
-
- case 167:
-! #line 1282 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
- break;
-***************
-*** 3374,3378 ****
-
- /* Line 1267 of yacc.c. */
-! #line 3377 "y.tab.c"
- default: break;
- }
---- 3379,3383 ----
-
- /* Line 1267 of yacc.c. */
-! #line 3382 "y.tab.c"
- default: break;
- }
-***************
-*** 3588,3592 ****
-
-
-! #line 1279 "/usr/homes/chet/src/bash/src/parse.y"
-
-
---- 3593,3597 ----
-
-
-! #line 1284 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-
-
-***************
-*** 4949,4952 ****
---- 4954,4972 ----
- static int esacs_needed_count;
-
-+ static void
-+ push_heredoc (r)
-+ REDIRECT *r;
-+ {
-+ if (need_here_doc >= HEREDOC_MAX)
-+ {
-+ last_command_exit_value = EX_BADUSAGE;
-+ need_here_doc = 0;
-+ report_syntax_error (_("maximum here-document count exceeded"));
-+ reset_parser ();
-+ exit_shell (last_command_exit_value);
-+ }
-+ redir_stack[need_here_doc++] = r;
-+ }
-+
- void
- gather_here_documents ()
-***************
-*** 8542,8543 ****
---- 8562,8564 ----
- }
- #endif /* HANDLE_MULTIBYTE */
-+
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 27
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 28
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-029 b/src/patches/bash/bash43-029
deleted file mode 100644
index 93bd390a8..000000000
--- a/src/patches/bash/bash43-029
+++ /dev/null
@@ -1,59 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-029
-
-Bug-Reported-by: Michal Zalewski
lcamtuf@coredump.cx
-Bug-Reference-ID:
-Bug-Reference-URL:
-
-Bug-Description:
-
-When bash is parsing a function definition that contains a here-document
-delimited by end-of-file (or end-of-string), it leaves the closing delimiter
-uninitialized. This can result in an invalid memory access when the parsed
-function is later copied.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3.28/make_cmd.c 2011-12-16 08:08:01.000000000 -0500
---- make_cmd.c 2014-10-02 11:24:23.000000000 -0400
-***************
-*** 693,696 ****
---- 693,697 ----
- temp->redirector = source;
- temp->redirectee = dest_and_filename;
-+ temp->here_doc_eof = 0;
- temp->instruction = instruction;
- temp->flags = 0;
-*** ../bash-4.3.28/copy_cmd.c 2009-09-11 16:28:02.000000000 -0400
---- copy_cmd.c 2014-10-02 11:24:23.000000000 -0400
-***************
-*** 127,131 ****
- case r_reading_until:
- case r_deblank_reading_until:
-! new_redirect->here_doc_eof = savestring (redirect->here_doc_eof);
- /*FALLTHROUGH*/
- case r_reading_string:
---- 127,131 ----
- case r_reading_until:
- case r_deblank_reading_until:
-! new_redirect->here_doc_eof = redirect->here_doc_eof ? savestring (redirect->here_doc_eof) : 0;
- /*FALLTHROUGH*/
- case r_reading_string:
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 28
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 29
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash43-030 b/src/patches/bash/bash43-030
deleted file mode 100644
index 78984da26..000000000
--- a/src/patches/bash/bash43-030
+++ /dev/null
@@ -1,2064 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-030
-
-Bug-Reported-by: Michal Zalewski
lcamtuf@coredump.cx
-Bug-Reference-ID:
-Bug-Reference-URL:
-
-Bug-Description:
-
-A combination of nested command substitutions and function importing from
-the environment can cause bash to execute code appearing in the environment
-variable value following the function definition.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.3.29/builtins/evalstring.c 2014-10-01 12:57:47.000000000 -0400
---- builtins/evalstring.c 2014-10-03 11:57:04.000000000 -0400
-***************
-*** 309,318 ****
- struct fd_bitmap *bitmap;
-
-! if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def)
- {
-! internal_warning ("%s: ignoring function definition attempt", from_file);
-! should_jump_to_top_level = 0;
-! last_result = last_command_exit_value = EX_BADUSAGE;
-! break;
- }
-
---- 313,335 ----
- struct fd_bitmap *bitmap;
-
-! if (flags & SEVAL_FUNCDEF)
- {
-! char *x;
-!
-! /* If the command parses to something other than a straight
-! function definition, or if we have not consumed the entire
-! string, or if the parser has transformed the function
-! name (as parsing will if it begins or ends with shell
-! whitespace, for example), reject the attempt */
-! if (command->type != cm_function_def ||
-! ((x = parser_remaining_input ()) && *x) ||
-! (STREQ (from_file, command->value.Function_def->name->word) == 0))
-! {
-! internal_warning (_("%s: ignoring function definition attempt"), from_file);
-! should_jump_to_top_level = 0;
-! last_result = last_command_exit_value = EX_BADUSAGE;
-! reset_parser ();
-! break;
-! }
- }
-
-***************
-*** 379,383 ****
-
- if (flags & SEVAL_ONECMD)
-! break;
- }
- }
---- 396,403 ----
-
- if (flags & SEVAL_ONECMD)
-! {
-! reset_parser ();
-! break;
-! }
- }
- }
-*** ../bash-4.3.29/parse.y 2014-10-01 12:58:43.000000000 -0400
---- parse.y 2014-10-03 14:48:59.000000000 -0400
-***************
-*** 2539,2542 ****
---- 2539,2552 ----
- }
-
-+ char *
-+ parser_remaining_input ()
-+ {
-+ if (shell_input_line == 0)
-+ return 0;
-+ if (shell_input_line_index < 0 || shell_input_line_index >= shell_input_line_len)
-+ return '\0'; /* XXX */
-+ return (shell_input_line + shell_input_line_index);
-+ }
-+
- #ifdef INCLUDE_UNUSED
- /* Back the input pointer up by one, effectively `ungetting' a character. */
-***************
-*** 4028,4033 ****
- /* reset_parser clears shell_input_line and associated variables */
- restore_input_line_state (&ls);
-! if (interactive)
-! token_to_read = 0;
-
- /* Need to find how many characters parse_and_execute consumed, update
---- 4053,4058 ----
- /* reset_parser clears shell_input_line and associated variables */
- restore_input_line_state (&ls);
-!
-! token_to_read = 0;
-
- /* Need to find how many characters parse_and_execute consumed, update
-*** ../bash-4.3.29/shell.h 2014-10-01 12:57:39.000000000 -0400
---- shell.h 2014-10-03 14:49:12.000000000 -0400
-***************
-*** 181,184 ****
---- 181,186 ----
-
- /* Let's try declaring these here. */
-+ extern char *parser_remaining_input __P((void));
-+
- extern sh_parser_state_t *save_parser_state __P((sh_parser_state_t *));
- extern void restore_parser_state __P((sh_parser_state_t *));
-*** ../bash-4.3.28/y.tab.c 2014-10-01 13:09:46.000000000 -0400
---- y.tab.c 2014-10-04 19:26:22.000000000 -0400
-***************
-*** 169,173 ****
-
- /* Copy the first part of user declarations. */
-! #line 21 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-
- #include "config.h"
---- 169,173 ----
-
- /* Copy the first part of user declarations. */
-! #line 21 "/usr/src/local/bash/bash-4.3-patched/parse.y"
-
- #include "config.h"
-***************
-*** 498,502 ****
- #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
- typedef union YYSTYPE
-! #line 329 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- WORD_DESC *word; /* the word that we read. */
---- 498,502 ----
- #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
- typedef union YYSTYPE
-! #line 329 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- WORD_DESC *word; /* the word that we read. */
-***************
-*** 2099,2103 ****
- {
- case 2:
-! #line 383 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- /* Case of regular command. Discard the error
---- 2099,2103 ----
- {
- case 2:
-! #line 383 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- /* Case of regular command. Discard the error
-***************
-*** 2113,2117 ****
-
- case 3:
-! #line 394 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- /* Case of regular command, but not a very
---- 2113,2117 ----
-
- case 3:
-! #line 394 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- /* Case of regular command, but not a very
-***************
-*** 2125,2129 ****
-
- case 4:
-! #line 403 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- /* Error during parsing. Return NULL command. */
---- 2125,2129 ----
-
- case 4:
-! #line 403 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- /* Error during parsing. Return NULL command. */
-***************
-*** 2143,2147 ****
-
- case 5:
-! #line 418 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- /* Case of EOF seen by itself. Do ignoreeof or
---- 2143,2147 ----
-
- case 5:
-! #line 418 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- /* Case of EOF seen by itself. Do ignoreeof or
-***************
-*** 2154,2168 ****
-
- case 6:
-! #line 428 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
- break;
-
- case 7:
-! #line 430 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(2) - (2)].word), (yyvsp[(1) - (2)].word_list)); }
- break;
-
- case 8:
-! #line 434 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
---- 2154,2168 ----
-
- case 6:
-! #line 428 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
- break;
-
- case 7:
-! #line 430 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(2) - (2)].word), (yyvsp[(1) - (2)].word_list)); }
- break;
-
- case 8:
-! #line 434 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 1;
-***************
-*** 2173,2177 ****
-
- case 9:
-! #line 440 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
---- 2173,2177 ----
-
- case 9:
-! #line 440 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 0;
-***************
-*** 2182,2186 ****
-
- case 10:
-! #line 446 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2182,2186 ----
-
- case 10:
-! #line 446 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2191,2195 ****
-
- case 11:
-! #line 452 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2191,2195 ----
-
- case 11:
-! #line 452 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2200,2204 ****
-
- case 12:
-! #line 458 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2200,2204 ----
-
- case 12:
-! #line 458 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2209,2213 ****
-
- case 13:
-! #line 464 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2209,2213 ----
-
- case 13:
-! #line 464 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2218,2222 ****
-
- case 14:
-! #line 470 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
---- 2218,2222 ----
-
- case 14:
-! #line 470 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 1;
-***************
-*** 2227,2231 ****
-
- case 15:
-! #line 476 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2227,2231 ----
-
- case 15:
-! #line 476 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2236,2240 ****
-
- case 16:
-! #line 482 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2236,2240 ----
-
- case 16:
-! #line 482 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2245,2249 ****
-
- case 17:
-! #line 488 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
---- 2245,2249 ----
-
- case 17:
-! #line 488 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 1;
-***************
-*** 2254,2258 ****
-
- case 18:
-! #line 494 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2254,2258 ----
-
- case 18:
-! #line 494 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2263,2267 ****
-
- case 19:
-! #line 500 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2263,2267 ----
-
- case 19:
-! #line 500 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2272,2276 ****
-
- case 20:
-! #line 506 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
---- 2272,2276 ----
-
- case 20:
-! #line 506 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 0;
-***************
-*** 2281,2285 ****
-
- case 21:
-! #line 512 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2281,2285 ----
-
- case 21:
-! #line 512 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2290,2294 ****
-
- case 22:
-! #line 518 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2290,2294 ----
-
- case 22:
-! #line 518 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2299,2303 ****
-
- case 23:
-! #line 524 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
---- 2299,2303 ----
-
- case 23:
-! #line 524 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 0;
-***************
-*** 2309,2313 ****
-
- case 24:
-! #line 531 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2309,2313 ----
-
- case 24:
-! #line 531 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2319,2323 ****
-
- case 25:
-! #line 538 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2319,2323 ----
-
- case 25:
-! #line 538 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2329,2333 ****
-
- case 26:
-! #line 545 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
---- 2329,2333 ----
-
- case 26:
-! #line 545 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 0;
-***************
-*** 2339,2343 ****
-
- case 27:
-! #line 552 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2339,2343 ----
-
- case 27:
-! #line 552 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2349,2353 ****
-
- case 28:
-! #line 559 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2349,2353 ----
-
- case 28:
-! #line 559 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2359,2363 ****
-
- case 29:
-! #line 566 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
---- 2359,2363 ----
-
- case 29:
-! #line 566 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 0;
-***************
-*** 2368,2372 ****
-
- case 30:
-! #line 572 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2368,2372 ----
-
- case 30:
-! #line 572 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2377,2381 ****
-
- case 31:
-! #line 578 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2377,2381 ----
-
- case 31:
-! #line 578 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2386,2390 ****
-
- case 32:
-! #line 584 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
---- 2386,2390 ----
-
- case 32:
-! #line 584 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 0;
-***************
-*** 2395,2399 ****
-
- case 33:
-! #line 590 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2395,2399 ----
-
- case 33:
-! #line 590 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2404,2408 ****
-
- case 34:
-! #line 596 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2404,2408 ----
-
- case 34:
-! #line 596 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2413,2417 ****
-
- case 35:
-! #line 602 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
---- 2413,2417 ----
-
- case 35:
-! #line 602 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 1;
-***************
-*** 2422,2426 ****
-
- case 36:
-! #line 608 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2422,2426 ----
-
- case 36:
-! #line 608 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2431,2435 ****
-
- case 37:
-! #line 614 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2431,2435 ----
-
- case 37:
-! #line 614 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2440,2444 ****
-
- case 38:
-! #line 620 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
---- 2440,2444 ----
-
- case 38:
-! #line 620 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 0;
-***************
-*** 2449,2453 ****
-
- case 39:
-! #line 626 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2449,2453 ----
-
- case 39:
-! #line 626 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2458,2462 ****
-
- case 40:
-! #line 632 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2458,2462 ----
-
- case 40:
-! #line 632 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2467,2471 ****
-
- case 41:
-! #line 638 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
---- 2467,2471 ----
-
- case 41:
-! #line 638 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 1;
-***************
-*** 2476,2480 ****
-
- case 42:
-! #line 644 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2476,2480 ----
-
- case 42:
-! #line 644 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2485,2489 ****
-
- case 43:
-! #line 650 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2485,2489 ----
-
- case 43:
-! #line 650 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2494,2498 ****
-
- case 44:
-! #line 656 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
---- 2494,2498 ----
-
- case 44:
-! #line 656 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 1;
-***************
-*** 2503,2507 ****
-
- case 45:
-! #line 662 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2503,2507 ----
-
- case 45:
-! #line 662 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2512,2516 ****
-
- case 46:
-! #line 668 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2512,2516 ----
-
- case 46:
-! #line 668 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2521,2525 ****
-
- case 47:
-! #line 674 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
---- 2521,2525 ----
-
- case 47:
-! #line 674 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 0;
-***************
-*** 2530,2534 ****
-
- case 48:
-! #line 680 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
---- 2530,2534 ----
-
- case 48:
-! #line 680 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
-***************
-*** 2539,2543 ****
-
- case 49:
-! #line 686 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
---- 2539,2543 ----
-
- case 49:
-! #line 686 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
-***************
-*** 2548,2552 ****
-
- case 50:
-! #line 692 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
---- 2548,2552 ----
-
- case 50:
-! #line 692 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 1;
-***************
-*** 2557,2561 ****
-
- case 51:
-! #line 698 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
---- 2557,2561 ----
-
- case 51:
-! #line 698 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 1;
-***************
-*** 2566,2585 ****
-
- case 52:
-! #line 706 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
- break;
-
- case 53:
-! #line 708 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
- break;
-
- case 54:
-! #line 710 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; }
- break;
-
- case 55:
-! #line 714 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.redirect) = (yyvsp[(1) - (1)].redirect);
---- 2566,2585 ----
-
- case 52:
-! #line 706 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
- break;
-
- case 53:
-! #line 708 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
- break;
-
- case 54:
-! #line 710 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; }
- break;
-
- case 55:
-! #line 714 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.redirect) = (yyvsp[(1) - (1)].redirect);
-***************
-*** 2588,2592 ****
-
- case 56:
-! #line 718 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- register REDIRECT *t;
---- 2588,2592 ----
-
- case 56:
-! #line 718 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- register REDIRECT *t;
-***************
-*** 2600,2624 ****
-
- case 57:
-! #line 729 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); }
- break;
-
- case 58:
-! #line 731 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); }
- break;
-
- case 59:
-! #line 735 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); }
- break;
-
- case 60:
-! #line 737 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 61:
-! #line 739 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- COMMAND *tc;
---- 2600,2624 ----
-
- case 57:
-! #line 729 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); }
- break;
-
- case 58:
-! #line 731 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); }
- break;
-
- case 59:
-! #line 735 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); }
- break;
-
- case 60:
-! #line 737 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 61:
-! #line 739 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- COMMAND *tc;
-***************
-*** 2639,2708 ****
-
- case 62:
-! #line 755 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 63:
-! #line 757 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 64:
-! #line 761 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 65:
-! #line 763 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 66:
-! #line 765 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
- break;
-
- case 67:
-! #line 767 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
- break;
-
- case 68:
-! #line 769 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 69:
-! #line 771 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 70:
-! #line 773 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 71:
-! #line 775 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 72:
-! #line 777 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 73:
-! #line 779 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 74:
-! #line 781 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 75:
-! #line 785 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
---- 2639,2708 ----
-
- case 62:
-! #line 755 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 63:
-! #line 757 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 64:
-! #line 761 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 65:
-! #line 763 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 66:
-! #line 765 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
- break;
-
- case 67:
-! #line 767 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
- break;
-
- case 68:
-! #line 769 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 69:
-! #line 771 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 70:
-! #line 773 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 71:
-! #line 775 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 72:
-! #line 777 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 73:
-! #line 779 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 74:
-! #line 781 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 75:
-! #line 785 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
-***************
-*** 2712,2716 ****
-
- case 76:
-! #line 790 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
---- 2712,2716 ----
-
- case 76:
-! #line 790 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
-***************
-*** 2720,2724 ****
-
- case 77:
-! #line 795 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
---- 2720,2724 ----
-
- case 77:
-! #line 795 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
-***************
-*** 2728,2732 ****
-
- case 78:
-! #line 800 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
---- 2728,2732 ----
-
- case 78:
-! #line 800 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
-***************
-*** 2736,2740 ****
-
- case 79:
-! #line 805 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
---- 2736,2740 ----
-
- case 79:
-! #line 805 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
-***************
-*** 2744,2748 ****
-
- case 80:
-! #line 810 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
---- 2744,2748 ----
-
- case 80:
-! #line 810 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
-***************
-*** 2752,2756 ****
-
- case 81:
-! #line 815 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
---- 2752,2756 ----
-
- case 81:
-! #line 815 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
-***************
-*** 2760,2764 ****
-
- case 82:
-! #line 820 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
---- 2760,2764 ----
-
- case 82:
-! #line 820 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
-***************
-*** 2768,2772 ****
-
- case 83:
-! #line 827 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
---- 2768,2772 ----
-
- case 83:
-! #line 827 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
-***************
-*** 2776,2780 ****
-
- case 84:
-! #line 832 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
---- 2776,2780 ----
-
- case 84:
-! #line 832 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
-***************
-*** 2784,2788 ****
-
- case 85:
-! #line 837 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
---- 2784,2788 ----
-
- case 85:
-! #line 837 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
-***************
-*** 2792,2796 ****
-
- case 86:
-! #line 842 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
---- 2792,2796 ----
-
- case 86:
-! #line 842 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
-***************
-*** 2800,2804 ****
-
- case 87:
-! #line 849 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
---- 2800,2804 ----
-
- case 87:
-! #line 849 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
-***************
-*** 2808,2812 ****
-
- case 88:
-! #line 854 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
---- 2808,2812 ----
-
- case 88:
-! #line 854 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
-***************
-*** 2816,2820 ****
-
- case 89:
-! #line 859 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
---- 2816,2820 ----
-
- case 89:
-! #line 859 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
-***************
-*** 2824,2828 ****
-
- case 90:
-! #line 864 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
---- 2824,2828 ----
-
- case 90:
-! #line 864 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list (""$@"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
-***************
-*** 2832,2836 ****
-
- case 91:
-! #line 869 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
---- 2832,2836 ----
-
- case 91:
-! #line 869 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
-***************
-*** 2840,2844 ****
-
- case 92:
-! #line 874 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
---- 2840,2844 ----
-
- case 92:
-! #line 874 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
-***************
-*** 2848,2852 ****
-
- case 93:
-! #line 881 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (PATTERN_LIST *)NULL, word_lineno[word_top]);
---- 2848,2852 ----
-
- case 93:
-! #line 881 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (PATTERN_LIST *)NULL, word_lineno[word_top]);
-***************
-*** 2856,2860 ****
-
- case 94:
-! #line 886 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_case_command ((yyvsp[(2) - (7)].word), (yyvsp[(5) - (7)].pattern), word_lineno[word_top]);
---- 2856,2860 ----
-
- case 94:
-! #line 886 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_case_command ((yyvsp[(2) - (7)].word), (yyvsp[(5) - (7)].pattern), word_lineno[word_top]);
-***************
-*** 2864,2868 ****
-
- case 95:
-! #line 891 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (yyvsp[(5) - (6)].pattern), word_lineno[word_top]);
---- 2864,2868 ----
-
- case 95:
-! #line 891 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (yyvsp[(5) - (6)].pattern), word_lineno[word_top]);
-***************
-*** 2872,2896 ****
-
- case 96:
-! #line 898 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_function_def ((yyvsp[(1) - (5)].word), (yyvsp[(5) - (5)].command), function_dstart, function_bstart); }
- break;
-
- case 97:
-! #line 901 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_function_def ((yyvsp[(2) - (6)].word), (yyvsp[(6) - (6)].command), function_dstart, function_bstart); }
- break;
-
- case 98:
-! #line 904 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_function_def ((yyvsp[(2) - (4)].word), (yyvsp[(4) - (4)].command), function_dstart, function_bstart); }
- break;
-
- case 99:
-! #line 908 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 100:
-! #line 910 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- COMMAND *tc;
---- 2872,2896 ----
-
- case 96:
-! #line 898 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_function_def ((yyvsp[(1) - (5)].word), (yyvsp[(5) - (5)].command), function_dstart, function_bstart); }
- break;
-
- case 97:
-! #line 901 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_function_def ((yyvsp[(2) - (6)].word), (yyvsp[(6) - (6)].command), function_dstart, function_bstart); }
- break;
-
- case 98:
-! #line 904 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_function_def ((yyvsp[(2) - (4)].word), (yyvsp[(4) - (4)].command), function_dstart, function_bstart); }
- break;
-
- case 99:
-! #line 908 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 100:
-! #line 910 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- COMMAND *tc;
-***************
-*** 2924,2928 ****
-
- case 101:
-! #line 941 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command));
---- 2924,2928 ----
-
- case 101:
-! #line 941 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command));
-***************
-*** 2932,2936 ****
-
- case 102:
-! #line 948 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command));
---- 2932,2936 ----
-
- case 102:
-! #line 948 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command));
-***************
-*** 2940,2944 ****
-
- case 103:
-! #line 953 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- COMMAND *tc;
---- 2940,2944 ----
-
- case 103:
-! #line 953 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- COMMAND *tc;
-***************
-*** 2960,2964 ****
-
- case 104:
-! #line 970 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command));
---- 2960,2964 ----
-
- case 104:
-! #line 970 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command));
-***************
-*** 2968,2972 ****
-
- case 105:
-! #line 975 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- COMMAND *tc;
---- 2968,2972 ----
-
- case 105:
-! #line 975 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- COMMAND *tc;
-***************
-*** 2988,2992 ****
-
- case 106:
-! #line 992 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command)));
---- 2988,2992 ----
-
- case 106:
-! #line 992 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command)));
-***************
-*** 2996,3110 ****
-
- case 107:
-! #line 999 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); }
- break;
-
- case 108:
-! #line 1001 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (7)].command), (yyvsp[(4) - (7)].command), (yyvsp[(6) - (7)].command)); }
- break;
-
- case 109:
-! #line 1003 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(5) - (6)].command)); }
- break;
-
- case 110:
-! #line 1008 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); }
- break;
-
- case 111:
-! #line 1012 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); }
- break;
-
- case 112:
-! #line 1016 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(2) - (3)].command); }
- break;
-
- case 113:
-! #line 1020 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); }
- break;
-
- case 114:
-! #line 1022 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(6) - (6)].command)); }
- break;
-
- case 115:
-! #line 1024 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (yyvsp[(5) - (5)].command)); }
- break;
-
- case 117:
-! #line 1029 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); }
- break;
-
- case 118:
-! #line 1033 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); }
- break;
-
- case 119:
-! #line 1035 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); }
- break;
-
- case 120:
-! #line 1037 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); }
- break;
-
- case 121:
-! #line 1039 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); }
- break;
-
- case 122:
-! #line 1043 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
- break;
-
- case 123:
-! #line 1045 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
- break;
-
- case 124:
-! #line 1047 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
- break;
-
- case 125:
-! #line 1049 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
- break;
-
- case 126:
-! #line 1051 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
- break;
-
- case 127:
-! #line 1053 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
- break;
-
- case 128:
-! #line 1057 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
- break;
-
- case 129:
-! #line 1059 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); }
- break;
-
- case 130:
-! #line 1068 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = (yyvsp[(2) - (2)].command);
---- 2996,3110 ----
-
- case 107:
-! #line 999 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); }
- break;
-
- case 108:
-! #line 1001 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (7)].command), (yyvsp[(4) - (7)].command), (yyvsp[(6) - (7)].command)); }
- break;
-
- case 109:
-! #line 1003 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(5) - (6)].command)); }
- break;
-
- case 110:
-! #line 1008 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); }
- break;
-
- case 111:
-! #line 1012 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); }
- break;
-
- case 112:
-! #line 1016 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(2) - (3)].command); }
- break;
-
- case 113:
-! #line 1020 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); }
- break;
-
- case 114:
-! #line 1022 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(6) - (6)].command)); }
- break;
-
- case 115:
-! #line 1024 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (yyvsp[(5) - (5)].command)); }
- break;
-
- case 117:
-! #line 1029 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); }
- break;
-
- case 118:
-! #line 1033 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); }
- break;
-
- case 119:
-! #line 1035 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); }
- break;
-
- case 120:
-! #line 1037 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); }
- break;
-
- case 121:
-! #line 1039 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); }
- break;
-
- case 122:
-! #line 1043 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
- break;
-
- case 123:
-! #line 1045 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
- break;
-
- case 124:
-! #line 1047 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
- break;
-
- case 125:
-! #line 1049 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
- break;
-
- case 126:
-! #line 1051 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
- break;
-
- case 127:
-! #line 1053 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
- break;
-
- case 128:
-! #line 1057 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
- break;
-
- case 129:
-! #line 1059 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); }
- break;
-
- case 130:
-! #line 1068 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = (yyvsp[(2) - (2)].command);
-***************
-*** 3115,3119 ****
-
- case 132:
-! #line 1077 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = (yyvsp[(2) - (2)].command);
---- 3115,3119 ----
-
- case 132:
-! #line 1077 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = (yyvsp[(2) - (2)].command);
-***************
-*** 3122,3126 ****
-
- case 134:
-! #line 1084 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- if ((yyvsp[(1) - (3)].command)->type == cm_connection)
---- 3122,3126 ----
-
- case 134:
-! #line 1084 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- if ((yyvsp[(1) - (3)].command)->type == cm_connection)
-***************
-*** 3132,3146 ****
-
- case 136:
-! #line 1095 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
- break;
-
- case 137:
-! #line 1097 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
- break;
-
- case 138:
-! #line 1099 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- if ((yyvsp[(1) - (4)].command)->type == cm_connection)
---- 3132,3146 ----
-
- case 136:
-! #line 1095 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
- break;
-
- case 137:
-! #line 1097 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
- break;
-
- case 138:
-! #line 1099 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- if ((yyvsp[(1) - (4)].command)->type == cm_connection)
-***************
-*** 3152,3186 ****
-
- case 139:
-! #line 1106 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
- break;
-
- case 140:
-! #line 1108 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
- break;
-
- case 141:
-! #line 1110 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 144:
-! #line 1118 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.number) = '\n'; }
- break;
-
- case 145:
-! #line 1120 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.number) = ';'; }
- break;
-
- case 146:
-! #line 1122 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.number) = yacc_EOF; }
- break;
-
- case 149:
-! #line 1136 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = (yyvsp[(1) - (1)].command);
---- 3152,3186 ----
-
- case 139:
-! #line 1106 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
- break;
-
- case 140:
-! #line 1108 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
- break;
-
- case 141:
-! #line 1110 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 144:
-! #line 1118 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.number) = '\n'; }
- break;
-
- case 145:
-! #line 1120 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.number) = ';'; }
- break;
-
- case 146:
-! #line 1122 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.number) = yacc_EOF; }
- break;
-
- case 149:
-! #line 1136 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = (yyvsp[(1) - (1)].command);
-***************
-*** 3198,3202 ****
-
- case 150:
-! #line 1149 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- if ((yyvsp[(1) - (2)].command)->type == cm_connection)
---- 3198,3202 ----
-
- case 150:
-! #line 1149 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- if ((yyvsp[(1) - (2)].command)->type == cm_connection)
-***************
-*** 3217,3221 ****
-
- case 151:
-! #line 1165 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = (yyvsp[(1) - (2)].command);
---- 3217,3221 ----
-
- case 151:
-! #line 1165 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = (yyvsp[(1) - (2)].command);
-***************
-*** 3233,3247 ****
-
- case 152:
-! #line 1180 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
- break;
-
- case 153:
-! #line 1182 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
- break;
-
- case 154:
-! #line 1184 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- if ((yyvsp[(1) - (3)].command)->type == cm_connection)
---- 3233,3247 ----
-
- case 152:
-! #line 1180 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
- break;
-
- case 153:
-! #line 1182 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
- break;
-
- case 154:
-! #line 1184 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- if ((yyvsp[(1) - (3)].command)->type == cm_connection)
-***************
-*** 3253,3272 ****
-
- case 155:
-! #line 1191 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); }
- break;
-
- case 156:
-! #line 1194 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 157:
-! #line 1198 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 158:
-! #line 1200 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- if ((yyvsp[(2) - (2)].command))
---- 3253,3272 ----
-
- case 155:
-! #line 1191 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); }
- break;
-
- case 156:
-! #line 1194 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 157:
-! #line 1198 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 158:
-! #line 1200 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- if ((yyvsp[(2) - (2)].command))
-***************
-*** 3277,3281 ****
-
- case 159:
-! #line 1206 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- if ((yyvsp[(2) - (2)].command))
---- 3277,3281 ----
-
- case 159:
-! #line 1206 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- if ((yyvsp[(2) - (2)].command))
-***************
-*** 3286,3290 ****
-
- case 160:
-! #line 1212 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- ELEMENT x;
---- 3286,3290 ----
-
- case 160:
-! #line 1212 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- ELEMENT x;
-***************
-*** 3306,3310 ****
-
- case 161:
-! #line 1229 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- ELEMENT x;
---- 3306,3310 ----
-
- case 161:
-! #line 1229 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- ELEMENT x;
-***************
-*** 3327,3336 ****
-
- case 162:
-! #line 1249 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); }
- break;
-
- case 163:
-! #line 1251 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
---- 3327,3336 ----
-
- case 162:
-! #line 1249 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); }
- break;
-
- case 163:
-! #line 1251 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
-***************
-*** 3358,3377 ****
-
- case 164:
-! #line 1274 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 165:
-! #line 1278 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.number) = CMD_TIME_PIPELINE; }
- break;
-
- case 166:
-! #line 1280 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
- break;
-
- case 167:
-! #line 1282 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
- break;
---- 3358,3377 ----
-
- case 164:
-! #line 1274 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 165:
-! #line 1278 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.number) = CMD_TIME_PIPELINE; }
- break;
-
- case 166:
-! #line 1280 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
- break;
-
- case 167:
-! #line 1282 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
- break;
-***************
-*** 3593,3597 ****
-
-
-! #line 1284 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-
-
---- 3593,3597 ----
-
-
-! #line 1284 "/usr/src/local/bash/bash-4.3-patched/parse.y"
-
-
-***************
-*** 4851,4854 ****
---- 4851,4864 ----
- }
-
-+ char *
-+ parser_remaining_input ()
-+ {
-+ if (shell_input_line == 0)
-+ return 0;
-+ if (shell_input_line_index < 0 || shell_input_line_index >= shell_input_line_len)
-+ return '\0'; /* XXX */
-+ return (shell_input_line + shell_input_line_index);
-+ }
-+
- #ifdef INCLUDE_UNUSED
- /* Back the input pointer up by one, effectively `ungetting' a character. */
-***************
-*** 6340,6345 ****
- /* reset_parser clears shell_input_line and associated variables */
- restore_input_line_state (&ls);
-! if (interactive)
-! token_to_read = 0;
-
- /* Need to find how many characters parse_and_execute consumed, update
---- 6350,6355 ----
- /* reset_parser clears shell_input_line and associated variables */
- restore_input_line_state (&ls);
-!
-! token_to_read = 0;
-
- /* Need to find how many characters parse_and_execute consumed, update
-*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
---- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 29
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 30
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash50-001 b/src/patches/bash/bash50-001
new file mode 100644
index 000000000..169317ded
--- /dev/null
+++ b/src/patches/bash/bash50-001
@@ -0,0 +1,166 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.0
+Patch-ID: bash50-001
+
+Bug-Reported-by: axel@freakout.de
+Bug-Reference-ID:
201901082050.x08KoShS006731@bongo.freakout.de
+Bug-Reference-URL:
http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00079.html
+
+Bug-Description:
+
+Under certain circumstances, the glob expansion code did not remove
+backslashes escaping characters in directory names (or portions of a
+pattern preceding a slash).
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.0/bashline.c 2018-11-27 13:20:16.000000000 -0500
+--- bashline.c 2019-01-16 16:06:03.000000000 -0500
+***************
+*** 232,235 ****
+--- 232,236 ----
+ static int bash_possible_command_completions __P((int, int));
+
++ static int completion_glob_pattern __P((char *));
+ static char *glob_complete_word __P((const char *, int));
+ static int bash_glob_completion_internal __P((int));
+***************
+*** 1742,1746 ****
+ /* This could be a globbing pattern, so try to expand it using pathname
+ expansion. */
+! if (!matches && glob_pattern_p (text))
+ {
+ matches = rl_completion_matches (text, glob_complete_word);
+--- 1743,1747 ----
+ /* This could be a globbing pattern, so try to expand it using pathname
+ expansion. */
+! if (!matches && completion_glob_pattern ((char *)text))
+ {
+ matches = rl_completion_matches (text, glob_complete_word);
+***************
+*** 1851,1855 ****
+ }
+
+! globpat = glob_pattern_p (hint_text);
+
+ /* If this is an absolute program name, do not check it against
+--- 1852,1856 ----
+ }
+
+! globpat = completion_glob_pattern ((char *)hint_text);
+
+ /* If this is an absolute program name, do not check it against
+***************
+*** 3714,3717 ****
+--- 3715,3773 ----
+ }
+
++ static int
++ completion_glob_pattern (string)
++ char *string;
++ {
++ register int c;
++ char *send;
++ int open;
++
++ DECLARE_MBSTATE;
++
++ open = 0;
++ send = string + strlen (string);
++
++ while (c = *string++)
++ {
++ switch (c)
++ {
++ case '?':
++ case '*':
++ return (1);
++
++ case '[':
++ open++;
++ continue;
++
++ case ']':
++ if (open)
++ return (1);
++ continue;
++
++ case '+':
++ case '@':
++ case '!':
++ if (*string == '(') /*)*/
++ return (1);
++ continue;
++
++ case '\':
++ if (*string == 0)
++ return (0);
++ }
++
++ /* Advance one fewer byte than an entire multibyte character to
++ account for the auto-increment in the loop above. */
++ #ifdef HANDLE_MULTIBYTE
++ string--;
++ ADVANCE_CHAR_P (string, send - string);
++ string++;
++ #else
++ ADVANCE_CHAR_P (string, send - string);
++ #endif
++ }
++ return (0);
++ }
++
+ static char *globtext;
+ static char *globorig;
+***************
+*** 3878,3882 ****
+ }
+
+! if (t && glob_pattern_p (t) == 0)
+ rl_explicit_arg = 1; /* XXX - force glob_complete_word to append `*' */
+ FREE (t);
+--- 3934,3938 ----
+ }
+
+! if (t && completion_glob_pattern (t) == 0)
+ rl_explicit_arg = 1; /* XXX - force glob_complete_word to append `*' */
+ FREE (t);
+*** ../bash-5.0/lib/glob/glob_loop.c 2018-12-31 13:35:15.000000000 -0500
+--- lib/glob/glob_loop.c 2019-01-09 09:44:36.000000000 -0500
+***************
+*** 55,59 ****
+
+ case L('\'):
+- #if 0
+ /* Don't let the pattern end in a backslash (GMATCH returns no match
+ if the pattern ends in a backslash anyway), but otherwise return 1,
+--- 55,58 ----
+***************
+*** 61,69 ****
+ and it can be removed. */
+ return (*p != L('\0'));
+- #else
+- /* The pattern may not end with a backslash. */
+- if (*p++ == L('\0'))
+- return 0;
+- #endif
+ }
+
+--- 60,63 ----
+*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 0
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 1
+
+ #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash50-002 b/src/patches/bash/bash50-002
new file mode 100644
index 000000000..3fc8272f8
--- /dev/null
+++ b/src/patches/bash/bash50-002
@@ -0,0 +1,113 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.0
+Patch-ID: bash50-002
+
+Bug-Reported-by: Ante Peric
synthmeat@gmail.com
+Bug-Reference-ID:
B7E3B567-2467-4F7B-B6B9-CA4E75A9C93F@gmail.com
+Bug-Reference-URL:
http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00095.html
+
+Bug-Description:
+
+When an alias value ends with an unquoted literal tab (not part of a quoted
+string or comment), alias expansion cannot correctly detect the end of the
+alias value after expanding it.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.0/parser.h 2018-12-28 19:11:18.000000000 -0500
+--- parser.h 2019-01-11 15:13:03.000000000 -0500
+***************
+*** 48,51 ****
+--- 48,52 ----
+ #define PST_REDIRLIST 0x080000 /* parsing a list of redirections preceding a simple command name */
+ #define PST_COMMENT 0x100000 /* parsing a shell comment; used by aliases */
++ #define PST_ENDALIAS 0x200000 /* just finished expanding and consuming an alias */
+
+ /* Definition of the delimiter stack. Needed by parse.y and bashhist.c. */
+*** ../bash-5.0/parse.y 2019-01-02 13:57:34.000000000 -0500
+--- parse.y 2019-01-14 08:23:31.000000000 -0500
+***************
+*** 2558,2567 ****
+ pushed_string_list->flags != PSH_DPAREN &&
+ (parser_state & PST_COMMENT) == 0 &&
+ shell_input_line_index > 0 &&
+! shell_input_line[shell_input_line_index-1] != ' ' &&
+ shell_input_line[shell_input_line_index-1] != '\n' &&
+ shellmeta (shell_input_line[shell_input_line_index-1]) == 0 &&
+ (current_delimiter (dstack) != ''' && current_delimiter (dstack) != '"'))
+ {
+ return ' '; /* END_ALIAS */
+ }
+--- 2558,2569 ----
+ pushed_string_list->flags != PSH_DPAREN &&
+ (parser_state & PST_COMMENT) == 0 &&
++ (parser_state & PST_ENDALIAS) == 0 && /* only once */
+ shell_input_line_index > 0 &&
+! shellblank (shell_input_line[shell_input_line_index-1]) == 0 &&
+ shell_input_line[shell_input_line_index-1] != '\n' &&
+ shellmeta (shell_input_line[shell_input_line_index-1]) == 0 &&
+ (current_delimiter (dstack) != ''' && current_delimiter (dstack) != '"'))
+ {
++ parser_state |= PST_ENDALIAS;
+ return ' '; /* END_ALIAS */
+ }
+***************
+*** 2572,2575 ****
+--- 2574,2578 ----
+ if (uc == 0 && pushed_string_list && pushed_string_list->flags != PSH_SOURCE)
+ {
++ parser_state &= ~PST_ENDALIAS;
+ pop_string ();
+ uc = shell_input_line[shell_input_line_index];
+*** ../bash-5.0/y.tab.c 2019-01-02 13:57:43.000000000 -0500
+--- y.tab.c 2019-01-14 08:39:23.000000000 -0500
+***************
+*** 4874,4883 ****
+ pushed_string_list->flags != PSH_DPAREN &&
+ (parser_state & PST_COMMENT) == 0 &&
+ shell_input_line_index > 0 &&
+! shell_input_line[shell_input_line_index-1] != ' ' &&
+ shell_input_line[shell_input_line_index-1] != '\n' &&
+ shellmeta (shell_input_line[shell_input_line_index-1]) == 0 &&
+ (current_delimiter (dstack) != ''' && current_delimiter (dstack) != '"'))
+ {
+ return ' '; /* END_ALIAS */
+ }
+--- 4874,4885 ----
+ pushed_string_list->flags != PSH_DPAREN &&
+ (parser_state & PST_COMMENT) == 0 &&
++ (parser_state & PST_ENDALIAS) == 0 && /* only once */
+ shell_input_line_index > 0 &&
+! shellblank (shell_input_line[shell_input_line_index-1]) == 0 &&
+ shell_input_line[shell_input_line_index-1] != '\n' &&
+ shellmeta (shell_input_line[shell_input_line_index-1]) == 0 &&
+ (current_delimiter (dstack) != ''' && current_delimiter (dstack) != '"'))
+ {
++ parser_state |= PST_ENDALIAS;
+ return ' '; /* END_ALIAS */
+ }
+***************
+*** 4888,4891 ****
+--- 4890,4894 ----
+ if (uc == 0 && pushed_string_list && pushed_string_list->flags != PSH_SOURCE)
+ {
++ parser_state &= ~PST_ENDALIAS;
+ pop_string ();
+ uc = shell_input_line[shell_input_line_index];
+*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 1
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 2
+
+ #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash50-003 b/src/patches/bash/bash50-003
new file mode 100644
index 000000000..f7e5677e5
--- /dev/null
+++ b/src/patches/bash/bash50-003
@@ -0,0 +1,239 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.0
+Patch-ID: bash50-003
+
+Bug-Reported-by: Andrew Church
achurch+bash@achurch.org
+Bug-Reference-ID:
5c534aa2.04371@msgid.achurch.org
+Bug-Reference-URL:
http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00276.html
+
+Bug-Description:
+
+There are several incompatibilities in how bash-5.0 processes pathname
+expansion (globbing) of filename arguments that have backslashes in the
+directory portion.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.0-patched/lib/glob/glob_loop.c 2019-01-16 16:13:21.000000000 -0500
+--- lib/glob/glob_loop.c 2019-02-01 09:45:11.000000000 -0500
+***************
+*** 27,34 ****
+ register const GCHAR *p;
+ register GCHAR c;
+! int bopen;
+
+ p = pattern;
+! bopen = 0;
+
+ while ((c = *p++) != L('\0'))
+--- 27,34 ----
+ register const GCHAR *p;
+ register GCHAR c;
+! int bopen, bsquote;
+
+ p = pattern;
+! bopen = bsquote = 0;
+
+ while ((c = *p++) != L('\0'))
+***************
+*** 56,66 ****
+ case L('\'):
+ /* Don't let the pattern end in a backslash (GMATCH returns no match
+! if the pattern ends in a backslash anyway), but otherwise return 1,
+! since the matching engine uses backslash as an escape character
+! and it can be removed. */
+! return (*p != L('\0'));
+ }
+
+! return 0;
+ }
+
+--- 56,75 ----
+ case L('\'):
+ /* Don't let the pattern end in a backslash (GMATCH returns no match
+! if the pattern ends in a backslash anyway), but otherwise note that
+! we have seen this, since the matching engine uses backslash as an
+! escape character and it can be removed. We return 2 later if we
+! have seen only backslash-escaped characters, so interested callers
+! know they can shortcut and just dequote the pathname. */
+! if (*p != L('\0'))
+! {
+! p++;
+! bsquote = 1;
+! continue;
+! }
+! else /* (*p == L('\0')) */
+! return 0;
+ }
+
+! return bsquote ? 2 : 0;
+ }
+
+*** ../bash-5.0-patched/lib/glob/glob.h 2013-10-28 14:46:12.000000000 -0400
+--- lib/glob/glob.h 2019-03-07 11:06:47.000000000 -0500
+***************
+*** 31,34 ****
+--- 31,35 ----
+ #define GX_ADDCURDIR 0x200 /* internal -- add passed directory name */
+ #define GX_GLOBSTAR 0x400 /* turn on special handling of ** */
++ #define GX_RECURSE 0x800 /* internal -- glob_filename called recursively */
+
+ extern int glob_pattern_p __P((const char *));
+*** ../bash-5.0-patched/lib/glob/glob.c 2018-09-20 10:53:23.000000000 -0400
+--- lib/glob/glob.c 2019-03-07 14:23:43.000000000 -0500
+***************
+*** 1062,1066 ****
+ unsigned int directory_len;
+ int free_dirname; /* flag */
+! int dflags;
+
+ result = (char **) malloc (sizeof (char *));
+--- 1078,1082 ----
+ unsigned int directory_len;
+ int free_dirname; /* flag */
+! int dflags, hasglob;
+
+ result = (char **) malloc (sizeof (char *));
+***************
+*** 1111,1117 ****
+ }
+
+ /* If directory_name contains globbing characters, then we
+! have to expand the previous levels. Just recurse. */
+! if (directory_len > 0 && glob_pattern_p (directory_name))
+ {
+ char **directories, *d, *p;
+--- 1127,1136 ----
+ }
+
++ hasglob = 0;
+ /* If directory_name contains globbing characters, then we
+! have to expand the previous levels. Just recurse.
+! If glob_pattern_p returns != [0,1] we have a pattern that has backslash
+! quotes but no unquoted glob pattern characters. We dequote it below. */
+! if (directory_len > 0 && (hasglob = glob_pattern_p (directory_name)) == 1)
+ {
+ char **directories, *d, *p;
+***************
+*** 1176,1180 ****
+ d[directory_len - 1] = '\0';
+
+! directories = glob_filename (d, dflags);
+
+ if (free_dirname)
+--- 1195,1199 ----
+ d[directory_len - 1] = '\0';
+
+! directories = glob_filename (d, dflags|GX_RECURSE);
+
+ if (free_dirname)
+***************
+*** 1333,1336 ****
+--- 1352,1369 ----
+ return (NULL);
+ }
++ /* If we have a directory name with quoted characters, and we are
++ being called recursively to glob the directory portion of a pathname,
++ we need to dequote the directory name before returning it so the
++ caller can read the directory */
++ if (directory_len > 0 && hasglob == 2 && (flags & GX_RECURSE) != 0)
++ {
++ dequote_pathname (directory_name);
++ directory_len = strlen (directory_name);
++ }
++
++ /* We could check whether or not the dequoted directory_name is a
++ directory and return it here, returning the original directory_name
++ if not, but we don't do that yet. I'm not sure it matters. */
++
+ /* Handle GX_MARKDIRS here. */
+ result[0] = (char *) malloc (directory_len + 1);
+*** ../bash-5.0-patched/pathexp.c 2018-04-29 17:44:48.000000000 -0400
+--- pathexp.c 2019-01-31 20:19:41.000000000 -0500
+***************
+*** 66,74 ****
+ register int c;
+ char *send;
+! int open;
+
+ DECLARE_MBSTATE;
+
+! open = 0;
+ send = string + strlen (string);
+
+--- 66,74 ----
+ register int c;
+ char *send;
+! int open, bsquote;
+
+ DECLARE_MBSTATE;
+
+! open = bsquote = 0;
+ send = string + strlen (string);
+
+***************
+*** 101,105 ****
+ globbing. */
+ case '\':
+! return (*string != 0);
+
+ case CTLESC:
+--- 101,112 ----
+ globbing. */
+ case '\':
+! if (*string != '\0' && *string != '/')
+! {
+! bsquote = 1;
+! string++;
+! continue;
+! }
+! else if (*string == 0)
+! return (0);
+
+ case CTLESC:
+***************
+*** 118,122 ****
+ #endif
+ }
+! return (0);
+ }
+
+--- 125,130 ----
+ #endif
+ }
+!
+! return (bsquote ? 2 : 0);
+ }
+
+*** ../bash-5.0-patched/bashline.c 2019-01-16 16:13:21.000000000 -0500
+--- bashline.c 2019-02-22 09:29:08.000000000 -0500
+***************
+*** 3753,3757 ****
+
+ case '\':
+! if (*string == 0)
+ return (0);
+ }
+--- 3766,3770 ----
+
+ case '\':
+! if (*string++ == 0)
+ return (0);
+ }
+*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 2
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 3
+
+ #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash50-004 b/src/patches/bash/bash50-004
new file mode 100644
index 000000000..fe3c764bd
--- /dev/null
+++ b/src/patches/bash/bash50-004
@@ -0,0 +1,53 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.0
+Patch-ID: bash50-004
+
+Bug-Reported-by: Daniel Kahn Gillmor
dkg@fifthhorseman.net
+Bug-Reference-ID:
87lg0g8aiw.fsf@fifthhorseman.net
+Bug-Reference-URL:
http://lists.gnu.org/archive/html/bug-bash/2019-04/msg00076.html
+
+Bug-Description:
+
+In bash-5.0, the `wait' builtin without arguments waits for all children of the
+shell. This includes children it `inherited' at shell invocation time. This
+patch modifies the behavior to not wait for these inherited children, some
+of which might be long-lived.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.0-patched/jobs.c 2018-12-06 11:44:34.000000000 -0500
+--- jobs.c 2019-04-12 15:15:10.000000000 -0400
+***************
+*** 2489,2496 ****
+ wait_procsubs ();
+ reap_procsubs ();
+! #if 1
+ /* We don't want to wait indefinitely if we have stopped children. */
+- /* XXX - should add a loop that goes through the list of process
+- substitutions and waits for each proc in turn before this code. */
+ if (any_stopped == 0)
+ {
+--- 2490,2495 ----
+ wait_procsubs ();
+ reap_procsubs ();
+! #if 0
+ /* We don't want to wait indefinitely if we have stopped children. */
+ if (any_stopped == 0)
+ {
+*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 3
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 4
+
+ #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash50-005 b/src/patches/bash/bash50-005
new file mode 100644
index 000000000..9b1cd75b0
--- /dev/null
+++ b/src/patches/bash/bash50-005
@@ -0,0 +1,110 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.0
+Patch-ID: bash50-005
+
+Bug-Reported-by: Brad Spencer
bspencer@blackberry.com
+Bug-Reference-ID:
1b993ff2-ce4f-662a-6be4-393457362e47@blackberry.com
+Bug-Reference-URL:
http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00250.html
+
+Bug-Description:
+
+In certain cases, bash optimizes out a fork() call too early and prevents
+traps from running.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.0-patched/command.h 2018-07-20 21:16:31.000000000 -0400
+--- command.h 2019-02-20 11:09:36.000000000 -0500
+***************
+*** 187,190 ****
+--- 188,192 ----
+ #define CMD_LASTPIPE 0x2000
+ #define CMD_STDPATH 0x4000 /* use standard path for command lookup */
++ #define CMD_TRY_OPTIMIZING 0x8000 /* try to optimize this simple command */
+
+ /* What a command looks like. */
+*** ../bash-5.0-patched/builtins/evalstring.c 2018-12-26 11:19:21.000000000 -0500
+--- builtins/evalstring.c 2019-01-29 14:15:19.000000000 -0500
+***************
+*** 101,104 ****
+--- 101,113 ----
+ }
+
++ int
++ can_optimize_connection (command)
++ COMMAND *command;
++ {
++ return (*bash_input.location.string == '\0' &&
++ (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR || command->value.Connection->connector == ';') &&
++ command->value.Connection->second->type == cm_simple);
++ }
++
+ void
+ optimize_fork (command)
+***************
+*** 106,110 ****
+ {
+ if (command->type == cm_connection &&
+! (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR) &&
+ should_suppress_fork (command->value.Connection->second))
+ {
+--- 115,120 ----
+ {
+ if (command->type == cm_connection &&
+! (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR || command->value.Connection->connector == ';') &&
+! (command->value.Connection->second->flags & CMD_TRY_OPTIMIZING) &&
+ should_suppress_fork (command->value.Connection->second))
+ {
+***************
+*** 413,418 ****
+ command->value.Simple->flags |= CMD_NO_FORK;
+ }
+! else if (command->type == cm_connection)
+! optimize_fork (command);
+ #endif /* ONESHOT */
+
+--- 423,438 ----
+ command->value.Simple->flags |= CMD_NO_FORK;
+ }
+!
+! /* Can't optimize forks out here execept for simple commands.
+! This knows that the parser sets up commands as left-side heavy
+! (&& and || are left-associative) and after the single parse,
+! if we are at the end of the command string, the last in a
+! series of connection commands is
+! command->value.Connection->second. */
+! else if (command->type == cm_connection && can_optimize_connection (command))
+! {
+! command->value.Connection->second->flags |= CMD_TRY_OPTIMIZING;
+! command->value.Connection->second->value.Simple->flags |= CMD_TRY_OPTIMIZING;
+! }
+ #endif /* ONESHOT */
+
+*** ../bash-5.0-patched/execute_cmd.c 2018-12-05 09:05:14.000000000 -0500
+--- execute_cmd.c 2019-01-25 15:59:00.000000000 -0500
+***************
+*** 2768,2771 ****
+--- 2768,2773 ----
+ (exec_result != EXECUTION_SUCCESS)))
+ {
++ optimize_fork (command);
++
+ second = command->value.Connection->second;
+ if (ignore_return && second)
+*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 4
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 5
+
+ #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash50-006 b/src/patches/bash/bash50-006
new file mode 100644
index 000000000..2ad1cd200
--- /dev/null
+++ b/src/patches/bash/bash50-006
@@ -0,0 +1,47 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.0
+Patch-ID: bash50-006
+
+Bug-Reported-by: Tomas Mozes
hydrapolic@gmail.com
+Bug-Reference-ID:
CAG6MAzQumLU2vhnmr1UrYAUQAFW5Yo8hfM_sEibX9RJQWJkRrA@mail.gmail.com
+Bug-Reference-URL:
http://lists.gnu.org/archive/html/bug-bash/2019-03/msg00037.html
+
+Bug-Description:
+
+Bash-5.0 did not build successfully if SYSLOG_HISTORY was defined without
+also defining SYSLOG_SHOPT.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.0-patched/builtins/shopt.def 2018-10-05 14:49:02.000000000 -0400
+--- builtins/shopt.def 2019-01-23 09:55:22.000000000 -0500
+***************
+*** 123,127 ****
+ #endif
+
+! #if defined (SYSLOG_HISTORY) && defined (SYSLOG_SHOPT)
+ extern int syslog_history;
+ #endif
+--- 123,127 ----
+ #endif
+
+! #if defined (SYSLOG_HISTORY)
+ extern int syslog_history;
+ #endif
+*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 5
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 6
+
+ #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash50-007 b/src/patches/bash/bash50-007
new file mode 100644
index 000000000..b9eb4150a
--- /dev/null
+++ b/src/patches/bash/bash50-007
@@ -0,0 +1,62 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.0
+Patch-ID: bash50-007
+
+Bug-Reported-by: Grisha Levit
grishalevit@gmail.com
+Bug-Reference-ID:
CAMu=BroHapG1AS3xB5SQaCX2XKu=-E2Ob9uW6LNuHvd=YohrDw@mail.gmail.com
+Bug-Reference-URL:
http://lists.gnu.org/archive/html/bug-bash/2019-02/msg00067.html
+
+Bug-Description:
+
+Running `exec' when job control was disabled, even temporarily, but after it
+had been initialized, could leave the terminal in the wrong process group for
+the executed process.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.0-patched/jobs.c 2018-12-06 11:44:34.000000000 -0500
+--- jobs.c 2019-04-12 15:15:10.000000000 -0400
+***************
+*** 4838,4850 ****
+ {
+ if (job_control)
+! {
+! terminate_stopped_jobs ();
+
+! if (original_pgrp >= 0)
+! give_terminal_to (original_pgrp, 1);
+! }
+
+! if (original_pgrp >= 0)
+! setpgid (0, original_pgrp);
+ }
+
+--- 4838,4848 ----
+ {
+ if (job_control)
+! terminate_stopped_jobs ();
+
+! if (original_pgrp >= 0 && terminal_pgrp != original_pgrp)
+! give_terminal_to (original_pgrp, 1);
+
+! if (original_pgrp >= 0 && setpgid (0, original_pgrp) == 0)
+! shell_pgrp = original_pgrp;
+ }
+
+*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 6
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 7
+
+ #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash50-008 b/src/patches/bash/bash50-008
new file mode 100644
index 000000000..b09d6b33a
--- /dev/null
+++ b/src/patches/bash/bash50-008
@@ -0,0 +1,68 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.0
+Patch-ID: bash50-008
+
+Bug-Reported-by: Michael Albinus
michael.albinus@gmx.de
+Bug-Reference-ID:
87bm36k3kz.fsf@gmx.de
+Bug-Reference-URL:
https://lists.gnu.org/archive/html/bug-bash/2019-02/msg00111.html
+
+Bug-Description:
+
+When HISTSIZE is set to 0, history expansion can leave the history length
+set to an incorrect value, leading to subsequent attempts to access invalid
+memory.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.0-patched/bashhist.c 2018-07-05 22:41:14.000000000 -0400
+--- bashhist.c 2019-02-20 16:20:04.000000000 -0500
+***************
+*** 561,573 ****
+ if (!history_expansion_inhibited && history_expansion && history_expansion_p (line))
+ {
+ /* If we are expanding the second or later line of a multi-line
+ command, decrease history_length so references to history expansions
+ in these lines refer to the previous history entry and not the
+ current command. */
+ if (history_length > 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1)
+ history_length--;
+ expanded = history_expand (line, &history_value);
+ if (history_length >= 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1)
+! history_length++;
+
+ if (expanded)
+--- 561,576 ----
+ if (!history_expansion_inhibited && history_expansion && history_expansion_p (line))
+ {
++ int old_len;
++
+ /* If we are expanding the second or later line of a multi-line
+ command, decrease history_length so references to history expansions
+ in these lines refer to the previous history entry and not the
+ current command. */
++ old_len = history_length;
+ if (history_length > 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1)
+ history_length--;
+ expanded = history_expand (line, &history_value);
+ if (history_length >= 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1)
+! history_length = old_len;
+
+ if (expanded)
+
+*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 7
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 8
+
+ #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash50-009 b/src/patches/bash/bash50-009
new file mode 100644
index 000000000..aef4ce7b5
--- /dev/null
+++ b/src/patches/bash/bash50-009
@@ -0,0 +1,42 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.0
+Patch-ID: bash50-009
+
+Bug-Reported-by: chet.ramey@case.edu
+Bug-Reference-ID:
+Bug-Reference-URL:
+
+Bug-Description:
+
+The history file reading code doesn't close the file descriptor open to
+the history file when it encounters a zero-length file.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.0-patched/lib/readline/histfile.c 2018-06-11 09:14:52.000000000 -0400
+--- lib/readline/histfile.c 2019-05-16 15:55:57.000000000 -0400
+***************
+*** 306,309 ****
+--- 312,316 ----
+ {
+ free (input);
++ close (file);
+ return 0; /* don't waste time if we don't have to */
+ }
+*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 8
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 9
+
+ #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash50-010 b/src/patches/bash/bash50-010
new file mode 100644
index 000000000..bac7aa925
--- /dev/null
+++ b/src/patches/bash/bash50-010
@@ -0,0 +1,172 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.0
+Patch-ID: bash50-010
+
+Bug-Reported-by: Thorsten Glaser
tg@mirbsd.de
+Bug-Reference-ID:
156622962831.19438.16374961114836556294.reportbug@tglase.lan.tarent.de
+Bug-Reference-URL:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=935115
+
+Bug-Description:
+
+Bash-5.0 changed the way assignment statements preceding special builtins
+and shell functions were handled in posix mode. They automatically created
+or modified global variables instead of modifying existing local variables
+as in bash-4.4.
+
+The bash-4.4 posix-mode semantics were buggy, and resulted in creating
+local variables where they were not intended and modifying global variables
+and local variables simultaneously.
+
+The bash-5.0 changes were intended to fix this issue, but did not preserve
+enough backwards compatibility. The posix standard also changed what it
+required in these cases, so bash-5.0 is not bound by the strict conformance
+requirements that existed in previous issues of the standard.
+
+This patch modifies the bash-5.0 posix mode behavior in an effort to restore
+some backwards compatibility and rationalize the behavior in the presence of
+local variables. It
+
+1. Changes the assignment semantics to be more similar to standalone assignment
+ statements: assignments preceding a function call or special builtin while
+ executing in a shell function will modify the value of a local variable
+ with the same name for the duration of the function's execution;
+
+2. Changes assignments preceding shell function calls or special builtins
+ from within a shell function to no longer create or modify global variables
+ in the presence of a local variable with the same name;
+
+3. Assignment statements preceding a shell function call or special builtin
+ at the global scope continue to modify the (global) calling environment,
+ but are unaffected by assignments preceding function calls or special
+ builtins within a function, as described in item 2. This is also similar
+ to the behavior of a standalone assignment statement.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.0-patched/variables.c 2018-12-18 11:07:21.000000000 -0500
+--- variables.c 2019-08-22 10:53:44.000000000 -0400
+***************
+*** 4461,4467 ****
+
+ /* Take a variable from an assignment statement preceding a posix special
+! builtin (including `return') and create a global variable from it. This
+! is called from merge_temporary_env, which is only called when in posix
+! mode. */
+ static void
+ push_posix_temp_var (data)
+--- 4461,4467 ----
+
+ /* Take a variable from an assignment statement preceding a posix special
+! builtin (including `return') and create a variable from it as if a
+! standalone assignment statement had been performed. This is called from
+! merge_temporary_env, which is only called when in posix mode. */
+ static void
+ push_posix_temp_var (data)
+***************
+*** 4473,4486 ****
+ var = (SHELL_VAR *)data;
+
+! binding_table = global_variables->table;
+! if (binding_table == 0)
+! binding_table = global_variables->table = hash_create (VARIABLES_HASH_BUCKETS);
+!
+! v = bind_variable_internal (var->name, value_cell (var), binding_table, 0, ASS_FORCE|ASS_NOLONGJMP);
+
+ /* global variables are no longer temporary and don't need propagating. */
+! var->attributes &= ~(att_tempvar|att_propagate);
+ if (v)
+! v->attributes |= var->attributes;
+
+ if (find_special_var (var->name) >= 0)
+--- 4473,4497 ----
+ var = (SHELL_VAR *)data;
+
+! /* Just like do_assignment_internal(). This makes assignments preceding
+! special builtins act like standalone assignment statements when in
+! posix mode, satisfying the posix requirement that this affect the
+! "current execution environment." */
+! v = bind_variable (var->name, value_cell (var), ASS_FORCE|ASS_NOLONGJMP);
+!
+! /* If this modifies an existing local variable, v->context will be non-zero.
+! If it comes back with v->context == 0, we bound at the global context.
+! Set binding_table appropriately. It doesn't matter whether it's correct
+! if the variable is local, only that it's not global_variables->table */
+! binding_table = v->context ? shell_variables->table : global_variables->table;
+
+ /* global variables are no longer temporary and don't need propagating. */
+! if (binding_table == global_variables->table)
+! var->attributes &= ~(att_tempvar|att_propagate);
+!
+ if (v)
+! {
+! v->attributes |= var->attributes;
+! v->attributes &= ~att_tempvar; /* not a temp var now */
+! }
+
+ if (find_special_var (var->name) >= 0)
+***************
+*** 4576,4587 ****
+ {
+ int i;
+
+ tempvar_list = strvec_create (HASH_ENTRIES (temporary_env) + 1);
+ tempvar_list[tvlist_ind = 0] = 0;
+!
+! hash_flush (temporary_env, pushf);
+! hash_dispose (temporary_env);
+ temporary_env = (HASH_TABLE *)NULL;
+
+ tempvar_list[tvlist_ind] = 0;
+
+--- 4587,4601 ----
+ {
+ int i;
++ HASH_TABLE *disposer;
+
+ tempvar_list = strvec_create (HASH_ENTRIES (temporary_env) + 1);
+ tempvar_list[tvlist_ind = 0] = 0;
+!
+! disposer = temporary_env;
+ temporary_env = (HASH_TABLE *)NULL;
+
++ hash_flush (disposer, pushf);
++ hash_dispose (disposer);
++
+ tempvar_list[tvlist_ind] = 0;
+
+*** ../bash-5.0-patched/tests/varenv.right 2018-12-17 15:39:48.000000000 -0500
+--- tests/varenv.right 2019-08-22 16:05:25.000000000 -0400
+***************
+*** 147,153 ****
+ outside: declare -- var="one"
+ inside: declare -x var="value"
+! outside: declare -x var="value"
+! inside: declare -- var="local"
+! outside: declare -x var="global"
+ foo=<unset> environment foo=
+ foo=foo environment foo=foo
+--- 147,153 ----
+ outside: declare -- var="one"
+ inside: declare -x var="value"
+! outside: declare -- var="outside"
+! inside: declare -x var="global"
+! outside: declare -- var="outside"
+ foo=<unset> environment foo=
+ foo=foo environment foo=foo
+*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 9
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 10
+
+ #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash50-011 b/src/patches/bash/bash50-011
new file mode 100644
index 000000000..a9ae690e0
--- /dev/null
+++ b/src/patches/bash/bash50-011
@@ -0,0 +1,59 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.0
+Patch-ID: bash50-011
+
+Bug-Reported-by: Matt Whitlock
+Bug-Reference-ID:
+Bug-Reference-URL:
https://savannah.gnu.org/support/?109671
+
+Bug-Description:
+
+The conditional command did not perform appropriate quoted null character
+removal on its arguments, causing syntax errors and attempts to stat
+invalid pathnames.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.0-patched/subst.c 2018-12-22 17:43:37.000000000 -0500
+--- subst.c 2019-04-14 13:25:41.000000000 -0400
+***************
+*** 3626,3630 ****
+ SPECIAL is 2, this is an rhs argument for the =~ operator, and should
+ be quoted appropriately for regcomp/regexec. The caller is responsible
+! for removing the backslashes if the unquoted word is needed later. */
+ char *
+ cond_expand_word (w, special)
+--- 3642,3648 ----
+ SPECIAL is 2, this is an rhs argument for the =~ operator, and should
+ be quoted appropriately for regcomp/regexec. The caller is responsible
+! for removing the backslashes if the unquoted word is needed later. In
+! any case, since we don't perform word splitting, we need to do quoted
+! null character removal. */
+ char *
+ cond_expand_word (w, special)
+***************
+*** 3647,3650 ****
+--- 3665,3670 ----
+ if (special == 0) /* LHS */
+ {
++ if (l->word)
++ word_list_remove_quoted_nulls (l);
+ dequote_list (l);
+ r = string_list (l);
+*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 10
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 11
+
+ #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/iptables-1.4.12-IMQ-test4.diff b/src/patches/iptables-1.4.12-IMQ-test4.diff
deleted file mode 100644
index 5ce17e1b4..000000000
--- a/src/patches/iptables-1.4.12-IMQ-test4.diff
+++ /dev/null
@@ -1,141 +0,0 @@
-diff -Naur iptables-1.4.12.1/extensions/libxt_IMQ.c iptables-1.4.12.1-imq/extensions/libxt_IMQ.c
---- iptables-1.4.12.1/extensions/libxt_IMQ.c 1970-01-01 02:00:00.000000000 +0200
-+++ iptables-1.4.12.1-imq/extensions/libxt_IMQ.c 2011-09-30 13:53:21.000000000 +0300
-@@ -0,0 +1,105 @@
-+/* Shared library add-on to iptables to add IMQ target support. */
-+#include <stdio.h>
-+#include <string.h>
-+#include <stdlib.h>
-+#include <getopt.h>
-+
-+#include <xtables.h>
-+#include <linux/netfilter/x_tables.h>
-+#include <linux/netfilter/xt_IMQ.h>
-+
-+/* Function which prints out usage message. */
-+static void IMQ_help(void)
-+{
-+ printf(
-+"IMQ target options:\n"
-+" --todev <N> enqueue to imq<N>, defaults to 0\n");
-+
-+}
-+
-+static struct option IMQ_opts[] = {
-+ { "todev", 1, 0, '1' },
-+ { 0 }
-+};
-+
-+/* Initialize the target. */
-+static void IMQ_init(struct xt_entry_target *t)
-+{
-+ struct xt_imq_info *mr = (struct xt_imq_info*)t->data;
-+
-+ mr->todev = 0;
-+}
-+
-+/* Function which parses command options; returns true if it
-+ ate an option */
-+static int IMQ_parse(int c, char **argv, int invert, unsigned int *flags,
-+ const void *entry, struct xt_entry_target **target)
-+{
-+ struct xt_imq_info *mr = (struct xt_imq_info*)(*target)->data;
-+
-+ switch(c) {
-+ case '1':
-+/* if (xtables_check_inverse(optarg, &invert, NULL, 0, argv))
-+ xtables_error(PARAMETER_PROBLEM,
-+ "Unexpected `!' after --todev");
-+*/
-+ mr->todev=atoi(optarg);
-+ break;
-+
-+ default:
-+ return 0;
-+ }
-+ return 1;
-+}
-+
-+/* Prints out the targinfo. */
-+static void IMQ_print(const void *ip,
-+ const struct xt_entry_target *target,
-+ int numeric)
-+{
-+ struct xt_imq_info *mr = (struct xt_imq_info*)target->data;
-+
-+ printf("IMQ: todev %u ", mr->todev);
-+}
-+
-+/* Saves the union ipt_targinfo in parsable form to stdout. */
-+static void IMQ_save(const void *ip, const struct xt_entry_target *target)
-+{
-+ struct xt_imq_info *mr = (struct xt_imq_info*)target->data;
-+
-+ printf(" --todev %u", mr->todev);
-+}
-+
-+static struct xtables_target imq_target = {
-+ .name = "IMQ",
-+ .version = XTABLES_VERSION,
-+ .family = NFPROTO_IPV4,
-+ .size = XT_ALIGN(sizeof(struct xt_imq_info)),
-+ .userspacesize = XT_ALIGN(sizeof(struct xt_imq_info)),
-+ .help = IMQ_help,
-+ .init = IMQ_init,
-+ .parse = IMQ_parse,
-+ .print = IMQ_print,
-+ .save = IMQ_save,
-+ .extra_opts = IMQ_opts,
-+};
-+
-+static struct xtables_target imq_target6 = {
-+ .name = "IMQ",
-+ .version = XTABLES_VERSION,
-+ .family = NFPROTO_IPV6,
-+ .size = XT_ALIGN(sizeof(struct xt_imq_info)),
-+ .userspacesize = XT_ALIGN(sizeof(struct xt_imq_info)),
-+ .help = IMQ_help,
-+ .init = IMQ_init,
-+ .parse = IMQ_parse,
-+ .print = IMQ_print,
-+ .save = IMQ_save,
-+ .extra_opts = IMQ_opts,
-+};
-+
-+// void __attribute((constructor)) nf_ext_init(void){
-+void _init(void){
-+ xtables_register_target(&imq_target);
-+ xtables_register_target(&imq_target6);
-+}
-diff -Naur iptables-1.4.12.1/extensions/libxt_IMQ.man iptables-1.4.12.1-imq/extensions/libxt_IMQ.man
---- iptables-1.4.12.1/extensions/libxt_IMQ.man 1970-01-01 02:00:00.000000000 +0200
-+++ iptables-1.4.12.1-imq/extensions/libxt_IMQ.man 2011-09-30 13:53:21.000000000 +0300
-@@ -0,0 +1,15 @@
-+This target is used to redirect the traffic to the IMQ driver and you can apply
-+QoS rules like HTB or CBQ.
-+For example you can select only traffic comming from a specific interface or
-+is going out on a specific interface.
-+Also it permits to capture the traffic BEFORE NAT in the case of outgoing traffic
-+or AFTER NAT in the case of incomming traffic.
-+.TP
-+\fB--to-dev\fP \fIvalue\fP
-+Set the IMQ interface where to send this traffic
-+.TP
-+Example:
-+.TP
-+Redirect incomming traffic from interface eth0 to imq0 and outgoing traffic to imq1:
-+iptables -t mangle -A FORWARD -i eth0 -j IMQ --to-dev 0
-+iptables -t mangle -A FORWARD -o eth0 -j IMQ --to-dev 1
-diff -Naur iptables-1.4.12.1/include/linux/netfilter/xt_IMQ.h iptables-1.4.12.1-imq/include/linux/netfilter/xt_IMQ.h
---- iptables-1.4.12.1/include/linux/netfilter/xt_IMQ.h 1970-01-01 02:00:00.000000000 +0200
-+++ iptables-1.4.12.1-imq/include/linux/netfilter/xt_IMQ.h 2011-09-30 13:53:21.000000000 +0300
-@@ -0,0 +1,9 @@
-+#ifndef _XT_IMQ_H
-+#define _XT_IMQ_H
-+
-+struct xt_imq_info {
-+ unsigned int todev; /* target imq device */
-+};
-+
-+#endif /* _XT_IMQ_H */
-+
diff --git a/src/patches/linux/linux-4.14-imq.diff b/src/patches/linux/linux-4.14-imq.diff
deleted file mode 100644
index 0281bf6e4..000000000
--- a/src/patches/linux/linux-4.14-imq.diff
+++ /dev/null
@@ -1,1759 +0,0 @@
-diff -Naupr linux-4.14_orig/drivers/net/imq.c linux-4.14/drivers/net/imq.c
---- linux-4.14_orig/drivers/net/imq.c 1970-01-01 07:00:00.000000000 +0700
-+++ linux-4.14/drivers/net/imq.c 2017-11-13 11:46:45.844089945 +0700
-@@ -0,0 +1,962 @@
-+/*
-+ * Pseudo-driver for the intermediate queue device.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version
-+ * 2 of the License, or (at your option) any later version.
-+ *
-+ * Authors: Patrick McHardy,
kaber@trash.net
-+ *
-+ * The first version was written by Martin Devera,
devik@cdi.cz
-+ *
-+ * See Credits.txt
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/moduleparam.h>
-+#include <linux/list.h>
-+#include <linux/skbuff.h>
-+#include <linux/netdevice.h>
-+#include <linux/etherdevice.h>
-+#include <linux/rtnetlink.h>
-+#include <linux/if_arp.h>
-+#include <linux/netfilter.h>
-+#include <linux/netfilter_ipv4.h>
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+#include <linux/netfilter_ipv6.h>
-+#endif
-+#include <linux/imq.h>
-+#include <net/pkt_sched.h>
-+#include <net/netfilter/nf_queue.h>
-+#include <net/sock.h>
-+#include <linux/ip.h>
-+#include <linux/ipv6.h>
-+#include <linux/if_vlan.h>
-+#include <linux/if_pppox.h>
-+#include <net/ip.h>
-+#include <net/ipv6.h>
-+
-+static int imq_nf_queue(struct nf_queue_entry *entry, unsigned queue_num);
-+
-+static nf_hookfn imq_nf_hook;
-+
-+static struct nf_hook_ops imq_ops[] = {
-+ {
-+ /* imq_ingress_ipv4 */
-+ .hook = imq_nf_hook,
-+ .pf = PF_INET,
-+ .hooknum = NF_INET_PRE_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+ .priority = NF_IP_PRI_MANGLE + 1,
-+#else
-+ .priority = NF_IP_PRI_NAT_DST + 1,
-+#endif
-+ },
-+ {
-+ /* imq_egress_ipv4 */
-+ .hook = imq_nf_hook,
-+ .pf = PF_INET,
-+ .hooknum = NF_INET_POST_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA)
-+ .priority = NF_IP_PRI_LAST,
-+#else
-+ .priority = NF_IP_PRI_NAT_SRC - 1,
-+#endif
-+ },
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+ {
-+ /* imq_ingress_ipv6 */
-+ .hook = imq_nf_hook,
-+ .pf = PF_INET6,
-+ .hooknum = NF_INET_PRE_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+ .priority = NF_IP6_PRI_MANGLE + 1,
-+#else
-+ .priority = NF_IP6_PRI_NAT_DST + 1,
-+#endif
-+ },
-+ {
-+ /* imq_egress_ipv6 */
-+ .hook = imq_nf_hook,
-+ .pf = PF_INET6,
-+ .hooknum = NF_INET_POST_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA)
-+ .priority = NF_IP6_PRI_LAST,
-+#else
-+ .priority = NF_IP6_PRI_NAT_SRC - 1,
-+#endif
-+ },
-+#endif
-+};
-+
-+#if defined(CONFIG_IMQ_NUM_DEVS)
-+static int numdevs = CONFIG_IMQ_NUM_DEVS;
-+#else
-+static int numdevs = IMQ_MAX_DEVS;
-+#endif
-+
-+static struct net_device *imq_devs_cache[IMQ_MAX_DEVS];
-+
-+#define IMQ_MAX_QUEUES 32
-+static int numqueues = 1;
-+static u32 imq_hashrnd;
-+static int imq_dev_accurate_stats = 1;
-+
-+static inline __be16 pppoe_proto(const struct sk_buff *skb)
-+{
-+ return *((__be16 *)(skb_mac_header(skb) + ETH_HLEN +
-+ sizeof(struct pppoe_hdr)));
-+}
-+
-+static u16 imq_hash(struct net_device *dev, struct sk_buff *skb)
-+{
-+ unsigned int pull_len;
-+ u16 protocol = skb->protocol;
-+ u32 addr1, addr2;
-+ u32 hash, ihl = 0;
-+ union {
-+ u16 in16[2];
-+ u32 in32;
-+ } ports;
-+ u8 ip_proto;
-+
-+ pull_len = 0;
-+
-+recheck:
-+ switch (protocol) {
-+ case htons(ETH_P_8021Q): {
-+ if (unlikely(skb_pull(skb, VLAN_HLEN) == NULL))
-+ goto other;
-+
-+ pull_len += VLAN_HLEN;
-+ skb->network_header += VLAN_HLEN;
-+
-+ protocol = vlan_eth_hdr(skb)->h_vlan_encapsulated_proto;
-+ goto recheck;
-+ }
-+
-+ case htons(ETH_P_PPP_SES): {
-+ if (unlikely(skb_pull(skb, PPPOE_SES_HLEN) == NULL))
-+ goto other;
-+
-+ pull_len += PPPOE_SES_HLEN;
-+ skb->network_header += PPPOE_SES_HLEN;
-+
-+ protocol = pppoe_proto(skb);
-+ goto recheck;
-+ }
-+
-+ case htons(ETH_P_IP): {
-+ const struct iphdr *iph = ip_hdr(skb);
-+
-+ if (unlikely(!pskb_may_pull(skb, sizeof(struct iphdr))))
-+ goto other;
-+
-+ addr1 = iph->daddr;
-+ addr2 = iph->saddr;
-+
-+ ip_proto = !(ip_hdr(skb)->frag_off & htons(IP_MF | IP_OFFSET)) ?
-+ iph->protocol : 0;
-+ ihl = ip_hdrlen(skb);
-+
-+ break;
-+ }
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+ case htons(ETH_P_IPV6): {
-+ const struct ipv6hdr *iph = ipv6_hdr(skb);
-+ __be16 fo = 0;
-+
-+ if (unlikely(!pskb_may_pull(skb, sizeof(struct ipv6hdr))))
-+ goto other;
-+
-+ addr1 = iph->daddr.s6_addr32[3];
-+ addr2 = iph->saddr.s6_addr32[3];
-+ ihl = ipv6_skip_exthdr(skb, sizeof(struct ipv6hdr), &ip_proto,
-+ &fo);
-+ if (unlikely(ihl < 0))
-+ goto other;
-+
-+ break;
-+ }
-+#endif
-+ default:
-+other:
-+ if (pull_len != 0) {
-+ skb_push(skb, pull_len);
-+ skb->network_header -= pull_len;
-+ }
-+
-+ return (u16)(ntohs(protocol) % dev->real_num_tx_queues);
-+ }
-+
-+ if (addr1 > addr2)
-+ swap(addr1, addr2);
-+
-+ switch (ip_proto) {
-+ case IPPROTO_TCP:
-+ case IPPROTO_UDP:
-+ case IPPROTO_DCCP:
-+ case IPPROTO_ESP:
-+ case IPPROTO_AH:
-+ case IPPROTO_SCTP:
-+ case IPPROTO_UDPLITE: {
-+ if (likely(skb_copy_bits(skb, ihl, &ports.in32, 4) >= 0)) {
-+ if (ports.in16[0] > ports.in16[1])
-+ swap(ports.in16[0], ports.in16[1]);
-+ break;
-+ }
-+ /* fall-through */
-+ }
-+ default:
-+ ports.in32 = 0;
-+ break;
-+ }
-+
-+ if (pull_len != 0) {
-+ skb_push(skb, pull_len);
-+ skb->network_header -= pull_len;
-+ }
-+
-+ hash = jhash_3words(addr1, addr2, ports.in32, imq_hashrnd ^ ip_proto);
-+
-+ return (u16)(((u64)hash * dev->real_num_tx_queues) >> 32);
-+}
-+
-+static inline bool sk_tx_queue_recorded(struct sock *sk)
-+{
-+ return (sk_tx_queue_get(sk) >= 0);
-+}
-+
-+static struct netdev_queue *imq_select_queue(struct net_device *dev,
-+ struct sk_buff *skb)
-+{
-+ u16 queue_index = 0;
-+ u32 hash;
-+
-+ if (likely(dev->real_num_tx_queues == 1))
-+ goto out;
-+
-+ /* IMQ can be receiving ingress or engress packets. */
-+
-+ /* Check first for if rx_queue is set */
-+ if (skb_rx_queue_recorded(skb)) {
-+ queue_index = skb_get_rx_queue(skb);
-+ goto out;
-+ }
-+
-+ /* Check if socket has tx_queue set */
-+ if (sk_tx_queue_recorded(skb->sk)) {
-+ queue_index = sk_tx_queue_get(skb->sk);
-+ goto out;
-+ }
-+
-+ /* Try use socket hash */
-+ if (skb->sk && skb->sk->sk_hash) {
-+ hash = skb->sk->sk_hash;
-+ queue_index =
-+ (u16)(((u64)hash * dev->real_num_tx_queues) >> 32);
-+ goto out;
-+ }
-+
-+ /* Generate hash from packet data */
-+ queue_index = imq_hash(dev, skb);
-+
-+out:
-+ if (unlikely(queue_index >= dev->real_num_tx_queues))
-+ queue_index = (u16)((u32)queue_index % dev->real_num_tx_queues);
-+
-+ skb_set_queue_mapping(skb, queue_index);
-+ return netdev_get_tx_queue(dev, queue_index);
-+}
-+
-+static struct net_device_stats *imq_get_stats(struct net_device *dev)
-+{
-+ return &dev->stats;
-+}
-+
-+/* called for packets kfree'd in qdiscs at places other than enqueue */
-+static void imq_skb_destructor(struct sk_buff *skb)
-+{
-+ struct nf_queue_entry *entry = skb->nf_queue_entry;
-+
-+ skb->nf_queue_entry = NULL;
-+
-+ if (entry) {
-+ nf_queue_entry_release_refs(entry);
-+ kfree(entry);
-+ }
-+
-+ skb_restore_cb(skb); /* kfree backup */
-+}
-+
-+static void imq_done_check_queue_mapping(struct sk_buff *skb,
-+ struct net_device *dev)
-+{
-+ unsigned int queue_index;
-+
-+ /* Don't let queue_mapping be left too large after exiting IMQ */
-+ if (likely(skb->dev != dev && skb->dev != NULL)) {
-+ queue_index = skb_get_queue_mapping(skb);
-+ if (unlikely(queue_index >= skb->dev->real_num_tx_queues)) {
-+ queue_index = (u16)((u32)queue_index %
-+ skb->dev->real_num_tx_queues);
-+ skb_set_queue_mapping(skb, queue_index);
-+ }
-+ } else {
-+ /* skb->dev was IMQ device itself or NULL, be on safe side and
-+ * just clear queue mapping.
-+ */
-+ skb_set_queue_mapping(skb, 0);
-+ }
-+}
-+
-+static netdev_tx_t imq_dev_xmit(struct sk_buff *skb, struct net_device *dev)
-+{
-+ struct nf_queue_entry *entry = skb->nf_queue_entry;
-+
-+ rcu_read_lock();
-+
-+ skb->nf_queue_entry = NULL;
-+ netif_trans_update(dev);
-+
-+ dev->stats.tx_bytes += skb->len;
-+ dev->stats.tx_packets++;
-+
-+ if (unlikely(entry == NULL)) {
-+ /* We don't know what is going on here.. packet is queued for
-+ * imq device, but (probably) not by us.
-+ *
-+ * If this packet was not send here by imq_nf_queue(), then
-+ * skb_save_cb() was not used and skb_free() should not show:
-+ * WARNING: IMQ: kfree_skb: skb->cb_next:..
-+ * and/or
-+ * WARNING: IMQ: kfree_skb: skb->nf_queue_entry...
-+ *
-+ * However if this message is shown, then IMQ is somehow broken
-+ * and you should report this to linuximq.net.
-+ */
-+
-+ /* imq_dev_xmit is black hole that eats all packets, report that
-+ * we eat this packet happily and increase dropped counters.
-+ */
-+
-+ dev->stats.tx_dropped++;
-+ dev_kfree_skb(skb);
-+
-+ rcu_read_unlock();
-+ return NETDEV_TX_OK;
-+ }
-+
-+ skb_restore_cb(skb); /* restore skb->cb */
-+
-+ skb->imq_flags = 0;
-+ skb->destructor = NULL;
-+
-+ imq_done_check_queue_mapping(skb, dev);
-+
-+ nf_reinject(entry, NF_ACCEPT);
-+
-+ rcu_read_unlock();
-+ return NETDEV_TX_OK;
-+}
-+
-+static struct net_device *get_imq_device_by_index(int index)
-+{
-+ struct net_device *dev = NULL;
-+ struct net *net;
-+ char buf[8];
-+
-+ /* get device by name and cache result */
-+ snprintf(buf, sizeof(buf), "imq%d", index);
-+
-+ /* Search device from all namespaces. */
-+ for_each_net(net) {
-+ dev = dev_get_by_name(net, buf);
-+ if (dev)
-+ break;
-+ }
-+
-+ if (WARN_ON_ONCE(dev == NULL)) {
-+ /* IMQ device not found. Exotic config? */
-+ return ERR_PTR(-ENODEV);
-+ }
-+
-+ imq_devs_cache[index] = dev;
-+ dev_put(dev);
-+
-+ return dev;
-+}
-+
-+static struct nf_queue_entry *nf_queue_entry_dup(struct nf_queue_entry *e)
-+{
-+ struct nf_queue_entry *entry = kmemdup(e, e->size, GFP_ATOMIC);
-+ if (entry) {
-+ nf_queue_entry_get_refs(entry);
-+ return entry;
-+ }
-+ return NULL;
-+}
-+
-+#ifdef CONFIG_BRIDGE_NETFILTER
-+/* When called from bridge netfilter, skb->data must point to MAC header
-+ * before calling skb_gso_segment(). Else, original MAC header is lost
-+ * and segmented skbs will be sent to wrong destination.
-+ */
-+static void nf_bridge_adjust_skb_data(struct sk_buff *skb)
-+{
-+ if (skb->nf_bridge)
-+ __skb_push(skb, skb->network_header - skb->mac_header);
-+}
-+
-+static void nf_bridge_adjust_segmented_data(struct sk_buff *skb)
-+{
-+ if (skb->nf_bridge)
-+ __skb_pull(skb, skb->network_header - skb->mac_header);
-+}
-+#else
-+#define nf_bridge_adjust_skb_data(s) do {} while (0)
-+#define nf_bridge_adjust_segmented_data(s) do {} while (0)
-+#endif
-+
-+static void free_entry(struct nf_queue_entry *entry)
-+{
-+ nf_queue_entry_release_refs(entry);
-+ kfree(entry);
-+}
-+
-+static int __imq_nf_queue(struct nf_queue_entry *entry, struct net_device *dev);
-+
-+static int __imq_nf_queue_gso(struct nf_queue_entry *entry,
-+ struct net_device *dev, struct sk_buff *skb)
-+{
-+ int ret = -ENOMEM;
-+ struct nf_queue_entry *entry_seg;
-+
-+ nf_bridge_adjust_segmented_data(skb);
-+
-+ if (skb->next == NULL) { /* last packet, no need to copy entry */
-+ struct sk_buff *gso_skb = entry->skb;
-+ entry->skb = skb;
-+ ret = __imq_nf_queue(entry, dev);
-+ if (ret)
-+ entry->skb = gso_skb;
-+ return ret;
-+ }
-+
-+ skb->next = NULL;
-+
-+ entry_seg = nf_queue_entry_dup(entry);
-+ if (entry_seg) {
-+ entry_seg->skb = skb;
-+ ret = __imq_nf_queue(entry_seg, dev);
-+ if (ret)
-+ free_entry(entry_seg);
-+ }
-+ return ret;
-+}
-+
-+static int imq_nf_queue(struct nf_queue_entry *entry, unsigned queue_num)
-+{
-+ struct sk_buff *skb, *segs;
-+ struct net_device *dev;
-+ unsigned int queued;
-+ int index, retval, err;
-+
-+ index = entry->skb->imq_flags & IMQ_F_IFMASK;
-+ if (unlikely(index > numdevs - 1)) {
-+ if (net_ratelimit())
-+ pr_warn("IMQ: invalid device specified, highest is %u\n",
-+ numdevs - 1);
-+ retval = -EINVAL;
-+ goto out_no_dev;
-+ }
-+
-+ /* check for imq device by index from cache */
-+ dev = imq_devs_cache[index];
-+ if (unlikely(!dev)) {
-+ dev = get_imq_device_by_index(index);
-+ if (IS_ERR(dev)) {
-+ retval = PTR_ERR(dev);
-+ goto out_no_dev;
-+ }
-+ }
-+
-+ if (unlikely(!(dev->flags & IFF_UP))) {
-+ entry->skb->imq_flags = 0;
-+ retval = -ECANCELED;
-+ goto out_no_dev;
-+ }
-+
-+ /* Since 3.10.x, GSO handling moved here as result of upstream commit
-+ * a5fedd43d5f6c94c71053a66e4c3d2e35f1731a2 (netfilter: move
-+ * skb_gso_segment into nfnetlink_queue module).
-+ *
-+ * Following code replicates the gso handling from
-+ * 'net/netfilter/nfnetlink_queue_core.c':nfqnl_enqueue_packet().
-+ */
-+
-+ skb = entry->skb;
-+
-+ switch (entry->state.pf) {
-+ case NFPROTO_IPV4:
-+ skb->protocol = htons(ETH_P_IP);
-+ break;
-+ case NFPROTO_IPV6:
-+ skb->protocol = htons(ETH_P_IPV6);
-+ break;
-+ }
-+
-+ if (!skb_is_gso(entry->skb))
-+ return __imq_nf_queue(entry, dev);
-+
-+ nf_bridge_adjust_skb_data(skb);
-+ segs = skb_gso_segment(skb, 0);
-+ /* Does not use PTR_ERR to limit the number of error codes that can be
-+ * returned by nf_queue. For instance, callers rely on -ECANCELED to
-+ * mean 'ignore this hook'.
-+ */
-+ err = -ENOBUFS;
-+ if (IS_ERR(segs))
-+ goto out_err;
-+ queued = 0;
-+ err = 0;
-+ do {
-+ struct sk_buff *nskb = segs->next;
-+ if (nskb && nskb->next)
-+ nskb->cb_next = NULL;
-+ if (err == 0)
-+ err = __imq_nf_queue_gso(entry, dev, segs);
-+ if (err == 0)
-+ queued++;
-+ else
-+ kfree_skb(segs);
-+ segs = nskb;
-+ } while (segs);
-+
-+ if (queued) {
-+ if (err) /* some segments are already queued */
-+ free_entry(entry);
-+ kfree_skb(skb);
-+ return 0;
-+ }
-+
-+out_err:
-+ nf_bridge_adjust_segmented_data(skb);
-+ retval = err;
-+out_no_dev:
-+ return retval;
-+}
-+
-+static int __imq_nf_queue(struct nf_queue_entry *entry, struct net_device *dev)
-+{
-+ struct sk_buff *skb_orig, *skb, *skb_shared, *skb_popd;
-+ struct Qdisc *q;
-+ struct sk_buff *to_free = NULL;
-+ struct netdev_queue *txq;
-+ spinlock_t *root_lock;
-+ int users;
-+ int retval = -EINVAL;
-+ unsigned int orig_queue_index;
-+
-+ dev->last_rx = jiffies;
-+
-+ skb = entry->skb;
-+ skb_orig = NULL;
-+
-+ /* skb has owner? => make clone */
-+ if (unlikely(skb->destructor)) {
-+ skb_orig = skb;
-+ skb = skb_clone(skb, GFP_ATOMIC);
-+ if (unlikely(!skb)) {
-+ retval = -ENOMEM;
-+ goto out;
-+ }
-+ skb->cb_next = NULL;
-+ entry->skb = skb;
-+ }
-+
-+ dev->stats.rx_bytes += skb->len;
-+ dev->stats.rx_packets++;
-+
-+ if (!skb->dev) {
-+ /* skb->dev == NULL causes problems, try the find cause. */
-+ if (net_ratelimit()) {
-+ dev_warn(&dev->dev,
-+ "received packet with skb->dev == NULL\n");
-+ dump_stack();
-+ }
-+
-+ skb->dev = dev;
-+ }
-+
-+ /* Disables softirqs for lock below */
-+ rcu_read_lock_bh();
-+
-+ /* Multi-queue selection */
-+ orig_queue_index = skb_get_queue_mapping(skb);
-+ txq = imq_select_queue(dev, skb);
-+
-+ q = rcu_dereference(txq->qdisc);
-+ if (unlikely(!q->enqueue))
-+ goto packet_not_eaten_by_imq_dev;
-+
-+ skb->nf_queue_entry = entry;
-+ root_lock = qdisc_lock(q);
-+ spin_lock(root_lock);
-+
-+ users = refcount_read(&skb->users);
-+
-+ skb_shared = skb_get(skb); /* increase reference count by one */
-+
-+ /* backup skb->cb, as qdisc layer will overwrite it */
-+ skb_save_cb(skb_shared);
-+ qdisc_enqueue_root(skb_shared, q, &to_free); /* might kfree_skb */
-+ if (likely(refcount_read(&skb_shared->users) == users + 1)) {
-+ bool validate;
-+
-+ kfree_skb(skb_shared); /* decrease reference count by one */
-+
-+ skb->destructor = &imq_skb_destructor;
-+
-+ skb_popd = qdisc_dequeue_skb(q, &validate);
-+
-+ /* cloned? */
-+ if (unlikely(skb_orig))
-+ kfree_skb(skb_orig); /* free original */
-+
-+ spin_unlock(root_lock);
-+
-+#if 0
-+ /* schedule qdisc dequeue */
-+ __netif_schedule(q);
-+#else
-+ if (likely(skb_popd)) {
-+ /* Note that we validate skb (GSO, checksum, ...) outside of locks */
-+ if (validate)
-+ skb_popd = validate_xmit_skb_list(skb_popd, dev);
-+
-+ if (skb_popd) {
-+ int dummy_ret;
-+ int cpu = smp_processor_id(); /* ok because BHs are off */
-+
-+ txq = skb_get_tx_queue(dev, skb_popd);
-+ /*
-+ IMQ device will not be frozen or stoped, and it always be successful.
-+ So we need not check its status and return value to accelerate.
-+ */
-+ if (imq_dev_accurate_stats && txq->xmit_lock_owner != cpu) {
-+ HARD_TX_LOCK(dev, txq, cpu);
-+ if (!netif_xmit_frozen_or_stopped(txq)) {
-+ dev_hard_start_xmit(skb_popd, dev, txq, &dummy_ret);
-+ }
-+ HARD_TX_UNLOCK(dev, txq);
-+ } else {
-+ if (!netif_xmit_frozen_or_stopped(txq)) {
-+ dev_hard_start_xmit(skb_popd, dev, txq, &dummy_ret);
-+ }
-+ }
-+ }
-+ } else {
-+ /* No ready skb, then schedule it */
-+ __netif_schedule(q);
-+ }
-+#endif
-+ rcu_read_unlock_bh();
-+ retval = 0;
-+ goto out;
-+ } else {
-+ skb_restore_cb(skb_shared); /* restore skb->cb */
-+ skb->nf_queue_entry = NULL;
-+ /*
-+ * qdisc dropped packet and decreased skb reference count of
-+ * skb, so we don't really want to and try refree as that would
-+ * actually destroy the skb.
-+ */
-+ spin_unlock(root_lock);
-+ goto packet_not_eaten_by_imq_dev;
-+ }
-+
-+packet_not_eaten_by_imq_dev:
-+ skb_set_queue_mapping(skb, orig_queue_index);
-+ rcu_read_unlock_bh();
-+
-+ /* cloned? restore original */
-+ if (unlikely(skb_orig)) {
-+ kfree_skb(skb);
-+ entry->skb = skb_orig;
-+ }
-+ retval = -1;
-+out:
-+ if (unlikely(to_free)) {
-+ kfree_skb_list(to_free);
-+ }
-+ return retval;
-+}
-+static unsigned int imq_nf_hook(void *priv,
-+ struct sk_buff *skb,
-+ const struct nf_hook_state *state)
-+{
-+ return (skb->imq_flags & IMQ_F_ENQUEUE) ? NF_IMQ_QUEUE : NF_ACCEPT;
-+}
-+
-+static int imq_close(struct net_device *dev)
-+{
-+ netif_stop_queue(dev);
-+ return 0;
-+}
-+
-+static int imq_open(struct net_device *dev)
-+{
-+ netif_start_queue(dev);
-+ return 0;
-+}
-+
-+static struct device_type imq_device_type = {
-+ .name = "imq",
-+};
-+
-+static const struct net_device_ops imq_netdev_ops = {
-+ .ndo_open = imq_open,
-+ .ndo_stop = imq_close,
-+ .ndo_start_xmit = imq_dev_xmit,
-+ .ndo_get_stats = imq_get_stats,
-+};
-+
-+static void imq_setup(struct net_device *dev)
-+{
-+ dev->netdev_ops = &imq_netdev_ops;
-+ dev->type = ARPHRD_VOID;
-+ dev->mtu = 16000; /* too small? */
-+ dev->tx_queue_len = 11000; /* too big? */
-+ dev->flags = IFF_NOARP;
-+ dev->features = NETIF_F_SG | NETIF_F_FRAGLIST |
-+ NETIF_F_GSO | NETIF_F_HW_CSUM |
-+ NETIF_F_HIGHDMA;
-+ dev->priv_flags &= ~(IFF_XMIT_DST_RELEASE |
-+ IFF_TX_SKB_SHARING);
-+}
-+
-+static int imq_validate(struct nlattr *tb[], struct nlattr *data[],
-+ struct netlink_ext_ack *extack)
-+{
-+ int ret = 0;
-+
-+ if (tb[IFLA_ADDRESS]) {
-+ if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN) {
-+ ret = -EINVAL;
-+ goto end;
-+ }
-+ if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS]))) {
-+ ret = -EADDRNOTAVAIL;
-+ goto end;
-+ }
-+ }
-+ return 0;
-+end:
-+ pr_warn("IMQ: imq_validate failed (%d)\n", ret);
-+ return ret;
-+}
-+
-+static struct rtnl_link_ops imq_link_ops __read_mostly = {
-+ .kind = "imq",
-+ .priv_size = 0,
-+ .setup = imq_setup,
-+ .validate = imq_validate,
-+};
-+
-+static const struct nf_queue_handler imq_nfqh = {
-+ .outfn = imq_nf_queue,
-+};
-+
-+static int __net_init imq_nf_register(struct net *net)
-+{
-+ return nf_register_net_hooks(net, imq_ops,
-+ ARRAY_SIZE(imq_ops));
-+};
-+
-+static void __net_exit imq_nf_unregister(struct net *net)
-+{
-+ nf_unregister_net_hooks(net, imq_ops,
-+ ARRAY_SIZE(imq_ops));
-+};
-+
-+static struct pernet_operations imq_net_ops = {
-+ .init = imq_nf_register,
-+ .exit = imq_nf_unregister,
-+};
-+
-+static int __net_init imq_init_hooks(void)
-+{
-+ int ret;
-+ nf_register_queue_imq_handler(&imq_nfqh);
-+
-+ ret = register_pernet_subsys(&imq_net_ops);
-+ if (ret < 0)
-+ nf_unregister_queue_imq_handler();
-+
-+ return ret;
-+}
-+
-+#ifdef CONFIG_LOCKDEP
-+ static struct lock_class_key imq_netdev_addr_lock_key;
-+
-+ static void __init imq_dev_set_lockdep_one(struct net_device *dev,
-+ struct netdev_queue *txq, void *arg)
-+ {
-+ /*
-+ * the IMQ transmit locks can be taken recursively,
-+ * for example with one IMQ rule for input- and one for
-+ * output network devices in iptables!
-+ * until we find a better solution ignore them.
-+ */
-+ lockdep_set_novalidate_class(&txq->_xmit_lock);
-+ }
-+
-+ static void imq_dev_set_lockdep_class(struct net_device *dev)
-+ {
-+ lockdep_set_class_and_name(&dev->addr_list_lock,
-+ &imq_netdev_addr_lock_key, "_xmit_addr_IMQ");
-+ netdev_for_each_tx_queue(dev, imq_dev_set_lockdep_one, NULL);
-+}
-+#else
-+ static inline void imq_dev_set_lockdep_class(struct net_device *dev)
-+ {
-+ }
-+#endif
-+
-+static int __init imq_init_one(int index)
-+{
-+ struct net_device *dev;
-+ int ret;
-+
-+ dev = alloc_netdev_mq(0, "imq%d", NET_NAME_UNKNOWN, imq_setup, numqueues);
-+ if (!dev)
-+ return -ENOMEM;
-+
-+ ret = dev_alloc_name(dev, dev->name);
-+ if (ret < 0)
-+ goto fail;
-+
-+ dev->rtnl_link_ops = &imq_link_ops;
-+ SET_NETDEV_DEVTYPE(dev, &imq_device_type);
-+ ret = register_netdevice(dev);
-+ if (ret < 0)
-+ goto fail;
-+
-+ imq_dev_set_lockdep_class(dev);
-+
-+ return 0;
-+fail:
-+ free_netdev(dev);
-+ return ret;
-+}
-+
-+static int __init imq_init_devs(void)
-+{
-+ int err, i;
-+
-+ if (numdevs < 1 || numdevs > IMQ_MAX_DEVS) {
-+ pr_err("IMQ: numdevs has to be betweed 1 and %u\n",
-+ IMQ_MAX_DEVS);
-+ return -EINVAL;
-+ }
-+
-+ if (numqueues < 1 || numqueues > IMQ_MAX_QUEUES) {
-+ pr_err("IMQ: numqueues has to be betweed 1 and %u\n",
-+ IMQ_MAX_QUEUES);
-+ return -EINVAL;
-+ }
-+
-+ get_random_bytes(&imq_hashrnd, sizeof(imq_hashrnd));
-+
-+ rtnl_lock();
-+ err = __rtnl_link_register(&imq_link_ops);
-+
-+ for (i = 0; i < numdevs && !err; i++)
-+ err = imq_init_one(i);
-+
-+ if (err) {
-+ __rtnl_link_unregister(&imq_link_ops);
-+ memset(imq_devs_cache, 0, sizeof(imq_devs_cache));
-+ }
-+ rtnl_unlock();
-+
-+ return err;
-+}
-+
-+static int __init imq_init_module(void)
-+{
-+ int err;
-+
-+#if defined(CONFIG_IMQ_NUM_DEVS)
-+ BUILD_BUG_ON(CONFIG_IMQ_NUM_DEVS > 16);
-+ BUILD_BUG_ON(CONFIG_IMQ_NUM_DEVS < 2);
-+ BUILD_BUG_ON(CONFIG_IMQ_NUM_DEVS - 1 > IMQ_F_IFMASK);
-+#endif
-+
-+ err = imq_init_devs();
-+ if (err) {
-+ pr_err("IMQ: Error trying imq_init_devs(net)\n");
-+ return err;
-+ }
-+
-+ err = imq_init_hooks();
-+ if (err) {
-+ pr_err(KERN_ERR "IMQ: Error trying imq_init_hooks()\n");
-+ rtnl_link_unregister(&imq_link_ops);
-+ memset(imq_devs_cache, 0, sizeof(imq_devs_cache));
-+ return err;
-+ }
-+
-+ pr_info("IMQ driver loaded successfully. (numdevs = %d, numqueues = %d, imq_dev_accurate_stats = %d)\n",
-+ numdevs, numqueues, imq_dev_accurate_stats);
-+
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+ pr_info("\tHooking IMQ before NAT on PREROUTING.\n");
-+#else
-+ pr_info("\tHooking IMQ after NAT on PREROUTING.\n");
-+#endif
-+#if defined(CONFIG_IMQ_BEHAVIOR_AB) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+ pr_info("\tHooking IMQ before NAT on POSTROUTING.\n");
-+#else
-+ pr_info("\tHooking IMQ after NAT on POSTROUTING.\n");
-+#endif
-+
-+ return 0;
-+}
-+
-+static void __exit imq_unhook(void)
-+{
-+ unregister_pernet_subsys(&imq_net_ops);
-+ nf_unregister_queue_imq_handler();
-+}
-+
-+static void __exit imq_cleanup_devs(void)
-+{
-+ rtnl_link_unregister(&imq_link_ops);
-+ memset(imq_devs_cache, 0, sizeof(imq_devs_cache));
-+}
-+
-+static void __exit imq_exit_module(void)
-+{
-+ imq_unhook();
-+ imq_cleanup_devs();
-+ pr_info("IMQ driver unloaded successfully.\n");
-+}
-+
-+module_init(imq_init_module);
-+module_exit(imq_exit_module);
-+
-+module_param(numdevs, int, 0);
-+module_param(numqueues, int, 0);
-+module_param(imq_dev_accurate_stats, int, 0);
-+MODULE_PARM_DESC(numdevs, "number of IMQ devices (how many imq* devices will be created)");
-+MODULE_PARM_DESC(numqueues, "number of queues per IMQ device");
-+MODULE_PARM_DESC(imq_dev_accurate_stats, "Notify if need the accurate imq device stats");
-+
-+MODULE_AUTHOR("
https://github.com/imq/linuximq");
-+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See
https://github.com/imq/linuximq/wiki for more information.");
-+MODULE_LICENSE("GPL");
-+MODULE_ALIAS_RTNL_LINK("imq");
-diff -Naupr linux-4.14_orig/drivers/net/Kconfig linux-4.14/drivers/net/Kconfig
---- linux-4.14_orig/drivers/net/Kconfig 2017-11-13 01:46:13.000000000 +0700
-+++ linux-4.14/drivers/net/Kconfig 2017-11-13 11:46:45.844089945 +0700
-@@ -277,6 +277,125 @@ config RIONET_RX_SIZE
- depends on RIONET
- default "128"
-
-+config IMQ
-+ tristate "IMQ (intermediate queueing device) support"
-+ depends on NETDEVICES && NETFILTER
-+ ---help---
-+ The IMQ device(s) is used as placeholder for QoS queueing
-+ disciplines. Every packet entering/leaving the IP stack can be
-+ directed through the IMQ device where it's enqueued/dequeued to the
-+ attached qdisc. This allows you to treat network devices as classes
-+ and distribute bandwidth among them. Iptables is used to specify
-+ through which IMQ device, if any, packets travel.
-+
-+ More information at:
https://github.com/imq/linuximq
-+
-+ To compile this driver as a module, choose M here: the module
-+ will be called imq. If unsure, say N.
-+
-+choice
-+ prompt "IMQ behavior (PRE/POSTROUTING)"
-+ depends on IMQ
-+ default IMQ_BEHAVIOR_AB
-+ help
-+ This setting defines how IMQ behaves in respect to its
-+ hooking in PREROUTING and POSTROUTING.
-+
-+ IMQ can work in any of the following ways:
-+
-+ PREROUTING | POSTROUTING
-+ -----------------|-------------------
-+ #1 After NAT | After NAT
-+ #2 After NAT | Before NAT
-+ #3 Before NAT | After NAT
-+ #4 Before NAT | Before NAT
-+
-+ The default behavior is to hook before NAT on PREROUTING
-+ and after NAT on POSTROUTING (#3).
-+
-+ This settings are specially usefull when trying to use IMQ
-+ to shape NATed clients.
-+
-+ More information can be found at:
https://github.com/imq/linuximq
-+
-+ If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_AA
-+ bool "IMQ AA"
-+ help
-+ This setting defines how IMQ behaves in respect to its
-+ hooking in PREROUTING and POSTROUTING.
-+
-+ Choosing this option will make IMQ hook like this:
-+
-+ PREROUTING: After NAT
-+ POSTROUTING: After NAT
-+
-+ More information can be found at:
https://github.com/imq/linuximq
-+
-+ If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_AB
-+ bool "IMQ AB"
-+ help
-+ This setting defines how IMQ behaves in respect to its
-+ hooking in PREROUTING and POSTROUTING.
-+
-+ Choosing this option will make IMQ hook like this:
-+
-+ PREROUTING: After NAT
-+ POSTROUTING: Before NAT
-+
-+ More information can be found at:
https://github.com/imq/linuximq
-+
-+ If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_BA
-+ bool "IMQ BA"
-+ help
-+ This setting defines how IMQ behaves in respect to its
-+ hooking in PREROUTING and POSTROUTING.
-+
-+ Choosing this option will make IMQ hook like this:
-+
-+ PREROUTING: Before NAT
-+ POSTROUTING: After NAT
-+
-+ More information can be found at:
https://github.com/imq/linuximq
-+
-+ If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_BB
-+ bool "IMQ BB"
-+ help
-+ This setting defines how IMQ behaves in respect to its
-+ hooking in PREROUTING and POSTROUTING.
-+
-+ Choosing this option will make IMQ hook like this:
-+
-+ PREROUTING: Before NAT
-+ POSTROUTING: Before NAT
-+
-+ More information can be found at:
https://github.com/imq/linuximq
-+
-+ If not sure leave the default settings alone.
-+
-+endchoice
-+
-+config IMQ_NUM_DEVS
-+ int "Number of IMQ devices"
-+ range 2 16
-+ depends on IMQ
-+ default "16"
-+ help
-+ This setting defines how many IMQ devices will be created.
-+
-+ The default value is 16.
-+
-+ More information can be found at:
https://github.com/imq/linuximq
-+
-+ If not sure leave the default settings alone.
-+
- config TUN
- tristate "Universal TUN/TAP device driver support"
- depends on INET
-diff -Naupr linux-4.14_orig/drivers/net/Makefile linux-4.14/drivers/net/Makefile
---- linux-4.14_orig/drivers/net/Makefile 2017-11-13 01:46:13.000000000 +0700
-+++ linux-4.14/drivers/net/Makefile 2017-11-13 11:46:45.844089945 +0700
-@@ -13,6 +13,7 @@ obj-$(CONFIG_DUMMY) += dummy.o
- obj-$(CONFIG_EQUALIZER) += eql.o
- obj-$(CONFIG_IFB) += ifb.o
- obj-$(CONFIG_MACSEC) += macsec.o
-+obj-$(CONFIG_IMQ) += imq.o
- obj-$(CONFIG_MACVLAN) += macvlan.o
- obj-$(CONFIG_MACVTAP) += macvtap.o
- obj-$(CONFIG_MII) += mii.o
-diff -Naupr linux-4.14_orig/include/linux/imq.h linux-4.14/include/linux/imq.h
---- linux-4.14_orig/include/linux/imq.h 1970-01-01 07:00:00.000000000 +0700
-+++ linux-4.14/include/linux/imq.h 2017-11-13 11:46:45.844089945 +0700
-@@ -0,0 +1,13 @@
-+#ifndef _IMQ_H
-+#define _IMQ_H
-+
-+/* IFMASK (16 device indexes, 0 to 15) and flag(s) fit in 5 bits */
-+#define IMQ_F_BITS 5
-+
-+#define IMQ_F_IFMASK 0x0f
-+#define IMQ_F_ENQUEUE 0x10
-+
-+#define IMQ_MAX_DEVS (IMQ_F_IFMASK + 1)
-+
-+#endif /* _IMQ_H */
-+
-diff -Naupr linux-4.14_orig/include/linux/netdevice.h linux-4.14/include/linux/netdevice.h
---- linux-4.14_orig/include/linux/netdevice.h 2017-11-13 01:46:13.000000000 +0700
-+++ linux-4.14/include/linux/netdevice.h 2017-11-13 11:46:45.844089945 +0700
-@@ -1771,6 +1771,11 @@ struct net_device {
- /*
- * Cache lines mostly used on receive path (including eth_type_trans())
- */
-+
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+ unsigned long last_rx;
-+#endif
-+
- /* Interface address info used in eth_type_trans() */
- unsigned char *dev_addr;
-
-@@ -3631,6 +3636,19 @@ static inline void netif_tx_unlock_bh(st
- } \
- }
-
-+#define HARD_TX_LOCK_BH(dev, txq) { \
-+ if ((dev->features & NETIF_F_LLTX) == 0) { \
-+ __netif_tx_lock_bh(txq); \
-+ } \
-+}
-+
-+#define HARD_TX_UNLOCK_BH(dev, txq) { \
-+ if ((dev->features & NETIF_F_LLTX) == 0) { \
-+ __netif_tx_unlock_bh(txq); \
-+ } \
-+}
-+
-+
- static inline void netif_tx_disable(struct net_device *dev)
- {
- unsigned int i;
-diff -Naupr linux-4.14_orig/include/linux/netfilter/xt_IMQ.h linux-4.14/include/linux/netfilter/xt_IMQ.h
---- linux-4.14_orig/include/linux/netfilter/xt_IMQ.h 1970-01-01 07:00:00.000000000 +0700
-+++ linux-4.14/include/linux/netfilter/xt_IMQ.h 2017-11-13 11:46:45.847423298 +0700
-@@ -0,0 +1,9 @@
-+#ifndef _XT_IMQ_H
-+#define _XT_IMQ_H
-+
-+struct xt_imq_info {
-+ unsigned int todev; /* target imq device */
-+};
-+
-+#endif /* _XT_IMQ_H */
-+
-diff -Naupr linux-4.14_orig/include/linux/netfilter_ipv4/ipt_IMQ.h linux-4.14/include/linux/netfilter_ipv4/ipt_IMQ.h
---- linux-4.14_orig/include/linux/netfilter_ipv4/ipt_IMQ.h 1970-01-01 07:00:00.000000000 +0700
-+++ linux-4.14/include/linux/netfilter_ipv4/ipt_IMQ.h 2017-11-13 11:46:45.847423298 +0700
-@@ -0,0 +1,10 @@
-+#ifndef _IPT_IMQ_H
-+#define _IPT_IMQ_H
-+
-+/* Backwards compatibility for old userspace */
-+#include <linux/netfilter/xt_IMQ.h>
-+
-+#define ipt_imq_info xt_imq_info
-+
-+#endif /* _IPT_IMQ_H */
-+
-diff -Naupr linux-4.14_orig/include/linux/netfilter_ipv6/ip6t_IMQ.h linux-4.14/include/linux/netfilter_ipv6/ip6t_IMQ.h
---- linux-4.14_orig/include/linux/netfilter_ipv6/ip6t_IMQ.h 1970-01-01 07:00:00.000000000 +0700
-+++ linux-4.14/include/linux/netfilter_ipv6/ip6t_IMQ.h 2017-11-13 11:46:45.847423298 +0700
-@@ -0,0 +1,10 @@
-+#ifndef _IP6T_IMQ_H
-+#define _IP6T_IMQ_H
-+
-+/* Backwards compatibility for old userspace */
-+#include <linux/netfilter/xt_IMQ.h>
-+
-+#define ip6t_imq_info xt_imq_info
-+
-+#endif /* _IP6T_IMQ_H */
-+
-diff -Naupr linux-4.14_orig/include/linux/skbuff.h linux-4.14/include/linux/skbuff.h
---- linux-4.14_orig/include/linux/skbuff.h 2017-11-13 01:46:13.000000000 +0700
-+++ linux-4.14/include/linux/skbuff.h 2017-11-13 11:46:45.847423298 +0700
-@@ -41,6 +41,10 @@
- #include <linux/in6.h>
- #include <linux/if_packet.h>
- #include <net/flow.h>
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+#include <linux/imq.h>
-+#endif
-+
-
- /* The interface for checksum offload between the stack and networking drivers
- * is as follows...
-@@ -581,7 +585,7 @@ typedef unsigned int sk_buff_data_t;
- typedef unsigned char *sk_buff_data_t;
- #endif
-
--/**
-+/**
- * struct sk_buff - socket buffer
- * @next: Next buffer in list
- * @prev: Previous buffer in list
-@@ -684,6 +688,9 @@ struct sk_buff {
- * first. This is owned by whoever has the skb queued ATM.
- */
- char cb[48] __aligned(8);
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+ void *cb_next;
-+#endif
-
- unsigned long _skb_refdst;
- void (*destructor)(struct sk_buff *skb);
-@@ -693,6 +700,9 @@ struct sk_buff {
- #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
- unsigned long _nfct;
- #endif
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+ struct nf_queue_entry *nf_queue_entry;
-+#endif
- #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
- struct nf_bridge_info *nf_bridge;
- #endif
-@@ -772,6 +782,9 @@ struct sk_buff {
- #ifdef CONFIG_NET_SWITCHDEV
- __u8 offload_fwd_mark:1;
- #endif
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+ __u8 imq_flags:IMQ_F_BITS;
-+#endif
- #ifdef CONFIG_NET_CLS_ACT
- __u8 tc_skip_classify:1;
- __u8 tc_at_ingress:1;
-@@ -870,7 +883,7 @@ static inline bool skb_pfmemalloc(const
- */
- static inline struct dst_entry *skb_dst(const struct sk_buff *skb)
- {
-- /* If refdst was not refcounted, check we still are in a
-+ /* If refdst was not refcounted, check we still are in a
- * rcu_read_lock section
- */
- WARN_ON((skb->_skb_refdst & SKB_DST_NOREF) &&
-@@ -960,6 +973,12 @@ void skb_tx_error(struct sk_buff *skb);
- void consume_skb(struct sk_buff *skb);
- void __consume_stateless_skb(struct sk_buff *skb);
- void __kfree_skb(struct sk_buff *skb);
-+
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+int skb_save_cb(struct sk_buff *skb);
-+int skb_restore_cb(struct sk_buff *skb);
-+#endif
-+
- extern struct kmem_cache *skbuff_head_cache;
-
- void kfree_skb_partial(struct sk_buff *skb, bool head_stolen);
-@@ -3785,8 +3804,12 @@ static inline void __nf_copy(struct sk_b
- dst->_nfct = src->_nfct;
- nf_conntrack_get(skb_nfct(src));
- #endif
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+ dst->imq_flags = src->imq_flags;
-+ dst->nf_queue_entry = src->nf_queue_entry;
-+#endif
- #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
-- dst->nf_bridge = src->nf_bridge;
-+ dst->nf_bridge = src->nf_bridge;
- nf_bridge_get(src->nf_bridge);
- #endif
- #if IS_ENABLED(CONFIG_NETFILTER_XT_TARGET_TRACE) || defined(CONFIG_NF_TABLES)
-diff -Naupr linux-4.14_orig/include/net/netfilter/nf_queue.h linux-4.14/include/net/netfilter/nf_queue.h
---- linux-4.14_orig/include/net/netfilter/nf_queue.h 2017-11-13 01:46:13.000000000 +0700
-+++ linux-4.14/include/net/netfilter/nf_queue.h 2017-11-13 11:46:45.847423298 +0700
-@@ -31,6 +31,12 @@ struct nf_queue_handler {
- void nf_register_queue_handler(struct net *net, const struct nf_queue_handler *qh);
- void nf_unregister_queue_handler(struct net *net);
- void nf_reinject(struct nf_queue_entry *entry, unsigned int verdict);
-+void nf_queue_entry_release_refs(struct nf_queue_entry *entry);
-+
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+void nf_register_queue_imq_handler(const struct nf_queue_handler *qh);
-+void nf_unregister_queue_imq_handler(void);
-+#endif
-
- void nf_queue_entry_get_refs(struct nf_queue_entry *entry);
- void nf_queue_entry_release_refs(struct nf_queue_entry *entry);
-diff -Naupr linux-4.14_orig/include/net/pkt_sched.h linux-4.14/include/net/pkt_sched.h
---- linux-4.14_orig/include/net/pkt_sched.h 2017-11-13 01:46:13.000000000 +0700
-+++ linux-4.14/include/net/pkt_sched.h 2017-11-13 11:46:45.850756651 +0700
-@@ -109,6 +109,8 @@ int sch_direct_xmit(struct sk_buff *skb,
-
- void __qdisc_run(struct Qdisc *q);
-
-+struct sk_buff *qdisc_dequeue_skb(struct Qdisc *q, bool *validate);
-+
- static inline void qdisc_run(struct Qdisc *q)
- {
- if (qdisc_run_begin(q))
-diff -Naupr linux-4.14_orig/include/net/sch_generic.h linux-4.14/include/net/sch_generic.h
---- linux-4.14_orig/include/net/sch_generic.h 2017-11-13 01:46:13.000000000 +0700
-+++ linux-4.14/include/net/sch_generic.h 2017-11-13 11:46:45.850756651 +0700
-@@ -567,6 +567,13 @@ static inline int qdisc_enqueue(struct s
- return sch->enqueue(skb, sch, to_free);
- }
-
-+static inline int qdisc_enqueue_root(struct sk_buff *skb, struct Qdisc *sch,
-+ struct sk_buff **to_free)
-+{
-+ qdisc_skb_cb(skb)->pkt_len = skb->len;
-+ return qdisc_enqueue(skb, sch, to_free) & NET_XMIT_MASK;
-+}
-+
- static inline bool qdisc_is_percpu_stats(const struct Qdisc *q)
- {
- return q->flags & TCQ_F_CPUSTATS;
-diff -Naupr linux-4.14_orig/include/uapi/linux/netfilter.h linux-4.14/include/uapi/linux/netfilter.h
---- linux-4.14_orig/include/uapi/linux/netfilter.h 2017-11-13 01:46:13.000000000 +0700
-+++ linux-4.14/include/uapi/linux/netfilter.h 2017-11-13 11:46:45.850756651 +0700
-@@ -14,7 +14,8 @@
- #define NF_QUEUE 3
- #define NF_REPEAT 4
- #define NF_STOP 5 /* Deprecated, for userspace nf_queue compatibility. */
--#define NF_MAX_VERDICT NF_STOP
-+#define NF_IMQ_QUEUE 6
-+#define NF_MAX_VERDICT NF_IMQ_QUEUE
-
- /* we overload the higher bits for encoding auxiliary data such as the queue
- * number or errno values. Not nice, but better than additional function
-diff -Naupr linux-4.14_orig/net/core/dev.c linux-4.14/net/core/dev.c
---- linux-4.14_orig/net/core/dev.c 2017-11-13 01:46:13.000000000 +0700
-+++ linux-4.14/net/core/dev.c 2017-11-13 11:46:45.854090004 +0700
-@@ -143,6 +143,9 @@
- #include <linux/hrtimer.h>
- #include <linux/netfilter_ingress.h>
- #include <linux/crash_dump.h>
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+#include <linux/imq.h>
-+#endif
- #include <linux/sctp.h>
- #include <net/udp_tunnel.h>
-
-@@ -2971,7 +2974,12 @@ static int xmit_one(struct sk_buff *skb,
- unsigned int len;
- int rc;
-
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+ if ((!list_empty(&ptype_all) || !list_empty(&dev->ptype_all)) &&
-+ !(skb->imq_flags & IMQ_F_ENQUEUE))
-+#else
- if (!list_empty(&ptype_all) || !list_empty(&dev->ptype_all))
-+#endif
- dev_queue_xmit_nit(skb, dev);
-
- len = skb->len;
-@@ -3010,6 +3018,8 @@ out:
- return skb;
- }
-
-+EXPORT_SYMBOL_GPL(dev_hard_start_xmit);
-+
- static struct sk_buff *validate_xmit_vlan(struct sk_buff *skb,
- netdev_features_t features)
- {
-diff -Naupr linux-4.14_orig/net/core/skbuff.c linux-4.14/net/core/skbuff.c
---- linux-4.14_orig/net/core/skbuff.c 2017-11-13 01:46:13.000000000 +0700
-+++ linux-4.14/net/core/skbuff.c 2017-11-13 11:46:45.854090004 +0700
-@@ -82,6 +82,87 @@ struct kmem_cache *skbuff_head_cache __r
- static struct kmem_cache *skbuff_fclone_cache __read_mostly;
- int sysctl_max_skb_frags __read_mostly = MAX_SKB_FRAGS;
- EXPORT_SYMBOL(sysctl_max_skb_frags);
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+static struct kmem_cache *skbuff_cb_store_cache __read_mostly;
-+#endif
-+
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+/* Control buffer save/restore for IMQ devices */
-+struct skb_cb_table {
-+ char cb[48] __aligned(8);
-+ void *cb_next;
-+ atomic_t refcnt;
-+};
-+
-+static DEFINE_SPINLOCK(skb_cb_store_lock);
-+
-+int skb_save_cb(struct sk_buff *skb)
-+{
-+ struct skb_cb_table *next;
-+
-+ next = kmem_cache_alloc(skbuff_cb_store_cache, GFP_ATOMIC);
-+ if (!next)
-+ return -ENOMEM;
-+
-+ BUILD_BUG_ON(sizeof(skb->cb) != sizeof(next->cb));
-+
-+ memcpy(next->cb, skb->cb, sizeof(skb->cb));
-+ next->cb_next = skb->cb_next;
-+
-+ atomic_set(&next->refcnt, 1);
-+
-+ skb->cb_next = next;
-+ return 0;
-+}
-+EXPORT_SYMBOL(skb_save_cb);
-+
-+int skb_restore_cb(struct sk_buff *skb)
-+{
-+ struct skb_cb_table *next;
-+
-+ if (!skb->cb_next)
-+ return 0;
-+
-+ next = skb->cb_next;
-+
-+ BUILD_BUG_ON(sizeof(skb->cb) != sizeof(next->cb));
-+
-+ memcpy(skb->cb, next->cb, sizeof(skb->cb));
-+ skb->cb_next = next->cb_next;
-+
-+ spin_lock(&skb_cb_store_lock);
-+
-+ if (atomic_dec_and_test(&next->refcnt))
-+ kmem_cache_free(skbuff_cb_store_cache, next);
-+
-+ spin_unlock(&skb_cb_store_lock);
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL(skb_restore_cb);
-+
-+static void skb_copy_stored_cb(struct sk_buff * , const struct sk_buff * ) __attribute__ ((unused));
-+static void skb_copy_stored_cb(struct sk_buff *new, const struct sk_buff *__old)
-+{
-+ struct skb_cb_table *next;
-+ struct sk_buff *old;
-+
-+ if (!__old->cb_next) {
-+ new->cb_next = NULL;
-+ return;
-+ }
-+
-+ spin_lock(&skb_cb_store_lock);
-+
-+ old = (struct sk_buff *)__old;
-+
-+ next = old->cb_next;
-+ atomic_inc(&next->refcnt);
-+ new->cb_next = next;
-+
-+ spin_unlock(&skb_cb_store_lock);
-+}
-+#endif
-
- /**
- * skb_panic - private function for out-of-line support
-@@ -615,6 +696,28 @@ void skb_release_head_state(struct sk_bu
- WARN_ON(in_irq());
- skb->destructor(skb);
- }
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+ /*
-+ * This should not happen. When it does, avoid memleak by restoring
-+ * the chain of cb-backups.
-+ */
-+ while (skb->cb_next != NULL) {
-+ if (net_ratelimit())
-+ pr_warn("IMQ: kfree_skb: skb->cb_next: %08x\n",
-+ (unsigned int)(uintptr_t)skb->cb_next);
-+
-+ skb_restore_cb(skb);
-+ }
-+ /*
-+ * This should not happen either, nf_queue_entry is nullified in
-+ * imq_dev_xmit(). If we have non-NULL nf_queue_entry then we are
-+ * leaking entry pointers, maybe memory. We don't know if this is
-+ * pointer to already freed memory, or should this be freed.
-+ * If this happens we need to add refcounting, etc for nf_queue_entry.
-+ */
-+ if (skb->nf_queue_entry && net_ratelimit())
-+ pr_warn("%s\n", "IMQ: kfree_skb: skb->nf_queue_entry != NULL");
-+#endif
- #if IS_ENABLED(CONFIG_NF_CONNTRACK)
- nf_conntrack_put(skb_nfct(skb));
- #endif
-@@ -804,6 +907,10 @@ static void __copy_skb_header(struct sk_
- new->sp = secpath_get(old->sp);
- #endif
- __nf_copy(new, old, false);
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+ new->cb_next = NULL;
-+ /*skb_copy_stored_cb(new, old);*/
-+#endif
-
- /* Note : this field could be in headers_start/headers_end section
- * It is not yet because we do not want to have a 16 bit hole
-@@ -3902,6 +4009,13 @@ void __init skb_init(void)
- 0,
- SLAB_HWCACHE_ALIGN|SLAB_PANIC,
- NULL);
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+ skbuff_cb_store_cache = kmem_cache_create("skbuff_cb_store_cache",
-+ sizeof(struct skb_cb_table),
-+ 0,
-+ SLAB_HWCACHE_ALIGN|SLAB_PANIC,
-+ NULL);
-+#endif
- }
-
- static int
-diff -Naupr linux-4.14_orig/net/netfilter/core.c linux-4.14/net/netfilter/core.c
---- linux-4.14_orig/net/netfilter/core.c 2017-11-13 01:46:13.000000000 +0700
-+++ linux-4.14/net/netfilter/core.c 2017-11-13 14:16:05.896850774 +0700
-@@ -474,6 +474,11 @@ int nf_hook_slow(struct sk_buff *skb, st
- if (ret == 0)
- ret = -EPERM;
- return ret;
-+ case NF_IMQ_QUEUE:
-+ ret = nf_queue(skb, state, e, s, verdict);
-+ if (ret == -ECANCELED)
-+ continue;
-+ return ret;
- case NF_QUEUE:
- ret = nf_queue(skb, state, e, s, verdict);
- if (ret == 1)
-diff -Naupr linux-4.14_orig/net/netfilter/Kconfig linux-4.14/net/netfilter/Kconfig
---- linux-4.14_orig/net/netfilter/Kconfig 2017-11-13 01:46:13.000000000 +0700
-+++ linux-4.14/net/netfilter/Kconfig 2017-11-13 11:46:45.857423358 +0700
-@@ -867,6 +867,18 @@ config NETFILTER_XT_TARGET_LOG
-
- To compile it as a module, choose M here. If unsure, say N.
-
-+config NETFILTER_XT_TARGET_IMQ
-+ tristate '"IMQ" target support'
-+ depends on NETFILTER_XTABLES
-+ depends on IP_NF_MANGLE || IP6_NF_MANGLE
-+ select IMQ
-+ default m if NETFILTER_ADVANCED=n
-+ help
-+ This option adds a `IMQ' target which is used to specify if and
-+ to which imq device packets should get enqueued/dequeued.
-+
-+ To compile it as a module, choose M here. If unsure, say N.
-+
- config NETFILTER_XT_TARGET_MARK
- tristate '"MARK" target support'
- depends on NETFILTER_ADVANCED
-diff -Naupr linux-4.14_orig/net/netfilter/Makefile linux-4.14/net/netfilter/Makefile
---- linux-4.14_orig/net/netfilter/Makefile 2017-11-13 01:46:13.000000000 +0700
-+++ linux-4.14/net/netfilter/Makefile 2017-11-13 11:46:45.857423358 +0700
-@@ -125,6 +125,7 @@ obj-$(CONFIG_NETFILTER_XT_TARGET_CT) +=
- obj-$(CONFIG_NETFILTER_XT_TARGET_DSCP) += xt_DSCP.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_HL) += xt_HL.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_HMARK) += xt_HMARK.o
-+obj-$(CONFIG_NETFILTER_XT_TARGET_IMQ) += xt_IMQ.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_LOG) += xt_LOG.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_NETMAP) += xt_NETMAP.o
-diff -Naupr linux-4.14_orig/net/netfilter/nf_queue.c linux-4.14/net/netfilter/nf_queue.c
---- linux-4.14_orig/net/netfilter/nf_queue.c 2017-11-13 01:46:13.000000000 +0700
-+++ linux-4.14/net/netfilter/nf_queue.c 2017-11-13 14:25:21.436864671 +0700
-@@ -1,4 +1,4 @@
--/*
-+ /*
- * Rusty Russell (C)2000 -- This code is GPL.
- * Patrick McHardy (c) 2006-2012
- */
-@@ -27,6 +27,23 @@
- * receives, no matter what.
- */
-
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+static const struct nf_queue_handler __rcu *queue_imq_handler __read_mostly;
-+
-+void nf_register_queue_imq_handler(const struct nf_queue_handler *qh)
-+{
-+ rcu_assign_pointer(queue_imq_handler, qh);
-+}
-+EXPORT_SYMBOL_GPL(nf_register_queue_imq_handler);
-+
-+void nf_unregister_queue_imq_handler(void)
-+{
-+ RCU_INIT_POINTER(queue_imq_handler, NULL);
-+ synchronize_rcu();
-+}
-+EXPORT_SYMBOL_GPL(nf_unregister_queue_imq_handler);
-+#endif
-+
- /* return EBUSY when somebody else is registered, return EEXIST if the
- * same handler is registered, return 0 in case of success. */
- void nf_register_queue_handler(struct net *net, const struct nf_queue_handler *qh)
-@@ -113,16 +130,29 @@ EXPORT_SYMBOL_GPL(nf_queue_nf_hook_drop)
-
- static int __nf_queue(struct sk_buff *skb, const struct nf_hook_state *state,
- const struct nf_hook_entries *entries,
-- unsigned int index, unsigned int queuenum)
-+ unsigned int index, unsigned int verdict)
- {
- int status = -ENOENT;
- struct nf_queue_entry *entry = NULL;
- const struct nf_afinfo *afinfo;
- const struct nf_queue_handler *qh;
- struct net *net = state->net;
-+ unsigned int queuetype = verdict & NF_VERDICT_MASK;
-+ unsigned int queuenum = verdict >> NF_VERDICT_QBITS;
-
- /* QUEUE == DROP if no one is waiting, to be safe. */
-- qh = rcu_dereference(net->nf.queue_handler);
-+
-+ if (queuetype == NF_IMQ_QUEUE) {
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+ qh = rcu_dereference(queue_imq_handler);
-+#else
-+ BUG();
-+ goto err_unlock;
-+#endif
-+ } else {
-+ qh = rcu_dereference(net->nf.queue_handler);
-+ }
-+
- if (!qh) {
- status = -ESRCH;
- goto err;
-@@ -169,8 +199,16 @@ int nf_queue(struct sk_buff *skb, struct
- {
- int ret;
-
-- ret = __nf_queue(skb, state, entries, index, verdict >> NF_VERDICT_QBITS);
-+ ret = __nf_queue(skb, state, entries, index, verdict);
- if (ret < 0) {
-+
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+ /* IMQ Bypass */
-+ if (ret == -ECANCELED && skb->imq_flags == 0) {
-+ return 1;
-+ }
-+#endif
-+
- if (ret == -ESRCH &&
- (verdict & NF_VERDICT_FLAG_QUEUE_BYPASS))
- return 1;
-@@ -256,6 +294,7 @@ next_hook:
- local_bh_enable();
- break;
- case NF_QUEUE:
-+ case NF_IMQ_QUEUE:
- err = nf_queue(skb, &entry->state, hooks, i, verdict);
- if (err == 1)
- goto next_hook;
-diff -Naupr linux-4.14_orig/net/netfilter/xt_IMQ.c linux-4.14/net/netfilter/xt_IMQ.c
---- linux-4.14_orig/net/netfilter/xt_IMQ.c 1970-01-01 07:00:00.000000000 +0700
-+++ linux-4.14/net/netfilter/xt_IMQ.c 2017-11-13 11:46:45.857423358 +0700
-@@ -0,0 +1,72 @@
-+/*
-+ * This target marks packets to be enqueued to an imq device
-+ */
-+#include <linux/module.h>
-+#include <linux/skbuff.h>
-+#include <linux/netfilter/x_tables.h>
-+#include <linux/netfilter/xt_IMQ.h>
-+#include <linux/imq.h>
-+
-+static unsigned int imq_target(struct sk_buff *pskb,
-+ const struct xt_action_param *par)
-+{
-+ const struct xt_imq_info *mr = par->targinfo;
-+
-+ pskb->imq_flags = (mr->todev & IMQ_F_IFMASK) | IMQ_F_ENQUEUE;
-+
-+ return XT_CONTINUE;
-+}
-+
-+static int imq_checkentry(const struct xt_tgchk_param *par)
-+{
-+ struct xt_imq_info *mr = par->targinfo;
-+
-+ if (mr->todev > IMQ_MAX_DEVS - 1) {
-+ pr_warn("IMQ: invalid device specified, highest is %u\n",
-+ IMQ_MAX_DEVS - 1);
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+static struct xt_target xt_imq_reg[] __read_mostly = {
-+ {
-+ .name = "IMQ",
-+ .family = AF_INET,
-+ .checkentry = imq_checkentry,
-+ .target = imq_target,
-+ .targetsize = sizeof(struct xt_imq_info),
-+ .table = "mangle",
-+ .me = THIS_MODULE
-+ },
-+ {
-+ .name = "IMQ",
-+ .family = AF_INET6,
-+ .checkentry = imq_checkentry,
-+ .target = imq_target,
-+ .targetsize = sizeof(struct xt_imq_info),
-+ .table = "mangle",
-+ .me = THIS_MODULE
-+ },
-+};
-+
-+static int __init imq_init(void)
-+{
-+ return xt_register_targets(xt_imq_reg, ARRAY_SIZE(xt_imq_reg));
-+}
-+
-+static void __exit imq_fini(void)
-+{
-+ xt_unregister_targets(xt_imq_reg, ARRAY_SIZE(xt_imq_reg));
-+}
-+
-+module_init(imq_init);
-+module_exit(imq_fini);
-+
-+MODULE_AUTHOR("
https://github.com/imq/linuximq");
-+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See
https://github.com/imq/linuximq/wiki for more information.");
-+MODULE_LICENSE("GPL");
-+MODULE_ALIAS("ipt_IMQ");
-+MODULE_ALIAS("ip6t_IMQ");
-+
-diff -Naupr linux-4.14_orig/net/sched/sch_generic.c linux-4.14/net/sched/sch_generic.c
---- linux-4.14_orig/net/sched/sch_generic.c 2017-11-13 01:46:13.000000000 +0700
-+++ linux-4.14/net/sched/sch_generic.c 2017-11-13 11:46:45.857423358 +0700
-@@ -158,6 +158,14 @@ trace:
- return skb;
- }
-
-+struct sk_buff *qdisc_dequeue_skb(struct Qdisc *q, bool *validate)
-+{
-+ int packets;
-+
-+ return dequeue_skb(q, validate, &packets);
-+}
-+EXPORT_SYMBOL(qdisc_dequeue_skb);
-+
- /*
- * Transmit possibly several skbs, and handle the return status as
- * required. Owning running seqcount bit guarantees that
diff --git a/src/patches/readline/readline63-001 b/src/patches/readline/readline63-001
deleted file mode 100644
index bae6a2f52..000000000
--- a/src/patches/readline/readline63-001
+++ /dev/null
@@ -1,43 +0,0 @@
- READLINE PATCH REPORT
- =====================
-
-Readline-Release: 6.3
-Patch-ID: readline63-001
-
-Bug-Reported-by: Daan van Rossum
daan@flash.uchicago.edu
-Bug-Reference-ID:
20140307072523.GA14250@flash.uchicago.edu
-Bug-Reference-URL:
-
-Bug-Description:
-
-The `.' command in vi mode cannot undo multi-key commands beginning with
-`c', `d', and `y' (command plus motion specifier).
-
-Patch (apply with `patch -p0'):
-
-*** ../readline-6.3/readline.c 2013-10-28 14:58:06.000000000 -0400
---- readline.c 2014-03-07 15:20:33.000000000 -0500
-***************
-*** 965,969 ****
- if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
- key != ANYOTHERKEY &&
-! rl_key_sequence_length == 1 && /* XXX */
- _rl_vi_textmod_command (key))
- _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
---- 965,969 ----
- if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
- key != ANYOTHERKEY &&
-! _rl_dispatching_keymap == vi_movement_keymap &&
- _rl_vi_textmod_command (key))
- _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
-*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500
---- patchlevel 2014-03-21 08:28:40.000000000 -0400
-***************
-*** 1,3 ****
- # Do not edit -- exists only for use by patch
-
-! 5
---- 1,3 ----
- # Do not edit -- exists only for use by patch
-
-! 1
diff --git a/src/patches/readline/readline63-002 b/src/patches/readline/readline63-002
deleted file mode 100644
index 0e79f13f6..000000000
--- a/src/patches/readline/readline63-002
+++ /dev/null
@@ -1,44 +0,0 @@
- READLINE PATCH REPORT
- =====================
-
-Readline-Release: 6.3
-Patch-ID: readline63-002
-
-Bug-Reported-by: Anatol Pomozov
anatol.pomozov@gmail.com
-Bug-Reference-ID:
CAOMFOmXy3mT2So5GQ5F-smCVArQuAeBwZ2QKzgCtMeXJoDeYOQ@mail.gmail.com
-Bug-Reference-URL:
http://lists.gnu.org/archive/html/bug-readline/2014-03/msg00010.html
-
-Bug-Description:
-
-When in callback mode, some readline commands can cause readline to seg
-fault by passing invalid contexts to callback functions.
-
-Patch (apply with `patch -p0'):
-
-*** ../readline-6.3/readline.c 2013-10-28 14:58:06.000000000 -0400
---- readline.c 2014-03-10 14:15:02.000000000 -0400
-***************
-*** 745,749 ****
-
- RL_CHECK_SIGNALS ();
-! if (r == 0) /* success! */
- {
- _rl_keyseq_chain_dispose ();
---- 745,750 ----
-
- RL_CHECK_SIGNALS ();
-! /* We only treat values < 0 specially to simulate recursion. */
-! if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0)) /* success! or failure! */
- {
- _rl_keyseq_chain_dispose ();
-*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500
---- patchlevel 2014-03-21 08:28:40.000000000 -0400
-***************
-*** 1,3 ****
- # Do not edit -- exists only for use by patch
-
-! 1
---- 1,3 ----
- # Do not edit -- exists only for use by patch
-
-! 2
diff --git a/src/patches/readline/readline63-003 b/src/patches/readline/readline63-003
deleted file mode 100644
index d2cad94f9..000000000
--- a/src/patches/readline/readline63-003
+++ /dev/null
@@ -1,47 +0,0 @@
- READLINE PATCH REPORT
- =====================
-
-Readline-Release: 6.3
-Patch-ID: readline63-003
-
-Bug-Reported-by:
-Bug-Reference-ID:
-Bug-Reference-URL:
-
-Bug-Description:
-
-There are debugging functions in the readline release that are theoretically
-exploitable as security problems. They are not public functions, but have
-global linkage.
-
-Patch (apply with `patch -p0'):
-
-*** ../readline-6.3/util.c 2013-09-02 13:36:12.000000000 -0400
---- util.c 2014-03-20 10:25:53.000000000 -0400
-***************
-*** 477,480 ****
---- 479,483 ----
- }
-
-+ #if defined (DEBUG)
- #if defined (USE_VARARGS)
- static FILE *_rl_tracefp;
-***************
-*** 539,542 ****
---- 542,546 ----
- }
- #endif
-+ #endif /* DEBUG */
-
-
-*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500
---- patchlevel 2014-03-21 08:28:40.000000000 -0400
-***************
-*** 1,3 ****
- # Do not edit -- exists only for use by patch
-
-! 2
---- 1,3 ----
- # Do not edit -- exists only for use by patch
-
-! 3
diff --git a/src/patches/readline/readline63-004 b/src/patches/readline/readline63-004
deleted file mode 100644
index 3cd89e3a0..000000000
--- a/src/patches/readline/readline63-004
+++ /dev/null
@@ -1,45 +0,0 @@
- READLINE PATCH REPORT
- =====================
-
-Readline-Release: 6.3
-Patch-ID: readline63-004
-
-Bug-Reported-by: Egmont Koblinger
egmont@gmail.com
-Bug-Reference-ID:
CAGWcZk+bU5Jo1M+tutGvL-250UBE9DXjpeJVofYJSFcqFEVfMg@mail.gmail.com
-Bug-Reference-URL:
http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00153.html
-
-Bug-Description:
-
-The signal handling changes to bash and readline (to avoid running any code
-in a signal handler context) cause the cursor to be placed on the wrong
-line of a multi-line command after a ^C interrupts editing.
-
-Patch (apply with `patch -p0'):
-
-*** ../readline-6.3-patched/display.c 2013-12-27 13:10:56.000000000 -0500
---- display.c 2014-03-27 11:52:45.000000000 -0400
-***************
-*** 2678,2682 ****
- if (_rl_echoing_p)
- {
-! _rl_move_vert (_rl_vis_botlin);
- _rl_vis_botlin = 0;
- fflush (rl_outstream);
---- 2678,2683 ----
- if (_rl_echoing_p)
- {
-! if (_rl_vis_botlin > 0) /* minor optimization plus bug fix */
-! _rl_move_vert (_rl_vis_botlin);
- _rl_vis_botlin = 0;
- fflush (rl_outstream);
-*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500
---- patchlevel 2014-03-21 08:28:40.000000000 -0400
-***************
-*** 1,3 ****
- # Do not edit -- exists only for use by patch
-
-! 3
---- 1,3 ----
- # Do not edit -- exists only for use by patch
-
-! 4
diff --git a/src/patches/readline/readline63-005 b/src/patches/readline/readline63-005
deleted file mode 100644
index 8a6373849..000000000
--- a/src/patches/readline/readline63-005
+++ /dev/null
@@ -1,58 +0,0 @@
- READLINE PATCH REPORT
- =====================
-
-Readline-Release: 6.3
-Patch-ID: readline63-005
-
-Bug-Reported-by: Juergen Daubert
jue@jue.li
-Bug-Reference-ID:
20140303180430.GA7346@jue.netz
-Bug-Reference-URL:
http://lists.gnu.org/archive/html/bug-readline/2014-03/msg00002.html
-
-Bug-Description:
-
-There are still applications using the deprecated Function/VFunction/etc.
-typedefs in rltypedefs.h. This patch restores the typedefs, but attempts
-to mark them as deprecated using gcc/clang attributes. Thanks to Max Horn
-for the suggestion.
-
-Patch (apply with `patch -p0'):
-
-*** ../readline-6.3-patched/rltypedefs.h 2011-03-26 14:53:31.000000000 -0400
---- rltypedefs.h 2014-04-10 11:30:45.000000000 -0400
-***************
-*** 27,30 ****
---- 27,49 ----
- #endif
-
-+ /* Old-style, attempt to mark as deprecated in some way people will notice. */
-+
-+ #if !defined (_FUNCTION_DEF)
-+ # define _FUNCTION_DEF
-+
-+ #if defined(__GNUC__) || defined(__clang__)
-+ typedef int Function () __attribute__ ((deprecated));
-+ typedef void VFunction () __attribute__ ((deprecated));
-+ typedef char *CPFunction () __attribute__ ((deprecated));
-+ typedef char **CPPFunction () __attribute__ ((deprecated));
-+ #else
-+ typedef int Function ();
-+ typedef void VFunction ();
-+ typedef char *CPFunction ();
-+ typedef char **CPPFunction ();
-+ #endif
-+
-+ #endif /* _FUNCTION_DEF */
-+
- /* New style. */
-
-*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500
---- patchlevel 2014-03-21 08:28:40.000000000 -0400
-***************
-*** 1,3 ****
- # Do not edit -- exists only for use by patch
-
-! 4
---- 1,3 ----
- # Do not edit -- exists only for use by patch
-
-! 5
diff --git a/src/patches/readline/readline63-006 b/src/patches/readline/readline63-006
deleted file mode 100644
index a3f09304a..000000000
--- a/src/patches/readline/readline63-006
+++ /dev/null
@@ -1,63 +0,0 @@
- READLINE PATCH REPORT
- =====================
-
-Readline-Release: 6.3
-Patch-ID: readline63-006
-
-Bug-Reported-by:
Trond.Endrestol@ximalas.info
-Bug-Reference-ID:
alpine.BSF.2.03.1404192114310.1973@enterprise.ximalas.info
-Bug-Reference-URL:
http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00069.html
-
-Bug-Description:
-
-Using reverse-i-search when horizontal scrolling is enabled does not redisplay
-the entire line containing the successful search results.
-
-Patch (apply with `patch -p0'):
-
-*** ../readline-6.3-patched/display.c 2014-04-08 18:19:36.000000000 -0400
---- display.c 2014-04-20 18:32:52.000000000 -0400
-***************
-*** 1638,1642 ****
- the spot of first difference is before the end of the invisible chars,
- lendiff needs to be adjusted. */
-! if (current_line == 0 && !_rl_horizontal_scroll_mode &&
- current_invis_chars != visible_wrap_offset)
- {
---- 1638,1642 ----
- the spot of first difference is before the end of the invisible chars,
- lendiff needs to be adjusted. */
-! if (current_line == 0 && /* !_rl_horizontal_scroll_mode && */
- current_invis_chars != visible_wrap_offset)
- {
-***************
-*** 1826,1831 ****
- _rl_last_c_pos += bytes_to_insert;
-
- if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new)))
-! goto clear_rest_of_line;
- }
- }
---- 1826,1836 ----
- _rl_last_c_pos += bytes_to_insert;
-
-+ /* XXX - we only want to do this if we are at the end of the line
-+ so we move there with _rl_move_cursor_relative */
- if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new)))
-! {
-! _rl_move_cursor_relative (ne-new, new);
-! goto clear_rest_of_line;
-! }
- }
- }
-*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500
---- patchlevel 2014-03-21 08:28:40.000000000 -0400
-***************
-*** 1,3 ****
- # Do not edit -- exists only for use by patch
-
-! 5
---- 1,3 ----
- # Do not edit -- exists only for use by patch
-
-! 6
diff --git a/src/patches/readline/readline80-001 b/src/patches/readline/readline80-001
new file mode 100644
index 000000000..aa72a9dfa
--- /dev/null
+++ b/src/patches/readline/readline80-001
@@ -0,0 +1,38 @@
+ READLINE PATCH REPORT
+ =====================
+
+Readline-Release: 8.0
+Patch-ID: readline80-001
+
+Bug-Reported-by: chet.ramey@case.edu
+Bug-Reference-ID:
+Bug-Reference-URL:
+
+Bug-Description:
+
+The history file reading code doesn't close the file descriptor open to
+the history file when it encounters a zero-length file.
+
+Patch (apply with `patch -p0'):
+
+*** ../readline-8.0-patched/histfile.c 2018-06-11 09:14:52.000000000 -0400
+--- histfile.c 2019-05-16 15:55:57.000000000 -0400
+***************
+*** 306,309 ****
+--- 312,316 ----
+ {
+ free (input);
++ close (file);
+ return 0; /* don't waste time if we don't have to */
+ }
+*** ../readline-8.0/patchlevel 2013-11-15 08:11:11.000000000 -0500
+--- patchlevel 2014-03-21 08:28:40.000000000 -0400
+***************
+*** 1,3 ****
+ # Do not edit -- exists only for use by patch
+
+! 0
+--- 1,3 ----
+ # Do not edit -- exists only for use by patch
+
+! 1
diff --git a/src/scripts/xt_geoip_update b/src/scripts/xt_geoip_update
index 9ea66e006..ebd266533 100644
--- a/src/scripts/xt_geoip_update
+++ b/src/scripts/xt_geoip_update
@@ -19,7 +19,7 @@
# #
###############################################################################
-TMP_PATH=$(mktemp -d)
+TMP_PATH=$(mktemp -dp /var/tmp)
TMP_FILE=$(mktemp -p $TMP_PATH)
SCRIPT_PATH=/usr/local/bin
@@ -35,9 +35,6 @@ eval $(/usr/local/bin/readhash /var/ipfire/proxy/settings)
function download() {
echo "Downloading latest GeoIP ruleset..."
- # Create temporary directory.
- mkdir -pv $TMP_PATH
-
# Proxy settings.
# Check if a proxy should be used.
if [[ $UPSTREAM_PROXY ]]; then
@@ -84,9 +81,6 @@ function install() {
}
function build_legacy() {
- # Create temporary directory.
- mkdir -pv $TMP_PATH
-
echo "Convert database to legacy GeoIP.dat ..."
cat $DB_PATH/GeoLite2-Country-Blocks-IPv4.csv | \
$DB1_PATH/bin/geolite2-to-legacy-csv.sh $DB1_PATH/bin/countryInfo.txt > \
@@ -123,28 +117,22 @@ function cleanup() {
}
function main() {
- # Download ruleset.
- download || exit $?
-
- if ! install; then
- # Do cleanup.
- cleanup || exit $?
- exit 1
- fi
+ local func
+ for func in download install build build_legacy; do
+ if ! ${func}; then
+ # Cleanup any temporary data
+ cleanup
- # Remove temporary files.
- cleanup || exit $?
+ return 1
+ fi
+ done
- # Convert the ruleset.
- build || exit $?
+ # Cleanup
+ cleanup || return $?
- # Convert GeoIP2 to lagacy.
- build_legacy || exit $?
+ # All done
return 0
-
- # Remove temporary files.
- cleanup || exit $?
}
# Run the main function.
-main
+main || exit $?
hooks/post-receive
--
IPFire 2.x development tree