diff --git a/config/firewall/firewall-lib.pl b/config/firewall/firewall-lib.pl index c4a19e5d8..9b3f2bff4 100755 --- a/config/firewall/firewall-lib.pl +++ b/config/firewall/firewall-lib.pl @@ -217,7 +217,7 @@ sub get_std_net_ip }elsif($val eq 'BLUE'){ return "$netsettings{'BLUE_NETADDRESS'}/$netsettings{'BLUE_NETMASK'}"; }elsif($val eq 'RED'){ - return "0.0.0.0/0 -o $con"; + return "0.0.0.0/0"; }elsif($val =~ /OpenVPN/i){ return "$ovpnsettings{'DOVPN_SUBNET'}"; }elsif($val =~ /IPsec/i){ @@ -226,6 +226,23 @@ sub get_std_net_ip return ; } } +sub get_interface +{ + my $net=shift; + if($net eq "$netsettings{'GREEN_NETADDRESS'}/$netsettings{'GREEN_NETMASK'}"){ + return "$netsettings{'GREEN_DEV'}"; + } + if($net eq "$netsettings{'ORANGE_NETADDRESS'}/$netsettings{'ORANGE_NETMASK'}"){ + return "$netsettings{'ORANGE_DEV'}"; + } + if($net eq "$netsettings{'BLUE_NETADDRESS'}/$netsettings{'BLUE_NETMASK'}"){ + return "$netsettings{'BLUE_DEV'}"; + } + if($net eq "0.0.0.0/0"){ + return "$netsettings{'RED_DEV'}"; + } + return ""; +} sub get_net_ip { my $val=shift; @@ -305,9 +322,9 @@ sub get_address # address. Otherwise, we assume that it is an IP address. if ($key ~~ ["src_addr", "tgt_addr"]) { if (&General::validmac($value)) { - push(@ret, "-m mac --mac-source $value"); + push(@ret, ["-m mac --mac-source $value", ""]); } else { - push(@ret, $value); + push(@ret, [$value, ""]); } # If a default network interface (GREEN, BLUE, etc.) is selected, we @@ -316,88 +333,90 @@ sub get_address my $external_interface = &get_external_interface(); my $network_address = &get_std_net_ip($value, $external_interface); + if ($network_address) { - push(@ret, $network_address); + my $interface = &get_interface($network_address); + push(@ret, [$network_address, $interface]); } # Custom networks. } elsif ($key ~~ ["cust_net_src", "cust_net_tgt", "Custom Network"]) { my $network_address = &get_net_ip($value); if ($network_address) { - push(@ret, $network_address); + push(@ret, [$network_address, ""]); } # Custom hosts. } elsif ($key ~~ ["cust_host_src", "cust_host_tgt", "Custom Host"]) { my $host_address = &get_host_ip($value, $type); if ($host_address) { - push(@ret, $host_address); + push(@ret, [$host_address, ""]); } # OpenVPN networks. } elsif ($key ~~ ["ovpn_net_src", "ovpn_net_tgt", "OpenVPN static network"]) { my $network_address = &get_ovpn_net_ip($value, 1); if ($network_address) { - push(@ret, $network_address); + push(@ret, [$network_address, ""]); } # OpenVPN hosts. } elsif ($key ~~ ["ovpn_host_src", "ovpn_host_tgt", "OpenVPN static host"]) { my $host_address = &get_ovpn_host_ip($value, 33); if ($host_address) { - push(@ret, $host_address); + push(@ret, [$host_address, ""]); } # OpenVPN N2N. } elsif ($key ~~ ["ovpn_n2n_src", "ovpn_n2n_tgt", "OpenVPN N-2-N"]) { my $network_address = &get_ovpn_n2n_ip($value, 11); if ($network_address) { - push(@ret, $network_address); + push(@ret, [$network_address, ""]); } # IPsec networks. } elsif ($key ~~ ["ipsec_net_src", "ipsec_net_tgt", "IpSec Network"]) { my $network_address = &get_ipsec_net_ip($value, 11); if ($network_address) { - push(@ret, $network_address); + push(@ret, [$network_address, ""]); } # The firewall's own IP addresses. } elsif ($key ~~ ["ipfire", "ipfire_src"]) { # ALL if ($value eq "ALL") { - push(@ret, "0/0"); + push(@ret, ["0/0", ""]); # GREEN } elsif ($value eq "GREEN") { - push(@ret, $netsettings{"GREEN_ADDRESS"}); + push(@ret, [$netsettings{"GREEN_ADDRESS"}, ""]); # BLUE } elsif ($value eq "BLUE") { - push(@ret, $netsettings{"BLUE_ADDRESS"}); + push(@ret, [$netsettings{"BLUE_ADDRESS"}, ""]); # ORANGE } elsif ($value eq "ORANGE") { - push(@ret, $netsettings{"ORANGE_ADDRESS"}); + push(@ret, [$netsettings{"ORANGE_ADDRESS"}, ""]); # RED } elsif ($value ~~ ["RED", "RED1"]) { my $address = &get_external_address(); if ($address) { - push(@ret, $address); + push(@ret, [$address, ""]); } # Aliases } else { my $alias = &get_alias($value); if ($alias) { - push(@ret, $alias); + push(@ret, [$alias, ""]); } } # If nothing was selected, we assume "any". } else { - push(@ret, "0/0"); + push(@ret, ["0/0", ""]); } return @ret; diff --git a/config/firewall/rules.pl b/config/firewall/rules.pl index aa8870cdc..4d703825d 100755 --- a/config/firewall/rules.pl +++ b/config/firewall/rules.pl @@ -131,6 +131,12 @@ sub print_rule { print "\n"; } +sub count_elements { + my $hash = shift; + + return scalar @$hash; +} + sub flush { run("$IPTABLES -F $CHAIN_INPUT"); run("$IPTABLES -F $CHAIN_FORWARD"); @@ -186,6 +192,9 @@ sub buildrules { # Skip disabled rules. next unless ($$hash{$key}[2] eq 'ON'); + # Count number of elements in this line + my $elements = &count_elements($$hash{$key}); + if ($DEBUG) { print_rule($$hash{$key}); } @@ -268,6 +277,34 @@ sub buildrules { } } + # Concurrent connection limit + my @ratelimit_options = (); + + if (($elements gt 34) && ($$hash{$key}[32] eq 'ON')) { + my $conn_limit = $$hash{$key}[33]; + + if ($conn_limit ge 1) { + push(@ratelimit_options, ("-m", "connlimit")); + + # Use the the entire source IP address + push(@ratelimit_options, "--connlimit-saddr"); + push(@ratelimit_options, ("--connlimit-mask", "32")); + + # Apply the limit + push(@ratelimit_options, ("--connlimit-upto", $conn_limit)); + } + } + + # Ratelimit + if (($elements gt 37) && ($$hash{$key}[34] eq 'ON')) { + my $rate_limit = "$$hash{$key}[35]/$$hash{$key}[36]"; + + if ($rate_limit) { + push(@ratelimit_options, ("-m", "limit")); + push(@ratelimit_options, ("--limit", $rate_limit)); + } + } + # Check which protocols are used in this rule and so that we can # later group rules by protocols. my @protocols = &get_protocols($hash, $key); @@ -295,22 +332,26 @@ sub buildrules { next unless ($src); # Sanitize source. - my $source = $src; + my $source = @$src[0]; if ($source ~~ @ANY_ADDRESSES) { $source = ""; } + my $source_intf = @$src[1]; + foreach my $dst (@destinations) { # Skip invalid rules. next unless (defined $dst); next if (!$dst || ($dst eq "none")); # Sanitize destination. - my $destination = $dst; + my $destination = @$dst[0]; if ($destination ~~ @ANY_ADDRESSES) { $destination = ""; } + my $destination_intf = @$dst[1]; + # Array with iptables arguments. my @options = (); @@ -327,15 +368,26 @@ sub buildrules { push(@source_options, ("-s", $source)); } + if ($source_intf) { + push(@source_options, ("-i", $source_intf)); + } + # Prepare destination options. my @destination_options = (); if ($destination) { push(@destination_options, ("-d", $destination)); } + if ($destination_intf) { + push(@destination_options, ("-o", $destination_intf)); + } + # Add time constraint options. push(@options, @time_options); + # Add ratelimiting option + push(@options, @ratelimit_options); + my $firewall_is_in_source_subnet = 1; if ($source) { $firewall_is_in_source_subnet = &firewall_is_in_subnet($source); @@ -366,7 +418,7 @@ sub buildrules { # Make port-forwardings useable from the internal networks. my @internal_addresses = &fwlib::get_internal_firewall_ip_addresses(1); unless ($nat_address ~~ @internal_addresses) { - &add_dnat_mangle_rules($nat_address, @nat_options); + &add_dnat_mangle_rules($nat_address, $source_intf, @nat_options); } push(@nat_options, @source_options); @@ -457,6 +509,10 @@ sub buildrules { } } } + #Reload firewall.local if present + if ( -f '/etc/sysconfig/firewall.local'){ + run("/etc/sysconfig/firewall.local reload"); + } } # Formats the given timestamp into the iptables format which is "hh:mm" UTC. @@ -683,6 +739,7 @@ sub get_dnat_target_port { sub add_dnat_mangle_rules { my $nat_address = shift; + my $interface = shift; my @options = @_; my $mark = 0; @@ -693,6 +750,8 @@ sub add_dnat_mangle_rules { next unless (exists $defaultNetworks{$zone . "_NETADDRESS"}); next unless (exists $defaultNetworks{$zone . "_NETMASK"}); + next if ($interface && $interface ne $defaultNetworks{$zone . "_DEV"}); + my @mangle_options = @options; my $netaddress = $defaultNetworks{$zone . "_NETADDRESS"}; diff --git a/config/rootfiles/common/bash b/config/rootfiles/common/bash index ecaeb1bdd..af3a03719 100644 --- a/config/rootfiles/common/bash +++ b/config/rootfiles/common/bash @@ -1,6 +1,73 @@ -bin/sh -bin/bash #bin/bashbug +#usr/share/doc/bash +#usr/share/doc/bash/CHANGES +#usr/share/doc/bash/COMPAT +#usr/share/doc/bash/FAQ +#usr/share/doc/bash/INTRO +#usr/share/doc/bash/NEWS +#usr/share/doc/bash/POSIX +#usr/share/doc/bash/RBASH +#usr/share/doc/bash/README +#usr/share/doc/bash/bash.html +#usr/share/doc/bash/bashref.html #usr/share/info/bash.info +#usr/share/locale/af +#usr/share/locale/af/LC_MESSAGES +#usr/share/locale/af/LC_MESSAGES/bash.mo +#usr/share/locale/bg/LC_MESSAGES/bash.mo +#usr/share/locale/ca/LC_MESSAGES/bash.mo +#usr/share/locale/cs/LC_MESSAGES/bash.mo +#usr/share/locale/da/LC_MESSAGES/bash.mo +#usr/share/locale/de/LC_MESSAGES/bash.mo +#usr/share/locale/el/LC_MESSAGES/bash.mo +#usr/share/locale/en@boldquot +#usr/share/locale/en@boldquot/LC_MESSAGES +#usr/share/locale/en@boldquot/LC_MESSAGES/bash.mo +#usr/share/locale/en@quot +#usr/share/locale/en@quot/LC_MESSAGES +#usr/share/locale/en@quot/LC_MESSAGES/bash.mo +#usr/share/locale/eo +#usr/share/locale/eo/LC_MESSAGES +#usr/share/locale/eo/LC_MESSAGES/bash.mo +#usr/share/locale/es/LC_MESSAGES/bash.mo +#usr/share/locale/et +#usr/share/locale/et/LC_MESSAGES +#usr/share/locale/et/LC_MESSAGES/bash.mo +#usr/share/locale/fi/LC_MESSAGES/bash.mo +#usr/share/locale/fr/LC_MESSAGES/bash.mo +#usr/share/locale/ga +#usr/share/locale/ga/LC_MESSAGES +#usr/share/locale/ga/LC_MESSAGES/bash.mo +#usr/share/locale/gl/LC_MESSAGES/bash.mo +#usr/share/locale/hr/LC_MESSAGES/bash.mo +#usr/share/locale/hu/LC_MESSAGES/bash.mo +#usr/share/locale/id/LC_MESSAGES/bash.mo +#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/nl/LC_MESSAGES/bash.mo +#usr/share/locale/pl/LC_MESSAGES/bash.mo +#usr/share/locale/pt_BR/LC_MESSAGES/bash.mo +#usr/share/locale/ro +#usr/share/locale/ro/LC_MESSAGES +#usr/share/locale/ro/LC_MESSAGES/bash.mo +#usr/share/locale/ru/LC_MESSAGES/bash.mo +#usr/share/locale/sk/LC_MESSAGES/bash.mo +#usr/share/locale/sl +#usr/share/locale/sl/LC_MESSAGES +#usr/share/locale/sl/LC_MESSAGES/bash.mo +#usr/share/locale/sr +#usr/share/locale/sr/LC_MESSAGES +#usr/share/locale/sr/LC_MESSAGES/bash.mo +#usr/share/locale/sv/LC_MESSAGES/bash.mo +#usr/share/locale/tr/LC_MESSAGES/bash.mo +#usr/share/locale/uk +#usr/share/locale/uk/LC_MESSAGES +#usr/share/locale/uk/LC_MESSAGES/bash.mo +#usr/share/locale/vi/LC_MESSAGES/bash.mo +#usr/share/locale/zh_CN/LC_MESSAGES/bash.mo +#usr/share/locale/zh_TW/LC_MESSAGES/bash.mo #usr/share/man/man1/bash.1 #usr/share/man/man1/bashbug.1 +bin/sh +bin/bash diff --git a/config/rootfiles/common/readline b/config/rootfiles/common/readline index 7bef2c18f..b2ac26dd4 100644 --- a/config/rootfiles/common/readline +++ b/config/rootfiles/common/readline @@ -9,10 +9,14 @@ #usr/include/readline/tilde.h #usr/lib/libhistory.so usr/lib/libhistory.so.6 -usr/lib/libhistory.so.6.2 +usr/lib/libhistory.so.6.3 #usr/lib/libreadline.so usr/lib/libreadline.so.6 -usr/lib/libreadline.so.6.2 +usr/lib/libreadline.so.6.3 +#usr/share/doc/readline +#usr/share/doc/readline/CHANGES +#usr/share/doc/readline/INSTALL +#usr/share/doc/readline/README #usr/share/info/history.info #usr/share/info/readline.info #usr/share/info/rluserman.info diff --git a/config/rootfiles/core/83/exclude b/config/rootfiles/core/84/exclude similarity index 100% rename from config/rootfiles/core/83/exclude rename to config/rootfiles/core/84/exclude diff --git a/config/rootfiles/core/83/filelists/bash b/config/rootfiles/core/84/filelists/bash similarity index 100% rename from config/rootfiles/core/83/filelists/bash rename to config/rootfiles/core/84/filelists/bash diff --git a/config/rootfiles/core/84/filelists/dnsmasq b/config/rootfiles/core/84/filelists/dnsmasq new file mode 120000 index 000000000..d469c7463 --- /dev/null +++ b/config/rootfiles/core/84/filelists/dnsmasq @@ -0,0 +1 @@ +../../../common/dnsmasq \ No newline at end of file diff --git a/config/rootfiles/core/84/filelists/files b/config/rootfiles/core/84/filelists/files new file mode 100644 index 000000000..c26e2ea09 --- /dev/null +++ b/config/rootfiles/core/84/filelists/files @@ -0,0 +1,10 @@ +etc/system-release +etc/issue +etc/rc.d/init.d/firewall +etc/rc.d/init.d/network +srv/web/ipfire/cgi-bin/firewall.cgi +srv/web/ipfire/cgi-bin/fwhosts.cgi +srv/web/ipfire/cgi-bin/urlfilter.cgi +usr/lib/firewall/firewall-lib.pl +usr/lib/firewall/rules.pl +var/ipfire/langs diff --git a/config/rootfiles/core/84/filelists/readline b/config/rootfiles/core/84/filelists/readline new file mode 120000 index 000000000..84209f189 --- /dev/null +++ b/config/rootfiles/core/84/filelists/readline @@ -0,0 +1 @@ +../../../common/readline \ No newline at end of file diff --git a/config/rootfiles/core/83/filelists/squid b/config/rootfiles/core/84/filelists/squid similarity index 100% rename from config/rootfiles/core/83/filelists/squid rename to config/rootfiles/core/84/filelists/squid diff --git a/config/rootfiles/core/83/meta b/config/rootfiles/core/84/meta similarity index 100% rename from config/rootfiles/core/83/meta rename to config/rootfiles/core/84/meta diff --git a/config/rootfiles/core/84/update.sh b/config/rootfiles/core/84/update.sh new file mode 100644 index 000000000..93a9e2016 --- /dev/null +++ b/config/rootfiles/core/84/update.sh @@ -0,0 +1,60 @@ +#!/bin/bash +############################################################################ +# # +# This file is part of the IPFire Firewall. # +# # +# IPFire 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 3 of the License, or # +# (at your option) any later version. # +# # +# IPFire is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with IPFire; if not, write to the Free Software # +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # +# # +# Copyright (C) 2014 IPFire-Team . # +# # +############################################################################ +# +. /opt/pakfire/lib/functions.sh +/usr/local/bin/backupctrl exclude >/dev/null 2>&1 + +# Remove old core updates from pakfire cache to save space... +core=84 +for (( i=1; i<=$core; i++ )) +do + rm -f /var/cache/pakfire/core-upgrade-*-$i.ipfire +done + +# Stop services +/etc/init.d/squid stop +/etc/init.d/dnsmasq stop + +# Remove old files + +# Extract files +extract_files + +# Start services +/etc/init.d/dnsmasq start +/etc/init.d/squid start + +# Update Language cache +perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang" + +sync + +# This update need a reboot... +touch /var/run/need_reboot + +# Finish +/etc/init.d/fireinfo start +sendprofile + +# Don't report the exitcode last command +exit 0 diff --git a/config/rootfiles/oldcore/83/exclude b/config/rootfiles/oldcore/83/exclude new file mode 100644 index 000000000..18e9b4d24 --- /dev/null +++ b/config/rootfiles/oldcore/83/exclude @@ -0,0 +1,20 @@ +boot/config.txt +etc/collectd.custom +etc/ipsec.conf +etc/ipsec.secrets +etc/ipsec.user.conf +etc/ipsec.user.secrets +etc/localtime +etc/shadow +etc/ssh/ssh_config +etc/ssh/sshd_config +etc/ssl/openssl.cnf +etc/sudoers +etc/sysconfig/firewall.local +etc/sysconfig/rc.local +etc/udev/rules.d/30-persistent-network.rules +srv/web/ipfire/html/proxy.pac +var/ipfire/ovpn +var/log/cache +var/state/dhcp/dhcpd.leases +var/updatecache diff --git a/config/rootfiles/oldcore/83/filelists/bash b/config/rootfiles/oldcore/83/filelists/bash new file mode 120000 index 000000000..de970cb1d --- /dev/null +++ b/config/rootfiles/oldcore/83/filelists/bash @@ -0,0 +1 @@ +../../../common/bash \ No newline at end of file diff --git a/config/rootfiles/core/83/filelists/files b/config/rootfiles/oldcore/83/filelists/files similarity index 100% rename from config/rootfiles/core/83/filelists/files rename to config/rootfiles/oldcore/83/filelists/files diff --git a/config/rootfiles/core/83/filelists/findutils b/config/rootfiles/oldcore/83/filelists/findutils similarity index 100% rename from config/rootfiles/core/83/filelists/findutils rename to config/rootfiles/oldcore/83/filelists/findutils diff --git a/config/rootfiles/oldcore/83/filelists/squid b/config/rootfiles/oldcore/83/filelists/squid new file mode 120000 index 000000000..2dc8372a0 --- /dev/null +++ b/config/rootfiles/oldcore/83/filelists/squid @@ -0,0 +1 @@ +../../../common/squid \ No newline at end of file diff --git a/config/rootfiles/oldcore/83/meta b/config/rootfiles/oldcore/83/meta new file mode 100644 index 000000000..d547fa86f --- /dev/null +++ b/config/rootfiles/oldcore/83/meta @@ -0,0 +1 @@ +DEPS="" diff --git a/config/rootfiles/core/83/update.sh b/config/rootfiles/oldcore/83/update.sh similarity index 100% rename from config/rootfiles/core/83/update.sh rename to config/rootfiles/oldcore/83/update.sh diff --git a/config/rootfiles/packages/parted b/config/rootfiles/packages/parted index 74164e0b7..223a580cb 100644 --- a/config/rootfiles/packages/parted +++ b/config/rootfiles/packages/parted @@ -10,11 +10,16 @@ #usr/include/parted/parted.h #usr/include/parted/timer.h #usr/include/parted/unit.h +#usr/lib/libparted-fs-resize.a +#usr/lib/libparted-fs-resize.la +#usr/lib/libparted-fs-resize.so +usr/lib/libparted-fs-resize.so.0 +usr/lib/libparted-fs-resize.so.0.0.0 #usr/lib/libparted.a #usr/lib/libparted.la #usr/lib/libparted.so -usr/lib/libparted.so.0 -usr/lib/libparted.so.0.0.1 +usr/lib/libparted.so.2 +usr/lib/libparted.so.2.0.0 #usr/lib/pkgconfig/libparted.pc usr/sbin/parted usr/sbin/partprobe @@ -38,6 +43,8 @@ usr/sbin/partprobe #usr/share/locale/ru/LC_MESSAGES/parted.mo #usr/share/locale/rw/LC_MESSAGES/parted.mo #usr/share/locale/sk/LC_MESSAGES/parted.mo +#usr/share/locale/sl/LC_MESSAGES/parted.mo +#usr/share/locale/sr/LC_MESSAGES/parted.mo #usr/share/locale/sv/LC_MESSAGES/parted.mo #usr/share/locale/tr/LC_MESSAGES/parted.mo #usr/share/locale/uk/LC_MESSAGES/parted.mo diff --git a/html/cgi-bin/firewall.cgi b/html/cgi-bin/firewall.cgi index e6ae5272a..badee6b3c 100644 --- a/html/cgi-bin/firewall.cgi +++ b/html/cgi-bin/firewall.cgi @@ -161,6 +161,22 @@ print<"; @@ -241,14 +257,14 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') if($fwdfwsettings{'rulepos'} > 0 && !$fwdfwsettings{'oldrulenumber'}){ $fwdfwsettings{'oldrulenumber'}=$maxkey; foreach my $key (sort keys %configinputfw){ - if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'}" - eq "$configinputfw{$key}[0],$configinputfw{$key}[2],$configinputfw{$key}[3],$configinputfw{$key}[4],$configinputfw{$key}[5],$configinputfw{$key}[6],$configinputfw{$key}[7],$configinputfw{$key}[8],$configinputfw{$key}[9],$configinputfw{$key}[10],$configinputfw{$key}[11],$configinputfw{$key}[12],$configinputfw{$key}[13],$configinputfw{$key}[14],$configinputfw{$key}[15],$configinputfw{$key}[17],$configinputfw{$key}[18],$configinputfw{$key}[19],$configinputfw{$key}[20],$configinputfw{$key}[21],$configinputfw{$key}[22],$configinputfw{$key}[23],$configinputfw{$key}[24],$configinputfw{$key}[25],$configinputfw{$key}[26],$configinputfw{$key}[27],$configinputfw{$key}[28],$configinputfw{$key}[29],$configinputfw{$key}[30],$configinputfw{$key}[31]"){ + if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'},$fwdfwsettings{'RATE_LIMIT'},$fwdfwsettings{'ratecon'},$fwdfwsettings{'RATETIME'}" + eq "$configinputfw{$key}[0],$configinputfw{$key}[2],$configinputfw{$key}[3],$configinputfw{$key}[4],$configinputfw{$key}[5],$configinputfw{$key}[6],$configinputfw{$key}[7],$configinputfw{$key}[8],$configinputfw{$key}[9],$configinputfw{$key}[10],$configinputfw{$key}[11],$configinputfw{$key}[12],$configinputfw{$key}[13],$configinputfw{$key}[14],$configinputfw{$key}[15],$configinputfw{$key}[17],$configinputfw{$key}[18],$configinputfw{$key}[19],$configinputfw{$key}[20],$configinputfw{$key}[21],$configinputfw{$key}[22],$configinputfw{$key}[23],$configinputfw{$key}[24],$configinputfw{$key}[25],$configinputfw{$key}[26],$configinputfw{$key}[27],$configinputfw{$key}[28],$configinputfw{$key}[29],$configinputfw{$key}[30],$configinputfw{$key}[31],$configinputfw{$key}[32],$configinputfw{$key}[33],$configinputfw{$key}[34],$configinputfw{$key}[35],$configinputfw{$key}[36]"){ $errormessage.=$Lang::tr{'fwdfw err ruleexists'}; } } } #check if we just close a rule - if( $fwdfwsettings{'oldgrp1a'} eq $fwdfwsettings{'grp1'} && $fwdfwsettings{'oldgrp1b'} eq $fwdfwsettings{$fwdfwsettings{'grp1'}} && $fwdfwsettings{'oldgrp2a'} eq $fwdfwsettings{'grp2'} && $fwdfwsettings{'oldgrp2b'} eq $fwdfwsettings{$fwdfwsettings{'grp2'}} && $fwdfwsettings{'oldgrp3a'} eq $fwdfwsettings{'grp3'} && $fwdfwsettings{'oldgrp3b'} eq $fwdfwsettings{$fwdfwsettings{'grp3'}} && $fwdfwsettings{'oldusesrv'} eq $fwdfwsettings{'USESRV'} && $fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'oldruletype'} eq $fwdfwsettings{'chain'}) { + if( $fwdfwsettings{'oldgrp1a'} eq $fwdfwsettings{'grp1'} && $fwdfwsettings{'oldgrp1b'} eq $fwdfwsettings{$fwdfwsettings{'grp1'}} && $fwdfwsettings{'oldgrp2a'} eq $fwdfwsettings{'grp2'} && $fwdfwsettings{'oldgrp2b'} eq $fwdfwsettings{$fwdfwsettings{'grp2'}} && $fwdfwsettings{'oldgrp3a'} eq $fwdfwsettings{'grp3'} && $fwdfwsettings{'oldgrp3b'} eq $fwdfwsettings{$fwdfwsettings{'grp3'}} && $fwdfwsettings{'oldusesrv'} eq $fwdfwsettings{'USESRV'} && $fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'oldruletype'} eq $fwdfwsettings{'chain'} ) { if($fwdfwsettings{'nosave'} eq 'on' && $fwdfwsettings{'updatefwrule'} eq 'on'){ $errormessage=''; $fwdfwsettings{'nosave2'} = 'on'; @@ -266,8 +282,8 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') my $maxkey=&General::findhasharraykey(\%configoutgoingfw); if($fwdfwsettings{'oldrulenumber'} eq $fwdfwsettings{'rulepos'}){ foreach my $key (sort keys %configoutgoingfw){ - if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'}" - eq "$configoutgoingfw{$key}[0],$configoutgoingfw{$key}[2],$configoutgoingfw{$key}[3],$configoutgoingfw{$key}[4],$configoutgoingfw{$key}[5],$configoutgoingfw{$key}[6],$configoutgoingfw{$key}[7],$configoutgoingfw{$key}[8],$configoutgoingfw{$key}[9],$configoutgoingfw{$key}[10],$configoutgoingfw{$key}[11],$configoutgoingfw{$key}[12],$configoutgoingfw{$key}[13],$configoutgoingfw{$key}[14],$configoutgoingfw{$key}[15],$configoutgoingfw{$key}[17],$configoutgoingfw{$key}[18],$configoutgoingfw{$key}[19],$configoutgoingfw{$key}[20],$configoutgoingfw{$key}[21],$configoutgoingfw{$key}[22],$configoutgoingfw{$key}[23],$configoutgoingfw{$key}[24],$configoutgoingfw{$key}[25],$configoutgoingfw{$key}[26],$configoutgoingfw{$key}[27],$configoutgoingfw{$key}[28],$configoutgoingfw{$key}[29],$configoutgoingfw{$key}[30],$configoutgoingfw{$key}[31]"){ + if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'},$fwdfwsettings{'RATE_LIMIT'},$fwdfwsettings{'ratecon'},$fwdfwsettings{'RATETIME'}" + eq "$configoutgoingfw{$key}[0],$configoutgoingfw{$key}[2],$configoutgoingfw{$key}[3],$configoutgoingfw{$key}[4],$configoutgoingfw{$key}[5],$configoutgoingfw{$key}[6],$configoutgoingfw{$key}[7],$configoutgoingfw{$key}[8],$configoutgoingfw{$key}[9],$configoutgoingfw{$key}[10],$configoutgoingfw{$key}[11],$configoutgoingfw{$key}[12],$configoutgoingfw{$key}[13],$configoutgoingfw{$key}[14],$configoutgoingfw{$key}[15],$configoutgoingfw{$key}[17],$configoutgoingfw{$key}[18],$configoutgoingfw{$key}[19],$configoutgoingfw{$key}[20],$configoutgoingfw{$key}[21],$configoutgoingfw{$key}[22],$configoutgoingfw{$key}[23],$configoutgoingfw{$key}[24],$configoutgoingfw{$key}[25],$configoutgoingfw{$key}[26],$configoutgoingfw{$key}[27],$configoutgoingfw{$key}[28],$configoutgoingfw{$key}[29],$configoutgoingfw{$key}[30],$configoutgoingfw{$key}[31],$configoutgoingfw{$key}[32],$configoutgoingfw{$key}[33],$configoutgoingfw{$key}[34],$configoutgoingfw{$key}[35],$configoutgoingfw{$key}[36]"){ $errormessage.=$Lang::tr{'fwdfw err ruleexists'}; if($fwdfwsettings{'oldruleremark'} ne $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'updatefwrule'} eq 'on' && $fwdfwsettings{'ruleremark'} ne '' && !&validremark($fwdfwsettings{'ruleremark'})){ $errormessage=$Lang::tr{'fwdfw err remark'}."
"; @@ -285,14 +301,14 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') if($fwdfwsettings{'rulepos'} > 0 && !$fwdfwsettings{'oldrulenumber'}){ $fwdfwsettings{'oldrulenumber'}=$maxkey; foreach my $key (sort keys %configoutgoingfw){ - if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'}" - eq "$configoutgoingfw{$key}[0],$configoutgoingfw{$key}[2],$configoutgoingfw{$key}[3],$configoutgoingfw{$key}[4],$configoutgoingfw{$key}[5],$configoutgoingfw{$key}[6],$configoutgoingfw{$key}[7],$configoutgoingfw{$key}[8],$configoutgoingfw{$key}[9],$configoutgoingfw{$key}[10],$configoutgoingfw{$key}[11],$configoutgoingfw{$key}[12],$configoutgoingfw{$key}[13],$configoutgoingfw{$key}[14],$configoutgoingfw{$key}[15],$configoutgoingfw{$key}[17],$configoutgoingfw{$key}[18],$configoutgoingfw{$key}[19],$configoutgoingfw{$key}[20],$configoutgoingfw{$key}[21],$configoutgoingfw{$key}[22],$configoutgoingfw{$key}[23],$configoutgoingfw{$key}[24],$configoutgoingfw{$key}[25],$configoutgoingfw{$key}[26],$configoutgoingfw{$key}[27],$configoutgoingfw{$key}[28],$configoutgoingfw{$key}[29],$configoutgoingfw{$key}[30],$configoutgoingfw{$key}[31]"){ + if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'},$fwdfwsettings{'RATE_LIMIT'},$fwdfwsettings{'ratecon'},$fwdfwsettings{'RATETIME'}" + eq "$configoutgoingfw{$key}[0],$configoutgoingfw{$key}[2],$configoutgoingfw{$key}[3],$configoutgoingfw{$key}[4],$configoutgoingfw{$key}[5],$configoutgoingfw{$key}[6],$configoutgoingfw{$key}[7],$configoutgoingfw{$key}[8],$configoutgoingfw{$key}[9],$configoutgoingfw{$key}[10],$configoutgoingfw{$key}[11],$configoutgoingfw{$key}[12],$configoutgoingfw{$key}[13],$configoutgoingfw{$key}[14],$configoutgoingfw{$key}[15],$configoutgoingfw{$key}[17],$configoutgoingfw{$key}[18],$configoutgoingfw{$key}[19],$configoutgoingfw{$key}[20],$configoutgoingfw{$key}[21],$configoutgoingfw{$key}[22],$configoutgoingfw{$key}[23],$configoutgoingfw{$key}[24],$configoutgoingfw{$key}[25],$configoutgoingfw{$key}[26],$configoutgoingfw{$key}[27],$configoutgoingfw{$key}[28],$configoutgoingfw{$key}[29],$configoutgoingfw{$key}[30],$configoutgoingfw{$key}[31],$configoutgoingfw{$key}[32],$configoutgoingfw{$key}[33],$configoutgoingfw{$key}[34],$configoutgoingfw{$key}[35],$configoutgoingfw{$key}[36]"){ $errormessage.=$Lang::tr{'fwdfw err ruleexists'}; } } } #check if we just close a rule - if( $fwdfwsettings{'oldgrp1a'} eq $fwdfwsettings{'grp1'} && $fwdfwsettings{'oldgrp1b'} eq $fwdfwsettings{$fwdfwsettings{'grp1'}} && $fwdfwsettings{'oldgrp2a'} eq $fwdfwsettings{'grp2'} && $fwdfwsettings{'oldgrp2b'} eq $fwdfwsettings{$fwdfwsettings{'grp2'}} && $fwdfwsettings{'oldgrp3a'} eq $fwdfwsettings{'grp3'} && $fwdfwsettings{'oldgrp3b'} eq $fwdfwsettings{$fwdfwsettings{'grp3'}} && $fwdfwsettings{'oldusesrv'} eq $fwdfwsettings{'USESRV'} && $fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'oldruletype'} eq $fwdfwsettings{'chain'}) { + if( $fwdfwsettings{'oldgrp1a'} eq $fwdfwsettings{'grp1'} && $fwdfwsettings{'oldgrp1b'} eq $fwdfwsettings{$fwdfwsettings{'grp1'}} && $fwdfwsettings{'oldgrp2a'} eq $fwdfwsettings{'grp2'} && $fwdfwsettings{'oldgrp2b'} eq $fwdfwsettings{$fwdfwsettings{'grp2'}} && $fwdfwsettings{'oldgrp3a'} eq $fwdfwsettings{'grp3'} && $fwdfwsettings{'oldgrp3b'} eq $fwdfwsettings{$fwdfwsettings{'grp3'}} && $fwdfwsettings{'oldusesrv'} eq $fwdfwsettings{'USESRV'} && $fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'oldruletype'} eq $fwdfwsettings{'chain'} ) { if($fwdfwsettings{'nosave'} eq 'on' && $fwdfwsettings{'updatefwrule'} eq 'on'){ $fwdfwsettings{'nosave2'} = 'on'; $errormessage=''; @@ -312,8 +328,8 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') if($fwdfwsettings{'oldrulenumber'} eq $fwdfwsettings{'rulepos'}){ #check if we have an identical rule already foreach my $key (sort keys %configfwdfw){ - if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'}" - eq "$configfwdfw{$key}[0],$configfwdfw{$key}[2],$configfwdfw{$key}[3],$configfwdfw{$key}[4],$configfwdfw{$key}[5],$configfwdfw{$key}[6],$configfwdfw{$key}[7],$configfwdfw{$key}[8],$configfwdfw{$key}[9],$configfwdfw{$key}[10],$configfwdfw{$key}[11],$configfwdfw{$key}[12],$configfwdfw{$key}[13],$configfwdfw{$key}[14],$configfwdfw{$key}[15],$configfwdfw{$key}[18],$configfwdfw{$key}[19],$configfwdfw{$key}[20],$configfwdfw{$key}[21],$configfwdfw{$key}[22],$configfwdfw{$key}[23],$configfwdfw{$key}[24],$configfwdfw{$key}[25],$configfwdfw{$key}[26],$configfwdfw{$key}[27],$configfwdfw{$key}[28],$configfwdfw{$key}[29],$configfwdfw{$key}[30],$configfwdfw{$key}[31]"){ + if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'},$fwdfwsettings{'RATE_LIMIT'},$fwdfwsettings{'ratecon'},$fwdfwsettings{'RATETIME'}" + eq "$configfwdfw{$key}[0],$configfwdfw{$key}[2],$configfwdfw{$key}[3],$configfwdfw{$key}[4],$configfwdfw{$key}[5],$configfwdfw{$key}[6],$configfwdfw{$key}[7],$configfwdfw{$key}[8],$configfwdfw{$key}[9],$configfwdfw{$key}[10],$configfwdfw{$key}[11],$configfwdfw{$key}[12],$configfwdfw{$key}[13],$configfwdfw{$key}[14],$configfwdfw{$key}[15],$configfwdfw{$key}[18],$configfwdfw{$key}[19],$configfwdfw{$key}[20],$configfwdfw{$key}[21],$configfwdfw{$key}[22],$configfwdfw{$key}[23],$configfwdfw{$key}[24],$configfwdfw{$key}[25],$configfwdfw{$key}[26],$configfwdfw{$key}[27],$configfwdfw{$key}[28],$configfwdfw{$key}[29],$configfwdfw{$key}[30],$configfwdfw{$key}[31],$configfwdfw{$key}[32],$configfwdfw{$key}[33],$configfwdfw{$key}[34],$configfwdfw{$key}[35],$configfwdfw{$key}[36]"){ $errormessage.=$Lang::tr{'fwdfw err ruleexists'}; if($fwdfwsettings{'oldruleremark'} ne $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'updatefwrule'} eq 'on' && $fwdfwsettings{'ruleremark'} ne '' && !&validremark($fwdfwsettings{'ruleremark'})){ $errormessage=$Lang::tr{'fwdfw err remark'}."
"; @@ -331,19 +347,35 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') if($fwdfwsettings{'rulepos'} > 0 && !$fwdfwsettings{'oldrulenumber'}){ $fwdfwsettings{'oldrulenumber'}=$maxkey; foreach my $key (sort keys %configfwdfw){ - if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'}" - eq "$configfwdfw{$key}[0],$configfwdfw{$key}[2],$configfwdfw{$key}[3],$configfwdfw{$key}[4],$configfwdfw{$key}[5],$configfwdfw{$key}[6],$configfwdfw{$key}[7],$configfwdfw{$key}[8],$configfwdfw{$key}[9],$configfwdfw{$key}[10],$configfwdfw{$key}[11],$configfwdfw{$key}[12],$configfwdfw{$key}[13],$configfwdfw{$key}[14],$configfwdfw{$key}[15],$configfwdfw{$key}[18],$configfwdfw{$key}[19],$configfwdfw{$key}[20],$configfwdfw{$key}[21],$configfwdfw{$key}[22],$configfwdfw{$key}[23],$configfwdfw{$key}[24],$configfwdfw{$key}[25],$configfwdfw{$key}[26],$configfwdfw{$key}[27],$configfwdfw{$key}[28],$configfwdfw{$key}[29],$configfwdfw{$key}[30],$configfwdfw{$key}[31]"){ + if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'},$fwdfwsettings{'RATE_LIMIT'},$fwdfwsettings{'ratecon'},$fwdfwsettings{'RATETIME'}" + eq "$configfwdfw{$key}[0],$configfwdfw{$key}[2],$configfwdfw{$key}[3],$configfwdfw{$key}[4],$configfwdfw{$key}[5],$configfwdfw{$key}[6],$configfwdfw{$key}[7],$configfwdfw{$key}[8],$configfwdfw{$key}[9],$configfwdfw{$key}[10],$configfwdfw{$key}[11],$configfwdfw{$key}[12],$configfwdfw{$key}[13],$configfwdfw{$key}[14],$configfwdfw{$key}[15],$configfwdfw{$key}[18],$configfwdfw{$key}[19],$configfwdfw{$key}[20],$configfwdfw{$key}[21],$configfwdfw{$key}[22],$configfwdfw{$key}[23],$configfwdfw{$key}[24],$configfwdfw{$key}[25],$configfwdfw{$key}[26],$configfwdfw{$key}[27],$configfwdfw{$key}[28],$configfwdfw{$key}[29],$configfwdfw{$key}[30],$configfwdfw{$key}[31],$configfwdfw{$key}[32],$configfwdfw{$key}[33],$configfwdfw{$key}[34],$configfwdfw{$key}[35],$configfwdfw{$key}[36]"){ $errormessage.=$Lang::tr{'fwdfw err ruleexists'}; } } } #check if we just close a rule - if( $fwdfwsettings{'oldgrp1a'} eq $fwdfwsettings{'grp1'} && $fwdfwsettings{'oldgrp1b'} eq $fwdfwsettings{$fwdfwsettings{'grp1'}} && $fwdfwsettings{'oldgrp2a'} eq $fwdfwsettings{'grp2'} && $fwdfwsettings{'oldgrp2b'} eq $fwdfwsettings{$fwdfwsettings{'grp2'}} && $fwdfwsettings{'oldgrp3a'} eq $fwdfwsettings{'grp3'} && $fwdfwsettings{'oldgrp3b'} eq $fwdfwsettings{$fwdfwsettings{'grp3'}} && $fwdfwsettings{'oldusesrv'} eq $fwdfwsettings{'USESRV'} && $fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'oldruletype'} eq $fwdfwsettings{'chain'}) { + if( $fwdfwsettings{'oldgrp1a'} eq $fwdfwsettings{'grp1'} && $fwdfwsettings{'oldgrp1b'} eq $fwdfwsettings{$fwdfwsettings{'grp1'}} && $fwdfwsettings{'oldgrp2a'} eq $fwdfwsettings{'grp2'} && $fwdfwsettings{'oldgrp2b'} eq $fwdfwsettings{$fwdfwsettings{'grp2'}} && $fwdfwsettings{'oldgrp3a'} eq $fwdfwsettings{'grp3'} && $fwdfwsettings{'oldgrp3b'} eq $fwdfwsettings{$fwdfwsettings{'grp3'}} && $fwdfwsettings{'oldusesrv'} eq $fwdfwsettings{'USESRV'} && $fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'oldruletype'} eq $fwdfwsettings{'chain'}){ if($fwdfwsettings{'nosave'} eq 'on' && $fwdfwsettings{'updatefwrule'} eq 'on'){ $fwdfwsettings{'nosave2'} = 'on'; $errormessage=''; } } + #check max concurrent connections per ip address + if ($fwdfwsettings{'LIMIT_CON_CON'} eq 'ON'){ + if (!($fwdfwsettings{'concon'} =~ /^(\d+)$/)) { + $errormessage.=$Lang::tr{'fwdfw err concon'}; + } + }else{ + $fwdfwsettings{'concon'}=''; + } + #check ratelimit value + if ($fwdfwsettings{'RATE_LIMIT'} eq 'ON'){ + if (!($fwdfwsettings{'ratecon'} =~ /^(\d+)$/)) { + $errormessage.=$Lang::tr{'fwdfw err ratecon'}; + } + }else{ + $fwdfwsettings{'ratecon'}=''; + } #increase counters if (!$errormessage){ if ($fwdfwsettings{'nosave2'} ne 'on'){ @@ -1064,7 +1096,6 @@ print< + + + + + $Lang::tr{'fwdfw limitconcon'} + + + + + + + + +
 $Lang::tr{'fwdfw maxconcon'}:
+ + + + + + + $Lang::tr{'fwdfw ratelimit'} + + + + + + + + +
 $Lang::tr{'fwdfw numcon'}: / + +
+ +
END @@ -2044,6 +2127,7 @@ END +
END @@ -2180,6 +2264,11 @@ sub saverule $$hash{$key}[29] = $fwdfwsettings{$fwdfwsettings{'nat'}}; $$hash{$key}[30] = $fwdfwsettings{'dnatport'}; $$hash{$key}[31] = $fwdfwsettings{'nat'}; + $$hash{$key}[32] = $fwdfwsettings{'LIMIT_CON_CON'}; + $$hash{$key}[33] = $fwdfwsettings{'concon'}; + $$hash{$key}[34] = $fwdfwsettings{'RATE_LIMIT'}; + $$hash{$key}[35] = $fwdfwsettings{'ratecon'}; + $$hash{$key}[36] = $fwdfwsettings{'RATETIME'}; &General::writehasharray("$config", $hash); }else{ foreach my $key (sort {$a <=> $b} keys %$hash){ @@ -2216,6 +2305,11 @@ sub saverule $$hash{$key}[29] = $fwdfwsettings{$fwdfwsettings{'nat'}}; $$hash{$key}[30] = $fwdfwsettings{'dnatport'}; $$hash{$key}[31] = $fwdfwsettings{'nat'}; + $$hash{$key}[32] = $fwdfwsettings{'LIMIT_CON_CON'}; + $$hash{$key}[33] = $fwdfwsettings{'concon'}; + $$hash{$key}[34] = $fwdfwsettings{'RATE_LIMIT'}; + $$hash{$key}[35] = $fwdfwsettings{'ratecon'}; + $$hash{$key}[36] = $fwdfwsettings{'RATETIME'}; last; } } diff --git a/html/cgi-bin/fwhosts.cgi b/html/cgi-bin/fwhosts.cgi index 1f96336a6..c3642f0f0 100644 --- a/html/cgi-bin/fwhosts.cgi +++ b/html/cgi-bin/fwhosts.cgi @@ -291,42 +291,13 @@ if ($fwhostsettings{'ACTION'} eq 'savenet' ) $errormessage=$errormessage.$Lang::tr{'fwhost err sub32'}; } if($fwhostsettings{'error'} ne 'on'){ - #check if we use one of ipfire's networks (green,orange,blue) - if (($ownnet{'GREEN_NETADDRESS'} ne '' && $ownnet{'GREEN_NETADDRESS'} ne '0.0.0.0') && ($fwhostsettings{'IP'} eq $ownnet{'GREEN_NETADDRESS'} && $fwhostsettings{'SUBNET'} eq $ownnet{'GREEN_NETMASK'})) - { - $errormessage=$errormessage.$Lang::tr{'ccd err green'}."
"; - $fwhostsettings{'HOSTNAME'} = $fwhostsettings{'orgname'}; - if ($fwhostsettings{'update'} eq 'on'){$fwhostsettings{'ACTION'}='editnet';} - } - if (($ownnet{'ORANGE_NETADDRESS'} ne '' && $ownnet{'ORANGE_NETADDRESS'} ne '0.0.0.0') && ($fwhostsettings{'IP'} eq $ownnet{'ORANGE_NETADDRESS'} && $fwhostsettings{'SUBNET'} eq $ownnet{'ORANGE_NETMASK'})) - { - $errormessage=$errormessage.$Lang::tr{'ccd err orange'}."
"; - $fwhostsettings{'HOSTNAME'} = $fwhostsettings{'orgname'}; - if ($fwhostsettings{'update'} eq 'on'){$fwhostsettings{'ACTION'}='editnet';} - } - if (($ownnet{'BLUE_NETADDRESS'} ne '' && $ownnet{'BLUE_NETADDRESS'} ne '0.0.0.0') && ($fwhostsettings{'IP'} eq $ownnet{'BLUE_NETADDRESS'} && $fwhostsettings{'SUBNET'} eq $ownnet{'BLUE_NETMASK'})) - { - $errormessage=$errormessage.$Lang::tr{'ccd err blue'}."
"; - $fwhostsettings{'HOSTNAME'} = $fwhostsettings{'orgname'}; - if ($fwhostsettings{'update'} eq 'on'){$fwhostsettings{'ACTION'}='editnet';} - } - if (($ownnet{'RED_NETADDRESS'} ne '' && $ownnet{'RED_NETADDRESS'} ne '0.0.0.0') && ($fwhostsettings{'IP'} eq $ownnet{'RED_NETADDRESS'} && $fwhostsettings{'SUBNET'} eq $ownnet{'RED_NETMASK'})) - { - $errormessage=$errormessage.$Lang::tr{'ccd err red'}."
"; - $fwhostsettings{'HOSTNAME'} = $fwhostsettings{'orgname'}; - if ($fwhostsettings{'update'} eq 'on'){$fwhostsettings{'ACTION'}='editnet';} - } + my $fullip="$fwhostsettings{'IP'}/".&General::iporsubtocidr($fwhostsettings{'SUBNET'}); + $errormessage=$errormessage.&General::checksubnets($fwhostsettings{'HOSTNAME'},$fullip,""); } #only check plausi when no error till now if (!$errormessage){ &plausicheck("editnet"); } - #check if network ip is part of an already used one - if(&checksubnet(\%customnetwork)) - { - $errormessage=$errormessage.$Lang::tr{'fwhost err partofnet'}; - $fwhostsettings{'HOSTNAME'} = $fwhostsettings{'orgname'}; - } if($fwhostsettings{'actualize'} eq 'on' && $fwhostsettings{'newnet'} ne 'on' && $errormessage) { $fwhostsettings{'actualize'} = ''; @@ -338,9 +309,8 @@ if ($fwhostsettings{'ACTION'} eq 'savenet' ) $customnetwork{$key}[3] = $fwhostsettings{'orgnetremark'}; &General::writehasharray("$confignet", \%customnetwork); undef %customnetwork; - } + } if (!$errormessage){ - &General::readhasharray("$confignet", \%customnetwork); if ($fwhostsettings{'ACTION'} eq 'updatenet'){ if ($fwhostsettings{'update'} == '0'){ @@ -392,7 +362,7 @@ if ($fwhostsettings{'ACTION'} eq 'savenet' ) &General::writehasharray("$fwconfiginp", \%fwinp); } } - } + } my $key = &General::findhasharraykey (\%customnetwork); foreach my $i (0 .. 3) { $customnetwork{$key}[$i] = "";} $fwhostsettings{'SUBNET'} = &General::iporsubtocidr($fwhostsettings{'SUBNET'}); @@ -416,7 +386,8 @@ if ($fwhostsettings{'ACTION'} eq 'savenet' ) } &addnet; &viewtablenet; - }else { + }else{ + $fwhostsettings{'HOSTNAME'} = $fwhostsettings{'orgname'}; &addnet; &viewtablenet; } @@ -1644,7 +1615,10 @@ sub getcolor $tdcolor="$c"; return $tdcolor; } - + if ("$sip/$scidr" eq "0.0.0.0/0"){ + $tdcolor="$c"; + return $tdcolor; + } #Check if IP is part of OpenVPN N2N subnet foreach my $key (sort keys %ccdhost){ if ($ccdhost{$key}[3] eq 'net'){ @@ -2501,6 +2475,9 @@ sub getipforgroup &General::readhash("${General::swroot}/vpn/settings",\%hash); return $hash{'RW_NET'}; } + if ($name eq 'RED'){ + return "0.0.0.0/0"; + } } } sub decrease diff --git a/html/cgi-bin/urlfilter.cgi b/html/cgi-bin/urlfilter.cgi index 78f7b321b..1e50de928 100644 --- a/html/cgi-bin/urlfilter.cgi +++ b/html/cgi-bin/urlfilter.cgi @@ -2722,9 +2722,9 @@ sub setpermissions sub writeconfigfile { - my $executables = "\\.\(ade|adp|asx|bas|bat|chm|com|cmd|cpl|crt|dll|eml|exe|hiv|hlp|hta|inc|inf|ins|isp|jse|jtd|lnk|msc|msh|msi|msp|mst|nws|ocx|oft|ops|pcd|pif|plx|reg|scr|sct|sha|shb|shm|shs|sys|tlb|tsp|url|vbe|vbs|vxd|wsc|wsf|wsh\)\$"; - my $audiovideo = "\\.\(aiff|asf|avi|dif|divx|mov|movie|mp3|mpe?g?|mpv2|ogg|ra?m|snd|qt|wav|wma|wmf|wmv\)\$"; - my $archives = "\\.\(bin|bz2|cab|cdr|dmg|gz|hqx|rar|smi|sit|sea|tar|tgz|zip\)\$"; + my $executables = "/[^/]*\\.\(ade|adp|asx|bas|bat|chm|com|cmd|cpl|crt|dll|eml|exe|hiv|hlp|hta|inc|inf|ins|isp|jse|jtd|lnk|msc|msh|msi|msp|mst|nws|ocx|oft|ops|pcd|pif|plx|reg|scr|sct|sha|shb|shm|shs|sys|tlb|tsp|url|vbe|vbs|vxd|wsc|wsf|wsh\)\$"; + my $audiovideo = "/[^/]*\\.\(aiff|asf|avi|dif|divx|flv|mkv|mov|movie|mp3|mp4|mpe?g?|mpv2|ogg|ra?m|snd|qt|wav|wma|wmf|wmv\)\$"; + my $archives = "/[^/]*\\.\(7z|bin|bz2|cab|cdr|dmg|gz|hqx|rar|smi|sit|sea|tar|tgz|zip\)\$"; my $ident = " anonymous"; @@ -2854,11 +2854,13 @@ sub writeconfigfile if ($filtersettings{'ENABLE_SAFESEARCH'} eq 'on') { print FILE " # rewrite safesearch\n"; - print FILE " s@(.*\\Wgoogle\\.\\w+/(webhp|search|imghp|images|grphp|groups|frghp|froogle)\\?)(.*)(\\bsafe=\\w+)(.*)\@\\1\\3safe=strict\\5\@i\n"; - print FILE " s@(.*\\Wgoogle\\.\\w+/(webhp|search|imghp|images|grphp|groups|frghp|froogle)\\?)(.*)\@\\1safe=strict\\\&\\3\@i\n"; + print FILE " s@(.*\\Wgoogle\\.\\w+/(webhp|search|imghp|images|grphp|groups|nwshp|frghp|froogle)\\?)(.*)(\\bsafe=\\w+)(.*)\@\\1\\3safe=strict\\5\@i\n"; + print FILE " s@(.*\\Wgoogle\\.\\w+/(webhp|search|imghp|images|grphp|groups|nwshp|frghp|froogle)\\?)(.*)\@\\1safe=strict\\\&\\3\@i\n"; print FILE " s@(.*\\Wsearch\\.yahoo\\.\\w+/search\\W)(.*)(\\bvm=\\w+)(.*)\@\\1\\2vm=r\\4\@i\n"; print FILE " s@(.*\\Wsearch\\.yahoo\\.\\w+/search\\W.*)\@\\1\\\&vm=r\@i\n"; print FILE " s@(.*\\Walltheweb\\.com/customize\\?)(.*)(\\bcopt_offensive=\\w+)(.*)\@\\1\\2copt_offensive=on\\4\@i\n"; + print FILE " s@(.*\\Wbing\\.\\w+/)(.*)(\\badlt=\\w+)(.*)\@\\1\\2adlt=strict\\4\@i\n"; + print FILE " s@(.*\\Wbing\\.\\w+/.*)\@\\1\\\&adlt=strict\@i\n"; } print FILE "}\n\n"; diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl index 6c46f70bf..b7692ee7b 100644 --- a/langs/de/cgi-bin/de.pl +++ b/langs/de/cgi-bin/de.pl @@ -982,12 +982,14 @@ 'fwdfw dnat porterr' => 'Für NAT-Regeln muss ein einzelner Port oder Portbereich angegeben werden.', 'fwdfw dnat porterr2' => 'Externer Port (NAT) darf nur angegeben werden, wenn ein Ziel-Port definiert ist.', 'fwdfw edit' => 'Bearbeiten', +'fwdfw err concon' => 'Ungültige Zahl für gleichzeitige Verbindungen', 'fwdfw err nosrc' => 'Keine Quelle ausgewählt', 'fwdfw err nosrcip' => 'Bitte Quell-IP-Adresse angeben', 'fwdfw err notgt' => 'Kein Ziel ausgewählt', 'fwdfw err notgtip' => 'Bitte Ziel-IP-Adresse angeben', 'fwdfw err prot_port' => 'Bei dem gewählten Protokoll sind Quell- und Zielport nicht erlaubt', 'fwdfw err prot_port1' => 'Bei Nutzung von Quell- oder Zielport muss als Protokoll TCP oder UDP gewählt werden.', +'fwdfw err ratecon' => 'Ungültiger Wert bei Anzahl der Verbindungen für Ratenlimitierung', 'fwdfw err remark' => 'Die Bemerkung enthält ungültige Zeichen', 'fwdfw err ruleexists' => 'Eine identische Regel existiert bereits', 'fwdfw err same' => 'Quelle und Ziel sind identisch', @@ -1006,15 +1008,18 @@ 'fwdfw hint mac' => 'Sie nutzen MAC-Adressen in der Zielgruppe. Diese werden bei der Regelerstellung übersprungen.', 'fwdfw iface' => 'Interface', 'fwdfw ipsec network' => 'IPsec-Netzwerke:', +'fwdfw limitconcon' => 'Beschränke gleichzeitige Verbindungen je IP-Adresse', 'fwdfw log' => 'Log', 'fwdfw log rule' => 'Logging aktivieren', 'fwdfw man port' => 'Port(s):', 'fwdfw many' => 'Diverse', +'fwdfw maxconcon' => 'Max. gleichzeitige Verbindungen', 'fwdfw menu' => 'Firewall', 'fwdfw movedown' => 'Herunter', 'fwdfw moveup' => 'Herauf', 'fwdfw natport used' => 'Der eingegebene Port wird bereits von einer anderen DNAT-Regel benutzt.', 'fwdfw newrule' => 'Neue Regel erstellen', +'fwdfw numcon' => 'Anzahl der Verbindungen', 'fwdfw p2p txt' => 'P2P-Netzwerke erlauben/verbieten.', 'fwdfw pol allow' => 'Zugelassen', 'fwdfw pol block' => 'Blockiert', @@ -1023,6 +1028,7 @@ 'fwdfw pol title' => 'Standardverhalten der Firewall', 'fwdfw prot41' => 'IPv6 Encapsulation (Protokoll 41)', 'fwdfw prot41 short' => 'IPv6 Encap', +'fwdfw ratelimit' => 'Ratenlimitierung für neue Verbindungen', 'fwdfw red' => 'ROT', 'fwdfw reread' => 'Änderungen übernehmen', 'fwdfw rule action' => 'Regelaktion:', @@ -1111,7 +1117,7 @@ 'fwhost err remark' => 'Ungültige Bemerkung. Erlaubte Zeichen: Klein- und Großbuchstaben, Bindestrich, Unterstrich, Runde Klammern, Semikolon, Punkt.', 'fwhost err srv exists' => 'Ein Service mit diesem Namen existiert bereits', 'fwhost err srvexist' => 'Dieser Dienst ist bereits in der Gruppe', -'fwhost err sub32' => 'Bitte einen einzelnen Host hinzufügen, keine Netzwerke', +'fwhost err sub32' => 'Bitte Netzwerke hinzufügen, keinen einzelnen Host', 'fwhost green' => 'Grün', 'fwhost hint' => 'Hinweis', 'fwhost hosts' => 'Firewall-Hosts', diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl index b537868d2..198640934 100644 --- a/langs/en/cgi-bin/en.pl +++ b/langs/en/cgi-bin/en.pl @@ -1009,12 +1009,14 @@ 'fwdfw dnat porterr' => 'You have to select a single port or portrange (tcp/udp) for NAT', 'fwdfw dnat porterr2' => 'Cannot use external port (NAT) when no destination port is defined.', 'fwdfw edit' => 'Edit', +'fwdfw err concon' => 'Invalid number for concurrent connections', 'fwdfw err nosrc' => 'No source selected.', 'fwdfw err nosrcip' => 'Please provide a source IP address.', 'fwdfw err notgt' => 'No destination selected.', 'fwdfw err notgtip' => 'Please provide a destination IP address.', 'fwdfw err prot_port' => 'Source- or targetport are not allowed with selected protocol', 'fwdfw err prot_port1' => 'When using Source- or targetport you have to select TCP or UDP for protocol', +'fwdfw err ratecon' => 'Invalid value for connections in Rate-limit', 'fwdfw err remark' => 'Invalid characters in remark.', 'fwdfw err ruleexists' => 'This rule already exists.', 'fwdfw err same' => 'Source and destination are identical.', @@ -1033,15 +1035,18 @@ 'fwdfw hint mac' => 'The destination group contains MAC addresses, which will be skipped during rule creation.', 'fwdfw iface' => 'Interface', 'fwdfw ipsec network' => 'IPsec networks:', +'fwdfw limitconcon' => 'Limit concurrent connections per IP address', 'fwdfw log' => 'Log', 'fwdfw log rule' => 'Log rule', 'fwdfw man port' => 'Port(s):', 'fwdfw many' => 'Many', +'fwdfw maxconcon' => 'Max. concurrent connections', 'fwdfw menu' => 'Firewall', 'fwdfw movedown' => 'Move down', 'fwdfw moveup' => 'Move up', 'fwdfw natport used' => 'The given port for NAPT is already in use by an other DNAT rule.', 'fwdfw newrule' => 'New rule', +'fwdfw numcon' => 'Number of connections', 'fwdfw p2p txt' => 'Grant/deny access to P2P networks.', 'fwdfw pol allow' => 'Allowed', 'fwdfw pol block' => 'Blocked', @@ -1050,6 +1055,7 @@ 'fwdfw pol title' => 'Default firewall behaviour', 'fwdfw prot41' => 'IPv6 Encapsulation (Protocol 41)', 'fwdfw prot41 short' => 'IPv6 Encap', +'fwdfw ratelimit' => 'Rate-limit new connections', 'fwdfw red' => 'RED', 'fwdfw reread' => 'Apply changes', 'fwdfw rule action' => 'Rule action:', @@ -1138,7 +1144,7 @@ 'fwhost err remark' => 'Invalid remark. Allowed characters: Upper- and lowercase letters, digits, space, dash, braces, semicolon, pipe and dot.', 'fwhost err srv exists' => 'A service with the same name already exists', 'fwhost err srvexist' => 'This service already exists in the group', -'fwhost err sub32' => 'Please add a single host, not a network.', +'fwhost err sub32' => 'Please add a network, not a single host', 'fwhost green' => 'Green', 'fwhost hint' => 'Note', 'fwhost hosts' => 'Firewall Hosts', @@ -2108,8 +2114,8 @@ 'swap usage per' => 'Swap usage per', 'system' => 'System', 'system graphs' => 'System Graphs', -'system has hwrng' => 'This system has got a hardware random number generator.', -'system has rdrand' => 'This system has got support for Intel(R) RDRAND.', +'system has hwrng' => 'This system has a hardware random number generator.', +'system has rdrand' => 'This system has support for Intel(R) RDRAND.', 'system information' => 'System Information', 'system log viewer' => 'System Log Viewer', 'system logs' => 'System Logs', diff --git a/lfs/bash b/lfs/bash index 58556faf0..e6c8d5eb2 100644 --- a/lfs/bash +++ b/lfs/bash @@ -24,7 +24,7 @@ include Config -VER = 3.2 +VER = 4.3 THISAPP = bash-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -35,20 +35,15 @@ DIR_APP = $(DIR_SRC)/$(THISAPP) # ifeq "$(ROOT)" "" TARGET = $(DIR_INFO)/$(THISAPP) - EXTRA_CONFIG = --prefix=/usr --bindir=/bin \ - --without-bash-malloc --with-installed-readline \ - --disable-nls - EXTRA_MAKE = - EXTRA_INSTALL = + CONFIGURE_OPTIONS = --prefix=/usr --bindir=/bin \ + --with-installed-readline else TARGET = $(DIR_INFO)/$(THISAPP)-tools - EXTRA_CONFIG = --prefix=/tools --without-bash-malloc \ - --disable-nls - EXTRA_MAKE = - EXTRA_INSTALL = + CONFIGURE_OPTIONS = --prefix=/tools endif -EXTRA_CONFIG += ac_cv_func_working_mktime=yes +CONFIGURE_OPTIONS += \ + --without-bash-malloc ############################################################################### # Top-level Rules @@ -58,7 +53,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 00bfa16d58e034e3c2aa27f390390d30 +$(DL_FILE)_MD5 = 81348932d5da294953e15d4814c74dd1 install : $(TARGET) @@ -87,27 +82,31 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zaxf $(DIR_DL)/$(DL_FILE) - for i in $$(seq 1 51); do \ - cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash/bash32-$$(printf "%03d" "$${i}") || exit 1; \ + sed -e "s/filename, RTLD_LAZY/filename, RTLD_NOW/" \ + -i $(DIR_APP)/builtins/enable.def + + for i in $$(seq 1 27); do \ + cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash/bash43-$$(printf "%03d" "$${i}") || exit 1; \ done cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash-4.0-paths-1.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash-4.0-profile-1.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash-3.2-ssh_source_bash.patch - cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash-3.2-CVE-2014-6271.patch - cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash-3.2-CVE-2014-7169.patch - cd $(DIR_APP) && ./configure $(EXTRA_CONFIG) - cd $(DIR_APP) && make $(EXTRA_MAKE) - cd $(DIR_APP) && make $(EXTRA_INSTALL) install + cd $(DIR_APP) && ./configure $(CONFIGURE_OPTIONS) + cd $(DIR_APP) && make $(MAKETUNING) + cd $(DIR_APP) && make install + ln -sf bash /bin/sh + ifneq "$(ROOT)" "" -mkdir -p $(ROOT)/bin -mkdir -p $(ROOT)/usr/bin ln -sf bash /tools/bin/sh -ln -sf /tools/bin/bash $(ROOT)/bin/sh endif + @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/lfs/dnsmasq b/lfs/dnsmasq index 58b001755..60dabf4a5 100644 --- a/lfs/dnsmasq +++ b/lfs/dnsmasq @@ -24,7 +24,7 @@ include Config -VER = 2.71 +VER = 2.72 THISAPP = dnsmasq-$(VER) DL_FILE = $(THISAPP).tar.xz @@ -42,7 +42,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 9e2e4d59c75e71ee3ca817ff0f9be69e +$(DL_FILE)_MD5 = 0256e0a71e27c8d8a5c89a0d18f3cfe2 install : $(TARGET) @@ -72,9 +72,7 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq-2.71-use-nettle-with-minigmp.patch - cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq-2.71-support-nettle-3.0.patch - cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq-2.70-Add-support-to-read-ISC-DHCP-lease-file.patch + cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq-2.72rc2-Add-support-to-read-ISC-DHCP-lease-file.patch cd $(DIR_APP) && sed -i src/config.h \ -e 's|/\* #define HAVE_IDN \*/|#define HAVE_IDN|g' \ -e 's|/\* #define HAVE_DNSSEC \*/|#define HAVE_DNSSEC|g' \ diff --git a/lfs/parted b/lfs/parted index 25db9e5c3..5dee653a4 100644 --- a/lfs/parted +++ b/lfs/parted @@ -1,7 +1,7 @@ ############################################################################### # # # IPFire.org - A linux based firewall # -# Copyright (C) 2007-2011 IPFire Team # +# Copyright (C) 2007-2014 IPFire Team # # # # 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,16 +24,16 @@ include Config -VER = 2.3 +VER = 3.1 THISAPP = parted-$(VER) -DL_FILE = $(THISAPP).tar.gz +DL_FILE = $(THISAPP).tar.xz DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) PROG = parted -PAK_VER = 1 +PAK_VER = 2 DEPS = "" @@ -45,7 +45,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 30ceb6df7e8681891e865e2fe5a7903d +$(DL_FILE)_MD5 = 5d89d64d94bcfefa9ce8f59f4b81bdcb install : $(TARGET) @@ -77,7 +77,7 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) cd $(DIR_APP) && ./configure --prefix=/usr --disable-device-mapper cd $(DIR_APP) && make $(MAKETUNING) cd $(DIR_APP) && make install diff --git a/lfs/readline b/lfs/readline index 7b88adff2..eb488e336 100644 --- a/lfs/readline +++ b/lfs/readline @@ -24,7 +24,7 @@ include Config -VER = 6.2 +VER = 6.3 THISAPP = readline-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -40,7 +40,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 67948acb2ca081f23359d0256e9a271c +$(DL_FILE)_MD5 = 33c8fb279e981274f485fd91da77e94a install : $(TARGET) @@ -71,8 +71,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) - for i in $$(seq 1 4); do \ - cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/readline/readline62-$$(printf "%03d" "$${i}") || exit 1; \ + 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) && ./configure --prefix=/usr --disable-static diff --git a/lfs/squid b/lfs/squid index 921feebf2..548abd937 100644 --- a/lfs/squid +++ b/lfs/squid @@ -24,7 +24,7 @@ include Config -VER = 3.4.7 +VER = 3.4.8 THISAPP = squid-$(VER) DL_FILE = $(THISAPP).tar.xz @@ -40,7 +40,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 74677634121649ccb87a5655fcd4298d +$(DL_FILE)_MD5 = b0c4335447248810169f58ea4d8b204a install : $(TARGET) diff --git a/lfs/squid-accounting b/lfs/squid-accounting index 6f0fdc3b2..0dca63f75 100644 --- a/lfs/squid-accounting +++ b/lfs/squid-accounting @@ -15,7 +15,7 @@ THISAPP = squid-accounting-$(VER) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) PROG = squid-accounting -PAK_VER = 2 +PAK_VER = 3 DEPS = "perl-DBI perl-DBD-SQLite perl-File-ReadBackwards perl-PDF-API2 sendEmail" diff --git a/make.sh b/make.sh index 536ed6fcd..d3ca985a7 100755 --- a/make.sh +++ b/make.sh @@ -25,8 +25,8 @@ NAME="IPFire" # Software name SNAME="ipfire" # Short name VERSION="2.15" # Version number -CORE="83" # Core Level (Filename) -PAKFIRE_CORE="83" # Core Level (PAKFIRE) +CORE="84" # Core Level (Filename) +PAKFIRE_CORE="84" # Core Level (PAKFIRE) GIT_BRANCH=`git rev-parse --abbrev-ref HEAD` # Git Branch SLOGAN="www.ipfire.org" # Software slogan CONFIG_ROOT=/var/ipfire # Configuration rootdir diff --git a/src/initscripts/init.d/firewall b/src/initscripts/init.d/firewall index c7f8b679d..66ca432a2 100644 --- a/src/initscripts/init.d/firewall +++ b/src/initscripts/init.d/firewall @@ -402,21 +402,11 @@ case "$1" in boot_mesg "Setting up firewall" iptables_init evaluate_retval - - # run local firewall configuration, if present - if [ -x /etc/sysconfig/firewall.local ]; then - /etc/sysconfig/firewall.local start - fi ;; reload|up) boot_mesg "Reloading firewall" iptables_red_up evaluate_retval - - # run local firewall configuration, if present - if [ -x /etc/sysconfig/firewall.local ]; then - /etc/sysconfig/firewall.local reload - fi ;; down) boot_mesg "Disabling firewall access to RED" @@ -424,10 +414,6 @@ case "$1" in evaluate_retval ;; restart) - # run local firewall configuration, if present - if [ -x /etc/sysconfig/firewall.local ]; then - /etc/sysconfig/firewall.local stop - fi $0 start ;; *) diff --git a/src/initscripts/init.d/network b/src/initscripts/init.d/network index 5aecd1557..9182e9801 100644 --- a/src/initscripts/init.d/network +++ b/src/initscripts/init.d/network @@ -18,7 +18,6 @@ eval $(/usr/local/bin/readhash /var/ipfire/ethernet/settings) init_networking() { /etc/rc.d/init.d/dnsmasq start - /etc/rc.d/init.d/static-routes start } DO="${1}" @@ -26,7 +25,7 @@ shift if [ -n "${1}" ]; then ALL=0 - for i in green red blue orange; do + for i in green red blue orange; do eval "${i}=0" done else @@ -68,7 +67,9 @@ case "${DO}" in rm -f /var/ipfire/red/{active,device,dial-on-demand,dns1,dns2,local-ipaddress,remote-ipaddress,resolv.conf} [ "$AUTOCONNECT" == "off" ] || /etc/rc.d/init.d/networking/red start fi - fi + fi + + /etc/rc.d/init.d/static-routes start ;; stop) diff --git a/src/paks/squid-accounting/install.sh b/src/paks/squid-accounting/install.sh index f20b85f46..835055ad5 100644 --- a/src/paks/squid-accounting/install.sh +++ b/src/paks/squid-accounting/install.sh @@ -31,5 +31,8 @@ if [ ! -f /var/ipfire/accounting/acct.db ]; then chmod 644 /var/ipfire/accounting/acct.db chown nobody.nobody /var/ipfire/accounting/acct.db fi +#Set right permissions of directory /srv/web/ipfire/html/accounting +chown -R nobody.nobody /srv/web/ipfire/html/accounting +chmod 755 -R /srv/web/ipfire/html/accounting rm -f /var/ipfire/accounting/dbinstall.pl /usr/local/bin/update-lang-cache diff --git a/src/patches/bash-3.2-CVE-2014-7169.patch b/src/patches/bash-3.2-CVE-2014-7169.patch deleted file mode 100644 index 964b91f51..000000000 --- a/src/patches/bash-3.2-CVE-2014-7169.patch +++ /dev/null @@ -1,11 +0,0 @@ -*** ../bash-20140912/parse.y 2014-08-26 15:09:42.000000000 -0400 ---- parse.y 2014-09-24 22:47:28.000000000 -0400 -*************** -*** 2959,2962 **** ---- 2959,2964 ---- - word_desc_to_read = (WORD_DESC *)NULL; - -+ eol_ungetc_lookahead = 0; -+ - current_token = '\n'; /* XXX */ - last_read_token = '\n'; diff --git a/src/patches/bash-3.2-ssh_source_bash.patch b/src/patches/bash-3.2-ssh_source_bash.patch index 4b371326a..5bd19ce9a 100644 --- a/src/patches/bash-3.2-ssh_source_bash.patch +++ b/src/patches/bash-3.2-ssh_source_bash.patch @@ -1,9 +1,12 @@ -diff -up bash-3.2/config-top.h.ssh_source_bash bash-3.2/config-top.h ---- bash-3.2/config-top.h.ssh_source_bash 2008-10-23 15:08:04.000000000 +0200 -+++ bash-3.2/config-top.h 2008-10-23 15:08:33.000000000 +0200 -@@ -86,4 +86,4 @@ - - /* Define this if you want bash to try to check whether it's being run by - sshd and source the .bashrc if so (like the rshd behavior). */ +diff -up bash-4.0/config-top.h.ssh_source_bash bash-4.0/config-top.h +--- bash-4.0/config-top.h.ssh_source_bash 2009-01-21 15:20:06.000000000 +0100 ++++ bash-4.0/config-top.h 2009-01-21 15:25:46.000000000 +0100 +@@ -90,7 +90,7 @@ + sshd and source the .bashrc if so (like the rshd behavior). This checks + for the presence of SSH_CLIENT or SSH2_CLIENT in the initial environment, + which can be fooled under certain not-uncommon circumstances. */ -/* #define SSH_SOURCE_BASHRC */ +#define SSH_SOURCE_BASHRC + + /* Define if you want the case-capitalizing operators (~[~]) and the + `capcase' variable attribute (declare -c). */ diff --git a/src/patches/bash-4.0-paths-1.patch b/src/patches/bash-4.0-paths-1.patch index 735a3810f..24ec5cc0b 100644 --- a/src/patches/bash-4.0-paths-1.patch +++ b/src/patches/bash-4.0-paths-1.patch @@ -1,25 +1,6 @@ ---- bash-3.0/config.h.in.paths 2004-07-21 21:08:31.000000000 +0100 -+++ bash-3.0/config.h.in 2004-07-28 09:16:27.257884999 +0100 -@@ -197,7 +197,7 @@ - - /* System paths */ - --#define DEFAULT_MAIL_DIRECTORY "/usr/spool/mail" -+#define DEFAULT_MAIL_DIRECTORY "/var/spool/mail" - - /* Characteristics of the system's header files and libraries that affect - the compilation environment. */ --- bash-3.0/config-top.h.paths 2003-08-05 15:36:12.000000000 +0100 +++ bash-3.0/config-top.h 2004-07-28 09:36:27.117205637 +0100 -@@ -52,14 +52,14 @@ - /* The default value of the PATH variable. */ - #ifndef DEFAULT_PATH_VALUE - #define DEFAULT_PATH_VALUE \ -- "/usr/gnu/bin:/usr/local/bin:/bin:/usr/bin:." -+ "/usr/local/bin:/bin:/usr/bin" - #endif - - /* The value for PATH when invoking `command -p'. This is only used when +@@ -66,7 +66,7 @@ the Posix.2 confstr () function, or CS_PATH define are not present. */ #ifndef STANDARD_UTILS_PATH #define STANDARD_UTILS_PATH \ diff --git a/src/patches/bash/bash32-001 b/src/patches/bash/bash32-001 deleted file mode 100644 index b7d1f1e07..000000000 --- a/src/patches/bash/bash32-001 +++ /dev/null @@ -1,47 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-001 - -Bug-Reported-by: Greg Schafer -Bug-Reference-ID: <20061012084940.GA15768@tigers.local> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-10/msg00046.html - -Bug-Description: - -When using historical ``-style command substitution, bash incorrectly attempts -to interpret shell comments while scanning for the closing backquote. - -Patch: - -*** ../bash-3.2/parse.y Tue Sep 19 16:37:21 2006 ---- parse.y Thu Oct 12 10:30:57 2006 -*************** -*** 2736,2740 **** - count = 1; - pass_next_character = backq_backslash = was_dollar = in_comment = 0; -! check_comment = (flags & P_COMMAND) && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0; - - /* RFLAGS is the set of flags we want to pass to recursive calls. */ ---- 2736,2740 ---- - count = 1; - pass_next_character = backq_backslash = was_dollar = in_comment = 0; -! check_comment = (flags & P_COMMAND) && qc != '`' && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0; - - /* RFLAGS is the set of flags we want to pass to recursive calls. */ -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-002 b/src/patches/bash/bash32-002 deleted file mode 100644 index b934df9fa..000000000 --- a/src/patches/bash/bash32-002 +++ /dev/null @@ -1,48 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-002 - -Bug-Reported-by: Jim Gifford -Bug-Reference-ID: <12j2pc3aq35mb04@corp.supernews.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-10/msg00082.html - -Bug-Description: - -An incorrect encoding specification in the Content-Type header causes msgfmt -to fail, which causes `make install' to fail. - -Patch: - -*** ../bash-3.2/po/ru.po Tue Jan 10 17:51:03 2006 ---- po/ru.po Mon Oct 16 15:13:23 2006 -*************** -*** 13,17 **** - "Language-Team: Russian \n" - "MIME-Version: 1.0\n" -! "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" - "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" ---- 13,17 ---- - "Language-Team: Russian \n" - "MIME-Version: 1.0\n" -! "Content-Type: text/plain; charset=KOI8-R\n" - "Content-Transfer-Encoding: 8bit\n" - "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-003 b/src/patches/bash/bash32-003 deleted file mode 100644 index 922041b4a..000000000 --- a/src/patches/bash/bash32-003 +++ /dev/null @@ -1,147 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-003 - -Bug-Reported-by: John Gatewood Ham -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-10/msg00045.html - -Bug-Description: - -When using the conditional command's `=~' operator to match regular -expressions, the parser did not skip over shell metacharacters in the -regular expression, leading to syntax errors. - -Patch: - -*** ../bash-3.2-patched/parse.y Tue Oct 17 11:45:20 2006 ---- parse.y Sat Oct 14 14:56:16 2006 -*************** -*** 1029,1034 **** ---- 1029,1035 ---- - #define PST_CMDTOKEN 0x1000 /* command token OK - unused */ - #define PST_COMPASSIGN 0x2000 /* parsing x=(...) compound assignment */ - #define PST_ASSIGNOK 0x4000 /* assignment statement ok in this context */ -+ #define PST_REGEXP 0x8000 /* parsing an ERE/BRE as a single word */ - - /* Initial size to allocate for tokens, and the - amount to grow them by. */ -*************** -*** 2591,2596 **** ---- 2592,2600 ---- - return (character); - } - -+ if (parser_state & PST_REGEXP) -+ goto tokword; -+ - /* Shell meta-characters. */ - if MBTEST(shellmeta (character) && ((parser_state & PST_DBLPAREN) == 0)) - { -*************** -*** 2698,2703 **** ---- 2702,2708 ---- - if MBTEST(character == '-' && (last_read_token == LESS_AND || last_read_token == GREATER_AND)) - return (character); - -+ tokword: - /* Okay, if we got this far, we have to read a word. Read one, - and then check it against the known ones. */ - result = read_token_word (character); -*************** -*** 3202,3209 **** - if (tok == WORD && test_binop (yylval.word->word)) - op = yylval.word; - #if defined (COND_REGEXP) -! else if (tok == WORD && STREQ (yylval.word->word,"=~")) -! op = yylval.word; - #endif - else if (tok == '<' || tok == '>') - op = make_word_from_token (tok); /* ( */ ---- 3207,3217 ---- - if (tok == WORD && test_binop (yylval.word->word)) - op = yylval.word; - #if defined (COND_REGEXP) -! else if (tok == WORD && STREQ (yylval.word->word, "=~")) -! { -! op = yylval.word; -! parser_state |= PST_REGEXP; -! } - #endif - else if (tok == '<' || tok == '>') - op = make_word_from_token (tok); /* ( */ -*************** -*** 3234,3239 **** ---- 3242,3248 ---- - - /* rhs */ - tok = read_token (READ); -+ parser_state &= ~PST_REGEXP; - if (tok == WORD) - { - tright = make_cond_node (COND_TERM, yylval.word, (COND_COM *)NULL, (COND_COM *)NULL); -*************** -*** 3419,3427 **** - goto next_character; - } - - #ifdef EXTENDED_GLOB - /* Parse a ksh-style extended pattern matching specification. */ -! if (extended_glob && PATTERN_CHAR (character)) - { - peek_char = shell_getc (1); - if MBTEST(peek_char == '(') /* ) */ ---- 3428,3461 ---- - goto next_character; - } - -+ #ifdef COND_REGEXP -+ /* When parsing a regexp as a single word inside a conditional command, -+ we need to special-case characters special to both the shell and -+ regular expressions. Right now, that is only '(' and '|'. */ /*)*/ -+ if MBTEST((parser_state & PST_REGEXP) && (character == '(' || character == '|')) /*)*/ -+ { -+ if (character == '|') -+ goto got_character; -+ -+ push_delimiter (dstack, character); -+ ttok = parse_matched_pair (cd, '(', ')', &ttoklen, 0); -+ pop_delimiter (dstack); -+ if (ttok == &matched_pair_error) -+ return -1; /* Bail immediately. */ -+ RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 2, -+ token_buffer_size, TOKEN_DEFAULT_GROW_SIZE); -+ token[token_index++] = character; -+ strcpy (token + token_index, ttok); -+ token_index += ttoklen; -+ FREE (ttok); -+ dollar_present = all_digit_token = 0; -+ goto next_character; -+ } -+ #endif /* COND_REGEXP */ -+ - #ifdef EXTENDED_GLOB - /* Parse a ksh-style extended pattern matching specification. */ -! if MBTEST(extended_glob && PATTERN_CHAR (character)) - { - peek_char = shell_getc (1); - if MBTEST(peek_char == '(') /* ) */ - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-004 b/src/patches/bash/bash32-004 deleted file mode 100644 index cd2accfa3..000000000 --- a/src/patches/bash/bash32-004 +++ /dev/null @@ -1,96 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-004 - -Bug-Reported-by: Stuart Shelton -Bug-Reference-ID: <619141e40610261203y6cda5aa6i23cb24c7aeba996e@mail.gmail.com> -Bug-Reference-URL: - -Bug-Description: - -A bug in the parameter pattern substitution implementation treated a pattern -whose first character was `/' (after expansion) as specifying global -replacement. - -Patch: - -*** ../bash-3.2/subst.c Tue Sep 19 08:35:09 2006 ---- subst.c Thu Oct 26 09:17:50 2006 -*************** -*** 5707,5712 **** ---- 5707,5717 ---- - vtype &= ~VT_STARSUB; - - mflags = 0; -+ if (patsub && *patsub == '/') -+ { -+ mflags |= MATCH_GLOBREP; -+ patsub++; -+ } - - /* Malloc this because expand_string_if_necessary or one of the expansion - functions in its call chain may free it on a substitution error. */ -*************** -*** 5741,5753 **** - } - - /* ksh93 doesn't allow the match specifier to be a part of the expanded -! pattern. This is an extension. */ - p = pat; -! if (pat && pat[0] == '/') -! { -! mflags |= MATCH_GLOBREP|MATCH_ANY; -! p++; -! } - else if (pat && pat[0] == '#') - { - mflags |= MATCH_BEG; ---- 5746,5757 ---- - } - - /* ksh93 doesn't allow the match specifier to be a part of the expanded -! pattern. This is an extension. Make sure we don't anchor the pattern -! at the beginning or end of the string if we're doing global replacement, -! though. */ - p = pat; -! if (mflags & MATCH_GLOBREP) -! mflags |= MATCH_ANY; - else if (pat && pat[0] == '#') - { - mflags |= MATCH_BEG; -*** ../bash-3.2/tests/new-exp.right Thu Aug 10 12:00:00 2006 ---- tests/new-exp.right Sun Oct 29 16:03:36 2006 -*************** -*** 430,436 **** - Case06---1---A B C::--- - Case07---3---A:B:C--- - Case08---3---A:B:C--- -! ./new-exp.tests: line 506: /${$(($#-1))}: bad substitution - argv[1] = - argv[2] = - argv[3] = ---- 430,436 ---- - Case06---1---A B C::--- - Case07---3---A:B:C--- - Case08---3---A:B:C--- -! ./new-exp.tests: line 506: ${$(($#-1))}: bad substitution - argv[1] = - argv[2] = - argv[3] = -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-005 b/src/patches/bash/bash32-005 deleted file mode 100644 index 903ec5840..000000000 --- a/src/patches/bash/bash32-005 +++ /dev/null @@ -1,223 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-005 - -Bug-Reported-by: Stuart Shelton -Bug-Reference-ID: <453F7CC8.6030907@openobjects.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-10/msg00127.html - -Bug-Description: - -A missing extern declaration for `asprintf' caused `double' arguments to be -passed as `0', leading to incorrect results. Additionally, a bug in the -replacement asprintf/snprintf function caused an infinite loop when passed -0 arguments to the floating point conversions under some circumstances. - -Patch: - -*** ../bash-3.2/builtins/printf.def Mon Sep 18 08:48:42 2006 ---- builtins/printf.def Tue Oct 31 08:19:44 2006 -*************** -*** 49,54 **** ---- 49,60 ---- - # define INT_MIN (-2147483647-1) - #endif - -+ #if defined (PREFER_STDARG) -+ # include -+ #else -+ # include -+ #endif -+ - #include - #include - -*************** -*** 151,156 **** ---- 157,166 ---- - #define SKIP1 "#'-+ 0" - #define LENMODS "hjlLtz" - -+ #ifndef HAVE_ASPRINTF -+ extern int asprintf __P((char **, const char *, ...)) __attribute__((__format__ (printf, 2, 3))); -+ #endif -+ - static void printf_erange __P((char *)); - static int printstr __P((char *, char *, int, int, int)); - static int tescape __P((char *, char *, int *)); - - -*** ../bash-3.2/lib/sh/snprintf.c Thu Apr 6 09:48:40 2006 ---- lib/sh/snprintf.c Sat Oct 28 00:00:13 2006 -*************** -*** 471,476 **** ---- 476,483 ---- - 10^x ~= r - * log_10(200) = 2; - * log_10(250) = 2; -+ * -+ * NOTE: do not call this with r == 0 -- an infinite loop results. - */ - static int - log_10(r) -*************** -*** 576,583 **** - { - integral_part[0] = '0'; - integral_part[1] = '\0'; -! fraction_part[0] = '0'; -! fraction_part[1] = '\0'; - if (fract) - *fract = fraction_part; - return integral_part; ---- 583,593 ---- - { - integral_part[0] = '0'; - integral_part[1] = '\0'; -! /* The fractional part has to take the precision into account */ -! for (ch = 0; ch < precision-1; ch++) -! fraction_part[ch] = '0'; -! fraction_part[ch] = '0'; -! fraction_part[ch+1] = '\0'; - if (fract) - *fract = fraction_part; - return integral_part; -*************** -*** 805,810 **** ---- 815,821 ---- - PUT_CHAR(*tmp, p); - tmp++; - } -+ - PAD_LEFT(p); - } - -*************** -*** 972,982 **** - if ((p->flags & PF_THOUSANDS) && grouping && (t = groupnum (tmp))) - tmp = t; - - /* calculate the padding. 1 for the dot */ - p->width = p->width - - ((d > 0. && p->justify == RIGHT) ? 1:0) - - ((p->flags & PF_SPACE) ? 1:0) - -! strlen(tmp) - p->precision - 1; - PAD_RIGHT(p); - PUT_PLUS(d, p, 0.); - PUT_SPACE(d, p, 0.); ---- 983,1003 ---- - if ((p->flags & PF_THOUSANDS) && grouping && (t = groupnum (tmp))) - tmp = t; - -+ if ((*p->pf == 'g' || *p->pf == 'G') && (p->flags & PF_ALTFORM) == 0) -+ { -+ /* smash the trailing zeros unless altform */ -+ for (i = strlen(tmp2) - 1; i >= 0 && tmp2[i] == '0'; i--) -+ tmp2[i] = '\0'; -+ if (tmp2[0] == '\0') -+ p->precision = 0; -+ } -+ - /* calculate the padding. 1 for the dot */ - p->width = p->width - - ((d > 0. && p->justify == RIGHT) ? 1:0) - - ((p->flags & PF_SPACE) ? 1:0) - -! strlen(tmp) - p->precision - -! ((p->precision != 0 || (p->flags & PF_ALTFORM)) ? 1 : 0); /* radix char */ - PAD_RIGHT(p); - PUT_PLUS(d, p, 0.); - PUT_SPACE(d, p, 0.); -*************** -*** 991,1001 **** - if (p->precision != 0 || (p->flags & PF_ALTFORM)) - PUT_CHAR(decpoint, p); /* put the '.' */ - -- if ((*p->pf == 'g' || *p->pf == 'G') && (p->flags & PF_ALTFORM) == 0) -- /* smash the trailing zeros unless altform */ -- for (i = strlen(tmp2) - 1; i >= 0 && tmp2[i] == '0'; i--) -- tmp2[i] = '\0'; -- - for (; *tmp2; tmp2++) - PUT_CHAR(*tmp2, p); /* the fraction */ - ---- 1012,1017 ---- -*************** -*** 1011,1024 **** - char *tmp, *tmp2; - int j, i; - -! if (chkinfnan(p, d, 1) || chkinfnan(p, d, 2)) - return; /* already printed nan or inf */ - - GETLOCALEDATA(decpoint, thoussep, grouping); - DEF_PREC(p); -! j = log_10(d); -! d = d / pow_10(j); /* get the Mantissa */ -! d = ROUND(d, p); - tmp = dtoa(d, p->precision, &tmp2); - - /* 1 for unit, 1 for the '.', 1 for 'e|E', ---- 1027,1045 ---- - char *tmp, *tmp2; - int j, i; - -! if (d != 0 && (chkinfnan(p, d, 1) || chkinfnan(p, d, 2))) - return; /* already printed nan or inf */ - - GETLOCALEDATA(decpoint, thoussep, grouping); - DEF_PREC(p); -! if (d == 0.) -! j = 0; -! else -! { -! j = log_10(d); -! d = d / pow_10(j); /* get the Mantissa */ -! d = ROUND(d, p); -! } - tmp = dtoa(d, p->precision, &tmp2); - - /* 1 for unit, 1 for the '.', 1 for 'e|E', -*************** -*** 1076,1081 **** ---- 1097,1103 ---- - PUT_CHAR(*tmp, p); - tmp++; - } -+ - PAD_LEFT(p); - } - #endif -*************** -*** 1358,1364 **** - STAR_ARGS(data); - DEF_PREC(data); - d = GETDOUBLE(data); -! i = log_10(d); - /* - * for '%g|%G' ANSI: use f if exponent - * is in the range or [-4,p] exclusively ---- 1380,1386 ---- - STAR_ARGS(data); - DEF_PREC(data); - d = GETDOUBLE(data); -! i = (d != 0.) ? log_10(d) : -1; - /* - * for '%g|%G' ANSI: use f if exponent - * is in the range or [-4,p] exclusively -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-006 b/src/patches/bash/bash32-006 deleted file mode 100644 index 589db9e59..000000000 --- a/src/patches/bash/bash32-006 +++ /dev/null @@ -1,45 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-006 - -Bug-Reported-by: ebb9@byu.net -Bug-Reference-ID: <45540862.9030900@byu.net> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00017.html - http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00016.html - -Bug-Description: - -In some cases, code that is intended to be used in the presence of multibyte -characters is called when no such characters are present, leading to incorrect -display position calculations and incorrect redisplay. - -Patch: - -*** ../bash-3.2-patched/lib/readline/display.c Thu Sep 14 14:20:12 2006 ---- lib/readline/display.c Mon Nov 13 17:55:57 2006 -*************** -*** 2381,2384 **** ---- 2409,2414 ---- - if (end <= start) - return 0; -+ if (MB_CUR_MAX == 1 || rl_byte_oriented) -+ return (end - start); - - memset (&ps, 0, sizeof (mbstate_t)); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-007 b/src/patches/bash/bash32-007 deleted file mode 100644 index 9b86f4af7..000000000 --- a/src/patches/bash/bash32-007 +++ /dev/null @@ -1,55 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-007 - -Bug-Reported-by: jidanni@jidanni.org -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00039.html - -Bug-Description: - -When removing the current or previous job from the jobs list, bash incorrectly -resets the current job under some circumstances. - -Patch: - -*** ../bash-3.2-patched/jobs.c Sat Jul 29 16:40:48 2006 ---- jobs.c Fri Nov 24 14:50:01 2006 -*************** -*** 985,990 **** - if (temp == 0) - return; -- if (job_index == js.j_current || job_index == js.j_previous) -- reset_current (); - - if ((dflags & DEL_NOBGPID) == 0) ---- 985,988 ---- -*************** -*** 1029,1032 **** ---- 1027,1033 ---- - else if (jobs[js.j_firstj] == 0 || jobs[js.j_lastj] == 0) - reset_job_indices (); -+ -+ if (job_index == js.j_current || job_index == js.j_previous) -+ reset_current (); - } - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-008 b/src/patches/bash/bash32-008 deleted file mode 100644 index 7ec07ffe6..000000000 --- a/src/patches/bash/bash32-008 +++ /dev/null @@ -1,48 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-008 - -Bug-Reported-by: Linda Walsh -Bug-Reference-ID: <456041FD.8000605@tlinx.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00040.html - -Bug-Description: - -When checking pathnames from the command hash table (e.g., when the `checkhash' -shell option is enabled), a bug causes bash to delete and re-lookup each -command. - -Patch: - -*** ../bash-3.2-patched/findcmd.c Wed Aug 17 16:49:54 2005 ---- findcmd.c Fri Nov 24 10:48:37 2006 -*************** -*** 309,313 **** - { - st = file_status (hashed_file); -! if ((st ^ (FS_EXISTS | FS_EXECABLE)) != 0) - { - phash_remove (pathname); ---- 309,313 ---- - { - st = file_status (hashed_file); -! if ((st & (FS_EXISTS|FS_EXECABLE)) != (FS_EXISTS|FS_EXECABLE)) - { - phash_remove (pathname); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-009 b/src/patches/bash/bash32-009 deleted file mode 100644 index 9cfd16e94..000000000 --- a/src/patches/bash/bash32-009 +++ /dev/null @@ -1,61 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-009 - -Bug-Reported-by: James.M.Botte@lowes.com -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-12/msg00000.html - -Bug-Description: - -When using its built-in replacement for snprintf/asprintf, bash does not -treat the %x, %X, and %o format specifiers as unsigned numbers. - -Patch: - -*** ../bash-3.2-patched/lib/sh/snprintf.c Mon Nov 13 08:58:52 2006 ---- lib/sh/snprintf.c Wed Dec 6 11:15:04 2006 -*************** -*** 669,673 **** - - sd = d; /* signed for ' ' padding in base 10 */ -! flags = (*p->pf == 'u' || *p->pf == 'U') ? FL_UNSIGNED : 0; - if (*p->pf == 'X') - flags |= FL_HEXUPPER; ---- 674,679 ---- - - sd = d; /* signed for ' ' padding in base 10 */ -! flags = 0; -! flags = (*p->pf == 'x' || *p->pf == 'X' || *p->pf == 'o' || *p->pf == 'u' || *p->pf == 'U') ? FL_UNSIGNED : 0; - if (*p->pf == 'X') - flags |= FL_HEXUPPER; -*************** -*** 739,743 **** - - sd = d; /* signed for ' ' padding in base 10 */ -! flags = (*p->pf == 'u' || *p->pf == 'U') ? FL_UNSIGNED : 0; - if (*p->pf == 'X') - flags |= FL_HEXUPPER; ---- 745,749 ---- - - sd = d; /* signed for ' ' padding in base 10 */ -! flags = (*p->pf == 'x' || *p->pf == 'X' || *p->pf == 'o' || *p->pf == 'u' || *p->pf == 'U') ? FL_UNSIGNED : 0; - if (*p->pf == 'X') - flags |= FL_HEXUPPER; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-010 b/src/patches/bash/bash32-010 deleted file mode 100644 index 88de5758f..000000000 --- a/src/patches/bash/bash32-010 +++ /dev/null @@ -1,207 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-010 - -Bug-Reported-by: Ryan Waldron -Bug-Reference-ID: <20070119065603.546D011E9C@kansas.erebor.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-01/msg00059.html - -Bug-Description: - -The glibc implementation of regcomp/regexec does not allow backslashes to -escape "ordinary" pattern characters when matching. Bash used backslashes -to quote all characters when the pattern argument to the [[ special -command's =~ operator was quoted. This caused the match to fail on Linux -and other systems using GNU libc. - -Patch: - -*** ../bash-3.2.9/pathexp.h Sat Feb 19 17:23:18 2005 ---- pathexp.h Wed Jan 31 22:53:16 2007 -*************** -*** 1,5 **** - /* pathexp.h -- The shell interface to the globbing library. */ - -! /* Copyright (C) 1987-2005 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 1,5 ---- - /* pathexp.h -- The shell interface to the globbing library. */ - -! /* Copyright (C) 1987-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 33,36 **** ---- 33,37 ---- - #define QGLOB_CVTNULL 0x01 /* convert QUOTED_NULL strings to '\0' */ - #define QGLOB_FILENAME 0x02 /* do correct quoting for matching filenames */ -+ #define QGLOB_REGEXP 0x04 /* quote an ERE for regcomp/regexec */ - - #if defined (EXTENDED_GLOB) -*** ../bash-3.2.9/pathexp.c Mon May 6 13:43:05 2002 ---- pathexp.c Mon Feb 26 16:59:23 2007 -*************** -*** 1,5 **** - /* pathexp.c -- The shell interface to the globbing library. */ - -! /* Copyright (C) 1995-2002 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 1,5 ---- - /* pathexp.c -- The shell interface to the globbing library. */ - -! /* Copyright (C) 1995-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 111,114 **** ---- 111,141 ---- - } - -+ /* Return 1 if C is a character that is `special' in a POSIX ERE and needs to -+ be quoted to match itself. */ -+ static inline int -+ ere_char (c) -+ int c; -+ { -+ switch (c) -+ { -+ case '.': -+ case '[': -+ case '\\': -+ case '(': -+ case ')': -+ case '*': -+ case '+': -+ case '?': -+ case '{': -+ case '|': -+ case '^': -+ case '$': -+ return 1; -+ default: -+ return 0; -+ } -+ return (0); -+ } -+ - /* PATHNAME can contain characters prefixed by CTLESC; this indicates - that the character is to be quoted. We quote it here in the style -*************** -*** 143,146 **** ---- 170,175 ---- - if ((qflags & QGLOB_FILENAME) && pathname[i+1] == '/') - continue; -+ if ((qflags & QGLOB_REGEXP) && ere_char (pathname[i+1]) == 0) -+ continue; - temp[j++] = '\\'; - i++; -*** ../bash-3.2.9/subst.c Tue Nov 7 16:14:41 2006 ---- subst.c Wed Jan 31 23:09:58 2007 -*************** -*** 5,9 **** - beauty, but, hey, you're alright.'' */ - -! /* Copyright (C) 1987-2006 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 5,9 ---- - beauty, but, hey, you're alright.'' */ - -! /* Copyright (C) 1987-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 2647,2655 **** - /* This needs better error handling. */ - /* Expand W for use as an argument to a unary or binary operator in a -! [[...]] expression. If SPECIAL is nonzero, this is the rhs argument - to the != or == operator, and should be treated as a pattern. In -! this case, we quote the string specially for the globbing code. The -! caller is responsible for removing the backslashes if the unquoted -! words is needed later. */ - char * - cond_expand_word (w, special) ---- 2647,2656 ---- - /* This needs better error handling. */ - /* Expand W for use as an argument to a unary or binary operator in a -! [[...]] expression. If SPECIAL is 1, this is the rhs argument - to the != or == operator, and should be treated as a pattern. In -! this case, we quote the string specially for the globbing code. If -! 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) -*************** -*** 2659,2662 **** ---- 2660,2664 ---- - char *r, *p; - WORD_LIST *l; -+ int qflags; - - if (w->word == 0 || w->word[0] == '\0') -*************** -*** 2673,2678 **** - else - { - p = string_list (l); -! r = quote_string_for_globbing (p, QGLOB_CVTNULL); - free (p); - } ---- 2675,2683 ---- - else - { -+ qflags = QGLOB_CVTNULL; -+ if (special == 2) -+ qflags |= QGLOB_REGEXP; - p = string_list (l); -! r = quote_string_for_globbing (p, qflags); - free (p); - } -*** ../bash-3.2.9/execute_cmd.c Sat Aug 26 00:23:17 2006 ---- execute_cmd.c Wed Jan 31 23:12:06 2007 -*************** -*** 1,5 **** - /* execute_cmd.c -- Execute a COMMAND structure. */ - -! /* Copyright (C) 1987-2005 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 1,5 ---- - /* execute_cmd.c -- Execute a COMMAND structure. */ - -! /* Copyright (C) 1987-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 2547,2551 **** - if (arg1 == 0) - arg1 = nullstr; -! arg2 = cond_expand_word (cond->right->op, patmatch||rmatch); - if (arg2 == 0) - arg2 = nullstr; ---- 2547,2551 ---- - if (arg1 == 0) - arg1 = nullstr; -! arg2 = cond_expand_word (cond->right->op, rmatch ? 2 : (patmatch ? 1 : 0)); - if (arg2 == 0) - arg2 = nullstr; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-011 b/src/patches/bash/bash32-011 deleted file mode 100644 index c021f52f8..000000000 --- a/src/patches/bash/bash32-011 +++ /dev/null @@ -1,138 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-011 - -Bug-Reported-by: Petr Sumbera -Bug-Reference-ID: <45AF5F4B.1020800@sun.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-01/msg00049.html - -Bug-Description: - -Under certain circumstances (loopback mounts), the bash getcwd does not -return correct results. This patch allows the use of the Solaris libc -getcwd even though it doesn't dynamically allocate memory. - -Run `touch configure' to make sure make doesn't try to run autoconf. -Then run configure with whatever options you like. - -Patch: - -*** ../bash-3.2-patched/configure.in Tue Sep 26 11:05:45 2006 ---- configure.in Wed Jan 31 09:48:00 2007 -*************** -*** 6,10 **** - dnl Process this file with autoconf to produce a configure script. - -! # Copyright (C) 1987-2006 Free Software Foundation, Inc. - - # This program is free software; you can redistribute it and/or modify ---- 6,10 ---- - dnl Process this file with autoconf to produce a configure script. - -! # Copyright (C) 1987-2007 Free Software Foundation, Inc. - - # This program is free software; you can redistribute it and/or modify -*************** -*** 992,996 **** - sco3.2*) LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;; - sunos4*) LOCAL_CFLAGS=-DSunOS4 ;; -! solaris2.5*) LOCAL_CFLAGS=-DSunOS5 ;; - lynxos*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; - linux*) LOCAL_LDFLAGS=-rdynamic # allow dynamic loading ---- 992,997 ---- - sco3.2*) LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;; - sunos4*) LOCAL_CFLAGS=-DSunOS4 ;; -! solaris2.5*) LOCAL_CFLAGS="-DSunOS5 -DSOLARIS" ;; -! solaris2*) LOCAL_CFLAGS=-DSOLARIS ;; - lynxos*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; - linux*) LOCAL_LDFLAGS=-rdynamic # allow dynamic loading -*** ../bash-3.2-patched/config-bot.h Tue Sep 12 16:43:04 2006 ---- config-bot.h Tue Mar 6 10:41:31 2007 -*************** -*** 2,6 **** - /* modify settings or make new ones based on what autoconf tells us. */ - -! /* Copyright (C) 1989-2002 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 2,6 ---- - /* modify settings or make new ones based on what autoconf tells us. */ - -! /* Copyright (C) 1989-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 71,77 **** - #endif - -! /* If we have a getcwd(3), but it calls popen(), #undef HAVE_GETCWD so -! the replacement in getcwd.c will be built. */ -! #if defined (HAVE_GETCWD) && defined (GETCWD_BROKEN) - # undef HAVE_GETCWD - #endif ---- 71,79 ---- - #endif - -! /* If we have a getcwd(3), but one that does not dynamically allocate memory, -! #undef HAVE_GETCWD so the replacement in getcwd.c will be built. We do -! not do this on Solaris, because their implementation of loopback mounts -! breaks the traditional file system assumptions that getcwd uses. */ -! #if defined (HAVE_GETCWD) && defined (GETCWD_BROKEN) && !defined (SOLARIS) - # undef HAVE_GETCWD - #endif -*** ../bash-3.2-patched/builtins/common.c Thu Jul 27 09:39:51 2006 ---- builtins/common.c Tue Mar 6 10:43:27 2007 -*************** -*** 1,3 **** -! /* Copyright (C) 1987-2005 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 1,3 ---- -! /* Copyright (C) 1987-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 476,480 **** ---- 476,484 ---- - if (the_current_working_directory == 0) - { -+ #if defined (GETCWD_BROKEN) -+ the_current_working_directory = getcwd (0, PATH_MAX); -+ #else - the_current_working_directory = getcwd (0, 0); -+ #endif - if (the_current_working_directory == 0) - { -*** ../bash-3.2-patched/configure Tue Sep 26 11:06:01 2006 ---- configure Tue Mar 6 10:59:20 2007 -*************** -*** 27317,27321 **** - sco3.2*) LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;; - sunos4*) LOCAL_CFLAGS=-DSunOS4 ;; -! solaris2.5*) LOCAL_CFLAGS=-DSunOS5 ;; - lynxos*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; - linux*) LOCAL_LDFLAGS=-rdynamic # allow dynamic loading ---- 27317,27322 ---- - sco3.2*) LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;; - sunos4*) LOCAL_CFLAGS=-DSunOS4 ;; -! solaris2.5*) LOCAL_CFLAGS="-DSunOS5 -DSOLARIS" ;; -! solaris2*) LOCAL_CFLAGS=-DSOLARIS ;; - lynxos*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; - linux*) LOCAL_LDFLAGS=-rdynamic # allow dynamic loading -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-012 b/src/patches/bash/bash32-012 deleted file mode 100644 index 8d669d27c..000000000 --- a/src/patches/bash/bash32-012 +++ /dev/null @@ -1,96 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-012 - -Bug-Reported-by: John Wyman -Bug-Reference-ID: <5E7DEFC094C35044B87FAE761D9F0EE20143A3B7@exchange2k.celink.com> -Bug-Reference-URL: - -Bug-Description: - -Some systems (AIX 4.x) don't implement the PRI_xxx macros correctly, -causing syntax errors when attempting to compile bash on those systems. -This patch adds support for the PRI_MACROS_BROKEN define. - -You will need to re-run `configure' after applying the patch. Run -`touch configure' so make doesn't try to run autoconf. - -Patch: - -*** ../bash-3.2.11/config.h.in Tue Sep 12 16:00:54 2006 ---- config.h.in Tue Mar 6 11:17:55 2007 -*************** -*** 1,5 **** - /* config.h -- Configuration file for bash. */ - -! /* Copyright (C) 1987-2006 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 1,5 ---- - /* config.h -- Configuration file for bash. */ - -! /* Copyright (C) 1987-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 414,417 **** ---- 414,419 ---- - #undef HAVE_DECL_STRTOLD - -+ #undef PRI_MACROS_BROKEN -+ - #undef STRTOLD_BROKEN - -*************** -*** 1007,1010 **** ---- 1009,1015 ---- - #undef HAVE_DCGETTEXT - -+ /* Define if you have the `localeconv' function. */ -+ #undef HAVE_LOCALECONV -+ - /* Define if your system has a working `malloc' function. */ - /* #undef HAVE_MALLOC */ -*** ../bash-3.2.11/builtins/printf.def Mon Nov 13 08:58:52 2006 ---- builtins/printf.def Sun Feb 4 13:58:59 2007 -*************** -*** 2,6 **** - It implements the builtin "printf" in Bash. - -! Copyright (C) 1997-2005 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 2,6 ---- - It implements the builtin "printf" in Bash. - -! Copyright (C) 1997-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 71,74 **** ---- 71,78 ---- - #include "common.h" - -+ #if defined (PRI_MACROS_BROKEN) -+ # undef PRIdMAX -+ #endif -+ - #if !defined (PRIdMAX) - # if HAVE_LONG_LONG -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-013 b/src/patches/bash/bash32-013 deleted file mode 100644 index d47bc1a5f..000000000 --- a/src/patches/bash/bash32-013 +++ /dev/null @@ -1,65 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-013 - -Bug-Reported-by: Magnus Svensson -Bug-Reference-ID: <45BDC44D.80609@mysql.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-01/msg00002.html - -Bug-Description: - -Readline neglects to reallocate the array it uses to keep track of wrapped -screen lines when increasing its size. This will eventually result in -segmentation faults when given sufficiently long input. - -Patch: - -*** ../bash-3.2-patched/lib/readline/display.c Thu Sep 14 14:20:12 2006 ---- lib/readline/display.c Fri Feb 2 20:23:17 2007 -*************** -*** 561,574 **** ---- 561,586 ---- - wrap_offset = prompt_invis_chars_first_line = 0; - } - -+ #if defined (HANDLE_MULTIBYTE) - #define CHECK_INV_LBREAKS() \ - do { \ - if (newlines >= (inv_lbsize - 2)) \ - { \ - inv_lbsize *= 2; \ - inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ -+ _rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \ - } \ - } while (0) -+ #else -+ #define CHECK_INV_LBREAKS() \ -+ do { \ -+ if (newlines >= (inv_lbsize - 2)) \ -+ { \ -+ inv_lbsize *= 2; \ -+ inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ -+ } \ -+ } while (0) -+ #endif /* HANDLE_MULTIBYTE */ - - #if defined (HANDLE_MULTIBYTE) - #define CHECK_LPOS() \ - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-014 b/src/patches/bash/bash32-014 deleted file mode 100644 index b706505b7..000000000 --- a/src/patches/bash/bash32-014 +++ /dev/null @@ -1,307 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-014 - -Bug-Reported-by: Brett Stahlman -Bug-Reference-ID: <000701c72d29$a227e0e0$5ec7cf47@computerroom> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-12/msg00065.html - -Bug-Description: - -Bash mishandles word splitting under certain circumstances when IFS is -null (IFS=). Constructs affected include ${param/pat/sub} and others -when expanding arrays (array[@]). - -Patch: - -*** ../bash-3.2-patched/array.c Wed Jun 1 16:39:22 2005 ---- array.c Mon Jan 15 22:58:00 2007 -*************** -*** 121,125 **** - } - -- #ifdef INCLUDE_UNUSED - /* - * Make and return a new array composed of the elements in array A from ---- 121,124 ---- -*************** -*** 142,146 **** - n = array_create_element (element_index(p), element_value(p)); - ADD_BEFORE(a->head, n); -! mi = element_index(ae); - } - a->num_elements = i; ---- 141,145 ---- - n = array_create_element (element_index(p), element_value(p)); - ADD_BEFORE(a->head, n); -! mi = element_index(n); - } - a->num_elements = i; -*************** -*** 148,152 **** - return a; - } -- #endif - - /* ---- 147,150 ---- -*************** -*** 301,304 **** ---- 299,319 ---- - } - -+ ARRAY * -+ array_quote_escapes(array) -+ ARRAY *array; -+ { -+ ARRAY_ELEMENT *a; -+ char *t; -+ -+ if (array == 0 || array_head(array) == 0 || array_empty(array)) -+ return (ARRAY *)NULL; -+ for (a = element_forw(array->head); a != array->head; a = element_forw(a)) { -+ t = quote_escapes (a->value); -+ FREE(a->value); -+ a->value = t; -+ } -+ return array; -+ } -+ - /* - * Return a string whose elements are the members of array A beginning at -*************** -*** 312,318 **** - int starsub, quoted; - { - ARRAY_ELEMENT *h, *p; - arrayind_t i; -! char *ifs, sep[2]; - - p = a ? array_head (a) : 0; ---- 327,334 ---- - int starsub, quoted; - { -+ ARRAY *a2; - ARRAY_ELEMENT *h, *p; - arrayind_t i; -! char *ifs, sep[2], *t; - - p = a ? array_head (a) : 0; -*************** -*** 337,340 **** ---- 353,363 ---- - ; - -+ a2 = array_slice(a, h, p); -+ -+ if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) -+ array_quote(a2); -+ else -+ array_quote_escapes(a2); -+ - if (starsub && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))) { - ifs = getifs(); -*************** -*** 344,348 **** - sep[1] = '\0'; - -! return (array_to_string_internal (h, p, sep, quoted)); - } - ---- 367,374 ---- - sep[1] = '\0'; - -! t = array_to_string (a2, sep, 0); -! array_dispose(a2); -! -! return t; - } - -*************** -*** 368,372 **** - - if (mflags & MATCH_QUOTED) -! array_quote (a2); - if (mflags & MATCH_STARSUB) { - ifs = getifs(); ---- 394,400 ---- - - if (mflags & MATCH_QUOTED) -! array_quote(a2); -! else -! array_quote_escapes(a2); - if (mflags & MATCH_STARSUB) { - ifs = getifs(); -*** ../bash-3.2-patched/array.h Sun Jun 1 15:50:30 2003 ---- array.h Mon Jan 15 22:35:35 2007 -*************** -*** 56,59 **** ---- 56,60 ---- - extern int array_shift_element __P((ARRAY *, char *)); - extern ARRAY *array_quote __P((ARRAY *)); -+ extern ARRAY *array_quote_escapes __P((ARRAY *)); - - extern char *array_subrange __P((ARRAY *, arrayind_t, arrayind_t, int, int)); -*** ../bash-3.2-patched/subst.c Fri Mar 2 16:20:50 2007 ---- subst.c Tue Mar 6 11:40:55 2007 -*************** -*** 1888,1892 **** ---- 1889,1899 ---- - #endif - -+ /* XXX -- why call quote_list if ifs == 0? we can get away without doing -+ it now that quote_escapes quotes spaces */ -+ #if 0 - tlist = ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || (ifs && *ifs == 0)) -+ #else -+ tlist = (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) -+ #endif - ? quote_list (list) - : list_quote_escapes (list); -*************** -*** 2922,2926 **** - /* Quote escape characters in string s, but no other characters. This is - used to protect CTLESC and CTLNUL in variable values from the rest of -! the word expansion process after the variable is expanded. */ - char * - quote_escapes (string) ---- 2935,2944 ---- - /* Quote escape characters in string s, but no other characters. This is - used to protect CTLESC and CTLNUL in variable values from the rest of -! the word expansion process after the variable is expanded. If IFS is -! null, we quote spaces as well, just in case we split on spaces later -! (in the case of unquoted $@, we will eventually attempt to split the -! entire word on spaces). Corresponding code exists in dequote_escapes. -! Even if we don't end up splitting on spaces, quoting spaces is not a -! problem. */ - char * - quote_escapes (string) -*************** -*** 2930,2933 **** ---- 2948,2952 ---- - size_t slen; - char *result, *send; -+ int quote_spaces; - DECLARE_MBSTATE; - -*************** -*** 2935,2938 **** ---- 2954,2958 ---- - send = string + slen; - -+ quote_spaces = (ifs_value && *ifs_value == 0); - t = result = (char *)xmalloc ((slen * 2) + 1); - s = string; -*************** -*** 2940,2944 **** - while (*s) - { -! if (*s == CTLESC || *s == CTLNUL) - *t++ = CTLESC; - COPY_CHAR_P (t, s, send); ---- 2960,2964 ---- - while (*s) - { -! if (*s == CTLESC || *s == CTLNUL || (quote_spaces && *s == ' ')) - *t++ = CTLESC; - COPY_CHAR_P (t, s, send); -*************** -*** 2982,2985 **** ---- 3002,3006 ---- - size_t slen; - char *result, *send; -+ int quote_spaces; - DECLARE_MBSTATE; - -*************** -*** 2996,3002 **** - return (strcpy (result, s)); - - while (*s) - { -! if (*s == CTLESC && (s[1] == CTLESC || s[1] == CTLNUL)) - { - s++; ---- 3017,3024 ---- - return (strcpy (result, s)); - -+ quote_spaces = (ifs_value && *ifs_value == 0); - while (*s) - { -! if (*s == CTLESC && (s[1] == CTLESC || s[1] == CTLNUL || (quote_spaces && s[1] == ' '))) - { - s++; -*************** -*** 4462,4466 **** - RESIZE_MALLOCED_BUFFER (istring, istring_index, 2, istring_size, DEFAULT_ARRAY_SIZE); - -! if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || c == CTLESC || c == CTLNUL) - istring[istring_index++] = CTLESC; - ---- 4498,4510 ---- - RESIZE_MALLOCED_BUFFER (istring, istring_index, 2, istring_size, DEFAULT_ARRAY_SIZE); - -! /* This is essentially quote_string inline */ -! if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) /* || c == CTLESC || c == CTLNUL */) -! istring[istring_index++] = CTLESC; -! /* Escape CTLESC and CTLNUL in the output to protect those characters -! from the rest of the word expansions (word splitting and globbing.) -! This is essentially quote_escapes inline. */ -! else if (c == CTLESC) -! istring[istring_index++] = CTLESC; -! else if (c == CTLNUL || (c == ' ' && (ifs_value && *ifs_value == 0))) - istring[istring_index++] = CTLESC; - -*************** -*** 5552,5555 **** ---- 5610,5616 ---- - rely on array_subrange to understand how to deal with them). */ - tt = array_subrange (array_cell (v), e1, e2, starsub, quoted); -+ #if 0 -+ /* array_subrange now calls array_quote_escapes as appropriate, so the -+ caller no longer needs to. */ - if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) == 0) - { -*************** -*** 5558,5561 **** ---- 5619,5623 ---- - } - else -+ #endif - temp = tt; - break; -*************** -*** 5808,5811 **** ---- 5870,5876 ---- - case VT_ARRAYVAR: - temp = array_patsub (array_cell (v), p, rep, mflags); -+ #if 0 -+ /* Don't need to do this anymore; array_patsub calls array_quote_escapes -+ as appropriate before adding the space separators. */ - if (temp && (mflags & MATCH_QUOTED) == 0) - { -*************** -*** 5814,5817 **** ---- 5879,5883 ---- - temp = tt; - } -+ #endif - break; - #endif -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-015 b/src/patches/bash/bash32-015 deleted file mode 100644 index d887f6e56..000000000 --- a/src/patches/bash/bash32-015 +++ /dev/null @@ -1,95 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-015 - -Bug-Reported-by: -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -Under certain circumstances, when using FIFOs for process substitution, -bash fails to unlink the FIFOs. This leaves open file descriptors that -can cause the shell to hang and litters the file system. - -Patch: - -*** ../bash-3.2-patched/execute_cmd.c Fri Mar 2 16:20:50 2007 ---- execute_cmd.c Wed Jan 31 23:12:06 2007 -*************** -*** 3051,3054 **** ---- 3051,3059 ---- - command_line = savestring (the_printed_command_except_trap); - -+ #if defined (PROCESS_SUBSTITUTION) -+ if ((subshell_environment & SUBSHELL_COMSUB) && (simple_command->flags & CMD_NO_FORK) && fifos_pending() > 0) -+ simple_command->flags &= ~CMD_NO_FORK; -+ #endif -+ - execute_disk_command (words, simple_command->redirects, command_line, - pipe_in, pipe_out, async, fds_to_close, -*** ../bash-3.2-patched/subst.c Fri Mar 2 16:20:50 2007 ---- subst.c Tue Mar 6 11:40:55 2007 -*************** -*** 4129,4132 **** ---- 4151,4160 ---- - } - -+ int -+ fifos_pending () -+ { -+ return nfifo; -+ } -+ - static char * - make_named_pipe () -*************** -*** 4178,4181 **** ---- 4206,4215 ---- - } - -+ int -+ fifos_pending () -+ { -+ return 0; /* used for cleanup; not needed with /dev/fd */ -+ } -+ - void - unlink_fifo_list () -*************** -*** 4671,4674 **** ---- 4719,4725 ---- - last_command_exit_value = rc; - rc = run_exit_trap (); -+ #if defined (PROCESS_SUBSTITUTION) -+ unlink_fifo_list (); -+ #endif - exit (rc); - } -*** ../bash-3.2-patched/subst.h Tue Sep 19 08:34:41 2006 ---- subst.h Wed Jan 10 09:46:47 2007 -*************** -*** 223,226 **** ---- 223,227 ---- - extern char *pat_subst __P((char *, char *, char *, int)); - -+ extern int fifos_pending __P((void)); - extern void unlink_fifo_list __P((void)); - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-016 b/src/patches/bash/bash32-016 deleted file mode 100644 index a0f065ad3..000000000 --- a/src/patches/bash/bash32-016 +++ /dev/null @@ -1,52 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-016 - -Bug-Reported-by: Peter Volkov -Bug-Reference-ID: <1171795523.8021.18.camel@localhost> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-02/msg00054.html - -Bug-Description: - -When moving the cursor, bash sometimes misplaces the cursor when the prompt -contains two or more multibyte characters. The particular circumstance that -uncovered the problem was having the (multibyte) current directory name in -the prompt string. - -Patch: - -*** ../bash-3.2/lib/readline/display.c Fri Jan 19 13:34:50 2007 ---- lib/readline/display.c Sat Mar 10 17:25:44 2007 -*************** -*** 1745,1749 **** - { - dpos = _rl_col_width (data, 0, new); -! if (dpos > prompt_last_invisible) /* XXX - don't use woff here */ - { - dpos -= woff; ---- 1745,1752 ---- - { - dpos = _rl_col_width (data, 0, new); -! /* Use NEW when comparing against the last invisible character in the -! prompt string, since they're both buffer indices and DPOS is a -! desired display position. */ -! if (new > prompt_last_invisible) /* XXX - don't use woff here */ - { - dpos -= woff; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-017 b/src/patches/bash/bash32-017 deleted file mode 100644 index 99e5e70d2..000000000 --- a/src/patches/bash/bash32-017 +++ /dev/null @@ -1,85 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-017 - -Bug-Reported-by: Peter Volkov -Bug-Reference-ID: <1173636022.7039.36.camel@localhost> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00039.html - -Bug-Description: - -When restoring the original prompt after finishing an incremental search, -bash sometimes places the cursor incorrectly if the primary prompt contains -invisible characters. - -Patch: - -*** ../bash-3.2.16/lib/readline/display.c Fri Apr 20 13:30:16 2007 ---- lib/readline/display.c Fri Apr 20 15:17:01 2007 -*************** -*** 1599,1604 **** - if (temp > 0) - { - _rl_output_some_chars (nfd, temp); -! _rl_last_c_pos += _rl_col_width (nfd, 0, temp);; - } - } ---- 1599,1618 ---- - if (temp > 0) - { -+ /* If nfd begins at the prompt, or before the invisible -+ characters in the prompt, we need to adjust _rl_last_c_pos -+ in a multibyte locale to account for the wrap offset and -+ set cpos_adjusted accordingly. */ - _rl_output_some_chars (nfd, temp); -! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -! { -! _rl_last_c_pos += _rl_col_width (nfd, 0, temp); -! if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) -! { -! _rl_last_c_pos -= wrap_offset; -! cpos_adjusted = 1; -! } -! } -! else -! _rl_last_c_pos += temp; - } - } -*************** -*** 1608,1613 **** ---- 1622,1639 ---- - if (temp > 0) - { -+ /* If nfd begins at the prompt, or before the invisible -+ characters in the prompt, we need to adjust _rl_last_c_pos -+ in a multibyte locale to account for the wrap offset and -+ set cpos_adjusted accordingly. */ - _rl_output_some_chars (nfd, temp); - _rl_last_c_pos += col_temp; /* XXX */ -+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -+ { -+ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) -+ { -+ _rl_last_c_pos -= wrap_offset; -+ cpos_adjusted = 1; -+ } -+ } - } - lendiff = (oe - old) - (ne - new); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-018 b/src/patches/bash/bash32-018 deleted file mode 100644 index d729aaf5e..000000000 --- a/src/patches/bash/bash32-018 +++ /dev/null @@ -1,98 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-018 - -Bug-Reported-by: osicka@post.cz -Bug-Reference-ID: <228.177-19682-1132061412-1179356692@post.cz> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-05/msg00061.html - -Bug-Description: - -In certain cases, bash can lose the saved status of a background job, though -it should still be reported by `wait'. Bash can also loop infinitely after -creating and waiting for 4096 jobs. - -Patch: - -*** ../bash-20070510/jobs.c Thu Mar 8 16:05:50 2007 ---- jobs.c Fri May 18 11:40:14 2007 -*************** -*** 784,792 **** - { - old = js.j_firstj++; - while (js.j_firstj != old) - { - if (js.j_firstj >= js.j_jobslots) - js.j_firstj = 0; -! if (jobs[js.j_firstj]) - break; - js.j_firstj++; ---- 784,794 ---- - { - old = js.j_firstj++; -+ if (old >= js.j_jobslots) -+ old = js.j_jobslots - 1; - while (js.j_firstj != old) - { - if (js.j_firstj >= js.j_jobslots) - js.j_firstj = 0; -! if (jobs[js.j_firstj] || js.j_firstj == old) /* needed if old == 0 */ - break; - js.j_firstj++; -*************** -*** 798,806 **** - { - old = js.j_lastj--; - while (js.j_lastj != old) - { - if (js.j_lastj < 0) - js.j_lastj = js.j_jobslots - 1; -! if (jobs[js.j_lastj]) - break; - js.j_lastj--; ---- 800,810 ---- - { - old = js.j_lastj--; -+ if (old < 0) -+ old = 0; - while (js.j_lastj != old) - { - if (js.j_lastj < 0) - js.j_lastj = js.j_jobslots - 1; -! if (jobs[js.j_lastj] || js.j_lastj == old) /* needed if old == js.j_jobslots */ - break; - js.j_lastj--; -*************** -*** 964,968 **** - realloc_jobs_list (); - -! return (js.j_lastj); - } - ---- 975,983 ---- - realloc_jobs_list (); - -! #ifdef DEBUG -! itrace("compact_jobs_list: returning %d", (js.j_lastj || jobs[js.j_lastj]) ? js.j_lastj + 1 : 0); -! #endif -! -! return ((js.j_lastj || jobs[js.j_lastj]) ? js.j_lastj + 1 : 0); - } - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-019 b/src/patches/bash/bash32-019 deleted file mode 100644 index 647bd1fa3..000000000 --- a/src/patches/bash/bash32-019 +++ /dev/null @@ -1,343 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-019 - -Bug-Reported-by: Thomas Loeber -Bug-Reference-ID: <200703082223.08919.ifp@loeber1.de> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00036.html - -Bug-Description: - -When rl_read_key returns -1, indicating that bash's controlling terminal -has been invalidated for some reason (e.g., receiving a SIGHUP), the error -status was not reported correctly to the caller. This could cause input -loops. - -Patch: - -*** ../bash-3.2-patched/lib/readline/complete.c Fri Jul 28 11:35:49 2006 ---- lib/readline/complete.c Tue Mar 13 08:50:16 2007 -*************** -*** 429,433 **** - if (c == 'n' || c == 'N' || c == RUBOUT) - return (0); -! if (c == ABORT_CHAR) - _rl_abort_internal (); - if (for_pager && (c == NEWLINE || c == RETURN)) ---- 440,444 ---- - if (c == 'n' || c == 'N' || c == RUBOUT) - return (0); -! if (c == ABORT_CHAR || c < 0) - _rl_abort_internal (); - if (for_pager && (c == NEWLINE || c == RETURN)) -*** ../bash-3.2-patched/lib/readline/input.c Wed Aug 16 15:15:16 2006 ---- lib/readline/input.c Wed May 2 16:07:59 2007 -*************** -*** 514,518 **** - int size; - { -! int mb_len = 0; - size_t mbchar_bytes_length; - wchar_t wc; ---- 522,526 ---- - int size; - { -! int mb_len, c; - size_t mbchar_bytes_length; - wchar_t wc; -*************** -*** 521,531 **** - memset(&ps, 0, sizeof (mbstate_t)); - memset(&ps_back, 0, sizeof (mbstate_t)); -! - while (mb_len < size) - { - RL_SETSTATE(RL_STATE_MOREINPUT); -! mbchar[mb_len++] = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - - mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps); - if (mbchar_bytes_length == (size_t)(-1)) ---- 529,545 ---- - memset(&ps, 0, sizeof (mbstate_t)); - memset(&ps_back, 0, sizeof (mbstate_t)); -! -! mb_len = 0; - while (mb_len < size) - { - RL_SETSTATE(RL_STATE_MOREINPUT); -! c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -+ if (c < 0) -+ break; -+ -+ mbchar[mb_len++] = c; -+ - mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps); - if (mbchar_bytes_length == (size_t)(-1)) -*************** -*** 565,569 **** - c = first; - memset (mb, 0, mlen); -! for (i = 0; i < mlen; i++) - { - mb[i] = (char)c; ---- 579,583 ---- - c = first; - memset (mb, 0, mlen); -! for (i = 0; c >= 0 && i < mlen; i++) - { - mb[i] = (char)c; -*** ../bash-3.2-patched/lib/readline/isearch.c Mon Dec 26 17:18:53 2005 ---- lib/readline/isearch.c Fri Mar 9 14:30:59 2007 -*************** -*** 328,333 **** - - f = (rl_command_func_t *)NULL; -! -! /* Translate the keys we do something with to opcodes. */ - if (c >= 0 && _rl_keymap[c].type == ISFUNC) - { ---- 328,340 ---- - - f = (rl_command_func_t *)NULL; -! -! if (c < 0) -! { -! cxt->sflags |= SF_FAILED; -! cxt->history_pos = cxt->last_found_line; -! return -1; -! } -! -! /* Translate the keys we do something with to opcodes. */ - if (c >= 0 && _rl_keymap[c].type == ISFUNC) - { -*** ../bash-3.2-patched/lib/readline/misc.c Mon Dec 26 17:20:46 2005 ---- lib/readline/misc.c Fri Mar 9 14:44:11 2007 -*************** -*** 147,150 **** ---- 147,152 ---- - rl_clear_message (); - RL_UNSETSTATE(RL_STATE_NUMERICARG); -+ if (key < 0) -+ return -1; - return (_rl_dispatch (key, _rl_keymap)); - } -*** ../bash-3.2-patched/lib/readline/readline.c Wed Aug 16 15:00:36 2006 ---- lib/readline/readline.c Fri Mar 9 14:47:24 2007 -*************** -*** 646,649 **** ---- 669,677 ---- - { - nkey = _rl_subseq_getchar (cxt->okey); -+ if (nkey < 0) -+ { -+ _rl_abort_internal (); -+ return -1; -+ } - r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg); - cxt->flags |= KSEQ_DISPATCHED; -*** ../bash-3.2-patched/lib/readline/text.c Fri Jul 28 11:55:27 2006 ---- lib/readline/text.c Sun Mar 25 13:41:38 2007 -*************** -*** 858,861 **** ---- 864,870 ---- - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -+ if (c < 0) -+ return -1; -+ - #if defined (HANDLE_SIGNALS) - if (RL_ISSTATE (RL_STATE_CALLBACK) == 0) -*************** -*** 1521,1524 **** ---- 1530,1536 ---- - mb_len = _rl_read_mbchar (mbchar, MB_LEN_MAX); - -+ if (mb_len <= 0) -+ return -1; -+ - if (count < 0) - return (_rl_char_search_internal (-count, bdir, mbchar, mb_len)); -*************** -*** 1537,1540 **** ---- 1549,1555 ---- - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -+ if (c < 0) -+ return -1; -+ - if (count < 0) - return (_rl_char_search_internal (-count, bdir, c)); -*** ../bash-3.2-patched/lib/readline/vi_mode.c Sat Jul 29 16:42:28 2006 ---- lib/readline/vi_mode.c Fri Mar 9 15:02:11 2007 -*************** -*** 887,890 **** ---- 887,897 ---- - c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); -+ -+ if (c < 0) -+ { -+ *nextkey = 0; -+ return -1; -+ } -+ - *nextkey = c; - -*************** -*** 903,906 **** ---- 910,918 ---- - c = rl_read_key (); /* real command */ - RL_UNSETSTATE(RL_STATE_MOREINPUT); -+ if (c < 0) -+ { -+ *nextkey = 0; -+ return -1; -+ } - *nextkey = c; - } -*************** -*** 1225,1236 **** - _rl_callback_generic_arg *data; - { - #if defined (HANDLE_MULTIBYTE) -! _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); - #else - RL_SETSTATE(RL_STATE_MOREINPUT); -! _rl_vi_last_search_char = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - #endif - - _rl_callback_func = 0; - _rl_want_redisplay = 1; ---- 1243,1262 ---- - _rl_callback_generic_arg *data; - { -+ int c; - #if defined (HANDLE_MULTIBYTE) -! c = _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); - #else - RL_SETSTATE(RL_STATE_MOREINPUT); -! c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - #endif - -+ if (c <= 0) -+ return -1; -+ -+ #if !defined (HANDLE_MULTIBYTE) -+ _rl_vi_last_search_char = c; -+ #endif -+ - _rl_callback_func = 0; - _rl_want_redisplay = 1; -*************** -*** 1248,1251 **** ---- 1274,1278 ---- - int count, key; - { -+ int c; - #if defined (HANDLE_MULTIBYTE) - static char *target; -*************** -*** 1294,1302 **** - { - #if defined (HANDLE_MULTIBYTE) -! _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); - #else - RL_SETSTATE(RL_STATE_MOREINPUT); -! _rl_vi_last_search_char = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - #endif - } ---- 1321,1335 ---- - { - #if defined (HANDLE_MULTIBYTE) -! c = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); -! if (c <= 0) -! return -1; -! _rl_vi_last_search_mblen = c; - #else - RL_SETSTATE(RL_STATE_MOREINPUT); -! c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); -+ if (c < 0) -+ return -1; -+ _rl_vi_last_search_char = c; - #endif - } -*************** -*** 1468,1471 **** ---- 1501,1507 ---- - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -+ if (c < 0) -+ return -1; -+ - #if defined (HANDLE_MULTIBYTE) - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -*************** -*** 1486,1489 **** ---- 1522,1528 ---- - _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); - -+ if (c < 0) -+ return -1; -+ - _rl_callback_func = 0; - _rl_want_redisplay = 1; -*************** -*** 1517,1520 **** ---- 1556,1562 ---- - _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); - -+ if (c < 0) -+ return -1; -+ - return (_rl_vi_change_char (count, c, mb)); - } -*************** -*** 1651,1655 **** - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -! if (ch < 'a' || ch > 'z') - { - rl_ding (); ---- 1693,1697 ---- - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -! if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ - { - rl_ding (); -*************** -*** 1703,1707 **** - return 0; - } -! else if (ch < 'a' || ch > 'z') - { - rl_ding (); ---- 1745,1749 ---- - return 0; - } -! else if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ - { - rl_ding (); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-020 b/src/patches/bash/bash32-020 deleted file mode 100644 index 8c7e32890..000000000 --- a/src/patches/bash/bash32-020 +++ /dev/null @@ -1,183 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-020 - -Bug-Reported-by: Ian A Watson -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -In some cases of error processing, a jump back to the top-level processing -loop from a builtin command would leave the shell in an inconsistent state. - -Patch: - -*** ../bash-3.2-patched/sig.c Wed Jan 25 14:57:59 2006 ---- sig.c Sat Mar 10 11:11:30 2007 -*************** -*** 351,354 **** ---- 351,373 ---- - #undef XHANDLER - -+ /* Run some of the cleanups that should be performed when we run -+ jump_to_top_level from a builtin command context. XXX - might want to -+ also call reset_parser here. */ -+ void -+ top_level_cleanup () -+ { -+ /* Clean up string parser environment. */ -+ while (parse_and_execute_level) -+ parse_and_execute_cleanup (); -+ -+ #if defined (PROCESS_SUBSTITUTION) -+ unlink_fifo_list (); -+ #endif /* PROCESS_SUBSTITUTION */ -+ -+ run_unwind_protects (); -+ loop_level = continuing = breaking = 0; -+ return_catch_flag = 0; -+ } -+ - /* What to do when we've been interrupted, and it is safe to handle it. */ - void -*** ../bash-3.2-patched/sig.h Wed Jan 25 14:50:27 2006 ---- sig.h Sat Mar 10 11:14:18 2007 -*************** -*** 122,125 **** ---- 122,126 ---- - extern void initialize_terminating_signals __P((void)); - extern void reset_terminating_signals __P((void)); -+ extern void top_level_cleanup __P((void)); - extern void throw_to_top_level __P((void)); - extern void jump_to_top_level __P((int)) __attribute__((__noreturn__)); -*** ../bash-3.2-patched/builtins/common.c Tue Apr 3 16:47:13 2007 ---- builtins/common.c Mon Apr 30 15:01:33 2007 -*************** -*** 132,135 **** ---- 132,136 ---- - { - builtin_error (_("too many arguments")); -+ top_level_cleanup (); - jump_to_top_level (DISCARD); - } -*************** -*** 396,400 **** - throw_to_top_level (); - else -! jump_to_top_level (DISCARD); - } - no_args (list->next); ---- 410,417 ---- - throw_to_top_level (); - else -! { -! top_level_cleanup (); -! jump_to_top_level (DISCARD); -! } - } - no_args (list->next); -*** ../bash-3.2-patched/subst.c Tue Apr 3 16:47:19 2007 ---- subst.c Tue Jul 17 09:45:11 2007 -*************** -*** 1279,1283 **** - if (no_longjmp_on_fatal_error == 0) - { /* { */ -! report_error ("bad substitution: no closing `%s' in %s", "}", string); - last_command_exit_value = EXECUTION_FAILURE; - exp_jump_to_top_level (DISCARD); ---- 1290,1294 ---- - if (no_longjmp_on_fatal_error == 0) - { /* { */ -! report_error (_("bad substitution: no closing `%s' in %s"), "}", string); - last_command_exit_value = EXECUTION_FAILURE; - exp_jump_to_top_level (DISCARD); -*************** -*** 7662,7665 **** ---- 7706,7711 ---- - expand_no_split_dollar_star = 0; /* XXX */ - expanding_redir = 0; -+ -+ top_level_cleanup (); /* from sig.c */ - - jump_to_top_level (v); -*************** -*** 7880,7884 **** - { - report_error (_("no match: %s"), tlist->word->word); -! jump_to_top_level (DISCARD); - } - else if (allow_null_glob_expansion == 0) ---- 7927,7931 ---- - { - report_error (_("no match: %s"), tlist->word->word); -! exp_jump_to_top_level (DISCARD); - } - else if (allow_null_glob_expansion == 0) -*** ../bash-3.2-patched/arrayfunc.c Thu Jul 27 09:37:59 2006 ---- arrayfunc.c Thu May 31 11:55:46 2007 -*************** -*** 619,622 **** ---- 619,624 ---- - { - last_command_exit_value = EXECUTION_FAILURE; -+ -+ top_level_cleanup (); - jump_to_top_level (DISCARD); - } -*** ../bash-3.2-patched/expr.c Wed Dec 28 17:47:03 2005 ---- expr.c Tue Apr 24 14:17:59 2007 -*************** -*** 930,933 **** ---- 930,934 ---- - { - expr_unwind (); -+ top_level_cleanup (); - jump_to_top_level (DISCARD); - } -*** ../bash-3.2-patched/variables.c Fri Sep 8 13:33:32 2006 ---- variables.c Tue Jul 17 09:54:59 2007 -*************** -*** 1822,1830 **** - lval = evalexp (oval, &expok); /* ksh93 seems to do this */ - if (expok == 0) -! jump_to_top_level (DISCARD); - } - rval = evalexp (value, &expok); - if (expok == 0) -! jump_to_top_level (DISCARD); - if (flags & ASS_APPEND) - rval += lval; ---- 1855,1869 ---- - lval = evalexp (oval, &expok); /* ksh93 seems to do this */ - if (expok == 0) -! { -! top_level_cleanup (); -! jump_to_top_level (DISCARD); -! } - } - rval = evalexp (value, &expok); - if (expok == 0) -! { -! top_level_cleanup (); -! jump_to_top_level (DISCARD); -! } - if (flags & ASS_APPEND) - rval += lval; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-021 b/src/patches/bash/bash32-021 deleted file mode 100644 index 003489c6b..000000000 --- a/src/patches/bash/bash32-021 +++ /dev/null @@ -1,72 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-021 - -Bug-Reported-by: BAGSHAW Paul RD-TECH-REN -Bug-Reference-ID: <941BA0BF46DB8F4983FF7C8AFE800BC205EA7D4B@ftrdmel3.rd.francetelecom.fr> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00065.html - -Bug-Description: - -When the parser read a backslash-escaped character that would be treated -internally as an escape, it would double the number of escape characters. - -Patch: - -*** ../bash-3.2-patched/parse.y Mon Oct 30 17:22:00 2006 ---- parse.y Sat Mar 24 17:13:20 2007 -*************** -*** 3377,3381 **** - { - pass_next_character = 0; -! goto got_character; - } - ---- 3377,3381 ---- - { - pass_next_character = 0; -! goto got_escaped_character; - } - -*************** -*** 3651,3660 **** - got_character: - -- all_digit_token &= DIGIT (character); -- dollar_present |= character == '$'; -- - if (character == CTLESC || character == CTLNUL) - token[token_index++] = CTLESC; - - token[token_index++] = character; - ---- 3651,3662 ---- - got_character: - - if (character == CTLESC || character == CTLNUL) - token[token_index++] = CTLESC; - -+ got_escaped_character: -+ -+ all_digit_token &= DIGIT (character); -+ dollar_present |= character == '$'; -+ - token[token_index++] = character; - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-022 b/src/patches/bash/bash32-022 deleted file mode 100644 index d3679e67f..000000000 --- a/src/patches/bash/bash32-022 +++ /dev/null @@ -1,126 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-022 - -Bug-Reported-by: Chet Ramey -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -POSIX specifies that the `read' builtin invoked from an interative shell -must prompt with $PS2 when a line is continued using a backslash while -reading from a terminal. - -Patch: - -*** ../bash-3.2-patched/builtins/read.def Tue Sep 19 08:45:48 2006 ---- builtins/read.def Thu May 24 16:03:30 2007 -*************** -*** 128,133 **** - { - register char *varname; -! int size, i, nr, pass_next, saw_escape, eof, opt, retval, code; -! int input_is_tty, input_is_pipe, unbuffered_read; - int raw, edit, nchars, silent, have_timeout, fd; - unsigned int tmout; ---- 131,136 ---- - { - register char *varname; -! int size, i, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2; -! int input_is_tty, input_is_pipe, unbuffered_read, skip_ctlesc, skip_ctlnul; - int raw, edit, nchars, silent, have_timeout, fd; - unsigned int tmout; -*************** -*** 135,139 **** - char c; - char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname; -! char *e, *t, *t1; - struct stat tsb; - SHELL_VAR *var; ---- 138,142 ---- - char c; - char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname; -! char *e, *t, *t1, *ps2; - struct stat tsb; - SHELL_VAR *var; -*************** -*** 149,152 **** ---- 152,156 ---- - USE_VAR(i); - USE_VAR(pass_next); -+ USE_VAR(print_ps2); - USE_VAR(saw_escape); - USE_VAR(input_is_pipe); -*************** -*** 164,167 **** ---- 168,172 ---- - #endif - USE_VAR(list); -+ USE_VAR(ps2); - - i = 0; /* Index into the string that we are reading. */ -*************** -*** 387,391 **** - #endif - -! for (eof = retval = 0;;) - { - #if defined (READLINE) ---- 394,399 ---- - #endif - -! ps2 = 0; -! for (print_ps2 = eof = retval = 0;;) - { - #if defined (READLINE) -*************** -*** 413,416 **** ---- 421,433 ---- - #endif - -+ if (print_ps2) -+ { -+ if (ps2 == 0) -+ ps2 = get_string_value ("PS2"); -+ fprintf (stderr, "%s", ps2 ? ps2 : ""); -+ fflush (stderr); -+ print_ps2 = 0; -+ } -+ - if (unbuffered_read) - retval = zread (fd, &c, 1); -*************** -*** 441,445 **** - pass_next = 0; - if (c == '\n') -! i--; /* back up over the CTLESC */ - else - goto add_char; ---- 458,466 ---- - pass_next = 0; - if (c == '\n') -! { -! i--; /* back up over the CTLESC */ -! if (interactive && input_is_tty && raw == 0) -! print_ps2 = 1; -! } - else - goto add_char; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-023 b/src/patches/bash/bash32-023 deleted file mode 100644 index 34a63947f..000000000 --- a/src/patches/bash/bash32-023 +++ /dev/null @@ -1,51 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-023 - -Bug-Reported-by: Chet Ramey -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -When an error occurs during the pattern removal word expansion, the shell -can free unallocated memory or free memory multiple times. - -Patch: - -*** ../bash-3.2-patched/subst.c Tue Apr 3 16:47:19 2007 ---- subst.c Tue Jul 17 09:45:11 2007 -*************** -*** 3975,3979 **** - patstr++; - -! pattern = getpattern (patstr, quoted, 1); - - temp1 = (char *)NULL; /* shut up gcc */ ---- 4008,4016 ---- - patstr++; - -! /* Need to pass getpattern newly-allocated memory in case of expansion -- -! the expansion code will free the passed string on an error. */ -! temp1 = savestring (patstr); -! pattern = getpattern (temp1, quoted, 1); -! free (temp1); - - temp1 = (char *)NULL; /* shut up gcc */ -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-024 b/src/patches/bash/bash32-024 deleted file mode 100644 index 1575f37a9..000000000 --- a/src/patches/bash/bash32-024 +++ /dev/null @@ -1,77 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-024 - -Bug-Reported-by: Peter Volkov -Bug-Reference-ID: <1178376645.9063.25.camel@localhost> -Bug-Reference-URL: http://bugs.gentoo.org/177095 - -Bug-Description: - -The readline display code miscalculated the screen position when performing -a redisplay in which the new text occupies more screen space that the old, -but takes fewer bytes to do so (e.g., when replacing a shorter string -containing multibyte characters with a longer one containing only ASCII). - -Patch: - -*** ../bash-3.2-patched/lib/readline/display.c Thu Apr 26 11:38:22 2007 ---- lib/readline/display.c Thu Jul 12 23:10:10 2007 -*************** -*** 1519,1527 **** - /* Non-zero if we're increasing the number of lines. */ - int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; - /* Sometimes it is cheaper to print the characters rather than - use the terminal's capabilities. If we're growing the number - of lines, make sure we actually cause the new line to wrap - around on auto-wrapping terminals. */ -! if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) - { - /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and ---- 1568,1596 ---- - /* Non-zero if we're increasing the number of lines. */ - int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; -+ /* If col_lendiff is > 0, implying that the new string takes up more -+ screen real estate than the old, but lendiff is < 0, meaning that it -+ takes fewer bytes, we need to just output the characters starting -+ from the first difference. These will overwrite what is on the -+ display, so there's no reason to do a smart update. This can really -+ only happen in a multibyte environment. */ -+ if (lendiff < 0) -+ { -+ _rl_output_some_chars (nfd, temp); -+ _rl_last_c_pos += _rl_col_width (nfd, 0, temp); -+ /* If nfd begins before any invisible characters in the prompt, -+ adjust _rl_last_c_pos to account for wrap_offset and set -+ cpos_adjusted to let the caller know. */ -+ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) -+ { -+ _rl_last_c_pos -= wrap_offset; -+ cpos_adjusted = 1; -+ } -+ return; -+ } - /* Sometimes it is cheaper to print the characters rather than - use the terminal's capabilities. If we're growing the number - of lines, make sure we actually cause the new line to wrap - around on auto-wrapping terminals. */ -! else if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) - { - /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-025 b/src/patches/bash/bash32-025 deleted file mode 100644 index 4d53d89d7..000000000 --- a/src/patches/bash/bash32-025 +++ /dev/null @@ -1,79 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-025 - -Bug-Reported-by: Tom Bjorkholm -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-04/msg00004.html - -Bug-Description: - -An off-by-one error in readline's input buffering caused readline to drop -each 511th character of buffered input (e.g., when pasting a large amount -of data into a terminal window). - -Patch: - -*** ../bash-3.2-patched/lib/readline/input.c Wed Aug 16 15:15:16 2006 ---- lib/readline/input.c Tue Jul 17 09:24:21 2007 -*************** -*** 134,139 **** - - *key = ibuffer[pop_index++]; -! - if (pop_index >= ibuffer_len) - pop_index = 0; - ---- 134,142 ---- - - *key = ibuffer[pop_index++]; -! #if 0 - if (pop_index >= ibuffer_len) -+ #else -+ if (pop_index > ibuffer_len) -+ #endif - pop_index = 0; - -*************** -*** 251,255 **** - { - k = (*rl_getc_function) (rl_instream); -! rl_stuff_char (k); - if (k == NEWLINE || k == RETURN) - break; ---- 254,259 ---- - { - k = (*rl_getc_function) (rl_instream); -! if (rl_stuff_char (k) == 0) -! break; /* some problem; no more room */ - if (k == NEWLINE || k == RETURN) - break; -*************** -*** 374,378 **** ---- 378,386 ---- - } - ibuffer[push_index++] = key; -+ #if 0 - if (push_index >= ibuffer_len) -+ #else -+ if (push_index > ibuffer_len) -+ #endif - push_index = 0; - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-026 b/src/patches/bash/bash32-026 deleted file mode 100644 index ba7de50a8..000000000 --- a/src/patches/bash/bash32-026 +++ /dev/null @@ -1,82 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-026 - -Bug-Reported-by: Chet Ramey -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -This keeps the Apple linker from attempting to link bash against Apple's -readline library "replacement" rather than the one shipped with bash. It -extends the configure workaround to Mac OS X Leopard (10.5). - -As a side effect, the patch updates the copyright date displayed in the -version string. - -You must re-run configure after applying the patch, and before rebuilding -bash. - -Patch: - -*** ../bash-3.2-patched/configure.in 2007-03-06 11:07:38.000000000 -0500 ---- configure.in 2007-11-23 15:37:41.000000000 -0500 -*************** -*** 519,523 **** - # dynamic version - case "${host_os}" in -! darwin8*) READLINE_LIB='${READLINE_LIBRARY}' ;; - *) READLINE_LIB=-lreadline ;; - esac ---- 519,523 ---- - # dynamic version - case "${host_os}" in -! darwin[[89]]*) READLINE_LIB='${READLINE_LIBRARY}' ;; - *) READLINE_LIB=-lreadline ;; - esac -*** ../bash-3.2-patched/configure 2007-03-24 14:51:22.000000000 -0400 ---- configure 2007-11-23 15:46:15.000000000 -0500 -*************** -*** 4872,4876 **** - # dynamic version - case "${host_os}" in -! darwin8*) READLINE_LIB='${READLINE_LIBRARY}' ;; - *) READLINE_LIB=-lreadline ;; - esac ---- 4872,4876 ---- - # dynamic version - case "${host_os}" in -! darwin[89]*) READLINE_LIB='${READLINE_LIBRARY}' ;; - *) READLINE_LIB=-lreadline ;; - esac -*** ../bash-3.2-patched/version.c 2005-05-16 11:58:34.000000000 -0400 ---- version.c 2007-11-23 16:03:40.000000000 -0500 -*************** -*** 80,83 **** - printf ("GNU bash, version %s (%s)\n", shell_version_string (), MACHTYPE); - if (extended) -! printf (_("Copyright (C) 2005 Free Software Foundation, Inc.\n")); - } ---- 80,83 ---- - printf ("GNU bash, version %s (%s)\n", shell_version_string (), MACHTYPE); - if (extended) -! printf (_("Copyright (C) 2007 Free Software Foundation, Inc.\n")); - } -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-027 b/src/patches/bash/bash32-027 deleted file mode 100644 index 5e110cb96..000000000 --- a/src/patches/bash/bash32-027 +++ /dev/null @@ -1,85 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-027 - -Bug-Reported-by: dAniel hAhler -Bug-Reference-ID: <4702ED8A.5000503@thequod.de> -Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/119938 - -Bug-Description: - -When updating the display after displaying, for instance, a list of possible -completions, readline will place the cursor at the wrong position if the -prompt contains invisible characters and a newline. - -Patch: - -*** ../bash-3.2.25/lib/readline/display.c Mon Aug 6 14:26:29 2007 ---- lib/readline/display.c Wed Oct 10 22:43:58 2007 -*************** -*** 1049,1053 **** - else - tx = nleft; -! if (_rl_last_c_pos > tx) - { - _rl_backspace (_rl_last_c_pos - tx); /* XXX */ ---- 1049,1053 ---- - else - tx = nleft; -! if (tx >= 0 && _rl_last_c_pos > tx) - { - _rl_backspace (_rl_last_c_pos - tx); /* XXX */ -*************** -*** 1205,1209 **** - { - register char *ofd, *ols, *oe, *nfd, *nls, *ne; -! int temp, lendiff, wsatend, od, nd; - int current_invis_chars; - int col_lendiff, col_temp; ---- 1205,1209 ---- - { - register char *ofd, *ols, *oe, *nfd, *nls, *ne; -! int temp, lendiff, wsatend, od, nd, o_cpos; - int current_invis_chars; - int col_lendiff, col_temp; -*************** -*** 1466,1469 **** ---- 1466,1471 ---- - } - -+ o_cpos = _rl_last_c_pos; -+ - /* When this function returns, _rl_last_c_pos is correct, and an absolute - cursor postion in multibyte mode, but a buffer index when not in a -*************** -*** 1475,1479 **** - invisible characters in the prompt string. Let's see if setting this when - we make sure we're at the end of the drawn prompt string works. */ -! if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && _rl_last_c_pos == prompt_physical_chars) - cpos_adjusted = 1; - #endif ---- 1477,1483 ---- - invisible characters in the prompt string. Let's see if setting this when - we make sure we're at the end of the drawn prompt string works. */ -! if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && -! (_rl_last_c_pos > 0 || o_cpos > 0) && -! _rl_last_c_pos == prompt_physical_chars) - cpos_adjusted = 1; - #endif -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-028 b/src/patches/bash/bash32-028 deleted file mode 100644 index e8182948d..000000000 --- a/src/patches/bash/bash32-028 +++ /dev/null @@ -1,60 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-028 - -Bug-Reported-by: dAniel hAhler -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -Under some circumstances, readline will incorrectly display a prompt string -containing invisible characters after the final newline. - -Patch: - -*** ../bash-3.2-patched/lib/readline/display.c 2007-08-25 13:47:08.000000000 -0400 ---- lib/readline/display.c 2007-11-10 17:51:29.000000000 -0500 -*************** -*** 392,396 **** - local_prompt = expand_prompt (p, &prompt_visible_length, - &prompt_last_invisible, -! (int *)NULL, - &prompt_physical_chars); - c = *t; *t = '\0'; ---- 420,424 ---- - local_prompt = expand_prompt (p, &prompt_visible_length, - &prompt_last_invisible, -! &prompt_invis_chars_first_line, - &prompt_physical_chars); - c = *t; *t = '\0'; -*************** -*** 399,403 **** - local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length, - (int *)NULL, -! &prompt_invis_chars_first_line, - (int *)NULL); - *t = c; ---- 427,431 ---- - local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length, - (int *)NULL, -! (int *)NULL, - (int *)NULL); - *t = c; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-029 b/src/patches/bash/bash32-029 deleted file mode 100644 index 9de208584..000000000 --- a/src/patches/bash/bash32-029 +++ /dev/null @@ -1,52 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-029 - -Bug-Reported-by: Tomas Janousek -Bug-Reference-ID: <20071102104034.GA26893@redhat.com> -Bug-Reference-URL: https://bugzilla.redhat.com/show_bug.cgi?id=286861 - -Bug-Description: - -When the bash arithmetic expression evaluator has temporarily turned off -evalation, such as when parsing a pre- or post-decrement or -increment -operator, and an error occurs, evaluation is not re-enabled. - -Patch: - -*** ../bash-3.2-patched/expr.c 2007-08-25 13:47:05.000000000 -0400 ---- expr.c 2007-10-18 08:08:44.000000000 -0400 -*************** -*** 287,290 **** ---- 287,292 ---- - } - free (expr_stack[expr_depth]); /* free the allocated EXPR_CONTEXT */ -+ -+ noeval = 0; /* XXX */ - } - -*************** -*** 320,323 **** ---- 322,326 ---- - - val = 0; -+ noeval = 0; - - FASTCOPY (evalbuf, oevalbuf, sizeof (evalbuf)); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-030 b/src/patches/bash/bash32-030 deleted file mode 100644 index 3f12c2833..000000000 --- a/src/patches/bash/bash32-030 +++ /dev/null @@ -1,50 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-030 - -Bug-Reported-by: Paul Eggert Andreas Schwab -Bug-Reference-ID: <877il0nu84.fsf_-_@penguin.cs.ucla.edu> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-11/msg00023.html http://lists.gnu.org/archive/html/bug-bash/2007-11/msg00022.htmlhttp://lists.gnu.org/archive/html/bug-bash/2007-11/msg00022.html - -Bug-Description: - -If redirections attached to a compound command fail, bash does not set the -command's exit status correctly. This only happens when the command is the -first in a sequential list. - -Patch: - -*** ../bash-3.2-patched/execute_cmd.c 2007-03-24 14:51:05.000000000 -0400 ---- execute_cmd.c 2007-11-05 22:31:14.000000000 -0500 -*************** -*** 615,619 **** - redirection_undo_list = (REDIRECT *)NULL; - dispose_exec_redirects (); -! return (EXECUTION_FAILURE); - } - ---- 620,624 ---- - redirection_undo_list = (REDIRECT *)NULL; - dispose_exec_redirects (); -! return (last_command_exit_value = EXECUTION_FAILURE); - } - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 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/bash32-031 b/src/patches/bash/bash32-031 deleted file mode 100644 index 6c96fb9d0..000000000 --- a/src/patches/bash/bash32-031 +++ /dev/null @@ -1,62 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-031 - -Bug-Reported-by: Miroslav Lichvar -Bug-Reference-ID: Fri, 02 Nov 2007 14:07:45 +0100 -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-11/msg00000.html - -Bug-Description: - -In certain cases when outputting characters at the end of the line, -e.g., when displaying the prompt string, readline positions the cursor -incorrectly if the prompt string contains invisible characters and the -text being drawn begins before the last invisible character in the line. - -Patch: - -*** ../bash-3.2-patched/lib/readline/display.c 2007-08-25 13:47:08.000000000 -0400 ---- lib/readline/display.c 2007-11-10 17:51:29.000000000 -0500 -*************** -*** 1566,1574 **** - else - { -- /* We have horizontal scrolling and we are not inserting at -- the end. We have invisible characters in this line. This -- is a dumb update. */ - _rl_output_some_chars (nfd, temp); - _rl_last_c_pos += col_temp; - return; - } ---- 1619,1632 ---- - else - { - _rl_output_some_chars (nfd, temp); - _rl_last_c_pos += col_temp; -+ /* If nfd begins before any invisible characters in the prompt, -+ adjust _rl_last_c_pos to account for wrap_offset and set -+ cpos_adjusted to let the caller know. */ -+ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) -+ { -+ _rl_last_c_pos -= wrap_offset; -+ cpos_adjusted = 1; -+ } - return; - } -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 30 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 31 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-032 b/src/patches/bash/bash32-032 deleted file mode 100644 index 5e53e2919..000000000 --- a/src/patches/bash/bash32-032 +++ /dev/null @@ -1,47 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-032 - -Bug-Reported-by: Uwe Doering -Bug-Reference-ID: <46F3DD72.2090801@geminix.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-09/msg00102.html - -Bug-Description: - -There is an off-by-one error in the code that buffers characters received -very quickly in succession, causing characters to be dropped. - -Patch: - -*** ../bash-3.2-patched/lib/readline/input.c 2007-08-25 13:47:10.000000000 -0400 ---- lib/readline/input.c 2007-10-12 22:55:25.000000000 -0400 -*************** -*** 155,159 **** - pop_index--; - if (pop_index < 0) -! pop_index = ibuffer_len - 1; - ibuffer[pop_index] = key; - return (1); ---- 155,159 ---- - pop_index--; - if (pop_index < 0) -! pop_index = ibuffer_len; - ibuffer[pop_index] = key; - return (1); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 31 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 32 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-033 b/src/patches/bash/bash32-033 deleted file mode 100644 index 0d698108b..000000000 --- a/src/patches/bash/bash32-033 +++ /dev/null @@ -1,88 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-033 - -Bug-Reported-by: Christophe Martin -Bug-Reference-ID: <465ABA4A.3030805@free.fr> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-05/msg00104.html - -Bug-Description: - -References made within a function to an uninitialized local array variable -using the [*] subscript in a double-quoted string can result in spurious -ASCII 127 characters in the expanded value. - -Patch: - -*** ../bash-3.2-patched/arrayfunc.c 2007-08-25 13:47:05.000000000 -0400 ---- arrayfunc.c 2007-05-31 11:55:46.000000000 -0400 -*************** -*** 723,727 **** - { - if (rtype) -! *rtype = 1; - if (allow_all == 0) - { ---- 723,727 ---- - { - if (rtype) -! *rtype = (t[0] == '*') ? 1 : 2; - if (allow_all == 0) - { -*** ../bash-3.2-patched/subst.c 2007-08-25 13:47:08.000000000 -0400 ---- subst.c 2007-11-14 15:43:00.000000000 -0500 -*************** -*** 4908,4915 **** - intmax_t arg_index; - SHELL_VAR *var; -! int atype; - - ret = 0; - temp = 0; - - /* Handle multiple digit arguments, as in ${11}. */ ---- 4973,4981 ---- - intmax_t arg_index; - SHELL_VAR *var; -! int atype, rflags; - - ret = 0; - temp = 0; -+ rflags = 0; - - /* Handle multiple digit arguments, as in ${11}. */ -*************** -*** 4944,4947 **** ---- 5010,5015 ---- - ? quote_string (temp) - : quote_escapes (temp); -+ else if (atype == 1 && temp && QUOTED_NULL (temp) && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))) -+ rflags |= W_HASQUOTEDNULL; - } - #endif -*************** -*** 4971,4974 **** ---- 5039,5043 ---- - ret = alloc_word_desc (); - ret->word = temp; -+ ret->flags |= rflags; - } - return ret; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 32 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 33 - - #endif /* _PATCHLEVEL_H_ */ - diff --git a/src/patches/bash/bash32-034 b/src/patches/bash/bash32-034 deleted file mode 100644 index 4f081624b..000000000 --- a/src/patches/bash/bash32-034 +++ /dev/null @@ -1,74 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-034 - -Bug-Reported-by: Ian Campbell -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-10/msg00060.html - -Bug-Description: - -The bash getcwd replacement will write past the end of allocated memory -when it allocates the buffer itself if it uses the buffer size passed as -an argument, and that size is less than the length of the pathname. - -Patch: - -*** ../bash-3.2-patched/lib/sh/getcwd.c 2004-07-21 17:15:19.000000000 -0400 ---- lib/sh/getcwd.c 2007-12-31 19:26:36.000000000 -0500 -*************** -*** 252,268 **** - { - size_t len = pathbuf + pathsize - pathp; - if (buf == NULL) - { -! if (len < (size_t) size) -! len = size; -! buf = (char *) malloc (len); - if (buf == NULL) - goto lose2; - } -! else if ((size_t) size < len) -! { -! errno = ERANGE; -! goto lose2; -! } - (void) memcpy((PTR_T) buf, (PTR_T) pathp, len); - } ---- 287,305 ---- - { - size_t len = pathbuf + pathsize - pathp; -+ if (buf == NULL && size <= 0) -+ size = len; -+ -+ if ((size_t) size < len) -+ { -+ errno = ERANGE; -+ goto lose2; -+ } - if (buf == NULL) - { -! buf = (char *) malloc (size); - if (buf == NULL) - goto lose2; - } -! - (void) memcpy((PTR_T) buf, (PTR_T) pathp, len); - } -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 33 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 34 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-035 b/src/patches/bash/bash32-035 deleted file mode 100644 index 55506baef..000000000 --- a/src/patches/bash/bash32-035 +++ /dev/null @@ -1,159 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-035 - -Bug-Reported-by: Ingo Molnar -Bug-Reference-ID: <20071205202901.GA25202@elte.hu> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-12/msg00014.html - -Bug-Description: - -Bash incorrectly puts the second and subsequent children spawned by a -shell forked to run a command substitution in the wrong process group. - -Patch: - -*** ../bash-3.2-patched/subst.c 2007-12-13 22:31:21.000000000 -0500 ---- subst.c 2008-01-17 22:48:15.000000000 -0500 -*************** -*** 4621,4627 **** - - #if defined (JOB_CONTROL) - set_sigchld_handler (); - stop_making_children (); -! pipeline_pgrp = old_pipeline_pgrp; - #else - stop_making_children (); ---- 4721,4728 ---- - - #if defined (JOB_CONTROL) - set_sigchld_handler (); - stop_making_children (); -! if (pid != 0) -! pipeline_pgrp = old_pipeline_pgrp; - #else - stop_making_children (); -*** ../bash-3.2-patched/jobs.c 2007-08-25 13:46:59.000000000 -0400 ---- jobs.c 2007-12-08 16:47:43.000000000 -0500 -*************** -*** 251,254 **** ---- 251,255 ---- - static int set_job_status_and_cleanup __P((int)); - -+ static WAIT job_signal_status __P((int)); - static WAIT raw_job_exit_status __P((int)); - -*************** -*** 2220,2223 **** ---- 2238,2261 ---- - } - -+ static WAIT -+ job_signal_status (job) -+ int job; -+ { -+ register PROCESS *p; -+ WAIT s; -+ -+ p = jobs[job]->pipe; -+ do -+ { -+ s = p->status; -+ if (WIFSIGNALED(s) || WIFSTOPPED(s)) -+ break; -+ p = p->next; -+ } -+ while (p != jobs[job]->pipe); -+ -+ return s; -+ } -+ - /* Return the exit status of the last process in the pipeline for job JOB. - This is the exit status of the entire job. */ -*************** -*** 2302,2310 **** - received, only if one of the jobs run is killed via SIGINT. If - job control is not set, the job will be run in the same pgrp as -! the shell, and the shell will see any signals the job gets. */ - - /* This is possibly a race condition -- should it go in stop_pipeline? */ - wait_sigint_received = 0; -! if (job_control == 0) - { - old_sigint_handler = set_signal_handler (SIGINT, wait_sigint_handler); ---- 2343,2354 ---- - received, only if one of the jobs run is killed via SIGINT. If - job control is not set, the job will be run in the same pgrp as -! the shell, and the shell will see any signals the job gets. In -! fact, we want this set every time the waiting shell and the waited- -! for process are in the same process group, including command -! substitution. */ - - /* This is possibly a race condition -- should it go in stop_pipeline? */ - wait_sigint_received = 0; -! if (job_control == 0 || (subshell_environment&SUBSHELL_COMSUB)) - { - old_sigint_handler = set_signal_handler (SIGINT, wait_sigint_handler); -*************** -*** 2452,2464 **** - the last process in the pipeline. If no process exits due to a - signal, S is left as the status of the last job in the pipeline. */ -! p = jobs[job]->pipe; -! do -! { -! s = p->status; -! if (WIFSIGNALED(s) || WIFSTOPPED(s)) -! break; -! p = p->next; -! } -! while (p != jobs[job]->pipe); - - if (WIFSIGNALED (s) || WIFSTOPPED (s)) ---- 2496,2500 ---- - the last process in the pipeline. If no process exits due to a - signal, S is left as the status of the last job in the pipeline. */ -! s = job_signal_status (job); - - if (WIFSIGNALED (s) || WIFSTOPPED (s)) -*************** -*** 2494,2497 **** ---- 2530,2551 ---- - } - } -+ else if ((subshell_environment & SUBSHELL_COMSUB) && wait_sigint_received) -+ { -+ /* If waiting for a job in a subshell started to do command -+ substitution, simulate getting and being killed by the SIGINT to -+ pass the status back to our parent. */ -+ s = job_signal_status (job); -+ -+ if (WIFSIGNALED (s) && WTERMSIG (s) == SIGINT && signal_is_trapped (SIGINT) == 0) -+ { -+ UNBLOCK_CHILD (oset); -+ restore_sigint_handler (); -+ old_sigint_handler = set_signal_handler (SIGINT, SIG_DFL); -+ if (old_sigint_handler == SIG_IGN) -+ restore_sigint_handler (); -+ else -+ kill (getpid (), SIGINT); -+ } -+ } - - /* Moved here from set_job_status_and_cleanup, which is in the SIGCHLD -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 34 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 35 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-036 b/src/patches/bash/bash32-036 deleted file mode 100644 index ef22e60e0..000000000 --- a/src/patches/bash/bash32-036 +++ /dev/null @@ -1,44 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-036 - -Bug-Reported-by: Len Lattanzi -Bug-Reference-ID: <87493131-7AEC-4301-A684-E6CC6D06E3E1@apple.com> -Bug-Reference-URL: - -Bug-Description: - -When initializing a subshell, bash did not reset a sentinel keeping track -of the number of command substitutions, leading to an infinite loop if -an error was encountered in the subshell. - -Patch: - -*** ../bash-3.2-patched/execute_cmd.c 2007-12-13 22:31:14.000000000 -0500 ---- execute_cmd.c 2007-12-20 08:52:34.000000000 -0500 -*************** -*** 3881,3884 **** ---- 3916,3921 ---- - - clear_unwind_protect_list (0); -+ /* XXX -- are there other things we should be resetting here? */ -+ parse_and_execute_level = 0; /* nothing left to restore it */ - - /* We're no longer inside a shell function. */ -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 35 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 36 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-037 b/src/patches/bash/bash32-037 deleted file mode 100644 index 376bd937c..000000000 --- a/src/patches/bash/bash32-037 +++ /dev/null @@ -1,110 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-037 - -Bug-Reported-by: jared r r spiegel -Bug-Reference-ID: <200801152201.m0FM1lDp021260@iorek.ice-nine.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-01/msg00049.html - -Bug-Description: - -Bash inappropriately evaluates command substitutions while expanding -directory names as part of command substitution. - -Patch: - -*** ../bash-3.2-patched/subst.c 2007-12-13 22:31:21.000000000 -0500 ---- subst.c 2008-01-17 22:48:15.000000000 -0500 -*************** -*** 2815,2821 **** - to jump_to_top_level here so we don't endlessly loop. */ - WORD_LIST * -! expand_prompt_string (string, quoted) - char *string; - int quoted; - { - WORD_LIST *value; ---- 2895,2902 ---- - to jump_to_top_level here so we don't endlessly loop. */ - WORD_LIST * -! expand_prompt_string (string, quoted, wflags) - char *string; - int quoted; -+ int wflags; - { - WORD_LIST *value; -*************** -*** 2825,2829 **** - return ((WORD_LIST *)NULL); - -! td.flags = 0; - td.word = savestring (string); - ---- 2906,2910 ---- - return ((WORD_LIST *)NULL); - -! td.flags = wflags; - td.word = savestring (string); - -*** ../bash-3.2-patched/subst.h 2007-03-24 14:51:05.000000000 -0400 ---- subst.h 2008-01-17 22:46:08.000000000 -0500 -*************** -*** 136,140 **** - - /* Expand a prompt string. */ -! extern WORD_LIST *expand_prompt_string __P((char *, int)); - - /* Expand STRING just as if you were expanding a word. This also returns ---- 137,141 ---- - - /* Expand a prompt string. */ -! extern WORD_LIST *expand_prompt_string __P((char *, int, int)); - - /* Expand STRING just as if you were expanding a word. This also returns -*** ../bash-3.2-patched/parse.y 2007-08-25 13:47:06.000000000 -0400 ---- parse.y 2008-01-17 22:46:30.000000000 -0500 -*************** -*** 4367,4371 **** - { - last_exit_value = last_command_exit_value; -! list = expand_prompt_string (result, Q_DOUBLE_QUOTES); - free (result); - result = string_list (list); ---- 4367,4371 ---- - { - last_exit_value = last_command_exit_value; -! list = expand_prompt_string (result, Q_DOUBLE_QUOTES, 0); - free (result); - result = string_list (list); -*** ../bash-3.2-patched/bashline.c 2006-07-29 16:39:30.000000000 -0400 ---- bashline.c 2008-02-17 12:53:42.000000000 -0500 -*************** -*** 2358,2362 **** - { - new_dirname = savestring (local_dirname); -! wl = expand_prompt_string (new_dirname, 0); /* does the right thing */ - if (wl) - { ---- 2376,2380 ---- - { - new_dirname = savestring (local_dirname); -! wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB); /* does the right thing */ - if (wl) - { -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 36 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 37 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-038 b/src/patches/bash/bash32-038 deleted file mode 100644 index 842b1b501..000000000 --- a/src/patches/bash/bash32-038 +++ /dev/null @@ -1,80 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-038 - -Bug-Reported-by: Wojciech Puchar -Bug-Reference-ID: <200803131141.m2DBf9vo001136@wojtek.tensor.gdynia.pl> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-03/msg00029.html - -Bug-Description: - -When reading input lines into a single variable using the `read' builtin, -bash did not free the memory it read after assigining it to the named -variable, causing a memory leak noticable when reading large amounts of -data. - - -Patch: - -*** ../bash-3.2-patched/builtins/read.def 2007-08-25 13:47:07.000000000 -0400 ---- builtins/read.def 2008-03-07 12:55:47.000000000 -0500 -*************** -*** 135,139 **** - char c; - char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname; -! char *e, *t, *t1, *ps2; - struct stat tsb; - SHELL_VAR *var; ---- 152,156 ---- - char c; - char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname; -! char *e, *t, *t1, *ps2, *tofree; - struct stat tsb; - SHELL_VAR *var; -*************** -*** 675,678 **** ---- 728,732 ---- - /* Check whether or not the number of fields is exactly the same as the - number of variables. */ -+ tofree = NULL; - if (*input_string) - { -*************** -*** 680,684 **** - t = get_word_from_string (&input_string, ifs_chars, &e); - if (*input_string == 0) -! input_string = t; - else - input_string = strip_trailing_ifs_whitespace (t1, ifs_chars, saw_escape); ---- 734,738 ---- - t = get_word_from_string (&input_string, ifs_chars, &e); - if (*input_string == 0) -! tofree = input_string = t; - else - input_string = strip_trailing_ifs_whitespace (t1, ifs_chars, saw_escape); -*************** -*** 695,698 **** ---- 749,754 ---- - var = bind_read_variable (list->word->word, input_string); - stupidly_hack_special_variables (list->word->word); -+ FREE (tofree); -+ - if (var) - VUNSETATTR (var, att_invisible); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 37 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 38 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-039 b/src/patches/bash/bash32-039 deleted file mode 100644 index c225a5af4..000000000 --- a/src/patches/bash/bash32-039 +++ /dev/null @@ -1,175 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-039 - -Bug-Reported-by: rew@erebor.com -Bug-Reference-ID: <20070119065603.546D011E9C@kansas.erebor.com> -Bug-Reference-URL: - -Bug-Description: - -Bash-3.2 changed the behavior of the [[ command's `=~' operator when the -right-hand side was quoted: it matched the quoted portions as strings. -This patch introduces a new shell option: compat31. When enabled, it -restores the bash-3.1 behavior with respect to evaluating quoted arguments -to the =~ operator. - -Patch: - -*** ../bash-3.2-patched/execute_cmd.c 2007-12-14 21:12:39.000000000 -0500 ---- execute_cmd.c 2008-02-22 21:20:40.000000000 -0500 -*************** -*** 2547,2551 **** - if (arg1 == 0) - arg1 = nullstr; -! arg2 = cond_expand_word (cond->right->op, rmatch ? 2 : (patmatch ? 1 : 0)); - if (arg2 == 0) - arg2 = nullstr; ---- 2552,2557 ---- - if (arg1 == 0) - arg1 = nullstr; -! arg2 = cond_expand_word (cond->right->op, -! (rmatch && shell_compatibility_level > 31) ? 2 : (patmatch ? 1 : 0)); - if (arg2 == 0) - arg2 = nullstr; -*** ../bash-3.2-patched/shell.h 2003-06-01 15:04:36.000000000 -0400 ---- shell.h 2008-02-22 21:16:48.000000000 -0500 -*************** -*** 90,93 **** ---- 90,94 ---- - extern int interactive, interactive_shell; - extern int startup_state; -+ extern int shell_compatibility_level; - - /* Structure to pass around that holds a bitmap of file descriptors -*** ../bash-3.2-patched/version.c 2007-12-14 21:12:29.000000000 -0500 ---- version.c 2008-04-10 08:22:22.000000000 -0400 -*************** -*** 44,47 **** ---- 44,50 ---- - const char *sccs_version = SCCSVERSION; - -+ /* If == 31, shell compatible with bash-3.1, == 32 with bash-3.2, and so on */ -+ int shell_compatibility_level = 32; -+ - /* Functions for getting, setting, and displaying the shell version. */ - -*** ../bash-3.2-patched/builtins/shopt.def 2005-02-19 17:25:03.000000000 -0500 ---- builtins/shopt.def 2008-04-10 08:13:32.000000000 -0400 -*************** -*** 102,105 **** ---- 102,107 ---- - static int set_shellopts_after_change __P((int)); - -+ static int set_compatibility_level __P((int)); -+ - #if defined (RESTRICTED_SHELL) - static int set_restricted_shell __P((int)); -*************** -*** 107,110 **** ---- 109,113 ---- - - static int shopt_login_shell; -+ static int shopt_compat31; - - typedef int shopt_set_func_t __P((int)); -*************** -*** 122,125 **** ---- 125,129 ---- - { "cmdhist", &command_oriented_history, (shopt_set_func_t *)NULL }, - #endif -+ { "compat31", &shopt_compat31, set_compatibility_level }, - { "dotglob", &glob_dot_filenames, (shopt_set_func_t *)NULL }, - { "execfail", &no_exit_on_failed_exec, (shopt_set_func_t *)NULL }, -*************** -*** 460,463 **** ---- 464,479 ---- - } - -+ static int -+ set_compatibility_level (mode) -+ int mode; -+ { -+ /* Need to change logic here as we add more compatibility levels */ -+ if (shopt_compat31) -+ shell_compatibility_level = 31; -+ else -+ shell_compatibility_level = 32; -+ return 0; -+ } -+ - #if defined (RESTRICTED_SHELL) - /* Don't allow the value of restricted_shell to be modified. */ -*** ../bash-3.2-patched/doc/bash.1 2006-09-28 10:26:05.000000000 -0400 ---- doc/bash.1 2008-04-25 12:32:49.000000000 -0400 -*************** -*** 7978,7981 **** ---- 8200,8209 ---- - easy re-editing of multi-line commands. - .TP 8 -+ .B compat31 -+ If set, -+ .B bash -+ changes its behavior to that of version 3.1 with respect to quoted -+ arguments to the conditional command's =~ operator. -+ .TP 8 - .B dotglob - If set, -*** ../bash-20080214/doc/bashref.texi 2008-02-08 21:28:35.000000000 -0500 ---- doc/bashref.texi 2008-02-22 21:44:51.000000000 -0500 -*************** -*** 4053,4056 **** ---- 4061,4069 ---- - easy re-editing of multi-line commands. - -+ @item compat31 -+ If set, Bash -+ changes its behavior to that of version 3.1 with respect to quoted -+ arguments to the conditional command's =~ operator. -+ - @item dotglob - If set, Bash includes filenames beginning with a `.' in -*** ../bash-3.2-patched/tests/shopt.right 2005-02-19 17:46:09.000000000 -0500 ---- tests/shopt.right 2008-04-28 09:13:07.000000000 -0400 -*************** -*** 7,10 **** ---- 7,11 ---- - shopt -u checkwinsize - shopt -s cmdhist -+ shopt -u compat31 - shopt -u dotglob - shopt -u execfail -*************** -*** 54,57 **** ---- 55,59 ---- - shopt -u checkhash - shopt -u checkwinsize -+ shopt -u compat31 - shopt -u dotglob - shopt -u execfail -*************** -*** 78,81 **** ---- 80,84 ---- - checkhash off - checkwinsize off -+ compat31 off - dotglob off - execfail off - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 38 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 39 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-040 b/src/patches/bash/bash32-040 deleted file mode 100644 index 50b85bbe5..000000000 --- a/src/patches/bash/bash32-040 +++ /dev/null @@ -1,47 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-040 - -Bug-Reported-by: John McCabe-Dansted -Bug-Reference-ID: -Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/202885 - -Bug-Description: - -When using the `set' builtin to list all shell variables, the shell uses -the wrong variable when computing the length of a variable's value. - -Patch: - -*** ../bash-3.2-patched/array.c 2007-03-24 14:51:03.000000000 -0400 ---- array.c 2008-08-17 13:07:04.000000000 -0400 -*************** -*** 684,688 **** - valstr = element_value (ae) ? sh_double_quote (element_value(ae)) - : (char *)NULL; -! elen = STRLEN (indstr) + 8 + STRLEN (valstr); - RESIZE_MALLOCED_BUFFER (result, rlen, (elen + 1), rsize, rsize); - ---- 809,813 ---- - valstr = element_value (ae) ? sh_double_quote (element_value(ae)) - : (char *)NULL; -! elen = STRLEN (is) + 8 + STRLEN (valstr); - RESIZE_MALLOCED_BUFFER (result, rlen, (elen + 1), rsize, rsize); - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 39 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 40 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-041 b/src/patches/bash/bash32-041 deleted file mode 100644 index 3c05c04ea..000000000 --- a/src/patches/bash/bash32-041 +++ /dev/null @@ -1,154 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-041 - -Bug-Reported-by: Dan Jacobson -Bug-Reference-ID: <873arjs11h.fsf@jidanni.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-02/msg00049.html - -Bug-Description: - -Bash saved and restored the value of `set -o history' while sourcing files, -preventing users from turning off history with `set +o history' in .bashrc. - -Patch: - -*** ../bash-3.2-patched/bashhist.c 2005-12-26 13:31:16.000000000 -0500 ---- bashhist.c 2008-08-17 13:07:40.000000000 -0400 -*************** -*** 81,84 **** ---- 81,85 ---- - becomes zero when we read lines from a file, for example. */ - int remember_on_history = 1; -+ int enable_history_list = 1; /* value for `set -o history' */ - - /* The number of lines that Bash has added to this history session. The -*************** -*** 235,239 **** - history_expansion_inhibited = 1; - #endif -! remember_on_history = interact != 0; - history_inhibit_expansion_function = bash_history_inhibit_expansion; - } ---- 236,240 ---- - history_expansion_inhibited = 1; - #endif -! remember_on_history = enable_history_list = interact != 0; - history_inhibit_expansion_function = bash_history_inhibit_expansion; - } -*** ../bash-3.2-patched/builtins/set.def 2006-07-27 09:41:43.000000000 -0400 ---- builtins/set.def 2008-08-14 16:33:41.000000000 -0400 -*************** -*** 190,194 **** - #endif /* BANG_HISTORY */ - #if defined (HISTORY) -! { "history", '\0', &remember_on_history, bash_set_history, (setopt_get_func_t *)NULL }, - #endif - { "ignoreeof", '\0', &ignoreeof, set_ignoreeof, (setopt_get_func_t *)NULL }, ---- 198,202 ---- - #endif /* BANG_HISTORY */ - #if defined (HISTORY) -! { "history", '\0', &enable_history_list, bash_set_history, (setopt_get_func_t *)NULL }, - #endif - { "ignoreeof", '\0', &ignoreeof, set_ignoreeof, (setopt_get_func_t *)NULL }, -*************** -*** 382,385 **** ---- 390,394 ---- - if (on_or_off == FLAG_ON) - { -+ enable_history_list = 1; - bash_history_enable (); - if (history_lines_this_session == 0) -*************** -*** 387,392 **** - } - else -! bash_history_disable (); -! return (1 - remember_on_history); - } - #endif ---- 396,404 ---- - } - else -! { -! enable_history_list = 0; -! bash_history_disable (); -! } -! return (1 - enable_history_list); - } - #endif -*************** -*** 566,570 **** - { - #if defined (HISTORY) -! remember_on_history = 1; - #endif - ignoreeof = 0; ---- 578,582 ---- - { - #if defined (HISTORY) -! remember_on_history = enable_history_list = 1; - #endif - ignoreeof = 0; -*** ../bash-3.2-patched/builtins/evalstring.c 2006-07-28 15:12:16.000000000 -0400 ---- builtins/evalstring.c 2008-11-10 21:17:16.000000000 -0500 -*************** -*** 68,71 **** ---- 68,79 ---- - static int cat_file __P((REDIRECT *)); - -+ #if defined (HISTORY) -+ static void -+ set_history_remembering () -+ { -+ remember_on_history = enable_history_list; -+ } -+ #endif -+ - /* How to force parse_and_execute () to clean up after itself. */ - void -*************** -*** 116,120 **** - - #if defined (HISTORY) -! unwind_protect_int (remember_on_history); /* can be used in scripts */ - # if defined (BANG_HISTORY) - if (interactive_shell) ---- 124,131 ---- - - #if defined (HISTORY) -! if (parse_and_execute_level == 0) -! add_unwind_protect (set_history_remembering, (char *)NULL); -! else -! unwind_protect_int (remember_on_history); /* can be used in scripts */ - # if defined (BANG_HISTORY) - if (interactive_shell) -*** ../bash-3.2-patched/bashhist.h 2005-07-01 15:44:41.000000000 -0400 ---- bashhist.h 2008-08-17 12:51:07.000000000 -0400 -*************** -*** 32,35 **** ---- 32,38 ---- - - extern int remember_on_history; -+ extern int enable_history_list; /* value for `set -o history' */ -+ extern int literal_history; /* controlled by `shopt lithist' */ -+ extern int force_append_history; - extern int history_lines_this_session; - extern int history_lines_in_file; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 40 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 41 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-042 b/src/patches/bash/bash32-042 deleted file mode 100644 index 4c9f4d6df..000000000 --- a/src/patches/bash/bash32-042 +++ /dev/null @@ -1,48 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-042 - -Bug-Reported-by: Archimerged Ark Submedes -Bug-Reference-ID: <5ba4bef00804182116g65ff71e0qdffcf672f205e708@mail.gmail.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-04/msg00041.html - -Bug-Description: - -An operator precedence error prevented the bash arithmetic evaluator from -parsing conditional commands correctly. - -Patch: - -*** ../bash-3.2-patched/expr.c 2007-12-13 22:30:43.000000000 -0500 ---- expr.c 2008-08-17 13:09:59.000000000 -0400 -*************** -*** 521,525 **** - noeval++; - } -! val2 = explor (); - if (set_noeval) - noeval--; ---- 521,526 ---- - noeval++; - } -! -! val2 = expcond (); - if (set_noeval) - noeval--; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 41 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 42 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-043 b/src/patches/bash/bash32-043 deleted file mode 100644 index 5a51843d2..000000000 --- a/src/patches/bash/bash32-043 +++ /dev/null @@ -1,62 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-043 - -Bug-Reported-by: Morita Sho -Bug-Reference-ID: -Bug-Reference-URL: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=478096 - -Bug-Description: - -Side effects caused by setting function-local versions of variables bash -handles specially persisted after the function returned. - -Patch: - -*** ../bash-3.2-patched/variables.c 2007-08-25 13:47:05.000000000 -0400 ---- variables.c 2008-11-09 17:47:31.000000000 -0500 -*************** -*** 3459,3465 **** - var->attributes &= ~(att_tempvar|att_propagate); - else -! shell_variables->flags |= VC_HASTMPVAR; - v->attributes |= var->attributes; - } - - dispose_variable (var); ---- 3771,3779 ---- - var->attributes &= ~(att_tempvar|att_propagate); - else -! shell_variables->flags |= VC_HASTMPVAR; - v->attributes |= var->attributes; - } -+ else -+ stupidly_hack_special_variables (var->name); /* XXX */ - - dispose_variable (var); -*************** -*** 3548,3551 **** ---- 3862,3867 ---- - v->attributes |= var->attributes; - } -+ else -+ stupidly_hack_special_variables (var->name); /* XXX */ - - dispose_variable (var); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 42 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 43 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-044 b/src/patches/bash/bash32-044 deleted file mode 100644 index 3e7a392d4..000000000 --- a/src/patches/bash/bash32-044 +++ /dev/null @@ -1,150 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-044 - -Bug-Reported-by: slinkp -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-05/msg00085.html - -Bug-Description: - -The presence of invisible characters in a prompt longer than the screenwidth -with invisible characters on the first and last prompt lines caused readline -to place the cursor in the wrong physical location. - -Patch: - -*** ../bash-3.2-patched/lib/readline/display.c 2007-12-14 21:12:40.000000000 -0500 ---- lib/readline/display.c 2008-10-23 09:39:46.000000000 -0400 -*************** -*** 911,914 **** ---- 944,951 ---- - OFFSET (which has already been calculated above). */ - -+ #define INVIS_FIRST() (prompt_physical_chars > _rl_screenwidth ? prompt_invis_chars_first_line : wrap_offset) -+ #define WRAP_OFFSET(line, offset) ((line == 0) \ -+ ? (offset ? INVIS_FIRST() : 0) \ -+ : ((line == prompt_last_screen_line) ? wrap_offset-prompt_invis_chars_first_line : 0)) - #define W_OFFSET(line, offset) ((line) == 0 ? offset : 0) - #define VIS_LLEN(l) ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l])) -*************** -*** 945,949 **** - _rl_last_c_pos > wrap_offset && - o_cpos < prompt_last_invisible) -! _rl_last_c_pos -= wrap_offset; - - /* If this is the line with the prompt, we might need to ---- 982,992 ---- - _rl_last_c_pos > wrap_offset && - o_cpos < prompt_last_invisible) -! _rl_last_c_pos -= prompt_invis_chars_first_line; /* XXX - was wrap_offset */ -! else if (linenum == prompt_last_screen_line && prompt_physical_chars > _rl_screenwidth && -! (MB_CUR_MAX > 1 && rl_byte_oriented == 0) && -! cpos_adjusted == 0 && -! _rl_last_c_pos != o_cpos && -! _rl_last_c_pos > (prompt_last_invisible - _rl_screenwidth - prompt_invis_chars_first_line)) -! _rl_last_c_pos -= (wrap_offset-prompt_invis_chars_first_line); - - /* If this is the line with the prompt, we might need to -*************** -*** 1205,1209 **** - { - register char *ofd, *ols, *oe, *nfd, *nls, *ne; -! int temp, lendiff, wsatend, od, nd, o_cpos; - int current_invis_chars; - int col_lendiff, col_temp; ---- 1264,1268 ---- - { - register char *ofd, *ols, *oe, *nfd, *nls, *ne; -! int temp, lendiff, wsatend, od, nd, twidth, o_cpos; - int current_invis_chars; - int col_lendiff, col_temp; -*************** -*** 1221,1225 **** - temp = _rl_last_c_pos; - else -! temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset); - if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode - && _rl_last_v_pos == current_line - 1) ---- 1280,1284 ---- - temp = _rl_last_c_pos; - else -! temp = _rl_last_c_pos - WRAP_OFFSET (_rl_last_v_pos, visible_wrap_offset); - if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode - && _rl_last_v_pos == current_line - 1) -*************** -*** 1587,1599 **** - { - _rl_output_some_chars (nfd + lendiff, temp - lendiff); -- #if 1 - /* XXX -- this bears closer inspection. Fixes a redisplay bug - reported against bash-3.0-alpha by Andreas Schwab involving - multibyte characters and prompt strings with invisible - characters, but was previously disabled. */ -! _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); -! #else -! _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-lendiff); -! #endif - } - } ---- 1648,1660 ---- - { - _rl_output_some_chars (nfd + lendiff, temp - lendiff); - /* XXX -- this bears closer inspection. Fixes a redisplay bug - reported against bash-3.0-alpha by Andreas Schwab involving - multibyte characters and prompt strings with invisible - characters, but was previously disabled. */ -! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -! twidth = _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); -! else -! twidth = temp - lendiff; -! _rl_last_c_pos += twidth; - } - } -*************** -*** 1789,1793 **** - int cpos, dpos; /* current and desired cursor positions */ - -! woff = W_OFFSET (_rl_last_v_pos, wrap_offset); - cpos = _rl_last_c_pos; - #if defined (HANDLE_MULTIBYTE) ---- 1850,1854 ---- - int cpos, dpos; /* current and desired cursor positions */ - -! woff = WRAP_OFFSET (_rl_last_v_pos, wrap_offset); - cpos = _rl_last_c_pos; - #if defined (HANDLE_MULTIBYTE) -*************** -*** 1803,1807 **** - prompt string, since they're both buffer indices and DPOS is a - desired display position. */ -! if (new > prompt_last_invisible) /* XXX - don't use woff here */ - { - dpos -= woff; ---- 1864,1872 ---- - prompt string, since they're both buffer indices and DPOS is a - desired display position. */ -! if ((new > prompt_last_invisible) || /* XXX - don't use woff here */ -! (prompt_physical_chars > _rl_screenwidth && -! _rl_last_v_pos == prompt_last_screen_line && -! wrap_offset != woff && -! new > (prompt_last_invisible-_rl_screenwidth-wrap_offset))) - { - dpos -= woff; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 43 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 44 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-045 b/src/patches/bash/bash32-045 deleted file mode 100644 index 68b91ffe1..000000000 --- a/src/patches/bash/bash32-045 +++ /dev/null @@ -1,50 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-045 - -Bug-Reported-by: Roman Rakus -Bug-Reference-ID: <4864B4A0.1060402@redhat.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-06/msg00098.html - -Bug-Description: - -When short-circuiting execution due to the `break' or `continue' builtins, -bash did not preserve the value of $?. - -Patch: - -*** ../bash-3.2-patched/execute_cmd.c 2008-04-28 22:00:24.000000000 -0400 ---- execute_cmd.c 2008-10-18 14:35:03.000000000 -0400 -*************** -*** 502,507 **** ---- 514,526 ---- - volatile int save_line_number; - -+ #if 0 - if (command == 0 || breaking || continuing || read_but_dont_execute) - return (EXECUTION_SUCCESS); -+ #else -+ if (breaking || continuing) -+ return (last_command_exit_value); -+ if (command == 0 || read_but_dont_execute) -+ return (EXECUTION_SUCCESS); -+ #endif - - QUIT; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 44 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 45 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-046 b/src/patches/bash/bash32-046 deleted file mode 100644 index 78aaf0176..000000000 --- a/src/patches/bash/bash32-046 +++ /dev/null @@ -1,47 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-046 - -Bug-Reported-by: Wang Xin -Bug-Reference-ID: <9a73e1570807062042ide16698m10e1b18036c95592@mail.gmail.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-07/msg00014.html - -Bug-Description: - -Bash did not compute the length of multibyte characters correctly when -performing array element length references (e.g., ${#var[subscript]}). - -Patch: - -*** /usr/src/local/bash/bash-3.2-patched/subst.c 2008-04-28 22:00:20.000000000 -0400 ---- subst.c 2008-11-10 22:02:38.000000000 -0500 -*************** -*** 4813,4817 **** - t = (ind == 0) ? value_cell (var) : (char *)NULL; - -! len = STRLEN (t); - return (len); - } ---- 4813,4817 ---- - t = (ind == 0) ? value_cell (var) : (char *)NULL; - -! len = MB_STRLEN (t); - return (len); - } -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 45 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 46 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-047 b/src/patches/bash/bash32-047 deleted file mode 100644 index b8272b1ee..000000000 --- a/src/patches/bash/bash32-047 +++ /dev/null @@ -1,65 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-047 - -Bug-Reported-by: Roman Rakus -Bug-Reference-ID: <48A89EBC.906@redhat.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-08/msg00026.html - -Bug-Description: - -When using the `.' (source) builtin, under certain circumstances bash was -too careful in discarding state to preserve internal consistency. One -effect was that assignments to readonly variables would cause entire scripts -to be aborted instead of execution of the offending command. This behavior -was introduced by bash-3.2 patch 20. - -Patch: - -*** /usr/src/local/chet/src/bash/bash-3.2-patched/subst.c 2008-04-29 21:24:55.000000000 -0400 ---- subst.c 2008-11-13 17:44:25.000000000 -0500 -*************** -*** 138,142 **** - extern int last_command_exit_value, last_command_exit_signal; - extern int subshell_environment; -! extern int subshell_level; - extern int eof_encountered; - extern int return_catch_flag, return_catch_value; ---- 138,142 ---- - extern int last_command_exit_value, last_command_exit_signal; - extern int subshell_environment; -! extern int subshell_level, parse_and_execute_level; - extern int eof_encountered; - extern int return_catch_flag, return_catch_value; -*************** -*** 7673,7677 **** - expanding_redir = 0; - -! top_level_cleanup (); /* from sig.c */ - - jump_to_top_level (v); ---- 7673,7679 ---- - expanding_redir = 0; - -! if (parse_and_execute_level == 0) -! top_level_cleanup (); /* from sig.c */ -! - - jump_to_top_level (v); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 46 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 47 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-048 b/src/patches/bash/bash32-048 deleted file mode 100644 index 551dadefe..000000000 --- a/src/patches/bash/bash32-048 +++ /dev/null @@ -1,56 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-048 - -Bug-Reported-by: Steffen Kiess -Bug-Reference-ID: <1223929957.5383.6.camel@fips> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-10/msg00047.html - -Bug-Description: - -When invoked as `bash -c', bash did not execute an EXIT trap when the last -command in the executed list was a command run from the file system. - -Patch: - -*** /Users/chet/src/bash/bash-3.2-patched/builtins/evalstring.c 2006-07-28 15:12:16.000000000 -0400 ---- builtins/evalstring.c 2008-11-13 18:38:45.000000000 -0500 -*************** -*** 249,252 **** ---- 249,253 ---- - * we're not running a trap AND - * we have parsed the full command (string == '\0') AND -+ * we're not going to run the exit trap AND - * we have a simple command without redirections AND - * the command is not being timed AND -*************** -*** 259,263 **** - *bash_input.location.string == '\0' && - command->type == cm_simple && -! !command->redirects && !command->value.Simple->redirects && - ((command->flags & CMD_TIME_PIPELINE) == 0) && - ((command->flags & CMD_INVERT_RETURN) == 0)) ---- 260,265 ---- - *bash_input.location.string == '\0' && - command->type == cm_simple && -! signal_is_trapped (EXIT_TRAP) == 0 && -! command->redirects == 0 && command->value.Simple->redirects == 0 && - ((command->flags & CMD_TIME_PIPELINE) == 0) && - ((command->flags & CMD_INVERT_RETURN) == 0)) -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 47 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 48 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-049 b/src/patches/bash/bash32-049 deleted file mode 100644 index 469c4c891..000000000 --- a/src/patches/bash/bash32-049 +++ /dev/null @@ -1,64 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-049 - -Bug-Reported-by: Len Lattanzi -Bug-Reference-ID: <52B1297F-6675-45CC-B63E-24745337D006@apple.com> -Bug-Reference-URL: - -Bug-Description: - -On systems where mbrtowc() returns -2 when passed a length argument with -value 0, when using a multibyte locale, Readline's emacs-mode forward-char -at the end of a line will leave the point beyond the end of the line. - -Patch: - -*** ../bash-3.2-patched/lib/readline/mbutil.c 2009-05-29 23:09:26.000000000 -0400 ---- lib/readline/mbutil.c 2009-05-29 23:10:12.000000000 -0400 -*************** -*** 78,82 **** - int seed, count, find_non_zero; - { -! size_t tmp; - mbstate_t ps; - int point; ---- 78,82 ---- - int seed, count, find_non_zero; - { -! size_t tmp, len; - mbstate_t ps; - int point; -*************** -*** 99,103 **** - while (count > 0) - { -! tmp = mbrtowc (&wc, string+point, strlen(string + point), &ps); - if (MB_INVALIDCH ((size_t)tmp)) - { ---- 99,106 ---- - while (count > 0) - { -! len = strlen (string + point); -! if (len == 0) -! break; -! tmp = mbrtowc (&wc, string+point, len, &ps); - if (MB_INVALIDCH ((size_t)tmp)) - { -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 48 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 49 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-050 b/src/patches/bash/bash32-050 deleted file mode 100644 index aef537e18..000000000 --- a/src/patches/bash/bash32-050 +++ /dev/null @@ -1,56 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-050 - -Bug-Reported-by: Jan Hnatek -Bug-Reference-ID: <4A44991F.8010005@sun.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-06/msg00084.html - -Bug-Description: - -On systems where mbrtowc() returns -2 when passed a length argument with -value 0, when using a multibyte locale, Readline's emacs-mode forward-char -at the end of a line will leave the point beyond the end of the line. - -Patch: - -*** ../bash-3.2-patched/lib/readline/mbutil.c 2009-06-16 11:26:50.000000000 -0400 ---- lib/readline/mbutil.c 2009-01-04 14:32:33.000000000 -0500 -*************** -*** 132,141 **** - { - tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); -! while (tmp > 0 && wcwidth (wc) == 0) - { - point += tmp; - tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); -- if (MB_NULLWCH (tmp) || MB_INVALIDCH (tmp)) -- break; - } - } ---- 130,137 ---- - { - tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); -! while (MB_NULLWCH (tmp) == 0 && MB_INVALIDCH (tmp) == 0 && wcwidth (wc) == 0) - { - point += tmp; - tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); - } - } -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 49 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 50 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-051 b/src/patches/bash/bash32-051 deleted file mode 100644 index 404fbd646..000000000 --- a/src/patches/bash/bash32-051 +++ /dev/null @@ -1,46 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-051 - -Bug-Reported-by: werner@suse.de -Bug-Reference-ID: <201002251238.o1PCcYcg016893@boole.suse.de> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2010-02/msg00132.html - -Bug-Description: - -When the `read' builtin times out after the timeout specified with -t is -exceeded, it does not reset the flags that tell signal handlers to process -signals immediately instead of deferring their handling. This can result -in unsafe functions being called from signal handlers, which can cause bash -to hang or dump core. - -Patch: - -*** ../bash-3.2-patched/builtins/read.def 2008-04-29 21:25:00.000000000 -0400 ---- builtins/read.def 2010-03-17 09:50:51.000000000 -0400 -*************** -*** 327,330 **** ---- 327,332 ---- - if (code) - { -+ interrupt_immediately--; -+ terminate_immediately = 0; - run_unwind_frame ("read_builtin"); - return (EXECUTION_FAILURE); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 50 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 51 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash-3.2-CVE-2014-6271.patch b/src/patches/bash/bash32-052 similarity index 75% rename from src/patches/bash-3.2-CVE-2014-6271.patch rename to src/patches/bash/bash32-052 index 396491603..78e7d9270 100644 --- a/src/patches/bash-3.2-CVE-2014-6271.patch +++ b/src/patches/bash/bash32-052 @@ -1,3 +1,20 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-052 + +Bug-Reported-by: Stephane Chazelas +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-3.2.51/builtins/common.h 2006-03-06 09:38:44.000000000 -0500 --- builtins/common.h 2014-09-16 19:08:02.000000000 -0400 *************** @@ -70,3 +87,18 @@ } #if defined (ARRAY_VARS) --- 331,334 ---- +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 51 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 52 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-053 b/src/patches/bash/bash32-053 new file mode 100644 index 000000000..e7efce71a --- /dev/null +++ b/src/patches/bash/bash32-053 @@ -0,0 +1,54 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-053 + +Bug-Reported-by: Tavis Ormandy +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: + +*** ../bash-3.2.52/parse.y 2008-04-29 21:24:55.000000000 -0400 +--- parse.y 2014-09-25 16:18:41.000000000 -0400 +*************** +*** 2504,2507 **** +--- 2504,2509 ---- + word_desc_to_read = (WORD_DESC *)NULL; + ++ eol_ungetc_lookahead = 0; ++ + last_read_token = '\n'; + token_to_read = '\n'; +*** ../bash-3.2.52/y.tab.c 2006-09-25 08:15:16.000000000 -0400 +--- y.tab.c 2014-09-25 20:28:17.000000000 -0400 +*************** +*** 3833,3836 **** +--- 3833,3838 ---- + word_desc_to_read = (WORD_DESC *)NULL; + ++ eol_ungetc_lookahead = 0; ++ + last_read_token = '\n'; + token_to_read = '\n'; +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 52 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 53 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-001 b/src/patches/bash/bash43-001 new file mode 100644 index 000000000..ea1c6b265 --- /dev/null +++ b/src/patches/bash/bash43-001 @@ -0,0 +1,58 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-001 + +Bug-Reported-by: NBaH +Bug-Reference-ID: +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 new file mode 100644 index 000000000..735b7b81a --- /dev/null +++ b/src/patches/bash/bash43-002 @@ -0,0 +1,62 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-002 + +Bug-Reported-by: Moe Tunes +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 new file mode 100644 index 000000000..0f32f410d --- /dev/null +++ b/src/patches/bash/bash43-003 @@ -0,0 +1,48 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-003 + +Bug-Reported-by: Anatol Pomozov +Bug-Reference-ID: +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 new file mode 100644 index 000000000..010f04a2a --- /dev/null +++ b/src/patches/bash/bash43-004 @@ -0,0 +1,47 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-004 + +Bug-Reported-by: Daan van Rossum +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 new file mode 100644 index 000000000..bcd40697c --- /dev/null +++ b/src/patches/bash/bash43-005 @@ -0,0 +1,63 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-005 + +Bug-Reported-by: David Sines +Bug-Reference-ID: +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 new file mode 100644 index 000000000..24ff057a5 --- /dev/null +++ b/src/patches/bash/bash43-006 @@ -0,0 +1,48 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-006 + +Bug-Reported-by: Eduardo A . Bustamante Lopez +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 new file mode 100644 index 000000000..0d62c9ec6 --- /dev/null +++ b/src/patches/bash/bash43-007 @@ -0,0 +1,50 @@ + 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 new file mode 100644 index 000000000..0ae7c9522 --- /dev/null +++ b/src/patches/bash/bash43-008 @@ -0,0 +1,188 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-008 + +Bug-Reported-by: Stephane Chazelas +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 new file mode 100644 index 000000000..015835cde --- /dev/null +++ b/src/patches/bash/bash43-009 @@ -0,0 +1,64 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-009 + +Bug-Reported-by: Matthias Klose +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 new file mode 100644 index 000000000..835a96ead --- /dev/null +++ b/src/patches/bash/bash43-010 @@ -0,0 +1,157 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-010 + +Bug-Reported-by: Albert Shih +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 new file mode 100644 index 000000000..cdc1572ee --- /dev/null +++ b/src/patches/bash/bash43-011 @@ -0,0 +1,49 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-011 + +Bug-Reported-by: Egmont Koblinger +Bug-Reference-ID: +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 new file mode 100644 index 000000000..176fa15bd --- /dev/null +++ b/src/patches/bash/bash43-012 @@ -0,0 +1,43 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-012 + +Bug-Reported-by: Eduardo A. Bustamante López +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 new file mode 100644 index 000000000..8f4006b48 --- /dev/null +++ b/src/patches/bash/bash43-013 @@ -0,0 +1,66 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-013 + +Bug-Reported-by: +Bug-Reference-ID: +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 new file mode 100644 index 000000000..f8371967f --- /dev/null +++ b/src/patches/bash/bash43-014 @@ -0,0 +1,102 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-014 + +Bug-Reported-by: Greg Wooledge +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 new file mode 100644 index 000000000..9c4e5ea48 --- /dev/null +++ b/src/patches/bash/bash43-015 @@ -0,0 +1,58 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-015 + +Bug-Reported-by: Clark Wang +Bug-Reference-ID: +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 new file mode 100644 index 000000000..882d5939b --- /dev/null +++ b/src/patches/bash/bash43-016 @@ -0,0 +1,132 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-016 + +Bug-Reported-by: Pierre Gaston +Bug-Reference-ID: +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 new file mode 100644 index 000000000..4016fb934 --- /dev/null +++ b/src/patches/bash/bash43-017 @@ -0,0 +1,51 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-017 + +Bug-Reported-by: Dan Douglas +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 new file mode 100644 index 000000000..39499f663 --- /dev/null +++ b/src/patches/bash/bash43-018 @@ -0,0 +1,44 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-018 + +Bug-Reported-by: Geir Hauge +Bug-Reference-ID: +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 new file mode 100644 index 000000000..a93714beb --- /dev/null +++ b/src/patches/bash/bash43-019 @@ -0,0 +1,84 @@ + 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 new file mode 100644 index 000000000..5f533ef8d --- /dev/null +++ b/src/patches/bash/bash43-020 @@ -0,0 +1,110 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-020 + +Bug-Reported-by: Jared Yanovich +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 new file mode 100644 index 000000000..fd1c945ec --- /dev/null +++ b/src/patches/bash/bash43-021 @@ -0,0 +1,52 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-021 + +Bug-Reported-by: Jared Yanovich +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 new file mode 100644 index 000000000..7ce39ec0a --- /dev/null +++ b/src/patches/bash/bash43-022 @@ -0,0 +1,56 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-022 + +Bug-Reported-by: scorp.dev.null@gmail.com +Bug-Reference-ID: +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 new file mode 100644 index 000000000..d1e4e9d7c --- /dev/null +++ b/src/patches/bash/bash43-023 @@ -0,0 +1,104 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-023 + +Bug-Reported-by: Tim Friske +Bug-Reference-ID: +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 new file mode 100644 index 000000000..a24b8fbbc --- /dev/null +++ b/src/patches/bash/bash43-024 @@ -0,0 +1,54 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-024 + +Bug-Reported-by: Corentin Peuvrel +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 new file mode 100644 index 000000000..721aca030 --- /dev/null +++ b/src/patches/bash/bash43-025 @@ -0,0 +1,123 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-025 + +Bug-Reported-by: Stephane Chazelas +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 new file mode 100644 index 000000000..e48141b01 --- /dev/null +++ b/src/patches/bash/bash43-026 @@ -0,0 +1,60 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-026 + +Bug-Reported-by: Tavis Ormandy +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 new file mode 100644 index 000000000..ef48bd82d --- /dev/null +++ b/src/patches/bash/bash43-027 @@ -0,0 +1,221 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-027 + +Bug-Reported-by: Florian Weimer +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/dnsmasq-2.71-support-nettle-3.0.patch b/src/patches/dnsmasq-2.71-support-nettle-3.0.patch deleted file mode 100644 index 593a7cd8d..000000000 --- a/src/patches/dnsmasq-2.71-support-nettle-3.0.patch +++ /dev/null @@ -1,65 +0,0 @@ -From cdb755c5f16a6768c3e8b1f345fe15fc9244228d Mon Sep 17 00:00:00 2001 -From: Simon Kelley -Date: Wed, 18 Jun 2014 20:52:53 +0100 -Subject: [PATCH] Fix FTBFS with Nettle-3.0. - ---- - CHANGELOG | 3 +++ - src/dnssec.c | 18 ++++++++++++------ - 2 files changed, 15 insertions(+), 6 deletions(-) - -diff --git a/src/dnssec.c b/src/dnssec.c -index 2ffb75d..69bfc29 100644 ---- a/src/dnssec.c -+++ b/src/dnssec.c -@@ -28,6 +28,12 @@ - #include - #include - -+/* Nettle-3.0 moved to a new API for DSA. We use a name that's defined in the new API -+ to detect Nettle-3, and invoke the backwards compatibility mode. */ -+#ifdef dsa_params_init -+#include -+#endif -+ - - #define SERIAL_UNDEF -100 - #define SERIAL_EQ 0 -@@ -121,8 +127,8 @@ static int hash_init(const struct nettle_hash *hash, void **ctxp, unsigned char - return 1; - } - --static int rsa_verify(struct blockdata *key_data, unsigned int key_len, unsigned char *sig, size_t sig_len, -- unsigned char *digest, int algo) -+static int dnsmasq_rsa_verify(struct blockdata *key_data, unsigned int key_len, unsigned char *sig, size_t sig_len, -+ unsigned char *digest, int algo) - { - unsigned char *p; - size_t exp_len; -@@ -173,8 +179,8 @@ static int rsa_verify(struct blockdata *key_data, unsigned int key_len, unsigned - return 0; - } - --static int dsa_verify(struct blockdata *key_data, unsigned int key_len, unsigned char *sig, size_t sig_len, -- unsigned char *digest, int algo) -+static int dnsmasq_dsa_verify(struct blockdata *key_data, unsigned int key_len, unsigned char *sig, size_t sig_len, -+ unsigned char *digest, int algo) - { - unsigned char *p; - unsigned int t; -@@ -293,10 +299,10 @@ static int verify(struct blockdata *key_data, unsigned int key_len, unsigned cha - switch (algo) - { - case 1: case 5: case 7: case 8: case 10: -- return rsa_verify(key_data, key_len, sig, sig_len, digest, algo); -+ return dnsmasq_rsa_verify(key_data, key_len, sig, sig_len, digest, algo); - - case 3: case 6: -- return dsa_verify(key_data, key_len, sig, sig_len, digest, algo); -+ return dnsmasq_dsa_verify(key_data, key_len, sig, sig_len, digest, algo); - - #ifndef NO_NETTLE_ECC - case 13: case 14: --- -1.7.10.4 - diff --git a/src/patches/dnsmasq-2.71-use-nettle-with-minigmp.patch b/src/patches/dnsmasq-2.71-use-nettle-with-minigmp.patch deleted file mode 100644 index 374c9eca1..000000000 --- a/src/patches/dnsmasq-2.71-use-nettle-with-minigmp.patch +++ /dev/null @@ -1,88 +0,0 @@ -From 063efb330a3f341c2548e2cf1f67f83e49cd6395 Mon Sep 17 00:00:00 2001 -From: Simon Kelley -Date: Tue, 17 Jun 2014 19:49:31 +0100 -Subject: [PATCH] Build config: add -DNO_GMP for use with nettle/mini-gmp - ---- - Makefile | 2 +- - bld/pkg-wrapper | 9 +++++++-- - src/config.h | 7 +++++++ - src/dnssec.c | 3 ++- - 4 files changed, 17 insertions(+), 4 deletions(-) - -diff --git a/Makefile b/Makefile -index c58b50b..17eeb27 100644 ---- a/Makefile -+++ b/Makefile -@@ -61,7 +61,7 @@ lua_cflags = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_LUASCRIPT $(PKG_CON - lua_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_LUASCRIPT $(PKG_CONFIG) --libs lua5.1` - nettle_cflags = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC $(PKG_CONFIG) --cflags nettle hogweed` - nettle_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC $(PKG_CONFIG) --libs nettle hogweed` --gmp_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC $(PKG_CONFIG) --copy -lgmp` -+gmp_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC NO_GMP --copy -lgmp` - sunos_libs = `if uname | grep SunOS >/dev/null 2>&1; then echo -lsocket -lnsl -lposix4; fi` - version = -DVERSION='\"`$(top)/bld/get-version $(top)`\"' - -diff --git a/bld/pkg-wrapper b/bld/pkg-wrapper -index 9f9332d..0ddb678 100755 ---- a/bld/pkg-wrapper -+++ b/bld/pkg-wrapper -@@ -11,9 +11,14 @@ in=`cat` - - if grep "^\#[[:space:]]*define[[:space:]]*$search" config.h >/dev/null 2>&1 || \ - echo $in | grep $search >/dev/null 2>&1; then -- -+# Nasty, nasty, in --copy, arg 2 is another config to search for, use with NO_GMP - if [ $op = "--copy" ]; then -- pkg="$*" -+ if grep "^\#[[:space:]]*define[[:space:]]*$pkg" config.h >/dev/null 2>&1 || \ -+ echo $in | grep $pkg >/dev/null 2>&1; then -+ pkg="" -+ else -+ pkg="$*" -+ fi - elif grep "^\#[[:space:]]*define[[:space:]]*${search}_STATIC" config.h >/dev/null 2>&1 || \ - echo $in | grep ${search}_STATIC >/dev/null 2>&1; then - pkg=`$pkg --static $op $*` -diff --git a/src/config.h b/src/config.h -index 2155544..ee6d218 100644 ---- a/src/config.h -+++ b/src/config.h -@@ -105,6 +105,8 @@ HAVE_AUTH - define this to include the facility to act as an authoritative DNS - server for one or more zones. - -+HAVE_DNSSEC -+ include DNSSEC validator. - - NO_IPV6 - NO_TFTP -@@ -118,6 +120,11 @@ NO_AUTH - which are enabled by default in the distributed source tree. Building dnsmasq - with something like "make COPTS=-DNO_SCRIPT" will do the trick. - -+NO_NETTLE_ECC -+ Don't include the ECDSA cypher in DNSSEC validation. Needed for older Nettle versions. -+NO_GMP -+ Don't use and link against libgmp, Useful if nettle is built with --enable-mini-gmp. -+ - LEASEFILE - CONFFILE - RESOLVFILE -diff --git a/src/dnssec.c b/src/dnssec.c -index 44d626b..2ffb75d 100644 ---- a/src/dnssec.c -+++ b/src/dnssec.c -@@ -26,7 +26,8 @@ - # include - #endif - #include --#include -+#include -+ - - #define SERIAL_UNDEF -100 - #define SERIAL_EQ 0 --- -1.7.10.4 - diff --git a/src/patches/dnsmasq-2.70-Add-support-to-read-ISC-DHCP-lease-file.patch b/src/patches/dnsmasq-2.72rc2-Add-support-to-read-ISC-DHCP-lease-file.patch similarity index 94% rename from src/patches/dnsmasq-2.70-Add-support-to-read-ISC-DHCP-lease-file.patch rename to src/patches/dnsmasq-2.72rc2-Add-support-to-read-ISC-DHCP-lease-file.patch index 3194e1f22..9912c7ca9 100644 --- a/src/patches/dnsmasq-2.70-Add-support-to-read-ISC-DHCP-lease-file.patch +++ b/src/patches/dnsmasq-2.72rc2-Add-support-to-read-ISC-DHCP-lease-file.patch @@ -1,18 +1,18 @@ diff --git a/Makefile b/Makefile -index 292c8bd..5e0cdbe 100644 +index 58a7975..616c6b7 100644 --- a/Makefile +++ b/Makefile @@ -69,7 +69,7 @@ objs = cache.o rfc1035.o util.o option.o forward.o network.o \ dnsmasq.o dhcp.o lease.o rfc2131.o netlink.o dbus.o bpf.o \ helper.o tftp.o log.o conntrack.o dhcp6.o rfc3315.o \ dhcp-common.o outpacket.o radv.o slaac.o auth.o ipset.o \ -- domain.o dnssec.o blockdata.o -+ domain.o dnssec.o blockdata.o isc.o +- domain.o dnssec.o blockdata.o tables.o loop.o ++ domain.o dnssec.o blockdata.o tables.o loop.o isc.o hdrs = dnsmasq.h config.h dhcp-protocol.h dhcp6-protocol.h \ dns-protocol.h radv-protocol.h ip6addr.h diff --git a/src/cache.c b/src/cache.c -index 5cec918..1f5657f 100644 +index 2c3a498..77a7046 100644 --- a/src/cache.c +++ b/src/cache.c @@ -17,7 +17,7 @@ @@ -65,10 +65,10 @@ index 5cec918..1f5657f 100644 cache_hash(crec); diff --git a/src/dnsmasq.c b/src/dnsmasq.c -index 1c96a0e..156ac9a 100644 +index f4a89fc..a448ec4 100644 --- a/src/dnsmasq.c +++ b/src/dnsmasq.c -@@ -934,6 +934,11 @@ int main (int argc, char **argv) +@@ -940,6 +940,11 @@ int main (int argc, char **argv) poll_resolv(0, daemon->last_resolv != 0, now); daemon->last_resolv = now; @@ -81,18 +81,24 @@ index 1c96a0e..156ac9a 100644 if (FD_ISSET(piperead, &rset)) diff --git a/src/dnsmasq.h b/src/dnsmasq.h -index 3032546..a40b2a9 100644 +index e74b15a..4a35168 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h -@@ -1447,3 +1447,8 @@ void slaac_add_addrs(struct dhcp_lease *lease, time_t now, int force); - time_t periodic_slaac(time_t now, struct dhcp_lease *leases); +@@ -1463,9 +1463,13 @@ time_t periodic_slaac(time_t now, struct dhcp_lease *leases); void slaac_ping_reply(struct in6_addr *sender, unsigned char *packet, char *interface, struct dhcp_lease *leases); #endif -+ + +/* isc.c */ +#ifdef HAVE_ISC_READER +void load_dhcp(time_t now); +#endif ++ + /* loop.c */ + #ifdef HAVE_LOOP + void loop_send_probes(); + int detect_loop(char *query, int type); + #endif +- diff --git a/src/isc.c b/src/isc.c new file mode 100644 index 0000000..5106442 @@ -351,10 +357,10 @@ index 0000000..5106442 + +#endif diff --git a/src/option.c b/src/option.c -index daa728f..d16c982 100644 +index 45d8875..29c9ee5 100644 --- a/src/option.c +++ b/src/option.c -@@ -1642,7 +1642,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma +@@ -1669,7 +1669,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma ret_err(_("bad MX target")); break; diff --git a/src/patches/readline/readline62-001 b/src/patches/readline/readline62-001 deleted file mode 100644 index d4563c3b1..000000000 --- a/src/patches/readline/readline62-001 +++ /dev/null @@ -1,46 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 6.2 -Patch-ID: readline62-001 - -Bug-Reported-by: Clark J. Wang -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00157.html - -Bug-Description: - -The readline vi-mode `cc', `dd', and `yy' commands failed to modify the -entire line. - -[This patch intentionally does not modify patchlevel] - -Patch (apply with `patch -p0'): - -*** ../readline-6.2-patched/vi_mode.c 2010-11-20 19:51:39.000000000 -0500 ---- vi_mode.c 2011-02-17 20:24:25.000000000 -0500 -*************** -*** 1115,1119 **** - _rl_vi_last_motion = c; - RL_UNSETSTATE (RL_STATE_VIMOTION); -! return (0); - } - #if defined (READLINE_CALLBACKS) ---- 1115,1119 ---- - _rl_vi_last_motion = c; - RL_UNSETSTATE (RL_STATE_VIMOTION); -! return (vidomove_dispatch (m)); - } - #if defined (READLINE_CALLBACKS) -*** ../readline-6.2-patched/callback.c 2010-06-06 12:18:58.000000000 -0400 ---- callback.c 2011-02-17 20:43:28.000000000 -0500 -*************** -*** 149,152 **** ---- 149,155 ---- - /* Should handle everything, including cleanup, numeric arguments, - and turning off RL_STATE_VIMOTION */ -+ if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0) -+ _rl_internal_char_cleanup (); -+ - return; - } diff --git a/src/patches/readline/readline62-002 b/src/patches/readline/readline62-002 deleted file mode 100644 index 3dc260400..000000000 --- a/src/patches/readline/readline62-002 +++ /dev/null @@ -1,57 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 6.2 -Patch-ID: readline62-002 - -Bug-Reported-by: Vincent Sheffer -Bug-Reference-ID: -Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-readline/2011-08/msg00000.html - -Bug-Description: - -The readline shared library helper script needs to be updated for Mac OS X -10.7 (Lion, darwin11). - -Patch (apply with `patch -p0'): - -*** ../readline-6.2-patched/support/shobj-conf 2009-10-28 09:20:21.000000000 -0400 ---- support/shobj-conf 2011-08-27 13:25:23.000000000 -0400 -*************** -*** 158,162 **** - - # Darwin/MacOS X -! darwin[89]*|darwin10*) - SHOBJ_STATUS=supported - SHLIB_STATUS=supported ---- 172,176 ---- - - # Darwin/MacOS X -! darwin[89]*|darwin1[012]*) - SHOBJ_STATUS=supported - SHLIB_STATUS=supported -*************** -*** 187,191 **** - - case "${host_os}" in -! darwin[789]*|darwin10*) SHOBJ_LDFLAGS='' - SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' - ;; ---- 201,205 ---- - - case "${host_os}" in -! darwin[789]*|darwin1[012]*) SHOBJ_LDFLAGS='' - SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' - ;; - -*** ../readline-6.2-patched/patchlevel 2010-01-14 10:15:52.000000000 -0500 ---- patchlevel 2011-11-17 11:09:35.000000000 -0500 -*************** -*** 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/readline62-003 b/src/patches/readline/readline62-003 deleted file mode 100644 index 0462242e0..000000000 --- a/src/patches/readline/readline62-003 +++ /dev/null @@ -1,76 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 6.2 -Patch-ID: readline62-003 - -Bug-Reported-by: Max Horn -Bug-Reference-ID: <20CC5C60-07C3-4E41-9817-741E48D407C5@quendi.de> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2012-06/msg00005.html - -Bug-Description: - -A change between readline-6.1 and readline-6.2 to prevent the readline input -hook from being called too frequently had the side effect of causing delays -when reading pasted input on systems such as Mac OS X. This patch fixes -those delays while retaining the readline-6.2 behavior. - -Patch (apply with `patch -p0'): - -*** ../readline-6.2-patched/input.c 2010-05-30 18:33:01.000000000 -0400 ---- input.c 2012-06-25 21:08:42.000000000 -0400 -*************** -*** 410,414 **** - rl_read_key () - { -! int c; - - rl_key_sequence_length++; ---- 412,416 ---- - rl_read_key () - { -! int c, r; - - rl_key_sequence_length++; -*************** -*** 430,441 **** - while (rl_event_hook) - { -! if (rl_gather_tyi () < 0) /* XXX - EIO */ - { - rl_done = 1; - return ('\n'); - } - RL_CHECK_SIGNALS (); -- if (rl_get_char (&c) != 0) -- break; - if (rl_done) /* XXX - experimental */ - return ('\n'); ---- 432,447 ---- - while (rl_event_hook) - { -! if (rl_get_char (&c) != 0) -! break; -! -! if ((r = rl_gather_tyi ()) < 0) /* XXX - EIO */ - { - rl_done = 1; - return ('\n'); - } -+ else if (r == 1) /* read something */ -+ continue; -+ - RL_CHECK_SIGNALS (); - if (rl_done) /* XXX - experimental */ - return ('\n'); -*** ../readline-6.2-patched/patchlevel 2010-01-14 10:15:52.000000000 -0500 ---- patchlevel 2011-11-17 11:09:35.000000000 -0500 -*************** -*** 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/readline62-004 b/src/patches/readline/readline62-004 deleted file mode 100644 index 5f3ba9bb3..000000000 --- a/src/patches/readline/readline62-004 +++ /dev/null @@ -1,108 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 6.2 -Patch-ID: readline62-004 - -Bug-Reported-by: Jakub Filak -Bug-Reference-ID: -Bug-Reference-URL: https://bugzilla.redhat.com/show_bug.cgi?id=813289 - -Bug-Description: - -Attempting to redo (using `.') the vi editing mode `cc', `dd', or `yy' -commands leads to an infinite loop. - -Patch (apply with `patch -p0'): - -*** ../readline-6.2-patched/vi_mode.c 2011-02-25 11:17:02.000000000 -0500 ---- vi_mode.c 2012-06-02 12:24:47.000000000 -0400 -*************** -*** 1235,1243 **** - r = rl_domove_motion_callback (_rl_vimvcxt); - } -! else if (vi_redoing) - { - _rl_vimvcxt->motion = _rl_vi_last_motion; - r = rl_domove_motion_callback (_rl_vimvcxt); - } - #if defined (READLINE_CALLBACKS) - else if (RL_ISSTATE (RL_STATE_CALLBACK)) ---- 1297,1313 ---- - r = rl_domove_motion_callback (_rl_vimvcxt); - } -! else if (vi_redoing && _rl_vi_last_motion != 'd') /* `dd' is special */ - { - _rl_vimvcxt->motion = _rl_vi_last_motion; - r = rl_domove_motion_callback (_rl_vimvcxt); - } -+ else if (vi_redoing) /* handle redoing `dd' here */ -+ { -+ _rl_vimvcxt->motion = _rl_vi_last_motion; -+ rl_mark = rl_end; -+ rl_beg_of_line (1, key); -+ RL_UNSETSTATE (RL_STATE_VIMOTION); -+ r = vidomove_dispatch (_rl_vimvcxt); -+ } - #if defined (READLINE_CALLBACKS) - else if (RL_ISSTATE (RL_STATE_CALLBACK)) -*************** -*** 1317,1325 **** - r = rl_domove_motion_callback (_rl_vimvcxt); - } -! else if (vi_redoing) - { - _rl_vimvcxt->motion = _rl_vi_last_motion; - r = rl_domove_motion_callback (_rl_vimvcxt); - } - #if defined (READLINE_CALLBACKS) - else if (RL_ISSTATE (RL_STATE_CALLBACK)) ---- 1387,1403 ---- - r = rl_domove_motion_callback (_rl_vimvcxt); - } -! else if (vi_redoing && _rl_vi_last_motion != 'c') /* `cc' is special */ - { - _rl_vimvcxt->motion = _rl_vi_last_motion; - r = rl_domove_motion_callback (_rl_vimvcxt); - } -+ else if (vi_redoing) /* handle redoing `cc' here */ -+ { -+ _rl_vimvcxt->motion = _rl_vi_last_motion; -+ rl_mark = rl_end; -+ rl_beg_of_line (1, key); -+ RL_UNSETSTATE (RL_STATE_VIMOTION); -+ r = vidomove_dispatch (_rl_vimvcxt); -+ } - #if defined (READLINE_CALLBACKS) - else if (RL_ISSTATE (RL_STATE_CALLBACK)) -*************** -*** 1378,1381 **** ---- 1456,1472 ---- - r = rl_domove_motion_callback (_rl_vimvcxt); - } -+ else if (vi_redoing && _rl_vi_last_motion != 'y') /* `yy' is special */ -+ { -+ _rl_vimvcxt->motion = _rl_vi_last_motion; -+ r = rl_domove_motion_callback (_rl_vimvcxt); -+ } -+ else if (vi_redoing) /* handle redoing `yy' here */ -+ { -+ _rl_vimvcxt->motion = _rl_vi_last_motion; -+ rl_mark = rl_end; -+ rl_beg_of_line (1, key); -+ RL_UNSETSTATE (RL_STATE_VIMOTION); -+ r = vidomove_dispatch (_rl_vimvcxt); -+ } - #if defined (READLINE_CALLBACKS) - else if (RL_ISSTATE (RL_STATE_CALLBACK)) -*** ../readline-6.2-patched/patchlevel 2010-01-14 10:15:52.000000000 -0500 ---- patchlevel 2011-11-17 11:09:35.000000000 -0500 -*************** -*** 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-001 b/src/patches/readline/readline63-001 new file mode 100644 index 000000000..bae6a2f52 --- /dev/null +++ b/src/patches/readline/readline63-001 @@ -0,0 +1,43 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 6.3 +Patch-ID: readline63-001 + +Bug-Reported-by: Daan van Rossum +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 new file mode 100644 index 000000000..0e79f13f6 --- /dev/null +++ b/src/patches/readline/readline63-002 @@ -0,0 +1,44 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 6.3 +Patch-ID: readline63-002 + +Bug-Reported-by: Anatol Pomozov +Bug-Reference-ID: +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 new file mode 100644 index 000000000..d2cad94f9 --- /dev/null +++ b/src/patches/readline/readline63-003 @@ -0,0 +1,47 @@ + 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 new file mode 100644 index 000000000..3cd89e3a0 --- /dev/null +++ b/src/patches/readline/readline63-004 @@ -0,0 +1,45 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 6.3 +Patch-ID: readline63-004 + +Bug-Reported-by: Egmont Koblinger +Bug-Reference-ID: +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 new file mode 100644 index 000000000..8a6373849 --- /dev/null +++ b/src/patches/readline/readline63-005 @@ -0,0 +1,58 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 6.3 +Patch-ID: readline63-005 + +Bug-Reported-by: Juergen Daubert +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 new file mode 100644 index 000000000..a3f09304a --- /dev/null +++ b/src/patches/readline/readline63-006 @@ -0,0 +1,63 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 6.3 +Patch-ID: readline63-006 + +Bug-Reported-by: +Bug-Reference-ID: +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