}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){
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;
# 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
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;
print "\n";
}
+sub count_elements {
+ my $hash = shift;
+
+ return scalar @$hash;
+}
+
sub flush {
run("$IPTABLES -F $CHAIN_INPUT");
run("$IPTABLES -F $CHAIN_FORWARD");
# 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});
}
}
}
+ # 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);
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 = ();
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);
# 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);
}
}
}
+ #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.
sub add_dnat_mangle_rules {
my $nat_address = shift;
+ my $interface = shift;
my @options = @_;
my $mark = 0;
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"};
-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
#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
--- /dev/null
+../../../common/dnsmasq
\ No newline at end of file
--- /dev/null
+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
--- /dev/null
+../../../common/readline
\ No newline at end of file
--- /dev/null
+#!/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 <info@ipfire.org>. #
+# #
+############################################################################
+#
+. /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
--- /dev/null
+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
--- /dev/null
+../../../common/bash
\ No newline at end of file
--- /dev/null
+../../../common/squid
\ No newline at end of file
#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
#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
\$("#TIME_CONSTRAINTS").toggle();
});
+ // Limit concurrent connections per ip
+ if(!\$("#USE_LIMIT_CONCURRENT_CONNECTIONS_PER_IP").attr("checked")) {
+ \$("#LIMIT_CON").hide();
+ }
+ \$("#USE_LIMIT_CONCURRENT_CONNECTIONS_PER_IP").change(function() {
+ \$("#LIMIT_CON").toggle();
+ });
+
+ // Rate-limit new connections
+ if(!\$("#USE_RATELIMIT").attr("checked")) {
+ \$("#RATELIMIT").hide();
+ }
+ \$("#USE_RATELIMIT").change(function() {
+ \$("#RATELIMIT").toggle();
+ });
+
// Automatically select radio buttons when corresponding
// dropdown menu changes.
\$("select").change(function() {
#check if we have an identical rule already
if($fwdfwsettings{'oldrulenumber'} eq $fwdfwsettings{'rulepos'}){
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'};
if($fwdfwsettings{'oldruleremark'} ne $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'updatefwrule'} eq 'on' && $fwdfwsettings{'ruleremark'} ne '' && !&validremark($fwdfwsettings{'ruleremark'})){
$errormessage=$Lang::tr{'fwdfw err remark'}."<br>";
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';
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'}."<br>";
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='';
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'}."<br>";
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'){
END
foreach my $network (sort keys %defaultNetworks)
{
- next if($defaultNetworks{$network}{'NAME'} eq "RED" && $srctgt eq 'src');
next if($defaultNetworks{$network}{'NAME'} eq "IPFire");
print "<option value='$defaultNetworks{$network}{'NAME'}'";
print " selected='selected'" if ($fwdfwsettings{$fwdfwsettings{$grp}} eq $defaultNetworks{$network}{'NAME'});
$fwdfwsettings{'nat'} = $hash{$key}[31]; #changed order
$fwdfwsettings{$fwdfwsettings{'nat'}} = $hash{$key}[29];
$fwdfwsettings{'dnatport'} = $hash{$key}[30];
+ $fwdfwsettings{'LIMIT_CON_CON'} = $hash{$key}[32];
+ $fwdfwsettings{'concon'} = $hash{$key}[33];
+ $fwdfwsettings{'RATE_LIMIT'} = $hash{$key}[34];
+ $fwdfwsettings{'ratecon'} = $hash{$key}[35];
+ $fwdfwsettings{'RATETIME'} = $hash{$key}[36];
$checked{'grp1'}{$fwdfwsettings{'grp1'}} = 'CHECKED';
$checked{'grp2'}{$fwdfwsettings{'grp2'}} = 'CHECKED';
$checked{'grp3'}{$fwdfwsettings{'grp3'}} = 'CHECKED';
$checked{'TIME_SUN'}{$fwdfwsettings{'TIME_SUN'}} = 'CHECKED';
$checked{'USE_NAT'}{$fwdfwsettings{'USE_NAT'}} = 'CHECKED';
$checked{'nat'}{$fwdfwsettings{'nat'}} = 'CHECKED';
+ $checked{'LIMIT_CON_CON'}{$fwdfwsettings{'LIMIT_CON_CON'}} = 'CHECKED';
+ $checked{'RATE_LIMIT'}{$fwdfwsettings{'RATE_LIMIT'}} = 'CHECKED';
$selected{'TIME_FROM'}{$fwdfwsettings{'TIME_FROM'}} = 'selected';
$selected{'TIME_TO'}{$fwdfwsettings{'TIME_TO'}} = 'selected';
$selected{'ipfire'}{$fwdfwsettings{$fwdfwsettings{'grp2'}}} ='selected';
$selected{'ipfire_src'}{$fwdfwsettings{$fwdfwsettings{'grp1'}}} ='selected';
$selected{'dnat'}{$fwdfwsettings{'dnat'}} ='selected';
$selected{'snat'}{$fwdfwsettings{'snat'}} ='selected';
+ $selected{'RATETIME'}{$fwdfwsettings{'RATETIME'}} ='selected';
}
}
$fwdfwsettings{'oldgrp1a'}=$fwdfwsettings{'grp1'};
$fwdfwsettings{'oldruleremark'}=$fwdfwsettings{'ruleremark'};
$fwdfwsettings{'oldnat'}=$fwdfwsettings{'USE_NAT'};
$fwdfwsettings{'oldruletype'}=$fwdfwsettings{'chain'};
+ $fwdfwsettings{'oldconcon'}=$fwdfwsettings{'LIMIT_CON_CON'};
+ $fwdfwsettings{'olduseratelimit'}=$fwdfwsettings{'RATE_LIMIT'};
+ $fwdfwsettings{'olduseratelimitamount'}=$fwdfwsettings{'ratecon'};
+ $fwdfwsettings{'oldratelimittime'}=$fwdfwsettings{'RATETIME'};
+
#check if manual ip (source) is orange network
if ($fwdfwsettings{'grp1'} eq 'src_addr'){
my ($sip,$scidr) = split("/",$fwdfwsettings{$fwdfwsettings{'grp1'}});
$fwdfwsettings{'oldusesrv'}=$fwdfwsettings{'USESRV'};
$fwdfwsettings{'oldruleremark'}=$fwdfwsettings{'ruleremark'};
$fwdfwsettings{'oldnat'}=$fwdfwsettings{'USE_NAT'};
+ $fwdfwsettings{'oldconcon'}=$fwdfwsettings{'LIMIT_CON_CON'};
#check if manual ip (source) is orange network
if ($fwdfwsettings{'grp1'} eq 'src_addr'){
my ($sip,$scidr) = split("/",$fwdfwsettings{$fwdfwsettings{'grp1'}});
</table>
</td>
</tr>
+ <tr>
+ <td width='1%'>
+ <input type='checkbox' name='LIMIT_CON_CON' id="USE_LIMIT_CONCURRENT_CONNECTIONS_PER_IP" value='ON' $checked{'LIMIT_CON_CON'}{'ON'}>
+ </td>
+ <td>$Lang::tr{'fwdfw limitconcon'}</td>
+ </tr>
+ <tr id="LIMIT_CON">
+ <td colspan='2'>
+ <table width='66%' border='0'>
+ <tr>
+ <td width="20em"> </td>
+ <td>$Lang::tr{'fwdfw maxconcon'}: <input type='text' name='concon' size='2' value="$fwdfwsettings{'concon'}"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width='1%'>
+ <input type='checkbox' name='RATE_LIMIT' id="USE_RATELIMIT" value='ON' $checked{'RATE_LIMIT'}{'ON'}>
+ </td>
+ <td>$Lang::tr{'fwdfw ratelimit'}</td>
+ </tr>
+ <tr id="RATELIMIT">
+ <td colspan='2'>
+ <table width='66%' border='0'>
+ <tr>
+ <td width="20em"> </td>
+ <td>$Lang::tr{'fwdfw numcon'}: <input type='text' name='ratecon' size='2' value="$fwdfwsettings{'ratecon'}"> /
+ <select name='RATETIME' style='width:100px;'>
+ <option value='second' $selected{'RATETIME'}{'second'}>$Lang::tr{'age second'}</option>
+ <option value='minute' $selected{'RATETIME'}{'minute'}>$Lang::tr{'minute'}</option>
+ <option value='hour' $selected{'RATETIME'}{'hour'}>$Lang::tr{'hour'}</option>
+ </select>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
</table>
<br>
END
<input type='hidden' name='oldorange' value='$fwdfwsettings{'oldorange'}' />
<input type='hidden' name='oldnat' value='$fwdfwsettings{'oldnat'}' />
<input type='hidden' name='oldruletype' value='$fwdfwsettings{'oldruletype'}' />
+ <input type='hidden' name='oldconcon' value='$fwdfwsettings{'oldconcon'}' />
<input type='hidden' name='ACTION' value='saverule' ></form><form method='post' style='display:inline'><input type='submit' value='$Lang::tr{'fwhost back'}' style='min-width:100px;'><input type='hidden' name='ACTION' value'reset'></td></td>
</table></form>
END
$$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){
$$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;
}
}
$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'}."<br>";
- $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'}."<br>";
- $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'}."<br>";
- $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'}."<br>";
- $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'} = '';
$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'){
&General::writehasharray("$fwconfiginp", \%fwinp);
}
}
- }
+ }
my $key = &General::findhasharraykey (\%customnetwork);
foreach my $i (0 .. 3) { $customnetwork{$key}[$i] = "";}
$fwhostsettings{'SUBNET'} = &General::iporsubtocidr($fwhostsettings{'SUBNET'});
}
&addnet;
&viewtablenet;
- }else {
+ }else{
+ $fwhostsettings{'HOSTNAME'} = $fwhostsettings{'orgname'};
&addnet;
&viewtablenet;
}
$tdcolor="<font style='color: $Header::colourblue;'>$c</font>";
return $tdcolor;
}
-
+ if ("$sip/$scidr" eq "0.0.0.0/0"){
+ $tdcolor="<font style='color: $Header::colourred;'>$c</font>";
+ return $tdcolor;
+ }
#Check if IP is part of OpenVPN N2N subnet
foreach my $key (sort keys %ccdhost){
if ($ccdhost{$key}[3] eq 'net'){
&General::readhash("${General::swroot}/vpn/settings",\%hash);
return $hash{'RW_NET'};
}
+ if ($name eq 'RED'){
+ return "0.0.0.0/0";
+ }
}
}
sub decrease
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";
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";
'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',
'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',
'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:',
'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',
'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.',
'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',
'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:',
'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',
'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',
include Config
-VER = 3.2
+VER = 4.3
THISAPP = bash-$(VER)
DL_FILE = $(THISAPP).tar.gz
#
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
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 00bfa16d58e034e3c2aa27f390390d30
+$(DL_FILE)_MD5 = 81348932d5da294953e15d4814c74dd1
install : $(TARGET)
$(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)
include Config
-VER = 2.71
+VER = 2.72
THISAPP = dnsmasq-$(VER)
DL_FILE = $(THISAPP).tar.xz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 9e2e4d59c75e71ee3ca817ff0f9be69e
+$(DL_FILE)_MD5 = 0256e0a71e27c8d8a5c89a0d18f3cfe2
install : $(TARGET)
$(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' \
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007-2011 IPFire Team <info@ipfire.org> #
+# Copyright (C) 2007-2014 IPFire Team <info@ipfire.org> #
# #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
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 = ""
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 30ceb6df7e8681891e865e2fe5a7903d
+$(DL_FILE)_MD5 = 5d89d64d94bcfefa9ce8f59f4b81bdcb
install : $(TARGET)
$(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
include Config
-VER = 6.2
+VER = 6.3
THISAPP = readline-$(VER)
DL_FILE = $(THISAPP).tar.gz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 67948acb2ca081f23359d0256e9a271c
+$(DL_FILE)_MD5 = 33c8fb279e981274f485fd91da77e94a
install : $(TARGET)
@$(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
include Config
-VER = 3.4.7
+VER = 3.4.8
THISAPP = squid-$(VER)
DL_FILE = $(THISAPP).tar.xz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 74677634121649ccb87a5655fcd4298d
+$(DL_FILE)_MD5 = b0c4335447248810169f58ea4d8b204a
install : $(TARGET)
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"
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
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"
evaluate_retval
;;
restart)
- # run local firewall configuration, if present
- if [ -x /etc/sysconfig/firewall.local ]; then
- /etc/sysconfig/firewall.local stop
- fi
$0 start
;;
*)
init_networking() {
/etc/rc.d/init.d/dnsmasq start
- /etc/rc.d/init.d/static-routes start
}
DO="${1}"
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
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)
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
+++ /dev/null
-*** ../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 -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). */
---- 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 \
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-001
-
-Bug-Reported-by: Greg Schafer <gschafer@zip.com.au>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-002
-
-Bug-Reported-by: Jim Gifford <jim@jg555.com>
-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 <ru@li.org>\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 <ru@li.org>\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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-003
-
-Bug-Reported-by: John Gatewood Ham <zappaman@buraphalinux.org>
-Bug-Reference-ID: <Pine.LNX.4.64.0610121334140.15558@www.buraphalinux.org>
-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_ */
-
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-004
-
-Bug-Reported-by: Stuart Shelton <srcshelton@gmail.com>
-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] = <a>
- argv[2] = <b>
- argv[3] = <c>
---- 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] = <a>
- argv[2] = <b>
- argv[3] = <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 3
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 4
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-005
-
-Bug-Reported-by: Stuart Shelton <stuart@openobjects.com>
-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 <stdarg.h>
-+ #else
-+ # include <varargs.h>
-+ #endif
-+
- #include <stdio.h>
- #include <chartypes.h>
-
-***************
-*** 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_ */
+++ /dev/null
- 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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-007
-
-Bug-Reported-by: jidanni@jidanni.org
-Bug-Reference-ID: <E1Gkg12-00017D-Fm@jidanni.org>
-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_ */
-
-
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-008
-
-Bug-Reported-by: Linda Walsh <bash@tlinx.org>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-009
-
-Bug-Reported-by: James.M.Botte@lowes.com
-Bug-Reference-ID: <BA9FF90F7E5B424998F98EDA9F1F94BE01FA9853@msexchdb01.lowes.com>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-010
-
-Bug-Reported-by: Ryan Waldron <rew@erebor.com>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-011
-
-Bug-Reported-by: Petr Sumbera <Petr.Sumbera@Sun.COM>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-012
-
-Bug-Reported-by: John Wyman <JohnWyman@celink.com>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-013
-
-Bug-Reported-by: Magnus Svensson <msvensson@mysql.com>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-014
-
-Bug-Reported-by: Brett Stahlman <brettstahlman@comcast.net>
-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_ */
+++ /dev/null
- 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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-016
-
-Bug-Reported-by: Peter Volkov <torre_cremata@mail.ru>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-017
-
-Bug-Reported-by: Peter Volkov <torre_cremata@mail.ru>
-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_ */
+++ /dev/null
- 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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-019
-
-Bug-Reported-by: Thomas Loeber <ifp@loeber1.de>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-020
-
-Bug-Reported-by: Ian A Watson <WATSON_IAN_A@LILLY.COM>
-Bug-Reference-ID: <OFEC551808.69D02C7F-ON8525729A.0045708D-8525729A.0046150B@EliLilly.lilly.com>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-021
-
-Bug-Reported-by: BAGSHAW Paul RD-TECH-REN <paul.bagshaw@orange-ftgroup.com>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-022
-
-Bug-Reported-by: Chet Ramey <chet.ramey@cwru.edu>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-023
-
-Bug-Reported-by: Chet Ramey <chet.ramey@cwru.edu>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-024
-
-Bug-Reported-by: Peter Volkov <torre_cremata@mail.ru>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-025
-
-Bug-Reported-by: Tom Bjorkholm <tom.bjorkholm@ericsson.com>
-Bug-Reference-ID: <AEA1A32F001C6B4F98614B5B80D7647D01C075E9@esealmw115.eemea.ericsson.se>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-026
-
-Bug-Reported-by: Chet Ramey <chet.ramey@case.edu>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-027
-
-Bug-Reported-by: dAniel hAhler <ubuntu@thequod.de>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-028
-
-Bug-Reported-by: dAniel hAhler <ubuntu@thequod.de>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-029
-
-Bug-Reported-by: Tomas Janousek <tjanouse@redhat.com>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-030
-
-Bug-Reported-by: Paul Eggert <eggert@cs.ucla.edu> Andreas Schwab <schwab@suse.de>
-Bug-Reference-ID: <877il0nu84.fsf_-_@penguin.cs.ucla.edu> <m28x5gparz.fsf@igel.home>
-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_ */
-
-
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-031
-
-Bug-Reported-by: Miroslav Lichvar <mlichvar@redhat.com>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-032
-
-Bug-Reported-by: Uwe Doering <gemini@geminix.org>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-033
-
-Bug-Reported-by: Christophe Martin <schplurtz@free.fr>
-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_ */
-
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-034
-
-Bug-Reported-by: Ian Campbell <ian.campbell@xensource.com>
-Bug-Reference-ID: <EXCHPAFExU3l5bhn1ow00001dfe@rpc.xensource.com>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-035
-
-Bug-Reported-by: Ingo Molnar <mingo@elte.hu>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-036
-
-Bug-Reported-by: Len Lattanzi <llattanzi@apple.com>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-037
-
-Bug-Reported-by: jared r r spiegel <jrrs@iorek.ice-nine.org>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-038
-
-Bug-Reported-by: Wojciech Puchar <wojtek@wojtek.tensor.gdynia.pl>
-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_ */
+++ /dev/null
- 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_ */
+++ /dev/null
- 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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-041
-
-Bug-Reported-by: Dan Jacobson <jidanni@jidanni.org>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-042
-
-Bug-Reported-by: Archimerged Ark Submedes <archimerged@gmail.com>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-043
-
-Bug-Reported-by: Morita Sho <morita-pub-en-debian@inz.sakura.ne.jp>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-044
-
-Bug-Reported-by: slinkp <stuff@slinkp.com>
-Bug-Reference-ID: <da52a26a-9f38-4861-a918-14d3482b539d@c65g2000hsa.googlegroups.com>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-045
-
-Bug-Reported-by: Roman Rakus <rrakus@redhat.com>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-046
-
-Bug-Reported-by: Wang Xin <wxinee@gmail.com>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-047
-
-Bug-Reported-by: Roman Rakus <rrakus@redhat.com>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-048
-
-Bug-Reported-by: Steffen Kiess <s-kiess@web.de>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-049
-
-Bug-Reported-by: Len Lattanzi <llattanzi@apple.com>
-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_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 3.2
-Patch-ID: bash32-050
-
-Bug-Reported-by: Jan Hnatek <Jan.Hnatek@Sun.COM>
-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_ */
+++ /dev/null
- 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_ */
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 3.2
+Patch-ID: bash32-052
+
+Bug-Reported-by: Stephane Chazelas <stephane.chazelas@gmail.com>
+Bug-Reference-ID:
+Bug-Reference-URL:
+
+Bug-Description:
+
+Under certain circumstances, bash will execute user code while processing the
+environment for exported function definitions.
+
+Patch (apply with `patch -p0'):
+
*** ../bash-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
***************
}
#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_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 3.2
+Patch-ID: bash32-053
+
+Bug-Reported-by: Tavis Ormandy <taviso () cmpxchg8b com>
+Bug-Reference-ID:
+Bug-Reference-URL: http://twitter.com/taviso/statuses/514887394294652929
+
+Bug-Description:
+
+Under certain circumstances, bash can incorrectly save a lookahead character and
+return it on a subsequent call, even when reading a new line.
+
+Patch:
+
+*** ../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_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-001
+
+Bug-Reported-by: NBaH <nbah@sfr.fr>
+Bug-Reference-ID: <ler0b5$iu9$1@speranza.aioe.org>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00092.html
+
+Bug-Description:
+
+A missing check for a valid option prevented `test -R' from working. There
+is another problem that causes bash to look up the wrong variable name when
+processing the argument to `test -R'.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.3/test.c 2014-02-04 16:52:58.000000000 -0500
+--- test.c 2014-02-28 21:22:44.000000000 -0500
+***************
+*** 647,652 ****
+
+ case 'R':
+! v = find_variable (arg);
+! return (v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v) ? TRUE : FALSE);
+ }
+
+--- 647,652 ----
+
+ case 'R':
+! v = find_variable_noref (arg);
+! return ((v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v)) ? TRUE : FALSE);
+ }
+
+***************
+*** 724,727 ****
+--- 724,728 ----
+ case 'u': case 'v': case 'w': case 'x': case 'z':
+ case 'G': case 'L': case 'O': case 'S': case 'N':
++ case 'R':
+ return (1);
+ }
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 0
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 1
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-002
+
+Bug-Reported-by: Moe Tunes <moetunes42@gmail.com>
+Bug-Reference-ID: <53103F49.3070100@gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00086.html
+
+Bug-Description:
+
+A change to save state while running the DEBUG trap caused pipelines to hang
+on systems which need process group synchronization while building pipelines.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.3/trap.c 2014-02-05 10:03:21.000000000 -0500
+--- trap.c 2014-02-28 09:51:43.000000000 -0500
+***************
+*** 921,925 ****
+
+ #if defined (JOB_CONTROL)
+! save_pipeline (1); /* XXX only provides one save level */
+ #endif
+
+--- 921,926 ----
+
+ #if defined (JOB_CONTROL)
+! if (sig != DEBUG_TRAP) /* run_debug_trap does this */
+! save_pipeline (1); /* XXX only provides one save level */
+ #endif
+
+***************
+*** 941,945 ****
+
+ #if defined (JOB_CONTROL)
+! restore_pipeline (1);
+ #endif
+
+--- 942,947 ----
+
+ #if defined (JOB_CONTROL)
+! if (sig != DEBUG_TRAP) /* run_debug_trap does this */
+! restore_pipeline (1);
+ #endif
+
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 1
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 2
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-003
+
+Bug-Reported-by: Anatol Pomozov <anatol.pomozov@gmail.com>
+Bug-Reference-ID: <CAOMFOmXy3mT2So5GQ5F-smCVArQuAeBwZ2QKzgCtMeXJoDeYOQ@mail.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2014-03/msg00010.html
+
+Bug-Description:
+
+When in callback mode, some readline commands can cause readline to seg
+fault by passing invalid contexts to callback functions.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.3/lib/readline/readline.c 2013-10-28 14:58:06.000000000 -0400
+--- lib/readline/readline.c 2014-03-10 14:15:02.000000000 -0400
+***************
+*** 745,749 ****
+
+ RL_CHECK_SIGNALS ();
+! if (r == 0) /* success! */
+ {
+ _rl_keyseq_chain_dispose ();
+--- 745,750 ----
+
+ RL_CHECK_SIGNALS ();
+! /* We only treat values < 0 specially to simulate recursion. */
+! if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0)) /* success! or failure! */
+ {
+ _rl_keyseq_chain_dispose ();
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 2
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 3
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-004
+
+Bug-Reported-by: Daan van Rossum <daan@flash.uchicago.edu>
+Bug-Reference-ID: <20140307072523.GA14250@flash.uchicago.edu>
+Bug-Reference-URL:
+
+Bug-Description:
+
+The `.' command in vi mode cannot undo multi-key commands beginning with
+`c', `d', and `y' (command plus motion specifier).
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.3/lib/readline/readline.c 2013-10-28 14:58:06.000000000 -0400
+--- lib/readline/readline.c 2014-03-07 15:20:33.000000000 -0500
+***************
+*** 965,969 ****
+ if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
+ key != ANYOTHERKEY &&
+! rl_key_sequence_length == 1 && /* XXX */
+ _rl_vi_textmod_command (key))
+ _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
+--- 965,969 ----
+ if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
+ key != ANYOTHERKEY &&
+! _rl_dispatching_keymap == vi_movement_keymap &&
+ _rl_vi_textmod_command (key))
+ _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 3
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 4
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-005
+
+Bug-Reported-by: David Sines <dave.gma@googlemail.com>
+Bug-Reference-ID: <CAO3BAa_CK_Rgkhdfzs+NJ4KFYdB9qW3pvXQK0xLCi6GMmDU8bw@mail.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00037.html
+
+Bug-Description:
+
+When in Posix mode, bash did not correctly interpret the ANSI-C-style
+$'...' quoting mechanism when performing pattern substitution word
+expansions within double quotes.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.3/parse.y 2014-02-11 09:42:10.000000000 -0500
+--- parse.y 2014-03-07 20:57:15.000000000 -0500
+***************
+*** 3399,3403 ****
+ unescaped double-quotes or single-quotes, if any, shall occur." */
+ /* This was changed in Austin Group Interp 221 */
+! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
+ continue;
+
+--- 3399,3403 ----
+ unescaped double-quotes or single-quotes, if any, shall occur." */
+ /* This was changed in Austin Group Interp 221 */
+! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
+ continue;
+
+*** ../bash-4.3/y.tab.c 2014-02-11 10:57:47.000000000 -0500
+--- y.tab.c 2014-03-28 10:41:15.000000000 -0400
+***************
+*** 5711,5715 ****
+ unescaped double-quotes or single-quotes, if any, shall occur." */
+ /* This was changed in Austin Group Interp 221 */
+! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
+ continue;
+
+--- 5711,5715 ----
+ unescaped double-quotes or single-quotes, if any, shall occur." */
+ /* This was changed in Austin Group Interp 221 */
+! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
+ continue;
+
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 4
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 5
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-006
+
+Bug-Reported-by: Eduardo A . Bustamante Lopez <dualbus@gmail.com>
+Bug-Reference-ID: <20140228170013.GA16015@dualbus.me>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00091.html
+
+Bug-Description:
+
+A shell that started with job control active but was not interactive left
+the terminal in the wrong process group when exiting, causing its parent
+shell to get a stop signal when it attempted to read from the terminal.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.3/jobs.c 2014-01-10 09:05:34.000000000 -0500
+--- jobs.c 2014-03-02 18:05:09.000000000 -0500
+***************
+*** 4375,4379 ****
+ end_job_control ()
+ {
+! if (interactive_shell) /* XXX - should it be interactive? */
+ {
+ terminate_stopped_jobs ();
+--- 4375,4379 ----
+ end_job_control ()
+ {
+! if (interactive_shell || job_control) /* XXX - should it be just job_control? */
+ {
+ terminate_stopped_jobs ();
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 5
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 6
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ 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_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-008
+
+Bug-Reported-by: Stephane Chazelas <stephane.chazelas@gmail.com>
+Bug-Reference-ID: <20140318135901.GB22158@chaz.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00098.html
+
+Bug-Description:
+
+Some extended glob patterns incorrectly matched filenames with a leading
+dot, regardless of the setting of the `dotglob' option.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.3/lib/glob/gmisc.c 2013-10-28 14:45:25.000000000 -0400
+--- lib/glob/gmisc.c 2014-03-19 09:16:08.000000000 -0400
+***************
+*** 211,214 ****
+--- 211,215 ----
+ case '!':
+ case '@':
++ case '?':
+ return (pat[1] == LPAREN);
+ default:
+*** ../bash-4.3/lib/glob/glob.c 2014-01-31 21:43:51.000000000 -0500
+--- lib/glob/glob.c 2014-03-20 09:01:26.000000000 -0400
+***************
+*** 180,202 ****
+ int flags;
+ {
+! char *pp, *pe, *t;
+! int n, r;
+
+ pp = pat + 2;
+! pe = pp + strlen (pp) - 1; /*(*/
+! if (*pe != ')')
+! return 0;
+! if ((t = strchr (pp, '|')) == 0) /* easy case first */
+ {
+ *pe = '\0';
+ r = skipname (pp, dname, flags); /*(*/
+ *pe = ')';
+ return r;
+ }
+ while (t = glob_patscan (pp, pe, '|'))
+ {
+ n = t[-1];
+ t[-1] = '\0';
+ r = skipname (pp, dname, flags);
+ t[-1] = n;
+ if (r == 0) /* if any pattern says not skip, we don't skip */
+--- 180,215 ----
+ int flags;
+ {
+! char *pp, *pe, *t, *se;
+! int n, r, negate;
+
++ negate = *pat == '!';
+ pp = pat + 2;
+! se = pp + strlen (pp) - 1; /* end of string */
+! pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */
+! /* we should check for invalid extglob pattern here */
+! /* if pe != se we have more of the pattern at the end of the extglob
+! pattern. Check the easy case first ( */
+! if (pe == se && *pe == ')' && (t = strchr (pp, '|')) == 0)
+ {
+ *pe = '\0';
++ #if defined (HANDLE_MULTIBYTE)
++ r = mbskipname (pp, dname, flags);
++ #else
+ r = skipname (pp, dname, flags); /*(*/
++ #endif
+ *pe = ')';
+ return r;
+ }
++
++ /* check every subpattern */
+ while (t = glob_patscan (pp, pe, '|'))
+ {
+ n = t[-1];
+ t[-1] = '\0';
++ #if defined (HANDLE_MULTIBYTE)
++ r = mbskipname (pp, dname, flags);
++ #else
+ r = skipname (pp, dname, flags);
++ #endif
+ t[-1] = n;
+ if (r == 0) /* if any pattern says not skip, we don't skip */
+***************
+*** 205,219 ****
+ } /*(*/
+
+! if (pp == pe) /* glob_patscan might find end of pattern */
+ return r;
+
+! *pe = '\0';
+! # if defined (HANDLE_MULTIBYTE)
+! r = mbskipname (pp, dname, flags); /*(*/
+! # else
+! r = skipname (pp, dname, flags); /*(*/
+! # endif
+! *pe = ')';
+! return r;
+ }
+ #endif
+--- 218,227 ----
+ } /*(*/
+
+! /* glob_patscan might find end of pattern */
+! if (pp == se)
+ return r;
+
+! /* but if it doesn't then we didn't match a leading dot */
+! return 0;
+ }
+ #endif
+***************
+*** 278,289 ****
+ {
+ #if EXTENDED_GLOB
+! wchar_t *pp, *pe, *t, n;
+! int r;
+
+ pp = pat + 2;
+! pe = pp + wcslen (pp) - 1; /*(*/
+! if (*pe != L')')
+! return 0;
+! if ((t = wcschr (pp, L'|')) == 0)
+ {
+ *pe = L'\0';
+--- 286,298 ----
+ {
+ #if EXTENDED_GLOB
+! wchar_t *pp, *pe, *t, n, *se;
+! int r, negate;
+
++ negate = *pat == L'!';
+ pp = pat + 2;
+! se = pp + wcslen (pp) - 1; /*(*/
+! pe = glob_patscan_wc (pp, se, 0);
+!
+! if (pe == se && *pe == ')' && (t = wcschr (pp, L'|')) == 0)
+ {
+ *pe = L'\0';
+***************
+*** 292,295 ****
+--- 301,306 ----
+ return r;
+ }
++
++ /* check every subpattern */
+ while (t = glob_patscan_wc (pp, pe, '|'))
+ {
+***************
+*** 306,313 ****
+ return r;
+
+! *pe = L'\0';
+! r = wchkname (pp, dname); /*(*/
+! *pe = L')';
+! return r;
+ #else
+ return (wchkname (pat, dname));
+--- 317,322 ----
+ return r;
+
+! /* but if it doesn't then we didn't match a leading dot */
+! return 0;
+ #else
+ return (wchkname (pat, dname));
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 7
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 8
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-009
+
+Bug-Reported-by: Matthias Klose <doko@debian.org>
+Bug-Reference-ID: <53346FC8.6090005@debian.org>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00171.html
+
+Bug-Description:
+
+There is a problem with unsigned sign extension when attempting to reallocate
+the input line when it is fewer than 3 characters long and there has been a
+history expansion. The sign extension causes the shell to not reallocate the
+line, which results in a segmentation fault when it writes past the end.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.3-patched/parse.y 2014-02-11 09:42:10.000000000 -0500
+--- parse.y 2014-03-27 16:33:29.000000000 -0400
+***************
+*** 2425,2429 ****
+ if (shell_input_line_terminator != EOF)
+ {
+! if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3)
+ shell_input_line = (char *)xrealloc (shell_input_line,
+ 1 + (shell_input_line_size += 2));
+--- 2425,2429 ----
+ if (shell_input_line_terminator != EOF)
+ {
+! if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size))
+ shell_input_line = (char *)xrealloc (shell_input_line,
+ 1 + (shell_input_line_size += 2));
+*** ../bash-4.3-patched/y.tab.c 2014-03-28 11:17:06.000000000 -0400
+--- y.tab.c 2014-04-07 11:48:31.000000000 -0400
+***************
+*** 4737,4741 ****
+ if (shell_input_line_terminator != EOF)
+ {
+! if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3)
+ shell_input_line = (char *)xrealloc (shell_input_line,
+ 1 + (shell_input_line_size += 2));
+--- 4737,4741 ----
+ if (shell_input_line_terminator != EOF)
+ {
+! if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size))
+ shell_input_line = (char *)xrealloc (shell_input_line,
+ 1 + (shell_input_line_size += 2));
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 8
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 9
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-010
+
+Bug-Reported-by: Albert Shih <Albert.Shih@obspm.fr>
+Bug-Reference-ID: Wed, 5 Mar 2014 23:01:40 +0100
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00028.html
+
+Bug-Description:
+
+Patch (apply with `patch -p0'):
+
+This patch changes the behavior of programmable completion to compensate
+for two assumptions made by the bash-completion package. Bash-4.3 changed
+to dequote the argument to programmable completion only under certain
+circumstances, to make the behavior of compgen more consistent when run
+from the command line -- closer to the behavior when run by a shell function
+run as part of programmable completion. Bash-completion can pass quoted
+arguments to compgen when the original word to be completed was not quoted,
+expecting programmable completion to dequote the word before attempting
+completion.
+
+This patch fixes two cases:
+
+1. An empty string that bash-completion passes to compgen as a quoted null
+ string ('').
+
+2. An unquoted word that bash-completion quotes using single quotes or
+ backslashes before passing it to compgen.
+
+In these cases, since readline did not detect a quote character in the original
+word to be completed, bash-4.3
+
+*** ../bash-4.3/externs.h 2014-01-02 14:58:20.000000000 -0500
+--- externs.h 2014-03-13 14:42:57.000000000 -0400
+***************
+*** 325,328 ****
+--- 325,329 ----
+ extern char *sh_backslash_quote_for_double_quotes __P((char *));
+ extern int sh_contains_shell_metas __P((char *));
++ extern int sh_contains_quotes __P((char *));
+
+ /* declarations for functions defined in lib/sh/spell.c */
+*** ../bash-4.3/lib/sh/shquote.c 2013-03-31 21:53:32.000000000 -0400
+--- lib/sh/shquote.c 2014-03-13 14:42:57.000000000 -0400
+***************
+*** 312,313 ****
+--- 312,327 ----
+ return (0);
+ }
++
++ int
++ sh_contains_quotes (string)
++ char *string;
++ {
++ char *s;
++
++ for (s = string; s && *s; s++)
++ {
++ if (*s == '\'' || *s == '"' || *s == '\\')
++ return 1;
++ }
++ return 0;
++ }
+*** ../bash-4.3/pcomplete.c 2013-08-26 15:23:45.000000000 -0400
+--- pcomplete.c 2014-03-25 17:23:23.000000000 -0400
+***************
+*** 184,187 ****
+--- 184,188 ----
+ COMPSPEC *pcomp_curcs;
+ const char *pcomp_curcmd;
++ const char *pcomp_curtxt;
+
+ #ifdef DEBUG
+***************
+*** 754,757 ****
+--- 755,784 ----
+ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
+ }
++ /* Intended to solve a mismatched assumption by bash-completion. If
++ the text to be completed is empty, but bash-completion turns it into
++ a quoted string ('') assuming that this code will dequote it before
++ calling readline, do the dequoting. */
++ else if (iscompgen && iscompleting &&
++ pcomp_curtxt && *pcomp_curtxt == 0 &&
++ text && (*text == '\'' || *text == '"') && text[1] == text[0] && text[2] == 0 &&
++ rl_filename_dequoting_function)
++ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
++ /* Another mismatched assumption by bash-completion. If compgen is being
++ run as part of bash-completion, and the argument to compgen is not
++ the same as the word originally passed to the programmable completion
++ code, dequote the argument if it has quote characters. It's an
++ attempt to detect when bash-completion is quoting its filename
++ argument before calling compgen. */
++ /* We could check whether gen_shell_function_matches is in the call
++ stack by checking whether the gen-shell-function-matches tag is in
++ the unwind-protect stack, but there's no function to do that yet.
++ We could simply check whether we're executing in a function by
++ checking variable_context, and may end up doing that. */
++ else if (iscompgen && iscompleting && rl_filename_dequoting_function &&
++ pcomp_curtxt && text &&
++ STREQ (pcomp_curtxt, text) == 0 &&
++ variable_context &&
++ sh_contains_quotes (text)) /* guess */
++ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
+ else
+ dfn = savestring (text);
+***************
+*** 1523,1527 ****
+ {
+ COMPSPEC *cs, *oldcs;
+! const char *oldcmd;
+ STRINGLIST *ret;
+
+--- 1550,1554 ----
+ {
+ COMPSPEC *cs, *oldcs;
+! const char *oldcmd, *oldtxt;
+ STRINGLIST *ret;
+
+***************
+*** 1546,1552 ****
+--- 1573,1581 ----
+ oldcs = pcomp_curcs;
+ oldcmd = pcomp_curcmd;
++ oldtxt = pcomp_curtxt;
+
+ pcomp_curcs = cs;
+ pcomp_curcmd = cmd;
++ pcomp_curtxt = word;
+
+ ret = gen_compspec_completions (cs, cmd, word, start, end, foundp);
+***************
+*** 1554,1557 ****
+--- 1583,1587 ----
+ pcomp_curcs = oldcs;
+ pcomp_curcmd = oldcmd;
++ pcomp_curtxt = oldtxt;
+
+ /* We need to conditionally handle setting *retryp here */
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 9
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 10
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-011
+
+Bug-Reported-by: Egmont Koblinger <egmont@gmail.com>
+Bug-Reference-ID: <CAGWcZk+bU5Jo1M+tutGvL-250UBE9DXjpeJVofYJSFcqFEVfMg@mail.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00153.html
+
+Bug-Description:
+
+The signal handling changes to bash and readline (to avoid running any code
+in a signal handler context) cause the cursor to be placed on the wrong
+line of a multi-line command after a ^C interrupts editing.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.3-patched/lib/readline/display.c 2013-12-27 13:10:56.000000000 -0500
+--- lib/readline/display.c 2014-03-27 11:52:45.000000000 -0400
+***************
+*** 2678,2682 ****
+ if (_rl_echoing_p)
+ {
+! _rl_move_vert (_rl_vis_botlin);
+ _rl_vis_botlin = 0;
+ fflush (rl_outstream);
+--- 2678,2683 ----
+ if (_rl_echoing_p)
+ {
+! if (_rl_vis_botlin > 0) /* minor optimization plus bug fix */
+! _rl_move_vert (_rl_vis_botlin);
+ _rl_vis_botlin = 0;
+ fflush (rl_outstream);
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 10
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 11
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-012
+
+Bug-Reported-by: Eduardo A. Bustamante López<dualbus@gmail.com>
+Bug-Reference-ID: <5346B54C.4070205@case.edu>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00051.html
+
+Bug-Description:
+
+When a SIGCHLD trap runs a command containing a shell builtin while
+a script is running `wait' to wait for all running children to complete,
+the SIGCHLD trap will not be run once for each child that terminates.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.3-patched/jobs.c 2014-03-28 10:54:19.000000000 -0400
+--- jobs.c 2014-04-15 08:47:03.000000000 -0400
+***************
+*** 3598,3601 ****
+--- 3598,3602 ----
+ unwind_protect_pointer (the_pipeline);
+ unwind_protect_pointer (subst_assign_varlist);
++ unwind_protect_pointer (this_shell_builtin);
+
+ /* We have to add the commands this way because they will be run
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 11
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 12
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-013
+
+Bug-Reported-by: <Trond.Endrestol@ximalas.info>
+Bug-Reference-ID: <alpine.BSF.2.03.1404192114310.1973@enterprise.ximalas.info>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00069.html
+
+Bug-Description:
+
+Using reverse-i-search when horizontal scrolling is enabled does not redisplay
+the entire line containing the successful search results.
+
+Patch (apply with `patch -p0'):
+*** ../bash-4.3-patched/lib/readline/display.c 2014-04-08 18:19:36.000000000 -0400
+--- lib/readline/display.c 2014-04-20 18:32:52.000000000 -0400
+***************
+*** 1638,1642 ****
+ the spot of first difference is before the end of the invisible chars,
+ lendiff needs to be adjusted. */
+! if (current_line == 0 && !_rl_horizontal_scroll_mode &&
+ current_invis_chars != visible_wrap_offset)
+ {
+--- 1638,1642 ----
+ the spot of first difference is before the end of the invisible chars,
+ lendiff needs to be adjusted. */
+! if (current_line == 0 && /* !_rl_horizontal_scroll_mode && */
+ current_invis_chars != visible_wrap_offset)
+ {
+***************
+*** 1826,1831 ****
+ _rl_last_c_pos += bytes_to_insert;
+
+ if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new)))
+! goto clear_rest_of_line;
+ }
+ }
+--- 1826,1836 ----
+ _rl_last_c_pos += bytes_to_insert;
+
++ /* XXX - we only want to do this if we are at the end of the line
++ so we move there with _rl_move_cursor_relative */
+ if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new)))
+! {
+! _rl_move_cursor_relative (ne-new, new);
+! goto clear_rest_of_line;
+! }
+ }
+ }
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 12
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 13
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-014
+
+Bug-Reported-by: Greg Wooledge <wooledg@eeg.ccf.org>
+Bug-Reference-ID: <20140418202123.GB7660@eeg.ccf.org>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/help-bash/2014-04/msg00004.html
+
+Bug-Description:
+
+Under certain circumstances, $@ is expanded incorrectly in contexts where
+word splitting is not performed.
+
+Patch (apply with `patch -p0'):
+*** ../bash-4.3-patched/subst.c 2014-01-23 16:26:37.000000000 -0500
+--- subst.c 2014-04-19 15:41:26.000000000 -0400
+***************
+*** 3249,3254 ****
+--- 3249,3256 ----
+ return ((char *)NULL);
+
++ expand_no_split_dollar_star = 1;
+ w->flags |= W_NOSPLIT2;
+ l = call_expand_word_internal (w, 0, 0, (int *)0, (int *)0);
++ expand_no_split_dollar_star = 0;
+ if (l)
+ {
+***************
+*** 7848,7851 ****
+--- 7850,7857 ----
+ according to POSIX.2, this expands to a list of the positional
+ parameters no matter what IFS is set to. */
++ /* XXX - what to do when in a context where word splitting is not
++ performed? Even when IFS is not the default, posix seems to imply
++ that we behave like unquoted $* ? Maybe we should use PF_NOSPLIT2
++ here. */
+ temp = string_list_dollar_at (list, (pflags & PF_ASSIGNRHS) ? (quoted|Q_DOUBLE_QUOTES) : quoted);
+
+***************
+*** 8817,8820 ****
+--- 8823,8827 ----
+ {
+ char *ifs_chars;
++ char *tstring;
+
+ ifs_chars = (quoted_dollar_at || has_dollar_at) ? ifs_value : (char *)NULL;
+***************
+*** 8831,8834 ****
+--- 8838,8865 ----
+ if (split_on_spaces)
+ list = list_string (istring, " ", 1); /* XXX quoted == 1? */
++ /* If we have $@ (has_dollar_at != 0) and we are in a context where we
++ don't want to split the result (W_NOSPLIT2), and we are not quoted,
++ we have already separated the arguments with the first character of
++ $IFS. In this case, we want to return a list with a single word
++ with the separator possibly replaced with a space (it's what other
++ shells seem to do).
++ quoted_dollar_at is internal to this function and is set if we are
++ passed an argument that is unquoted (quoted == 0) but we encounter a
++ double-quoted $@ while expanding it. */
++ else if (has_dollar_at && quoted_dollar_at == 0 && ifs_chars && quoted == 0 && (word->flags & W_NOSPLIT2))
++ {
++ /* Only split and rejoin if we have to */
++ if (*ifs_chars && *ifs_chars != ' ')
++ {
++ list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1);
++ tstring = string_list (list);
++ }
++ else
++ tstring = istring;
++ tword = make_bare_word (tstring);
++ if (tstring != istring)
++ free (tstring);
++ goto set_word_flags;
++ }
+ else if (has_dollar_at && ifs_chars)
+ list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1);
+***************
+*** 8836,8839 ****
+--- 8867,8871 ----
+ {
+ tword = make_bare_word (istring);
++ set_word_flags:
+ if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) || (quoted_state == WHOLLY_QUOTED))
+ tword->flags |= W_QUOTED;
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 13
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 14
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-015
+
+Bug-Reported-by: Clark Wang <dearvoid@gmail.com>
+Bug-Reference-ID: <CADv8-og2TOSoabXeNVXVGaXN3tEMHnYVq1rwOLe5meaRPSGRig@mail.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00095.html
+
+Bug-Description:
+
+When completing directory names, the directory name is dequoted twice.
+This causes problems for directories with single and double quotes in
+their names.
+
+Patch (apply with `patch -p0'):
+*** ../bash-4.3-patched/bashline.c 2014-02-09 19:56:58.000000000 -0500
+--- bashline.c 2014-04-25 14:57:52.000000000 -0400
+***************
+*** 4168,4174 ****
+
+ qc = rl_dispatching ? rl_completion_quote_character : 0;
+! dfn = bash_dequote_filename ((char *)text, qc);
+ m1 = rl_completion_matches (dfn, rl_filename_completion_function);
+! free (dfn);
+
+ if (m1 == 0 || m1[0] == 0)
+--- 4209,4222 ----
+
+ qc = rl_dispatching ? rl_completion_quote_character : 0;
+! /* If rl_completion_found_quote != 0, rl_completion_matches will call the
+! filename dequoting function, causing the directory name to be dequoted
+! twice. */
+! if (rl_dispatching && rl_completion_found_quote == 0)
+! dfn = bash_dequote_filename ((char *)text, qc);
+! else
+! dfn = (char *)text;
+ m1 = rl_completion_matches (dfn, rl_filename_completion_function);
+! if (dfn != text)
+! free (dfn);
+
+ if (m1 == 0 || m1[0] == 0)
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 14
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 15
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-016
+
+Bug-Reported-by: Pierre Gaston <pierre.gaston@gmail.com>
+Bug-Reference-ID: <CAPSX3sTCD61k1VQLJ5r-LWzEt+e7Xc-fxXmwn2u8EA5gJJej8Q@mail.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00100.html
+
+Bug-Description:
+
+An extended glob pattern containing a slash (`/') causes the globbing code
+to misinterpret it as a directory separator.
+
+Patch (apply with `patch -p0'):
+*** ../bash-4.3-patched/lib/glob/glob.c 2014-03-28 10:54:23.000000000 -0400
+--- lib/glob/glob.c 2014-05-02 10:24:28.000000000 -0400
+***************
+*** 124,127 ****
+--- 124,129 ----
+ extern wchar_t *glob_patscan_wc __P((wchar_t *, wchar_t *, int));
+
++ extern char *glob_dirscan __P((char *, int));
++
+ /* Compile `glob_loop.c' for single-byte characters. */
+ #define CHAR unsigned char
+***************
+*** 188,191 ****
+--- 190,196 ----
+ pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */
+ /* we should check for invalid extglob pattern here */
++ if (pe == 0)
++ return 0;
++
+ /* if pe != se we have more of the pattern at the end of the extglob
+ pattern. Check the easy case first ( */
+***************
+*** 1016,1020 ****
+ char **result;
+ unsigned int result_size;
+! char *directory_name, *filename, *dname;
+ unsigned int directory_len;
+ int free_dirname; /* flag */
+--- 1021,1025 ----
+ char **result;
+ unsigned int result_size;
+! char *directory_name, *filename, *dname, *fn;
+ unsigned int directory_len;
+ int free_dirname; /* flag */
+***************
+*** 1032,1035 ****
+--- 1037,1052 ----
+ /* Find the filename. */
+ filename = strrchr (pathname, '/');
++ #if defined (EXTENDED_GLOB)
++ if (filename && extended_glob)
++ {
++ fn = glob_dirscan (pathname, '/');
++ #if DEBUG_MATCHING
++ if (fn != filename)
++ fprintf (stderr, "glob_filename: glob_dirscan: fn (%s) != filename (%s)\n", fn ? fn : "(null)", filename);
++ #endif
++ filename = fn;
++ }
++ #endif
++
+ if (filename == NULL)
+ {
+*** ../bash-4.3-patched/lib/glob/gmisc.c 2014-03-28 10:54:23.000000000 -0400
+--- lib/glob/gmisc.c 2014-05-02 09:35:57.000000000 -0400
+***************
+*** 43,46 ****
+--- 43,48 ----
+ #define WRPAREN L')'
+
++ extern char *glob_patscan __P((char *, char *, int));
++
+ /* Return 1 of the first character of WSTRING could match the first
+ character of pattern WPAT. Wide character version. */
+***************
+*** 376,377 ****
+--- 378,410 ----
+ return matlen;
+ }
++
++ /* Skip characters in PAT and return the final occurrence of DIRSEP. This
++ is only called when extended_glob is set, so we have to skip over extglob
++ patterns x(...) */
++ char *
++ glob_dirscan (pat, dirsep)
++ char *pat;
++ int dirsep;
++ {
++ char *p, *d, *pe, *se;
++
++ d = pe = se = 0;
++ for (p = pat; p && *p; p++)
++ {
++ if (extglob_pattern_p (p))
++ {
++ if (se == 0)
++ se = p + strlen (p) - 1;
++ pe = glob_patscan (p + 2, se, 0);
++ if (pe == 0)
++ continue;
++ else if (*pe == 0)
++ break;
++ p = pe - 1; /* will do increment above */
++ continue;
++ }
++ if (*p == dirsep)
++ d = p;
++ }
++ return d;
++ }
+
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 15
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 16
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-017
+
+Bug-Reported-by: Dan Douglas <ormaaj@gmail.com>
+Bug-Reference-ID: <7781746.RhfoTROLxF@smorgbox>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-05/msg00026.html
+
+Bug-Description:
+
+The code that creates local variables should not clear the `invisible'
+attribute when returning an existing local variable. Let the code that
+actually assigns a value clear it.
+
+Patch (apply with `patch -p0'):
+*** ../bash-4.3-patched/variables.c 2014-02-14 11:55:12.000000000 -0500
+--- variables.c 2014-05-07 10:53:57.000000000 -0400
+***************
+*** 2198,2205 ****
+ old_var = find_variable (name);
+ if (old_var && local_p (old_var) && old_var->context == variable_context)
+! {
+! VUNSETATTR (old_var, att_invisible); /* XXX */
+! return (old_var);
+! }
+
+ was_tmpvar = old_var && tempvar_p (old_var);
+--- 2260,2264 ----
+ old_var = find_variable (name);
+ if (old_var && local_p (old_var) && old_var->context == variable_context)
+! return (old_var);
+
+ was_tmpvar = old_var && tempvar_p (old_var);
+
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 16
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 17
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-018
+
+Bug-Reported-by: Geir Hauge <geir.hauge@gmail.com>
+Bug-Reference-ID: <CAO-BiTLOvfPXDypg61jcBausADrxUKJejakV2WTWP26cW0=rgA@mail.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-05/msg00040.html
+
+Bug-Description:
+
+When assigning an array variable using the compound assignment syntax,
+but using `declare' with the rhs of the compound assignment quoted, the
+shell did not mark the variable as visible after successfully performing
+the assignment.
+
+Patch (apply with `patch -p0'):
+*** ../bash-4.3-patched/arrayfunc.c 2014-03-28 10:54:21.000000000 -0400
+--- arrayfunc.c 2014-05-12 11:19:00.000000000 -0400
+***************
+*** 180,183 ****
+--- 180,184 ----
+ FREE (newval);
+
++ VUNSETATTR (entry, att_invisible); /* no longer invisible */
+ return (entry);
+ }
+
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 17
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 18
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ 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_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-020
+
+Bug-Reported-by: Jared Yanovich <slovichon@gmail.com>
+Bug-Reference-ID: <20140417073654.GB26875@nightderanger.psc.edu>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00065.html
+
+Bug-Description:
+
+When PS2 contains a command substitution, here-documents entered in an
+interactive shell can sometimes cause a segmentation fault.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.3-patched/shell.h 2012-12-25 21:11:01.000000000 -0500
+--- shell.h 2014-06-03 09:24:28.000000000 -0400
+***************
+*** 169,173 ****
+ int expand_aliases;
+ int echo_input_at_read;
+!
+ } sh_parser_state_t;
+
+--- 169,174 ----
+ int expand_aliases;
+ int echo_input_at_read;
+! int need_here_doc;
+!
+ } sh_parser_state_t;
+
+*** ../bash-4.3-patched/parse.y 2014-05-14 09:16:40.000000000 -0400
+--- parse.y 2014-04-30 09:27:59.000000000 -0400
+***************
+*** 2643,2647 ****
+
+ r = 0;
+! while (need_here_doc)
+ {
+ parser_state |= PST_HEREDOC;
+--- 2643,2647 ----
+
+ r = 0;
+! while (need_here_doc > 0)
+ {
+ parser_state |= PST_HEREDOC;
+***************
+*** 6076,6079 ****
+--- 6076,6080 ----
+ ps->expand_aliases = expand_aliases;
+ ps->echo_input_at_read = echo_input_at_read;
++ ps->need_here_doc = need_here_doc;
+
+ ps->token = token;
+***************
+*** 6124,6127 ****
+--- 6125,6129 ----
+ expand_aliases = ps->expand_aliases;
+ echo_input_at_read = ps->echo_input_at_read;
++ need_here_doc = ps->need_here_doc;
+
+ FREE (token);
+*** ../bash-4.3-patched/y.tab.c 2014-04-07 11:56:12.000000000 -0400
+--- y.tab.c 2014-07-30 09:55:57.000000000 -0400
+***************
+*** 4955,4959 ****
+
+ r = 0;
+! while (need_here_doc)
+ {
+ parser_state |= PST_HEREDOC;
+--- 5151,5155 ----
+
+ r = 0;
+! while (need_here_doc > 0)
+ {
+ parser_state |= PST_HEREDOC;
+***************
+*** 8388,8391 ****
+--- 8584,8588 ----
+ ps->expand_aliases = expand_aliases;
+ ps->echo_input_at_read = echo_input_at_read;
++ ps->need_here_doc = need_here_doc;
+
+ ps->token = token;
+***************
+*** 8436,8439 ****
+--- 8633,8637 ----
+ expand_aliases = ps->expand_aliases;
+ echo_input_at_read = ps->echo_input_at_read;
++ need_here_doc = ps->need_here_doc;
+
+ FREE (token);
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 19
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 20
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-021
+
+Bug-Reported-by: Jared Yanovich <slovichon@gmail.com>
+Bug-Reference-ID: <20140625225019.GJ17044@nightderanger.psc.edu>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00070.html
+
+Bug-Description:
+
+When the readline `revert-all-at-newline' option is set, pressing newline
+when the current line is one retrieved from history results in a double free
+and a segmentation fault.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.3-patched/lib/readline/misc.c 2012-09-01 18:03:11.000000000 -0400
+--- lib/readline/misc.c 2014-06-30 13:41:19.000000000 -0400
+***************
+*** 462,465 ****
+--- 462,466 ----
+ /* Set up rl_line_buffer and other variables from history entry */
+ rl_replace_from_history (entry, 0); /* entry->line is now current */
++ entry->data = 0; /* entry->data is now current undo list */
+ /* Undo all changes to this history entry */
+ while (rl_undo_list)
+***************
+*** 469,473 ****
+ FREE (entry->line);
+ entry->line = savestring (rl_line_buffer);
+- entry->data = 0;
+ }
+ entry = previous_history ();
+--- 470,473 ----
+
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 20
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 21
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-022
+
+Bug-Reported-by: scorp.dev.null@gmail.com
+Bug-Reference-ID: <E1WxXw8-0007iE-Bi@pcm14>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00061.html
+
+Bug-Description:
+
+Using nested pipelines within loops with the `lastpipe' option set can result
+in a segmentation fault.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.3-patched/execute_cmd.c 2014-01-31 10:54:52.000000000 -0500
+--- execute_cmd.c 2014-06-19 08:05:49.000000000 -0400
+***************
+*** 2410,2414 ****
+ lstdin = wait_for (lastpid);
+ #if defined (JOB_CONTROL)
+! exec_result = job_exit_status (lastpipe_jid);
+ #endif
+ unfreeze_jobs_list ();
+--- 2425,2438 ----
+ lstdin = wait_for (lastpid);
+ #if defined (JOB_CONTROL)
+! /* If wait_for removes the job from the jobs table, use result of last
+! command as pipeline's exit status as usual. The jobs list can get
+! frozen and unfrozen at inconvenient times if there are multiple pipelines
+! running simultaneously. */
+! if (INVALID_JOB (lastpipe_jid) == 0)
+! exec_result = job_exit_status (lastpipe_jid);
+! else if (pipefail_opt)
+! exec_result = exec_result | lstdin; /* XXX */
+! /* otherwise we use exec_result */
+!
+ #endif
+ unfreeze_jobs_list ();
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 21
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 22
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-023
+
+Bug-Reported-by: Tim Friske <me@timfriske.com>
+Bug-Reference-ID: <CAM1RzOcOR9zzC2i+aeES6LtbHNHoOV+0pZEYPrqxv_QAii-RXA@mail.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00056.html
+
+Bug-Description:
+
+Bash does not correctly parse process substitution constructs that contain
+unbalanced parentheses as part of the contained command.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.3-patched/subst.h 2014-01-11 21:02:27.000000000 -0500
+--- subst.h 2014-07-20 17:25:01.000000000 -0400
+***************
+*** 83,87 ****
+ Start extracting at (SINDEX) as if we had just seen "<(".
+ Make (SINDEX) get the position just after the matching ")". */
+! extern char *extract_process_subst __P((char *, char *, int *));
+ #endif /* PROCESS_SUBSTITUTION */
+
+--- 83,87 ----
+ Start extracting at (SINDEX) as if we had just seen "<(".
+ Make (SINDEX) get the position just after the matching ")". */
+! extern char *extract_process_subst __P((char *, char *, int *, int));
+ #endif /* PROCESS_SUBSTITUTION */
+
+*** ../bash-4.3-patched/subst.c 2014-05-15 08:26:45.000000000 -0400
+--- subst.c 2014-07-20 17:26:44.000000000 -0400
+***************
+*** 1193,1202 ****
+ Make (SINDEX) get the position of the matching ")". */ /*))*/
+ char *
+! extract_process_subst (string, starter, sindex)
+ char *string;
+ char *starter;
+ int *sindex;
+ {
+ return (extract_delimited_string (string, sindex, starter, "(", ")", SX_COMMAND));
+ }
+ #endif /* PROCESS_SUBSTITUTION */
+--- 1193,1208 ----
+ Make (SINDEX) get the position of the matching ")". */ /*))*/
+ char *
+! extract_process_subst (string, starter, sindex, xflags)
+ char *string;
+ char *starter;
+ int *sindex;
++ int xflags;
+ {
++ #if 0
+ return (extract_delimited_string (string, sindex, starter, "(", ")", SX_COMMAND));
++ #else
++ xflags |= (no_longjmp_on_fatal_error ? SX_NOLONGJMP : 0);
++ return (xparse_dolparen (string, string+*sindex, sindex, xflags));
++ #endif
+ }
+ #endif /* PROCESS_SUBSTITUTION */
+***************
+*** 1786,1790 ****
+ if (string[si] == '\0')
+ CQ_RETURN(si);
+! temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si);
+ free (temp); /* no SX_ALLOC here */
+ i = si;
+--- 1792,1796 ----
+ if (string[si] == '\0')
+ CQ_RETURN(si);
+! temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si, 0);
+ free (temp); /* no SX_ALLOC here */
+ i = si;
+***************
+*** 8250,8254 ****
+ t_index = sindex + 1; /* skip past both '<' and LPAREN */
+
+! temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index); /*))*/
+ sindex = t_index;
+
+--- 8256,8260 ----
+ t_index = sindex + 1; /* skip past both '<' and LPAREN */
+
+! temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index, 0); /*))*/
+ sindex = t_index;
+
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 22
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 23
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-024
+
+Bug-Reported-by: Corentin Peuvrel <cpeuvrel@pom-monitoring.com>
+Bug-Reference-ID: <53CE9E5D.6050203@pom-monitoring.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-07/msg00021.html
+
+Bug-Description:
+
+Indirect variable references do not work correctly if the reference
+variable expands to an array reference using a subscript other than 0
+(e.g., foo='bar[1]' ; echo ${!foo}).
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.3-patched/subst.c 2014-06-03 09:32:44.000000000 -0400
+--- subst.c 2014-07-23 09:58:19.000000000 -0400
+***************
+*** 7375,7379 ****
+
+ if (want_indir)
+! tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
+ else
+ tdesc = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND|(pflags&(PF_NOSPLIT2|PF_ASSIGNRHS)), &ind);
+--- 7445,7455 ----
+
+ if (want_indir)
+! {
+! tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
+! /* Turn off the W_ARRAYIND flag because there is no way for this function
+! to return the index we're supposed to be using. */
+! if (tdesc && tdesc->flags)
+! tdesc->flags &= ~W_ARRAYIND;
+! }
+ else
+ tdesc = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND|(pflags&(PF_NOSPLIT2|PF_ASSIGNRHS)), &ind);
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 23
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 24
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-025
+
+Bug-Reported-by: Stephane Chazelas <stephane.chazelas@gmail.com>
+Bug-Reference-ID:
+Bug-Reference-URL:
+
+Bug-Description:
+
+Under certain circumstances, bash will execute user code while processing the
+environment for exported function definitions.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.3-patched/builtins/common.h 2013-07-08 16:54:47.000000000 -0400
+--- builtins/common.h 2014-09-12 14:25:47.000000000 -0400
+***************
+*** 34,37 ****
+--- 49,54 ----
+ #define SEVAL_PARSEONLY 0x020
+ #define SEVAL_NOLONGJMP 0x040
++ #define SEVAL_FUNCDEF 0x080 /* only allow function definitions */
++ #define SEVAL_ONECMD 0x100 /* only allow a single command */
+
+ /* Flags for describe_command, shared between type.def and command.def */
+*** ../bash-4.3-patched/builtins/evalstring.c 2014-02-11 09:42:10.000000000 -0500
+--- builtins/evalstring.c 2014-09-14 14:15:13.000000000 -0400
+***************
+*** 309,312 ****
+--- 313,324 ----
+ struct fd_bitmap *bitmap;
+
++ if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def)
++ {
++ internal_warning ("%s: ignoring function definition attempt", from_file);
++ should_jump_to_top_level = 0;
++ last_result = last_command_exit_value = EX_BADUSAGE;
++ break;
++ }
++
+ bitmap = new_fd_bitmap (FD_BITMAP_SIZE);
+ begin_unwind_frame ("pe_dispose");
+***************
+*** 369,372 ****
+--- 381,387 ----
+ dispose_fd_bitmap (bitmap);
+ discard_unwind_frame ("pe_dispose");
++
++ if (flags & SEVAL_ONECMD)
++ break;
+ }
+ }
+*** ../bash-4.3-patched/variables.c 2014-05-15 08:26:50.000000000 -0400
+--- variables.c 2014-09-14 14:23:35.000000000 -0400
+***************
+*** 359,369 ****
+ strcpy (temp_string + char_index + 1, string);
+
+! if (posixly_correct == 0 || legal_identifier (name))
+! parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST);
+!
+! /* Ancient backwards compatibility. Old versions of bash exported
+! functions like name()=() {...} */
+! if (name[char_index - 1] == ')' && name[char_index - 2] == '(')
+! name[char_index - 2] = '\0';
+
+ if (temp_var = find_function (name))
+--- 364,372 ----
+ strcpy (temp_string + char_index + 1, string);
+
+! /* Don't import function names that are invalid identifiers from the
+! environment, though we still allow them to be defined as shell
+! variables. */
+! if (legal_identifier (name))
+! parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
+
+ if (temp_var = find_function (name))
+***************
+*** 382,389 ****
+ report_error (_("error importing function definition for `%s'"), name);
+ }
+-
+- /* ( */
+- if (name[char_index - 1] == ')' && name[char_index - 2] == '\0')
+- name[char_index - 2] = '('; /* ) */
+ }
+ #if defined (ARRAY_VARS)
+--- 385,388 ----
+*** ../bash-4.3-patched/subst.c 2014-08-11 11:16:35.000000000 -0400
+--- subst.c 2014-09-12 15:31:04.000000000 -0400
+***************
+*** 8048,8052 ****
+ goto return0;
+ }
+! else if (var = find_variable_last_nameref (temp1))
+ {
+ temp = nameref_cell (var);
+--- 8118,8124 ----
+ goto return0;
+ }
+! else if (var && (invisible_p (var) || var_isset (var) == 0))
+! temp = (char *)NULL;
+! else if ((var = find_variable_last_nameref (temp1)) && var_isset (var) && invisible_p (var) == 0)
+ {
+ temp = nameref_cell (var);
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 24
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 25
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-026
+
+Bug-Reported-by: Tavis Ormandy <taviso () cmpxchg8b com>
+Bug-Reference-ID:
+Bug-Reference-URL: http://twitter.com/taviso/statuses/514887394294652929
+
+Bug-Description:
+
+Under certain circumstances, bash can incorrectly save a lookahead character and
+return it on a subsequent call, even when reading a new line.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.3.25/parse.y 2014-07-30 10:14:31.000000000 -0400
+--- parse.y 2014-09-25 20:20:21.000000000 -0400
+***************
+*** 2954,2957 ****
+--- 2954,2959 ----
+ word_desc_to_read = (WORD_DESC *)NULL;
+
++ eol_ungetc_lookahead = 0;
++
+ current_token = '\n'; /* XXX */
+ last_read_token = '\n';
+*** ../bash-4.3.25/y.tab.c 2014-07-30 10:14:32.000000000 -0400
+--- y.tab.c 2014-09-25 20:21:48.000000000 -0400
+***************
+*** 5266,5269 ****
+--- 5266,5271 ----
+ word_desc_to_read = (WORD_DESC *)NULL;
+
++ eol_ungetc_lookahead = 0;
++
+ current_token = '\n'; /* XXX */
+ last_read_token = '\n';
+***************
+*** 8540,8542 ****
+ }
+ #endif /* HANDLE_MULTIBYTE */
+-
+--- 8542,8543 ----
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 25
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 26
+
+ #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-027
+
+Bug-Reported-by: Florian Weimer <fweimer@redhat.com>
+Bug-Reference-ID:
+Bug-Reference-URL:
+
+Bug-Description:
+
+This patch changes the encoding bash uses for exported functions to avoid
+clashes with shell variables and to avoid depending only on an environment
+variable's contents to determine whether or not to interpret it as a shell
+function.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.3.26/variables.c 2014-09-25 23:02:18.000000000 -0400
+--- variables.c 2014-09-27 20:52:04.000000000 -0400
+***************
+*** 84,87 ****
+--- 84,92 ----
+ #define ifsname(s) ((s)[0] == 'I' && (s)[1] == 'F' && (s)[2] == 'S' && (s)[3] == '\0')
+
++ #define BASHFUNC_PREFIX "BASH_FUNC_"
++ #define BASHFUNC_PREFLEN 10 /* == strlen(BASHFUNC_PREFIX */
++ #define BASHFUNC_SUFFIX "%%"
++ #define BASHFUNC_SUFFLEN 2 /* == strlen(BASHFUNC_SUFFIX) */
++
+ extern char **environ;
+
+***************
+*** 280,284 ****
+ static void dispose_temporary_env __P((sh_free_func_t *));
+
+! static inline char *mk_env_string __P((const char *, const char *));
+ static char **make_env_array_from_var_list __P((SHELL_VAR **));
+ static char **make_var_export_array __P((VAR_CONTEXT *));
+--- 285,289 ----
+ static void dispose_temporary_env __P((sh_free_func_t *));
+
+! static inline char *mk_env_string __P((const char *, const char *, int));
+ static char **make_env_array_from_var_list __P((SHELL_VAR **));
+ static char **make_var_export_array __P((VAR_CONTEXT *));
+***************
+*** 350,369 ****
+ /* If exported function, define it now. Don't import functions from
+ the environment in privileged mode. */
+! if (privmode == 0 && read_but_dont_execute == 0 && STREQN ("() {", string, 4))
+ {
+ string_length = strlen (string);
+! temp_string = (char *)xmalloc (3 + string_length + char_index);
+
+! strcpy (temp_string, name);
+! temp_string[char_index] = ' ';
+! strcpy (temp_string + char_index + 1, string);
+
+ /* Don't import function names that are invalid identifiers from the
+ environment, though we still allow them to be defined as shell
+ variables. */
+! if (legal_identifier (name))
+! parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
+
+! if (temp_var = find_function (name))
+ {
+ VSETATTR (temp_var, (att_exported|att_imported));
+--- 355,385 ----
+ /* If exported function, define it now. Don't import functions from
+ the environment in privileged mode. */
+! if (privmode == 0 && read_but_dont_execute == 0 &&
+! STREQN (BASHFUNC_PREFIX, name, BASHFUNC_PREFLEN) &&
+! STREQ (BASHFUNC_SUFFIX, name + char_index - BASHFUNC_SUFFLEN) &&
+! STREQN ("() {", string, 4))
+ {
++ size_t namelen;
++ char *tname; /* desired imported function name */
++
++ namelen = char_index - BASHFUNC_PREFLEN - BASHFUNC_SUFFLEN;
++
++ tname = name + BASHFUNC_PREFLEN; /* start of func name */
++ tname[namelen] = '\0'; /* now tname == func name */
++
+ string_length = strlen (string);
+! temp_string = (char *)xmalloc (namelen + string_length + 2);
+
+! memcpy (temp_string, tname, namelen);
+! temp_string[namelen] = ' ';
+! memcpy (temp_string + namelen + 1, string, string_length + 1);
+
+ /* Don't import function names that are invalid identifiers from the
+ environment, though we still allow them to be defined as shell
+ variables. */
+! if (absolute_program (tname) == 0 && (posixly_correct == 0 || legal_identifier (tname)))
+! parse_and_execute (temp_string, tname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
+
+! if (temp_var = find_function (tname))
+ {
+ VSETATTR (temp_var, (att_exported|att_imported));
+***************
+*** 378,383 ****
+ }
+ last_command_exit_value = 1;
+! report_error (_("error importing function definition for `%s'"), name);
+ }
+ }
+ #if defined (ARRAY_VARS)
+--- 394,402 ----
+ }
+ last_command_exit_value = 1;
+! report_error (_("error importing function definition for `%s'"), tname);
+ }
++
++ /* Restore original suffix */
++ tname[namelen] = BASHFUNC_SUFFIX[0];
+ }
+ #if defined (ARRAY_VARS)
+***************
+*** 2955,2959 ****
+
+ INVALIDATE_EXPORTSTR (var);
+! var->exportstr = mk_env_string (name, value);
+
+ array_needs_making = 1;
+--- 2974,2978 ----
+
+ INVALIDATE_EXPORTSTR (var);
+! var->exportstr = mk_env_string (name, value, 0);
+
+ array_needs_making = 1;
+***************
+*** 3853,3871 ****
+
+ static inline char *
+! mk_env_string (name, value)
+ const char *name, *value;
+ {
+! int name_len, value_len;
+! char *p;
+
+ name_len = strlen (name);
+ value_len = STRLEN (value);
+! p = (char *)xmalloc (2 + name_len + value_len);
+! strcpy (p, name);
+! p[name_len] = '=';
+ if (value && *value)
+! strcpy (p + name_len + 1, value);
+ else
+! p[name_len + 1] = '\0';
+ return (p);
+ }
+--- 3872,3911 ----
+
+ static inline char *
+! mk_env_string (name, value, isfunc)
+ const char *name, *value;
++ int isfunc;
+ {
+! size_t name_len, value_len;
+! char *p, *q;
+
+ name_len = strlen (name);
+ value_len = STRLEN (value);
+!
+! /* If we are exporting a shell function, construct the encoded function
+! name. */
+! if (isfunc && value)
+! {
+! p = (char *)xmalloc (BASHFUNC_PREFLEN + name_len + BASHFUNC_SUFFLEN + value_len + 2);
+! q = p;
+! memcpy (q, BASHFUNC_PREFIX, BASHFUNC_PREFLEN);
+! q += BASHFUNC_PREFLEN;
+! memcpy (q, name, name_len);
+! q += name_len;
+! memcpy (q, BASHFUNC_SUFFIX, BASHFUNC_SUFFLEN);
+! q += BASHFUNC_SUFFLEN;
+! }
+! else
+! {
+! p = (char *)xmalloc (2 + name_len + value_len);
+! memcpy (p, name, name_len);
+! q = p + name_len;
+! }
+!
+! q[0] = '=';
+ if (value && *value)
+! memcpy (q + 1, value, value_len + 1);
+ else
+! q[1] = '\0';
+!
+ return (p);
+ }
+***************
+*** 3953,3957 ****
+ using the cached exportstr... */
+ list[list_index] = USE_EXPORTSTR ? savestring (value)
+! : mk_env_string (var->name, value);
+
+ if (USE_EXPORTSTR == 0)
+--- 3993,3997 ----
+ using the cached exportstr... */
+ list[list_index] = USE_EXPORTSTR ? savestring (value)
+! : mk_env_string (var->name, value, function_p (var));
+
+ if (USE_EXPORTSTR == 0)
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 26
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 27
+
+ #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
-From cdb755c5f16a6768c3e8b1f345fe15fc9244228d Mon Sep 17 00:00:00 2001
-From: Simon Kelley <simon@thekelleys.org.uk>
-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 <nettle/nettle-meta.h>
- #include <nettle/bignum.h>
-
-+/* 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 <nettle/dsa-compat.h>
-+#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
-
+++ /dev/null
-From 063efb330a3f341c2548e2cf1f67f83e49cd6395 Mon Sep 17 00:00:00 2001
-From: Simon Kelley <simon@thekelleys.org.uk>
-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 <nettle/ecc-curve.h>
- #endif
- #include <nettle/nettle-meta.h>
--#include <gmp.h>
-+#include <nettle/bignum.h>
-+
-
- #define SERIAL_UNDEF -100
- #define SERIAL_EQ 0
---
-1.7.10.4
-
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 @@
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;
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
+
+#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;
+++ /dev/null
- READLINE PATCH REPORT
- =====================
-
-Readline-Release: 6.2
-Patch-ID: readline62-001
-
-Bug-Reported-by: Clark J. Wang <dearvoid@gmail.com>
-Bug-Reference-ID: <AANLkTimGbW7aC4E5infXP6ku5WPci4t=xVc+L1SyHqrD@mail.gmail.com>
-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;
- }
+++ /dev/null
- READLINE PATCH REPORT
- =====================
-
-Readline-Release: 6.2
-Patch-ID: readline62-002
-
-Bug-Reported-by: Vincent Sheffer <vince.sheffer@apisphere.com>
-Bug-Reference-ID: <F13C1C4F-C44C-4071-BFED-4BB6D13CF92F@apisphere.com>
-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
+++ /dev/null
- READLINE PATCH REPORT
- =====================
-
-Readline-Release: 6.2
-Patch-ID: readline62-003
-
-Bug-Reported-by: Max Horn <max@quendi.de>
-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
+++ /dev/null
- 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
--- /dev/null
+ READLINE PATCH REPORT
+ =====================
+
+Readline-Release: 6.3
+Patch-ID: readline63-001
+
+Bug-Reported-by: Daan van Rossum <daan@flash.uchicago.edu>
+Bug-Reference-ID: <20140307072523.GA14250@flash.uchicago.edu>
+Bug-Reference-URL:
+
+Bug-Description:
+
+The `.' command in vi mode cannot undo multi-key commands beginning with
+`c', `d', and `y' (command plus motion specifier).
+
+Patch (apply with `patch -p0'):
+
+*** ../readline-6.3/readline.c 2013-10-28 14:58:06.000000000 -0400
+--- readline.c 2014-03-07 15:20:33.000000000 -0500
+***************
+*** 965,969 ****
+ if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
+ key != ANYOTHERKEY &&
+! rl_key_sequence_length == 1 && /* XXX */
+ _rl_vi_textmod_command (key))
+ _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
+--- 965,969 ----
+ if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
+ key != ANYOTHERKEY &&
+! _rl_dispatching_keymap == vi_movement_keymap &&
+ _rl_vi_textmod_command (key))
+ _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
+*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500
+--- patchlevel 2014-03-21 08:28:40.000000000 -0400
+***************
+*** 1,3 ****
+ # Do not edit -- exists only for use by patch
+
+! 5
+--- 1,3 ----
+ # Do not edit -- exists only for use by patch
+
+! 1
--- /dev/null
+ READLINE PATCH REPORT
+ =====================
+
+Readline-Release: 6.3
+Patch-ID: readline63-002
+
+Bug-Reported-by: Anatol Pomozov <anatol.pomozov@gmail.com>
+Bug-Reference-ID: <CAOMFOmXy3mT2So5GQ5F-smCVArQuAeBwZ2QKzgCtMeXJoDeYOQ@mail.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2014-03/msg00010.html
+
+Bug-Description:
+
+When in callback mode, some readline commands can cause readline to seg
+fault by passing invalid contexts to callback functions.
+
+Patch (apply with `patch -p0'):
+
+*** ../readline-6.3/readline.c 2013-10-28 14:58:06.000000000 -0400
+--- readline.c 2014-03-10 14:15:02.000000000 -0400
+***************
+*** 745,749 ****
+
+ RL_CHECK_SIGNALS ();
+! if (r == 0) /* success! */
+ {
+ _rl_keyseq_chain_dispose ();
+--- 745,750 ----
+
+ RL_CHECK_SIGNALS ();
+! /* We only treat values < 0 specially to simulate recursion. */
+! if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0)) /* success! or failure! */
+ {
+ _rl_keyseq_chain_dispose ();
+*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500
+--- patchlevel 2014-03-21 08:28:40.000000000 -0400
+***************
+*** 1,3 ****
+ # Do not edit -- exists only for use by patch
+
+! 1
+--- 1,3 ----
+ # Do not edit -- exists only for use by patch
+
+! 2
--- /dev/null
+ 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
--- /dev/null
+ READLINE PATCH REPORT
+ =====================
+
+Readline-Release: 6.3
+Patch-ID: readline63-004
+
+Bug-Reported-by: Egmont Koblinger <egmont@gmail.com>
+Bug-Reference-ID: <CAGWcZk+bU5Jo1M+tutGvL-250UBE9DXjpeJVofYJSFcqFEVfMg@mail.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00153.html
+
+Bug-Description:
+
+The signal handling changes to bash and readline (to avoid running any code
+in a signal handler context) cause the cursor to be placed on the wrong
+line of a multi-line command after a ^C interrupts editing.
+
+Patch (apply with `patch -p0'):
+
+*** ../readline-6.3-patched/display.c 2013-12-27 13:10:56.000000000 -0500
+--- display.c 2014-03-27 11:52:45.000000000 -0400
+***************
+*** 2678,2682 ****
+ if (_rl_echoing_p)
+ {
+! _rl_move_vert (_rl_vis_botlin);
+ _rl_vis_botlin = 0;
+ fflush (rl_outstream);
+--- 2678,2683 ----
+ if (_rl_echoing_p)
+ {
+! if (_rl_vis_botlin > 0) /* minor optimization plus bug fix */
+! _rl_move_vert (_rl_vis_botlin);
+ _rl_vis_botlin = 0;
+ fflush (rl_outstream);
+*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500
+--- patchlevel 2014-03-21 08:28:40.000000000 -0400
+***************
+*** 1,3 ****
+ # Do not edit -- exists only for use by patch
+
+! 3
+--- 1,3 ----
+ # Do not edit -- exists only for use by patch
+
+! 4
--- /dev/null
+ READLINE PATCH REPORT
+ =====================
+
+Readline-Release: 6.3
+Patch-ID: readline63-005
+
+Bug-Reported-by: Juergen Daubert <jue@jue.li>
+Bug-Reference-ID: <20140303180430.GA7346@jue.netz>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2014-03/msg00002.html
+
+Bug-Description:
+
+There are still applications using the deprecated Function/VFunction/etc.
+typedefs in rltypedefs.h. This patch restores the typedefs, but attempts
+to mark them as deprecated using gcc/clang attributes. Thanks to Max Horn
+for the suggestion.
+
+Patch (apply with `patch -p0'):
+
+*** ../readline-6.3-patched/rltypedefs.h 2011-03-26 14:53:31.000000000 -0400
+--- rltypedefs.h 2014-04-10 11:30:45.000000000 -0400
+***************
+*** 27,30 ****
+--- 27,49 ----
+ #endif
+
++ /* Old-style, attempt to mark as deprecated in some way people will notice. */
++
++ #if !defined (_FUNCTION_DEF)
++ # define _FUNCTION_DEF
++
++ #if defined(__GNUC__) || defined(__clang__)
++ typedef int Function () __attribute__ ((deprecated));
++ typedef void VFunction () __attribute__ ((deprecated));
++ typedef char *CPFunction () __attribute__ ((deprecated));
++ typedef char **CPPFunction () __attribute__ ((deprecated));
++ #else
++ typedef int Function ();
++ typedef void VFunction ();
++ typedef char *CPFunction ();
++ typedef char **CPPFunction ();
++ #endif
++
++ #endif /* _FUNCTION_DEF */
++
+ /* New style. */
+
+*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500
+--- patchlevel 2014-03-21 08:28:40.000000000 -0400
+***************
+*** 1,3 ****
+ # Do not edit -- exists only for use by patch
+
+! 4
+--- 1,3 ----
+ # Do not edit -- exists only for use by patch
+
+! 5
--- /dev/null
+ READLINE PATCH REPORT
+ =====================
+
+Readline-Release: 6.3
+Patch-ID: readline63-006
+
+Bug-Reported-by: <Trond.Endrestol@ximalas.info>
+Bug-Reference-ID: <alpine.BSF.2.03.1404192114310.1973@enterprise.ximalas.info>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00069.html
+
+Bug-Description:
+
+Using reverse-i-search when horizontal scrolling is enabled does not redisplay
+the entire line containing the successful search results.
+
+Patch (apply with `patch -p0'):
+
+*** ../readline-6.3-patched/display.c 2014-04-08 18:19:36.000000000 -0400
+--- display.c 2014-04-20 18:32:52.000000000 -0400
+***************
+*** 1638,1642 ****
+ the spot of first difference is before the end of the invisible chars,
+ lendiff needs to be adjusted. */
+! if (current_line == 0 && !_rl_horizontal_scroll_mode &&
+ current_invis_chars != visible_wrap_offset)
+ {
+--- 1638,1642 ----
+ the spot of first difference is before the end of the invisible chars,
+ lendiff needs to be adjusted. */
+! if (current_line == 0 && /* !_rl_horizontal_scroll_mode && */
+ current_invis_chars != visible_wrap_offset)
+ {
+***************
+*** 1826,1831 ****
+ _rl_last_c_pos += bytes_to_insert;
+
+ if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new)))
+! goto clear_rest_of_line;
+ }
+ }
+--- 1826,1836 ----
+ _rl_last_c_pos += bytes_to_insert;
+
++ /* XXX - we only want to do this if we are at the end of the line
++ so we move there with _rl_move_cursor_relative */
+ if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new)))
+! {
+! _rl_move_cursor_relative (ne-new, new);
+! goto clear_rest_of_line;
+! }
+ }
+ }
+*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500
+--- patchlevel 2014-03-21 08:28:40.000000000 -0400
+***************
+*** 1,3 ****
+ # Do not edit -- exists only for use by patch
+
+! 5
+--- 1,3 ----
+ # Do not edit -- exists only for use by patch
+
+! 6