From 48f07c195761d0c7129b6beb314c339ba7164eaf Mon Sep 17 00:00:00 2001 From: Alexander Marx Date: Fri, 18 Jul 2014 08:44:45 +0200 Subject: [PATCH 01/36] Firewall: make DNAT only accessible from selected source network We added RED to the standard networks and now portforwardings are only useable from the selected source. If selected "all" the portforwarding can be used from any internal network. Else the access is only grnated from the selected source network. --- config/firewall/firewall-lib.pl | 53 ++++++++++++++++++++++----------- config/firewall/rules.pl | 25 ++++++++++++---- html/cgi-bin/firewall.cgi | 1 - html/cgi-bin/fwhosts.cgi | 8 ++++- 4 files changed, 63 insertions(+), 24 deletions(-) diff --git a/config/firewall/firewall-lib.pl b/config/firewall/firewall-lib.pl index c4a19e5d8..9b3f2bff4 100755 --- a/config/firewall/firewall-lib.pl +++ b/config/firewall/firewall-lib.pl @@ -217,7 +217,7 @@ sub get_std_net_ip }elsif($val eq 'BLUE'){ return "$netsettings{'BLUE_NETADDRESS'}/$netsettings{'BLUE_NETMASK'}"; }elsif($val eq 'RED'){ - return "0.0.0.0/0 -o $con"; + return "0.0.0.0/0"; }elsif($val =~ /OpenVPN/i){ return "$ovpnsettings{'DOVPN_SUBNET'}"; }elsif($val =~ /IPsec/i){ @@ -226,6 +226,23 @@ sub get_std_net_ip return ; } } +sub get_interface +{ + my $net=shift; + if($net eq "$netsettings{'GREEN_NETADDRESS'}/$netsettings{'GREEN_NETMASK'}"){ + return "$netsettings{'GREEN_DEV'}"; + } + if($net eq "$netsettings{'ORANGE_NETADDRESS'}/$netsettings{'ORANGE_NETMASK'}"){ + return "$netsettings{'ORANGE_DEV'}"; + } + if($net eq "$netsettings{'BLUE_NETADDRESS'}/$netsettings{'BLUE_NETMASK'}"){ + return "$netsettings{'BLUE_DEV'}"; + } + if($net eq "0.0.0.0/0"){ + return "$netsettings{'RED_DEV'}"; + } + return ""; +} sub get_net_ip { my $val=shift; @@ -305,9 +322,9 @@ sub get_address # address. Otherwise, we assume that it is an IP address. if ($key ~~ ["src_addr", "tgt_addr"]) { if (&General::validmac($value)) { - push(@ret, "-m mac --mac-source $value"); + push(@ret, ["-m mac --mac-source $value", ""]); } else { - push(@ret, $value); + push(@ret, [$value, ""]); } # If a default network interface (GREEN, BLUE, etc.) is selected, we @@ -316,88 +333,90 @@ sub get_address my $external_interface = &get_external_interface(); my $network_address = &get_std_net_ip($value, $external_interface); + if ($network_address) { - push(@ret, $network_address); + my $interface = &get_interface($network_address); + push(@ret, [$network_address, $interface]); } # Custom networks. } elsif ($key ~~ ["cust_net_src", "cust_net_tgt", "Custom Network"]) { my $network_address = &get_net_ip($value); if ($network_address) { - push(@ret, $network_address); + push(@ret, [$network_address, ""]); } # Custom hosts. } elsif ($key ~~ ["cust_host_src", "cust_host_tgt", "Custom Host"]) { my $host_address = &get_host_ip($value, $type); if ($host_address) { - push(@ret, $host_address); + push(@ret, [$host_address, ""]); } # OpenVPN networks. } elsif ($key ~~ ["ovpn_net_src", "ovpn_net_tgt", "OpenVPN static network"]) { my $network_address = &get_ovpn_net_ip($value, 1); if ($network_address) { - push(@ret, $network_address); + push(@ret, [$network_address, ""]); } # OpenVPN hosts. } elsif ($key ~~ ["ovpn_host_src", "ovpn_host_tgt", "OpenVPN static host"]) { my $host_address = &get_ovpn_host_ip($value, 33); if ($host_address) { - push(@ret, $host_address); + push(@ret, [$host_address, ""]); } # OpenVPN N2N. } elsif ($key ~~ ["ovpn_n2n_src", "ovpn_n2n_tgt", "OpenVPN N-2-N"]) { my $network_address = &get_ovpn_n2n_ip($value, 11); if ($network_address) { - push(@ret, $network_address); + push(@ret, [$network_address, ""]); } # IPsec networks. } elsif ($key ~~ ["ipsec_net_src", "ipsec_net_tgt", "IpSec Network"]) { my $network_address = &get_ipsec_net_ip($value, 11); if ($network_address) { - push(@ret, $network_address); + push(@ret, [$network_address, ""]); } # The firewall's own IP addresses. } elsif ($key ~~ ["ipfire", "ipfire_src"]) { # ALL if ($value eq "ALL") { - push(@ret, "0/0"); + push(@ret, ["0/0", ""]); # GREEN } elsif ($value eq "GREEN") { - push(@ret, $netsettings{"GREEN_ADDRESS"}); + push(@ret, [$netsettings{"GREEN_ADDRESS"}, ""]); # BLUE } elsif ($value eq "BLUE") { - push(@ret, $netsettings{"BLUE_ADDRESS"}); + push(@ret, [$netsettings{"BLUE_ADDRESS"}, ""]); # ORANGE } elsif ($value eq "ORANGE") { - push(@ret, $netsettings{"ORANGE_ADDRESS"}); + push(@ret, [$netsettings{"ORANGE_ADDRESS"}, ""]); # RED } elsif ($value ~~ ["RED", "RED1"]) { my $address = &get_external_address(); if ($address) { - push(@ret, $address); + push(@ret, [$address, ""]); } # Aliases } else { my $alias = &get_alias($value); if ($alias) { - push(@ret, $alias); + push(@ret, [$alias, ""]); } } # If nothing was selected, we assume "any". } else { - push(@ret, "0/0"); + push(@ret, ["0/0", ""]); } return @ret; diff --git a/config/firewall/rules.pl b/config/firewall/rules.pl index c0ddcb2d6..887c05265 100755 --- a/config/firewall/rules.pl +++ b/config/firewall/rules.pl @@ -291,24 +291,28 @@ sub buildrules { foreach my $src (@sources) { # Skip invalid source. - next unless ($src); + next unless (@$src[0]); # 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 if (!$dst || ($dst eq "none")); + next if (!@$dst[0] || (@$dst[0] 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 = (); @@ -325,12 +329,20 @@ sub buildrules { push(@source_options, ("-s", $source)); } + if ($source_intf) { + push(@source_options, ("-i", $source_intf)); + } + # Prepare destination options. my @destination_options = (); if ($destination) { push(@destination_options, ("-d", $destination)); } + if ($destination_intf) { + push(@destination_options, ("-o", $destination_intf)); + } + # Add time constraint options. push(@options, @time_options); @@ -364,7 +376,7 @@ sub buildrules { # Make port-forwardings useable from the internal networks. my @internal_addresses = &fwlib::get_internal_firewall_ip_addresses(1); unless ($nat_address ~~ @internal_addresses) { - &add_dnat_mangle_rules($nat_address, @nat_options); + &add_dnat_mangle_rules($nat_address, $source_intf, @nat_options); } push(@nat_options, @source_options); @@ -681,6 +693,7 @@ sub get_dnat_target_port { sub add_dnat_mangle_rules { my $nat_address = shift; + my $interface = shift; my @options = @_; my $mark = 0; @@ -691,6 +704,8 @@ sub add_dnat_mangle_rules { next unless (exists $defaultNetworks{$zone . "_NETADDRESS"}); next unless (exists $defaultNetworks{$zone . "_NETMASK"}); + next if ($interface && $interface ne $defaultNetworks{$zone . "_DEV"}); + my @mangle_options = @options; my $netaddress = $defaultNetworks{$zone . "_NETADDRESS"}; diff --git a/html/cgi-bin/firewall.cgi b/html/cgi-bin/firewall.cgi index e6ae5272a..2539d102c 100644 --- a/html/cgi-bin/firewall.cgi +++ b/html/cgi-bin/firewall.cgi @@ -1064,7 +1064,6 @@ print< Date: Fri, 5 Sep 2014 08:09:54 +0200 Subject: [PATCH 02/36] fw-groups: cleanup checksubnets Now the checksubnets function from general-functions.pl is used. --- html/cgi-bin/fwhosts.cgi | 33 +++------------------------------ 1 file changed, 3 insertions(+), 30 deletions(-) diff --git a/html/cgi-bin/fwhosts.cgi b/html/cgi-bin/fwhosts.cgi index 1f96336a6..4e8d2347c 100644 --- a/html/cgi-bin/fwhosts.cgi +++ b/html/cgi-bin/fwhosts.cgi @@ -291,42 +291,14 @@ if ($fwhostsettings{'ACTION'} eq 'savenet' ) $errormessage=$errormessage.$Lang::tr{'fwhost err sub32'}; } if($fwhostsettings{'error'} ne 'on'){ - #check if we use one of ipfire's networks (green,orange,blue) - if (($ownnet{'GREEN_NETADDRESS'} ne '' && $ownnet{'GREEN_NETADDRESS'} ne '0.0.0.0') && ($fwhostsettings{'IP'} eq $ownnet{'GREEN_NETADDRESS'} && $fwhostsettings{'SUBNET'} eq $ownnet{'GREEN_NETMASK'})) - { - $errormessage=$errormessage.$Lang::tr{'ccd err green'}."
"; - $fwhostsettings{'HOSTNAME'} = $fwhostsettings{'orgname'}; + my $fullip="$fwhostsettings{'IP'}/".&General::iporsubtocidr($fwhostsettings{'SUBNET'}); + $errormessage=$errormessage.&General::checksubnets($fwhostsettings{'HOSTNAME'},$fullip,""); if ($fwhostsettings{'update'} eq 'on'){$fwhostsettings{'ACTION'}='editnet';} - } - if (($ownnet{'ORANGE_NETADDRESS'} ne '' && $ownnet{'ORANGE_NETADDRESS'} ne '0.0.0.0') && ($fwhostsettings{'IP'} eq $ownnet{'ORANGE_NETADDRESS'} && $fwhostsettings{'SUBNET'} eq $ownnet{'ORANGE_NETMASK'})) - { - $errormessage=$errormessage.$Lang::tr{'ccd err orange'}."
"; - $fwhostsettings{'HOSTNAME'} = $fwhostsettings{'orgname'}; - if ($fwhostsettings{'update'} eq 'on'){$fwhostsettings{'ACTION'}='editnet';} - } - if (($ownnet{'BLUE_NETADDRESS'} ne '' && $ownnet{'BLUE_NETADDRESS'} ne '0.0.0.0') && ($fwhostsettings{'IP'} eq $ownnet{'BLUE_NETADDRESS'} && $fwhostsettings{'SUBNET'} eq $ownnet{'BLUE_NETMASK'})) - { - $errormessage=$errormessage.$Lang::tr{'ccd err blue'}."
"; - $fwhostsettings{'HOSTNAME'} = $fwhostsettings{'orgname'}; - if ($fwhostsettings{'update'} eq 'on'){$fwhostsettings{'ACTION'}='editnet';} - } - if (($ownnet{'RED_NETADDRESS'} ne '' && $ownnet{'RED_NETADDRESS'} ne '0.0.0.0') && ($fwhostsettings{'IP'} eq $ownnet{'RED_NETADDRESS'} && $fwhostsettings{'SUBNET'} eq $ownnet{'RED_NETMASK'})) - { - $errormessage=$errormessage.$Lang::tr{'ccd err red'}."
"; - $fwhostsettings{'HOSTNAME'} = $fwhostsettings{'orgname'}; - if ($fwhostsettings{'update'} eq 'on'){$fwhostsettings{'ACTION'}='editnet';} - } } #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'} = ''; @@ -417,6 +389,7 @@ if ($fwhostsettings{'ACTION'} eq 'savenet' ) &addnet; &viewtablenet; }else { + $fwhostsettings{'HOSTNAME'} = $fwhostsettings{'orgname'}; &addnet; &viewtablenet; } From 79ad6f7e539e82ba3dc51ca025ffcb7267f7c51f Mon Sep 17 00:00:00 2001 From: Alexander Marx Date: Thu, 11 Sep 2014 10:59:25 +0200 Subject: [PATCH 03/36] BUG10615 part1: Add connectionlimit to firewallgui --- html/cgi-bin/firewall.cgi | 70 +++++++++++++++++++++++++++++++-------- langs/de/cgi-bin/de.pl | 3 ++ langs/en/cgi-bin/en.pl | 3 ++ 3 files changed, 62 insertions(+), 14 deletions(-) diff --git a/html/cgi-bin/firewall.cgi b/html/cgi-bin/firewall.cgi index e6ae5272a..cbe58c619 100644 --- a/html/cgi-bin/firewall.cgi +++ b/html/cgi-bin/firewall.cgi @@ -161,6 +161,14 @@ print<"; @@ -241,14 +249,14 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') if($fwdfwsettings{'rulepos'} > 0 && !$fwdfwsettings{'oldrulenumber'}){ $fwdfwsettings{'oldrulenumber'}=$maxkey; foreach my $key (sort keys %configinputfw){ - if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'}" - eq "$configinputfw{$key}[0],$configinputfw{$key}[2],$configinputfw{$key}[3],$configinputfw{$key}[4],$configinputfw{$key}[5],$configinputfw{$key}[6],$configinputfw{$key}[7],$configinputfw{$key}[8],$configinputfw{$key}[9],$configinputfw{$key}[10],$configinputfw{$key}[11],$configinputfw{$key}[12],$configinputfw{$key}[13],$configinputfw{$key}[14],$configinputfw{$key}[15],$configinputfw{$key}[17],$configinputfw{$key}[18],$configinputfw{$key}[19],$configinputfw{$key}[20],$configinputfw{$key}[21],$configinputfw{$key}[22],$configinputfw{$key}[23],$configinputfw{$key}[24],$configinputfw{$key}[25],$configinputfw{$key}[26],$configinputfw{$key}[27],$configinputfw{$key}[28],$configinputfw{$key}[29],$configinputfw{$key}[30],$configinputfw{$key}[31]"){ + if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'}" + 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]"){ $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'} && $fwdfwsettings{'oldconcon'} eq $fwdfwsettings{'LIMIT_CON_CON'}) { if($fwdfwsettings{'nosave'} eq 'on' && $fwdfwsettings{'updatefwrule'} eq 'on'){ $errormessage=''; $fwdfwsettings{'nosave2'} = 'on'; @@ -266,8 +274,8 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') my $maxkey=&General::findhasharraykey(\%configoutgoingfw); if($fwdfwsettings{'oldrulenumber'} eq $fwdfwsettings{'rulepos'}){ foreach my $key (sort keys %configoutgoingfw){ - if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'}" - eq "$configoutgoingfw{$key}[0],$configoutgoingfw{$key}[2],$configoutgoingfw{$key}[3],$configoutgoingfw{$key}[4],$configoutgoingfw{$key}[5],$configoutgoingfw{$key}[6],$configoutgoingfw{$key}[7],$configoutgoingfw{$key}[8],$configoutgoingfw{$key}[9],$configoutgoingfw{$key}[10],$configoutgoingfw{$key}[11],$configoutgoingfw{$key}[12],$configoutgoingfw{$key}[13],$configoutgoingfw{$key}[14],$configoutgoingfw{$key}[15],$configoutgoingfw{$key}[17],$configoutgoingfw{$key}[18],$configoutgoingfw{$key}[19],$configoutgoingfw{$key}[20],$configoutgoingfw{$key}[21],$configoutgoingfw{$key}[22],$configoutgoingfw{$key}[23],$configoutgoingfw{$key}[24],$configoutgoingfw{$key}[25],$configoutgoingfw{$key}[26],$configoutgoingfw{$key}[27],$configoutgoingfw{$key}[28],$configoutgoingfw{$key}[29],$configoutgoingfw{$key}[30],$configoutgoingfw{$key}[31]"){ + if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'}" + 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],$configinputfw{$key}[32],$configinputfw{$key}[33]"){ $errormessage.=$Lang::tr{'fwdfw err ruleexists'}; if($fwdfwsettings{'oldruleremark'} ne $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'updatefwrule'} eq 'on' && $fwdfwsettings{'ruleremark'} ne '' && !&validremark($fwdfwsettings{'ruleremark'})){ $errormessage=$Lang::tr{'fwdfw err remark'}."
"; @@ -285,8 +293,8 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') if($fwdfwsettings{'rulepos'} > 0 && !$fwdfwsettings{'oldrulenumber'}){ $fwdfwsettings{'oldrulenumber'}=$maxkey; foreach my $key (sort keys %configoutgoingfw){ - if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'}" - eq "$configoutgoingfw{$key}[0],$configoutgoingfw{$key}[2],$configoutgoingfw{$key}[3],$configoutgoingfw{$key}[4],$configoutgoingfw{$key}[5],$configoutgoingfw{$key}[6],$configoutgoingfw{$key}[7],$configoutgoingfw{$key}[8],$configoutgoingfw{$key}[9],$configoutgoingfw{$key}[10],$configoutgoingfw{$key}[11],$configoutgoingfw{$key}[12],$configoutgoingfw{$key}[13],$configoutgoingfw{$key}[14],$configoutgoingfw{$key}[15],$configoutgoingfw{$key}[17],$configoutgoingfw{$key}[18],$configoutgoingfw{$key}[19],$configoutgoingfw{$key}[20],$configoutgoingfw{$key}[21],$configoutgoingfw{$key}[22],$configoutgoingfw{$key}[23],$configoutgoingfw{$key}[24],$configoutgoingfw{$key}[25],$configoutgoingfw{$key}[26],$configoutgoingfw{$key}[27],$configoutgoingfw{$key}[28],$configoutgoingfw{$key}[29],$configoutgoingfw{$key}[30],$configoutgoingfw{$key}[31]"){ + if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'}" + 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],$configinputfw{$key}[32],$configinputfw{$key}[33]"){ $errormessage.=$Lang::tr{'fwdfw err ruleexists'}; } } @@ -312,8 +320,8 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') if($fwdfwsettings{'oldrulenumber'} eq $fwdfwsettings{'rulepos'}){ #check if we have an identical rule already foreach my $key (sort keys %configfwdfw){ - if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'}" - eq "$configfwdfw{$key}[0],$configfwdfw{$key}[2],$configfwdfw{$key}[3],$configfwdfw{$key}[4],$configfwdfw{$key}[5],$configfwdfw{$key}[6],$configfwdfw{$key}[7],$configfwdfw{$key}[8],$configfwdfw{$key}[9],$configfwdfw{$key}[10],$configfwdfw{$key}[11],$configfwdfw{$key}[12],$configfwdfw{$key}[13],$configfwdfw{$key}[14],$configfwdfw{$key}[15],$configfwdfw{$key}[18],$configfwdfw{$key}[19],$configfwdfw{$key}[20],$configfwdfw{$key}[21],$configfwdfw{$key}[22],$configfwdfw{$key}[23],$configfwdfw{$key}[24],$configfwdfw{$key}[25],$configfwdfw{$key}[26],$configfwdfw{$key}[27],$configfwdfw{$key}[28],$configfwdfw{$key}[29],$configfwdfw{$key}[30],$configfwdfw{$key}[31]"){ + if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'}" + 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],$configinputfw{$key}[32],$configinputfw{$key}[33]"){ $errormessage.=$Lang::tr{'fwdfw err ruleexists'}; if($fwdfwsettings{'oldruleremark'} ne $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'updatefwrule'} eq 'on' && $fwdfwsettings{'ruleremark'} ne '' && !&validremark($fwdfwsettings{'ruleremark'})){ $errormessage=$Lang::tr{'fwdfw err remark'}."
"; @@ -331,19 +339,27 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') if($fwdfwsettings{'rulepos'} > 0 && !$fwdfwsettings{'oldrulenumber'}){ $fwdfwsettings{'oldrulenumber'}=$maxkey; foreach my $key (sort keys %configfwdfw){ - if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'}" - eq "$configfwdfw{$key}[0],$configfwdfw{$key}[2],$configfwdfw{$key}[3],$configfwdfw{$key}[4],$configfwdfw{$key}[5],$configfwdfw{$key}[6],$configfwdfw{$key}[7],$configfwdfw{$key}[8],$configfwdfw{$key}[9],$configfwdfw{$key}[10],$configfwdfw{$key}[11],$configfwdfw{$key}[12],$configfwdfw{$key}[13],$configfwdfw{$key}[14],$configfwdfw{$key}[15],$configfwdfw{$key}[18],$configfwdfw{$key}[19],$configfwdfw{$key}[20],$configfwdfw{$key}[21],$configfwdfw{$key}[22],$configfwdfw{$key}[23],$configfwdfw{$key}[24],$configfwdfw{$key}[25],$configfwdfw{$key}[26],$configfwdfw{$key}[27],$configfwdfw{$key}[28],$configfwdfw{$key}[29],$configfwdfw{$key}[30],$configfwdfw{$key}[31]"){ + if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'}" + 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],$configinputfw{$key}[32],$configinputfw{$key}[33]"){ $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'} && $fwdfwsettings{'oldconcon'} eq $fwdfwsettings{'LIMIT_CON_CON'}) { 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'}=''; + } #increase counters if (!$errormessage){ if ($fwdfwsettings{'nosave2'} ne 'on'){ @@ -1517,6 +1533,8 @@ sub newrule $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]; $checked{'grp1'}{$fwdfwsettings{'grp1'}} = 'CHECKED'; $checked{'grp2'}{$fwdfwsettings{'grp2'}} = 'CHECKED'; $checked{'grp3'}{$fwdfwsettings{'grp3'}} = 'CHECKED'; @@ -1534,6 +1552,7 @@ sub newrule $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'; $selected{'TIME_FROM'}{$fwdfwsettings{'TIME_FROM'}} = 'selected'; $selected{'TIME_TO'}{$fwdfwsettings{'TIME_TO'}} = 'selected'; $selected{'ipfire'}{$fwdfwsettings{$fwdfwsettings{'grp2'}}} ='selected'; @@ -1552,6 +1571,7 @@ sub newrule $fwdfwsettings{'oldruleremark'}=$fwdfwsettings{'ruleremark'}; $fwdfwsettings{'oldnat'}=$fwdfwsettings{'USE_NAT'}; $fwdfwsettings{'oldruletype'}=$fwdfwsettings{'chain'}; + $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'}}); @@ -1573,6 +1593,7 @@ sub newrule $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'}}); @@ -2012,6 +2033,22 @@ END + + + + + $Lang::tr{'fwdfw limitconcon'} + + + + + + + + +
 $Lang::tr{'fwdfw maxconcon'}:
+ +
END @@ -2044,6 +2081,7 @@ END +
END @@ -2180,6 +2218,8 @@ sub saverule $$hash{$key}[29] = $fwdfwsettings{$fwdfwsettings{'nat'}}; $$hash{$key}[30] = $fwdfwsettings{'dnatport'}; $$hash{$key}[31] = $fwdfwsettings{'nat'}; + $$hash{$key}[32] = $fwdfwsettings{'LIMIT_CON_CON'}; + $$hash{$key}[33] = $fwdfwsettings{'concon'}; &General::writehasharray("$config", $hash); }else{ foreach my $key (sort {$a <=> $b} keys %$hash){ @@ -2216,6 +2256,8 @@ sub saverule $$hash{$key}[29] = $fwdfwsettings{$fwdfwsettings{'nat'}}; $$hash{$key}[30] = $fwdfwsettings{'dnatport'}; $$hash{$key}[31] = $fwdfwsettings{'nat'}; + $$hash{$key}[32] = $fwdfwsettings{'LIMIT_CON_CON'}; + $$hash{$key}[33] = $fwdfwsettings{'concon'}; last; } } diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl index 6c46f70bf..dcfdd4a00 100644 --- a/langs/de/cgi-bin/de.pl +++ b/langs/de/cgi-bin/de.pl @@ -982,6 +982,7 @@ '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', @@ -1006,10 +1007,12 @@ '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', diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl index b537868d2..b7f6f2762 100644 --- a/langs/en/cgi-bin/en.pl +++ b/langs/en/cgi-bin/en.pl @@ -1009,6 +1009,7 @@ '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.', @@ -1033,10 +1034,12 @@ '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', From d8deec0b4fac7b97b7b6f3f944b7f874c997db2f Mon Sep 17 00:00:00 2001 From: Alexander Marx Date: Thu, 11 Sep 2014 13:59:54 +0200 Subject: [PATCH 04/36] BUG10615 part2: Add ratelimit to firewallgui --- html/cgi-bin/firewall.cgi | 83 ++++++++++++++++++++++++++++++++------- langs/de/cgi-bin/de.pl | 3 ++ langs/en/cgi-bin/en.pl | 3 ++ 3 files changed, 74 insertions(+), 15 deletions(-) diff --git a/html/cgi-bin/firewall.cgi b/html/cgi-bin/firewall.cgi index cbe58c619..ef99ae4d5 100644 --- a/html/cgi-bin/firewall.cgi +++ b/html/cgi-bin/firewall.cgi @@ -169,6 +169,14 @@ print<"; @@ -249,14 +257,14 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') if($fwdfwsettings{'rulepos'} > 0 && !$fwdfwsettings{'oldrulenumber'}){ $fwdfwsettings{'oldrulenumber'}=$maxkey; foreach my $key (sort keys %configinputfw){ - if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'}" - 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]"){ + 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'} && $fwdfwsettings{'oldconcon'} eq $fwdfwsettings{'LIMIT_CON_CON'}) { + 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'} && $fwdfwsettings{'oldconcon'} eq $fwdfwsettings{'LIMIT_CON_CON'} && $fwdfwsettings{'olduseratelimit'} eq $fwdfwsettings{'RATE_LIMIT'} && $fwdfwsettings{'oldratelimitamount'} eq $fwdfwsettings{'ratecon'} && $fwdfwsettings{'oldratelimittime'} eq $fwdfwsettings{'RATETIME'}) { if($fwdfwsettings{'nosave'} eq 'on' && $fwdfwsettings{'updatefwrule'} eq 'on'){ $errormessage=''; $fwdfwsettings{'nosave2'} = 'on'; @@ -274,8 +282,8 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') my $maxkey=&General::findhasharraykey(\%configoutgoingfw); if($fwdfwsettings{'oldrulenumber'} eq $fwdfwsettings{'rulepos'}){ foreach my $key (sort keys %configoutgoingfw){ - if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'}" - 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],$configinputfw{$key}[32],$configinputfw{$key}[33]"){ + 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],$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'}."
"; @@ -293,14 +301,14 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') if($fwdfwsettings{'rulepos'} > 0 && !$fwdfwsettings{'oldrulenumber'}){ $fwdfwsettings{'oldrulenumber'}=$maxkey; foreach my $key (sort keys %configoutgoingfw){ - if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'}" - 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],$configinputfw{$key}[32],$configinputfw{$key}[33]"){ + 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],$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'} && $fwdfwsettings{'oldconcon'} eq $fwdfwsettings{'LIMIT_CON_CON'} && $fwdfwsettings{'olduseratelimit'} eq $fwdfwsettings{'RATE_LIMIT'} && $fwdfwsettings{'oldratelimitamount'} eq $fwdfwsettings{'ratecon'} && $fwdfwsettings{'oldratelimittime'} eq $fwdfwsettings{'RATETIME'}) { if($fwdfwsettings{'nosave'} eq 'on' && $fwdfwsettings{'updatefwrule'} eq 'on'){ $fwdfwsettings{'nosave2'} = 'on'; $errormessage=''; @@ -320,8 +328,8 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') if($fwdfwsettings{'oldrulenumber'} eq $fwdfwsettings{'rulepos'}){ #check if we have an identical rule already foreach my $key (sort keys %configfwdfw){ - if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'}" - 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],$configinputfw{$key}[32],$configinputfw{$key}[33]"){ + 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],$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'}."
"; @@ -339,14 +347,14 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') if($fwdfwsettings{'rulepos'} > 0 && !$fwdfwsettings{'oldrulenumber'}){ $fwdfwsettings{'oldrulenumber'}=$maxkey; foreach my $key (sort keys %configfwdfw){ - if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'}" - 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],$configinputfw{$key}[32],$configinputfw{$key}[33]"){ + 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],$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'} && $fwdfwsettings{'oldconcon'} eq $fwdfwsettings{'LIMIT_CON_CON'}) { + 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'} && $fwdfwsettings{'oldconcon'} eq $fwdfwsettings{'LIMIT_CON_CON'} && $fwdfwsettings{'olduseratelimit'} eq $fwdfwsettings{'RATE_LIMIT'} && $fwdfwsettings{'oldratelimitamount'} eq $fwdfwsettings{'ratecon'} && $fwdfwsettings{'oldratelimittime'} eq $fwdfwsettings{'RATETIME'}) { if($fwdfwsettings{'nosave'} eq 'on' && $fwdfwsettings{'updatefwrule'} eq 'on'){ $fwdfwsettings{'nosave2'} = 'on'; $errormessage=''; @@ -360,6 +368,14 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') }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'){ @@ -1535,6 +1551,9 @@ sub newrule $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'; @@ -1553,12 +1572,14 @@ sub newrule $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'}; @@ -1572,6 +1593,10 @@ sub newrule $fwdfwsettings{'oldnat'}=$fwdfwsettings{'USE_NAT'}; $fwdfwsettings{'oldruletype'}=$fwdfwsettings{'chain'}; $fwdfwsettings{'oldconcon'}=$fwdfwsettings{'LIMIT_CON_CON'}; + $fwdfwsettings{'olduseratelimit'}=$fwdfwsettings{'RATE_LIMIT'}; + $fwdfwsettings{'olduserateamount'}=$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'}}); @@ -2049,6 +2074,28 @@ END + + + + + $Lang::tr{'fwdfw ratelimit'} + + + + + + + + +
 $Lang::tr{'fwdfw numcon'}: / + +
+ +
END @@ -2220,6 +2267,9 @@ sub saverule $$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){ @@ -2258,6 +2308,9 @@ sub saverule $$hash{$key}[31] = $fwdfwsettings{'nat'}; $$hash{$key}[32] = $fwdfwsettings{'LIMIT_CON_CON'}; $$hash{$key}[33] = $fwdfwsettings{'concon'}; + $$hash{$key}[34] = $fwdfwsettings{'RATE_LIMIT'}; + $$hash{$key}[35] = $fwdfwsettings{'ratecon'}; + $$hash{$key}[36] = $fwdfwsettings{'RATETIME'}; last; } } diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl index dcfdd4a00..079d4de46 100644 --- a/langs/de/cgi-bin/de.pl +++ b/langs/de/cgi-bin/de.pl @@ -989,6 +989,7 @@ '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', @@ -1018,6 +1019,7 @@ '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', @@ -1026,6 +1028,7 @@ 'fwdfw pol title' => 'Standardverhalten der Firewall', 'fwdfw prot41' => 'IPv6 Encapsulation (Protokoll 41)', 'fwdfw prot41 short' => 'IPv6 Encap', +'fwdfw ratelimit' => 'Ratenlimitierung für neue Verbindungen', 'fwdfw red' => 'ROT', 'fwdfw reread' => 'Änderungen übernehmen', 'fwdfw rule action' => 'Regelaktion:', diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl index b7f6f2762..8b2eb73d0 100644 --- a/langs/en/cgi-bin/en.pl +++ b/langs/en/cgi-bin/en.pl @@ -1016,6 +1016,7 @@ '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.', @@ -1045,6 +1046,7 @@ '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', @@ -1053,6 +1055,7 @@ 'fwdfw pol title' => 'Default firewall behaviour', 'fwdfw prot41' => 'IPv6 Encapsulation (Protocol 41)', 'fwdfw prot41 short' => 'IPv6 Encap', +'fwdfw ratelimit' => 'Rate-limit new connections', 'fwdfw red' => 'RED', 'fwdfw reread' => 'Apply changes', 'fwdfw rule action' => 'Rule action:', From d2793ea80576ac5200f62c911b9492a5c102a81b Mon Sep 17 00:00:00 2001 From: Alexander Marx Date: Thu, 11 Sep 2014 14:01:28 +0200 Subject: [PATCH 05/36] BUG10615 part3: adapt rules.pl to use connectionlimit and ratelimit --- config/firewall/rules.pl | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/config/firewall/rules.pl b/config/firewall/rules.pl index aa8870cdc..30d3a3c3d 100755 --- a/config/firewall/rules.pl +++ b/config/firewall/rules.pl @@ -268,6 +268,33 @@ sub buildrules { } } + # Concurrent connection limit + my @ratelimit_options = (); + if ($$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 ($$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); @@ -336,6 +363,9 @@ sub buildrules { # 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); From 5751876534a53176db3b537bca34bdfc096d948a Mon Sep 17 00:00:00 2001 From: Alexander Marx Date: Thu, 11 Sep 2014 15:10:48 +0200 Subject: [PATCH 06/36] BUG10615: fix wrong values in firewall.cgi --- html/cgi-bin/firewall.cgi | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/html/cgi-bin/firewall.cgi b/html/cgi-bin/firewall.cgi index ef99ae4d5..558dca2c7 100644 --- a/html/cgi-bin/firewall.cgi +++ b/html/cgi-bin/firewall.cgi @@ -264,7 +264,7 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') } } #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'} && $fwdfwsettings{'oldconcon'} eq $fwdfwsettings{'LIMIT_CON_CON'} && $fwdfwsettings{'olduseratelimit'} eq $fwdfwsettings{'RATE_LIMIT'} && $fwdfwsettings{'oldratelimitamount'} eq $fwdfwsettings{'ratecon'} && $fwdfwsettings{'oldratelimittime'} eq $fwdfwsettings{'RATETIME'}) { + 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'; @@ -283,7 +283,7 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') 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'},$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],$configinputfw{$key}[32],$configinputfw{$key}[33],$configinputfw{$key}[34],$configinputfw{$key}[35],$configinputfw{$key}[36]"){ + 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'}."
"; @@ -302,13 +302,13 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') $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'},$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],$configinputfw{$key}[32],$configinputfw{$key}[33],$configinputfw{$key}[34],$configinputfw{$key}[35],$configinputfw{$key}[36]"){ + 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'} && $fwdfwsettings{'oldconcon'} eq $fwdfwsettings{'LIMIT_CON_CON'} && $fwdfwsettings{'olduseratelimit'} eq $fwdfwsettings{'RATE_LIMIT'} && $fwdfwsettings{'oldratelimitamount'} eq $fwdfwsettings{'ratecon'} && $fwdfwsettings{'oldratelimittime'} eq $fwdfwsettings{'RATETIME'}) { + 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=''; @@ -329,7 +329,7 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') #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'},$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],$configinputfw{$key}[32],$configinputfw{$key}[33],$configinputfw{$key}[34],$configinputfw{$key}[35],$configinputfw{$key}[36]"){ + 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'}."
"; @@ -348,13 +348,13 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule') $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'},$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],$configinputfw{$key}[32],$configinputfw{$key}[33],$configinputfw{$key}[34],$configinputfw{$key}[35],$configinputfw{$key}[36]"){ + 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'} && $fwdfwsettings{'oldconcon'} eq $fwdfwsettings{'LIMIT_CON_CON'} && $fwdfwsettings{'olduseratelimit'} eq $fwdfwsettings{'RATE_LIMIT'} && $fwdfwsettings{'oldratelimitamount'} eq $fwdfwsettings{'ratecon'} && $fwdfwsettings{'oldratelimittime'} eq $fwdfwsettings{'RATETIME'}) { + 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=''; @@ -1594,7 +1594,7 @@ sub newrule $fwdfwsettings{'oldruletype'}=$fwdfwsettings{'chain'}; $fwdfwsettings{'oldconcon'}=$fwdfwsettings{'LIMIT_CON_CON'}; $fwdfwsettings{'olduseratelimit'}=$fwdfwsettings{'RATE_LIMIT'}; - $fwdfwsettings{'olduserateamount'}=$fwdfwsettings{'ratecon'}; + $fwdfwsettings{'olduseratelimitamount'}=$fwdfwsettings{'ratecon'}; $fwdfwsettings{'oldratelimittime'}=$fwdfwsettings{'RATETIME'}; #check if manual ip (source) is orange network From ca4259a75817c7568f801c6c9535a2a2a60a8850 Mon Sep 17 00:00:00 2001 From: Alexander Marx Date: Thu, 11 Sep 2014 17:13:07 +0200 Subject: [PATCH 07/36] BUG10620: reload firewall.local in rules.pl, no longer in initscript --- config/firewall/rules.pl | 4 ++++ src/initscripts/init.d/firewall | 14 -------------- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/config/firewall/rules.pl b/config/firewall/rules.pl index aa8870cdc..b6b6b1cbf 100755 --- a/config/firewall/rules.pl +++ b/config/firewall/rules.pl @@ -457,6 +457,10 @@ sub buildrules { } } } + #Reload firewall.local if present + if ( -f '/etc/sysconfig/firewall.local'){ + run("/etc/sysconfig/firewall.local reload"); + } } # Formats the given timestamp into the iptables format which is "hh:mm" UTC. diff --git a/src/initscripts/init.d/firewall b/src/initscripts/init.d/firewall index c7f8b679d..66ca432a2 100644 --- a/src/initscripts/init.d/firewall +++ b/src/initscripts/init.d/firewall @@ -402,21 +402,11 @@ case "$1" in boot_mesg "Setting up firewall" iptables_init evaluate_retval - - # run local firewall configuration, if present - if [ -x /etc/sysconfig/firewall.local ]; then - /etc/sysconfig/firewall.local start - fi ;; reload|up) boot_mesg "Reloading firewall" iptables_red_up evaluate_retval - - # run local firewall configuration, if present - if [ -x /etc/sysconfig/firewall.local ]; then - /etc/sysconfig/firewall.local reload - fi ;; down) boot_mesg "Disabling firewall access to RED" @@ -424,10 +414,6 @@ case "$1" in evaluate_retval ;; restart) - # run local firewall configuration, if present - if [ -x /etc/sysconfig/firewall.local ]; then - /etc/sysconfig/firewall.local stop - fi $0 start ;; *) From d8cc44393847801d8516ae026656ad29a4453437 Mon Sep 17 00:00:00 2001 From: Alexander Marx Date: Fri, 5 Sep 2014 08:12:44 +0200 Subject: [PATCH 08/36] fw-groups: fix language strings --- html/cgi-bin/fwhosts.cgi | 8 +++----- langs/de/cgi-bin/de.pl | 2 +- langs/en/cgi-bin/en.pl | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/html/cgi-bin/fwhosts.cgi b/html/cgi-bin/fwhosts.cgi index 4e8d2347c..df609deae 100644 --- a/html/cgi-bin/fwhosts.cgi +++ b/html/cgi-bin/fwhosts.cgi @@ -293,7 +293,6 @@ if ($fwhostsettings{'ACTION'} eq 'savenet' ) if($fwhostsettings{'error'} ne 'on'){ my $fullip="$fwhostsettings{'IP'}/".&General::iporsubtocidr($fwhostsettings{'SUBNET'}); $errormessage=$errormessage.&General::checksubnets($fwhostsettings{'HOSTNAME'},$fullip,""); - if ($fwhostsettings{'update'} eq 'on'){$fwhostsettings{'ACTION'}='editnet';} } #only check plausi when no error till now if (!$errormessage){ @@ -310,9 +309,8 @@ if ($fwhostsettings{'ACTION'} eq 'savenet' ) $customnetwork{$key}[3] = $fwhostsettings{'orgnetremark'}; &General::writehasharray("$confignet", \%customnetwork); undef %customnetwork; - } + } if (!$errormessage){ - &General::readhasharray("$confignet", \%customnetwork); if ($fwhostsettings{'ACTION'} eq 'updatenet'){ if ($fwhostsettings{'update'} == '0'){ @@ -364,7 +362,7 @@ if ($fwhostsettings{'ACTION'} eq 'savenet' ) &General::writehasharray("$fwconfiginp", \%fwinp); } } - } + } my $key = &General::findhasharraykey (\%customnetwork); foreach my $i (0 .. 3) { $customnetwork{$key}[$i] = "";} $fwhostsettings{'SUBNET'} = &General::iporsubtocidr($fwhostsettings{'SUBNET'}); @@ -388,7 +386,7 @@ if ($fwhostsettings{'ACTION'} eq 'savenet' ) } &addnet; &viewtablenet; - }else { + }else{ $fwhostsettings{'HOSTNAME'} = $fwhostsettings{'orgname'}; &addnet; &viewtablenet; diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl index 6c46f70bf..9ab953f4c 100644 --- a/langs/de/cgi-bin/de.pl +++ b/langs/de/cgi-bin/de.pl @@ -1111,7 +1111,7 @@ 'fwhost err remark' => 'Ungültige Bemerkung. Erlaubte Zeichen: Klein- und Großbuchstaben, Bindestrich, Unterstrich, Runde Klammern, Semikolon, Punkt.', 'fwhost err srv exists' => 'Ein Service mit diesem Namen existiert bereits', 'fwhost err srvexist' => 'Dieser Dienst ist bereits in der Gruppe', -'fwhost err sub32' => 'Bitte einen einzelnen Host hinzufügen, keine Netzwerke', +'fwhost err sub32' => 'Bitte Netzwerke hinzufügen, keinen einzelnen Host', 'fwhost green' => 'Grün', 'fwhost hint' => 'Hinweis', 'fwhost hosts' => 'Firewall-Hosts', diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl index b537868d2..0dd78e4be 100644 --- a/langs/en/cgi-bin/en.pl +++ b/langs/en/cgi-bin/en.pl @@ -1138,7 +1138,7 @@ 'fwhost err remark' => 'Invalid remark. Allowed characters: Upper- and lowercase letters, digits, space, dash, braces, semicolon, pipe and dot.', 'fwhost err srv exists' => 'A service with the same name already exists', 'fwhost err srvexist' => 'This service already exists in the group', -'fwhost err sub32' => 'Please add a single host, not a network.', +'fwhost err sub32' => 'Please add a network, not a single host', 'fwhost green' => 'Green', 'fwhost hint' => 'Note', 'fwhost hosts' => 'Firewall Hosts', From 7a35d102cb321598a0bb9568dfc446a6362de7f8 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 25 Sep 2014 21:16:01 +0200 Subject: [PATCH 09/36] dnsmasq: Update to 2.72 --- lfs/dnsmasq | 8 +- .../dnsmasq-2.71-support-nettle-3.0.patch | 65 -------------- ...dnsmasq-2.71-use-nettle-with-minigmp.patch | 88 ------------------- ...support-to-read-ISC-DHCP-lease-file.patch} | 30 ++++--- 4 files changed, 21 insertions(+), 170 deletions(-) delete mode 100644 src/patches/dnsmasq-2.71-support-nettle-3.0.patch delete mode 100644 src/patches/dnsmasq-2.71-use-nettle-with-minigmp.patch rename src/patches/{dnsmasq-2.70-Add-support-to-read-ISC-DHCP-lease-file.patch => dnsmasq-2.72rc2-Add-support-to-read-ISC-DHCP-lease-file.patch} (94%) diff --git a/lfs/dnsmasq b/lfs/dnsmasq index 58b001755..60dabf4a5 100644 --- a/lfs/dnsmasq +++ b/lfs/dnsmasq @@ -24,7 +24,7 @@ include Config -VER = 2.71 +VER = 2.72 THISAPP = dnsmasq-$(VER) DL_FILE = $(THISAPP).tar.xz @@ -42,7 +42,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 9e2e4d59c75e71ee3ca817ff0f9be69e +$(DL_FILE)_MD5 = 0256e0a71e27c8d8a5c89a0d18f3cfe2 install : $(TARGET) @@ -72,9 +72,7 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq-2.71-use-nettle-with-minigmp.patch - cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq-2.71-support-nettle-3.0.patch - cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq-2.70-Add-support-to-read-ISC-DHCP-lease-file.patch + cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq-2.72rc2-Add-support-to-read-ISC-DHCP-lease-file.patch cd $(DIR_APP) && sed -i src/config.h \ -e 's|/\* #define HAVE_IDN \*/|#define HAVE_IDN|g' \ -e 's|/\* #define HAVE_DNSSEC \*/|#define HAVE_DNSSEC|g' \ diff --git a/src/patches/dnsmasq-2.71-support-nettle-3.0.patch b/src/patches/dnsmasq-2.71-support-nettle-3.0.patch deleted file mode 100644 index 593a7cd8d..000000000 --- a/src/patches/dnsmasq-2.71-support-nettle-3.0.patch +++ /dev/null @@ -1,65 +0,0 @@ -From cdb755c5f16a6768c3e8b1f345fe15fc9244228d Mon Sep 17 00:00:00 2001 -From: Simon Kelley -Date: Wed, 18 Jun 2014 20:52:53 +0100 -Subject: [PATCH] Fix FTBFS with Nettle-3.0. - ---- - CHANGELOG | 3 +++ - src/dnssec.c | 18 ++++++++++++------ - 2 files changed, 15 insertions(+), 6 deletions(-) - -diff --git a/src/dnssec.c b/src/dnssec.c -index 2ffb75d..69bfc29 100644 ---- a/src/dnssec.c -+++ b/src/dnssec.c -@@ -28,6 +28,12 @@ - #include - #include - -+/* Nettle-3.0 moved to a new API for DSA. We use a name that's defined in the new API -+ to detect Nettle-3, and invoke the backwards compatibility mode. */ -+#ifdef dsa_params_init -+#include -+#endif -+ - - #define SERIAL_UNDEF -100 - #define SERIAL_EQ 0 -@@ -121,8 +127,8 @@ static int hash_init(const struct nettle_hash *hash, void **ctxp, unsigned char - return 1; - } - --static int rsa_verify(struct blockdata *key_data, unsigned int key_len, unsigned char *sig, size_t sig_len, -- unsigned char *digest, int algo) -+static int dnsmasq_rsa_verify(struct blockdata *key_data, unsigned int key_len, unsigned char *sig, size_t sig_len, -+ unsigned char *digest, int algo) - { - unsigned char *p; - size_t exp_len; -@@ -173,8 +179,8 @@ static int rsa_verify(struct blockdata *key_data, unsigned int key_len, unsigned - return 0; - } - --static int dsa_verify(struct blockdata *key_data, unsigned int key_len, unsigned char *sig, size_t sig_len, -- unsigned char *digest, int algo) -+static int dnsmasq_dsa_verify(struct blockdata *key_data, unsigned int key_len, unsigned char *sig, size_t sig_len, -+ unsigned char *digest, int algo) - { - unsigned char *p; - unsigned int t; -@@ -293,10 +299,10 @@ static int verify(struct blockdata *key_data, unsigned int key_len, unsigned cha - switch (algo) - { - case 1: case 5: case 7: case 8: case 10: -- return rsa_verify(key_data, key_len, sig, sig_len, digest, algo); -+ return dnsmasq_rsa_verify(key_data, key_len, sig, sig_len, digest, algo); - - case 3: case 6: -- return dsa_verify(key_data, key_len, sig, sig_len, digest, algo); -+ return dnsmasq_dsa_verify(key_data, key_len, sig, sig_len, digest, algo); - - #ifndef NO_NETTLE_ECC - case 13: case 14: --- -1.7.10.4 - diff --git a/src/patches/dnsmasq-2.71-use-nettle-with-minigmp.patch b/src/patches/dnsmasq-2.71-use-nettle-with-minigmp.patch deleted file mode 100644 index 374c9eca1..000000000 --- a/src/patches/dnsmasq-2.71-use-nettle-with-minigmp.patch +++ /dev/null @@ -1,88 +0,0 @@ -From 063efb330a3f341c2548e2cf1f67f83e49cd6395 Mon Sep 17 00:00:00 2001 -From: Simon Kelley -Date: Tue, 17 Jun 2014 19:49:31 +0100 -Subject: [PATCH] Build config: add -DNO_GMP for use with nettle/mini-gmp - ---- - Makefile | 2 +- - bld/pkg-wrapper | 9 +++++++-- - src/config.h | 7 +++++++ - src/dnssec.c | 3 ++- - 4 files changed, 17 insertions(+), 4 deletions(-) - -diff --git a/Makefile b/Makefile -index c58b50b..17eeb27 100644 ---- a/Makefile -+++ b/Makefile -@@ -61,7 +61,7 @@ lua_cflags = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_LUASCRIPT $(PKG_CON - lua_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_LUASCRIPT $(PKG_CONFIG) --libs lua5.1` - nettle_cflags = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC $(PKG_CONFIG) --cflags nettle hogweed` - nettle_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC $(PKG_CONFIG) --libs nettle hogweed` --gmp_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC $(PKG_CONFIG) --copy -lgmp` -+gmp_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC NO_GMP --copy -lgmp` - sunos_libs = `if uname | grep SunOS >/dev/null 2>&1; then echo -lsocket -lnsl -lposix4; fi` - version = -DVERSION='\"`$(top)/bld/get-version $(top)`\"' - -diff --git a/bld/pkg-wrapper b/bld/pkg-wrapper -index 9f9332d..0ddb678 100755 ---- a/bld/pkg-wrapper -+++ b/bld/pkg-wrapper -@@ -11,9 +11,14 @@ in=`cat` - - if grep "^\#[[:space:]]*define[[:space:]]*$search" config.h >/dev/null 2>&1 || \ - echo $in | grep $search >/dev/null 2>&1; then -- -+# Nasty, nasty, in --copy, arg 2 is another config to search for, use with NO_GMP - if [ $op = "--copy" ]; then -- pkg="$*" -+ if grep "^\#[[:space:]]*define[[:space:]]*$pkg" config.h >/dev/null 2>&1 || \ -+ echo $in | grep $pkg >/dev/null 2>&1; then -+ pkg="" -+ else -+ pkg="$*" -+ fi - elif grep "^\#[[:space:]]*define[[:space:]]*${search}_STATIC" config.h >/dev/null 2>&1 || \ - echo $in | grep ${search}_STATIC >/dev/null 2>&1; then - pkg=`$pkg --static $op $*` -diff --git a/src/config.h b/src/config.h -index 2155544..ee6d218 100644 ---- a/src/config.h -+++ b/src/config.h -@@ -105,6 +105,8 @@ HAVE_AUTH - define this to include the facility to act as an authoritative DNS - server for one or more zones. - -+HAVE_DNSSEC -+ include DNSSEC validator. - - NO_IPV6 - NO_TFTP -@@ -118,6 +120,11 @@ NO_AUTH - which are enabled by default in the distributed source tree. Building dnsmasq - with something like "make COPTS=-DNO_SCRIPT" will do the trick. - -+NO_NETTLE_ECC -+ Don't include the ECDSA cypher in DNSSEC validation. Needed for older Nettle versions. -+NO_GMP -+ Don't use and link against libgmp, Useful if nettle is built with --enable-mini-gmp. -+ - LEASEFILE - CONFFILE - RESOLVFILE -diff --git a/src/dnssec.c b/src/dnssec.c -index 44d626b..2ffb75d 100644 ---- a/src/dnssec.c -+++ b/src/dnssec.c -@@ -26,7 +26,8 @@ - # include - #endif - #include --#include -+#include -+ - - #define SERIAL_UNDEF -100 - #define SERIAL_EQ 0 --- -1.7.10.4 - diff --git a/src/patches/dnsmasq-2.70-Add-support-to-read-ISC-DHCP-lease-file.patch b/src/patches/dnsmasq-2.72rc2-Add-support-to-read-ISC-DHCP-lease-file.patch similarity index 94% rename from src/patches/dnsmasq-2.70-Add-support-to-read-ISC-DHCP-lease-file.patch rename to src/patches/dnsmasq-2.72rc2-Add-support-to-read-ISC-DHCP-lease-file.patch index 3194e1f22..9912c7ca9 100644 --- a/src/patches/dnsmasq-2.70-Add-support-to-read-ISC-DHCP-lease-file.patch +++ b/src/patches/dnsmasq-2.72rc2-Add-support-to-read-ISC-DHCP-lease-file.patch @@ -1,18 +1,18 @@ diff --git a/Makefile b/Makefile -index 292c8bd..5e0cdbe 100644 +index 58a7975..616c6b7 100644 --- a/Makefile +++ b/Makefile @@ -69,7 +69,7 @@ objs = cache.o rfc1035.o util.o option.o forward.o network.o \ dnsmasq.o dhcp.o lease.o rfc2131.o netlink.o dbus.o bpf.o \ helper.o tftp.o log.o conntrack.o dhcp6.o rfc3315.o \ dhcp-common.o outpacket.o radv.o slaac.o auth.o ipset.o \ -- domain.o dnssec.o blockdata.o -+ domain.o dnssec.o blockdata.o isc.o +- domain.o dnssec.o blockdata.o tables.o loop.o ++ domain.o dnssec.o blockdata.o tables.o loop.o isc.o hdrs = dnsmasq.h config.h dhcp-protocol.h dhcp6-protocol.h \ dns-protocol.h radv-protocol.h ip6addr.h diff --git a/src/cache.c b/src/cache.c -index 5cec918..1f5657f 100644 +index 2c3a498..77a7046 100644 --- a/src/cache.c +++ b/src/cache.c @@ -17,7 +17,7 @@ @@ -65,10 +65,10 @@ index 5cec918..1f5657f 100644 cache_hash(crec); diff --git a/src/dnsmasq.c b/src/dnsmasq.c -index 1c96a0e..156ac9a 100644 +index f4a89fc..a448ec4 100644 --- a/src/dnsmasq.c +++ b/src/dnsmasq.c -@@ -934,6 +934,11 @@ int main (int argc, char **argv) +@@ -940,6 +940,11 @@ int main (int argc, char **argv) poll_resolv(0, daemon->last_resolv != 0, now); daemon->last_resolv = now; @@ -81,18 +81,24 @@ index 1c96a0e..156ac9a 100644 if (FD_ISSET(piperead, &rset)) diff --git a/src/dnsmasq.h b/src/dnsmasq.h -index 3032546..a40b2a9 100644 +index e74b15a..4a35168 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h -@@ -1447,3 +1447,8 @@ void slaac_add_addrs(struct dhcp_lease *lease, time_t now, int force); - time_t periodic_slaac(time_t now, struct dhcp_lease *leases); +@@ -1463,9 +1463,13 @@ time_t periodic_slaac(time_t now, struct dhcp_lease *leases); void slaac_ping_reply(struct in6_addr *sender, unsigned char *packet, char *interface, struct dhcp_lease *leases); #endif -+ + +/* isc.c */ +#ifdef HAVE_ISC_READER +void load_dhcp(time_t now); +#endif ++ + /* loop.c */ + #ifdef HAVE_LOOP + void loop_send_probes(); + int detect_loop(char *query, int type); + #endif +- diff --git a/src/isc.c b/src/isc.c new file mode 100644 index 0000000..5106442 @@ -351,10 +357,10 @@ index 0000000..5106442 + +#endif diff --git a/src/option.c b/src/option.c -index daa728f..d16c982 100644 +index 45d8875..29c9ee5 100644 --- a/src/option.c +++ b/src/option.c -@@ -1642,7 +1642,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma +@@ -1669,7 +1669,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma ret_err(_("bad MX target")); break; From 2a3506f3493a38609e787c9cf20718d233812584 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Fri, 26 Sep 2014 12:24:16 +0200 Subject: [PATCH 10/36] Create core update 84 --- config/rootfiles/core/{83 => 84}/exclude | 0 config/rootfiles/core/84/filelists/files | 2 + config/rootfiles/core/{83 => 84}/meta | 0 config/rootfiles/core/84/update.sh | 56 +++++++++++++++++++ .../{core => oldcore}/82/filelists/iputils | 0 .../82/filelists/openssl-compat | 0 config/rootfiles/oldcore/83/exclude | 20 +++++++ .../{core => oldcore}/83/filelists/bash | 0 .../{core => oldcore}/83/filelists/files | 0 .../{core => oldcore}/83/filelists/findutils | 0 .../{core => oldcore}/83/filelists/squid | 0 config/rootfiles/oldcore/83/meta | 1 + .../rootfiles/{core => oldcore}/83/update.sh | 0 make.sh | 2 +- 14 files changed, 80 insertions(+), 1 deletion(-) rename config/rootfiles/core/{83 => 84}/exclude (100%) create mode 100644 config/rootfiles/core/84/filelists/files rename config/rootfiles/core/{83 => 84}/meta (100%) create mode 100644 config/rootfiles/core/84/update.sh rename config/rootfiles/{core => oldcore}/82/filelists/iputils (100%) rename config/rootfiles/{core => oldcore}/82/filelists/openssl-compat (100%) create mode 100644 config/rootfiles/oldcore/83/exclude rename config/rootfiles/{core => oldcore}/83/filelists/bash (100%) rename config/rootfiles/{core => oldcore}/83/filelists/files (100%) rename config/rootfiles/{core => oldcore}/83/filelists/findutils (100%) rename config/rootfiles/{core => oldcore}/83/filelists/squid (100%) create mode 100644 config/rootfiles/oldcore/83/meta rename config/rootfiles/{core => oldcore}/83/update.sh (100%) diff --git a/config/rootfiles/core/83/exclude b/config/rootfiles/core/84/exclude similarity index 100% rename from config/rootfiles/core/83/exclude rename to config/rootfiles/core/84/exclude diff --git a/config/rootfiles/core/84/filelists/files b/config/rootfiles/core/84/filelists/files new file mode 100644 index 000000000..409e5fe8a --- /dev/null +++ b/config/rootfiles/core/84/filelists/files @@ -0,0 +1,2 @@ +etc/system-release +etc/issue diff --git a/config/rootfiles/core/83/meta b/config/rootfiles/core/84/meta similarity index 100% rename from config/rootfiles/core/83/meta rename to config/rootfiles/core/84/meta diff --git a/config/rootfiles/core/84/update.sh b/config/rootfiles/core/84/update.sh new file mode 100644 index 000000000..04e6d8db9 --- /dev/null +++ b/config/rootfiles/core/84/update.sh @@ -0,0 +1,56 @@ +#!/bin/bash +############################################################################ +# # +# This file is part of the IPFire Firewall. # +# # +# IPFire is free software; you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation; either version 3 of the License, or # +# (at your option) any later version. # +# # +# IPFire is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with IPFire; if not, write to the Free Software # +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # +# # +# Copyright (C) 2014 IPFire-Team . # +# # +############################################################################ +# +. /opt/pakfire/lib/functions.sh +/usr/local/bin/backupctrl exclude >/dev/null 2>&1 + +# Remove old core updates from pakfire cache to save space... +core=84 +for (( i=1; i<=$core; i++ )) +do + rm -f /var/cache/pakfire/core-upgrade-*-$i.ipfire +done + +# Stop services + +# Remove old files + +# Extract files +extract_files + +# Start services + +# Update Language cache +perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang" + +sync + +# This update need a reboot... +touch /var/run/need_reboot + +# Finish +/etc/init.d/fireinfo start +sendprofile + +# Don't report the exitcode last command +exit 0 diff --git a/config/rootfiles/core/82/filelists/iputils b/config/rootfiles/oldcore/82/filelists/iputils similarity index 100% rename from config/rootfiles/core/82/filelists/iputils rename to config/rootfiles/oldcore/82/filelists/iputils diff --git a/config/rootfiles/core/82/filelists/openssl-compat b/config/rootfiles/oldcore/82/filelists/openssl-compat similarity index 100% rename from config/rootfiles/core/82/filelists/openssl-compat rename to config/rootfiles/oldcore/82/filelists/openssl-compat diff --git a/config/rootfiles/oldcore/83/exclude b/config/rootfiles/oldcore/83/exclude new file mode 100644 index 000000000..18e9b4d24 --- /dev/null +++ b/config/rootfiles/oldcore/83/exclude @@ -0,0 +1,20 @@ +boot/config.txt +etc/collectd.custom +etc/ipsec.conf +etc/ipsec.secrets +etc/ipsec.user.conf +etc/ipsec.user.secrets +etc/localtime +etc/shadow +etc/ssh/ssh_config +etc/ssh/sshd_config +etc/ssl/openssl.cnf +etc/sudoers +etc/sysconfig/firewall.local +etc/sysconfig/rc.local +etc/udev/rules.d/30-persistent-network.rules +srv/web/ipfire/html/proxy.pac +var/ipfire/ovpn +var/log/cache +var/state/dhcp/dhcpd.leases +var/updatecache diff --git a/config/rootfiles/core/83/filelists/bash b/config/rootfiles/oldcore/83/filelists/bash similarity index 100% rename from config/rootfiles/core/83/filelists/bash rename to config/rootfiles/oldcore/83/filelists/bash diff --git a/config/rootfiles/core/83/filelists/files b/config/rootfiles/oldcore/83/filelists/files similarity index 100% rename from config/rootfiles/core/83/filelists/files rename to config/rootfiles/oldcore/83/filelists/files diff --git a/config/rootfiles/core/83/filelists/findutils b/config/rootfiles/oldcore/83/filelists/findutils similarity index 100% rename from config/rootfiles/core/83/filelists/findutils rename to config/rootfiles/oldcore/83/filelists/findutils diff --git a/config/rootfiles/core/83/filelists/squid b/config/rootfiles/oldcore/83/filelists/squid similarity index 100% rename from config/rootfiles/core/83/filelists/squid rename to config/rootfiles/oldcore/83/filelists/squid diff --git a/config/rootfiles/oldcore/83/meta b/config/rootfiles/oldcore/83/meta new file mode 100644 index 000000000..d547fa86f --- /dev/null +++ b/config/rootfiles/oldcore/83/meta @@ -0,0 +1 @@ +DEPS="" diff --git a/config/rootfiles/core/83/update.sh b/config/rootfiles/oldcore/83/update.sh similarity index 100% rename from config/rootfiles/core/83/update.sh rename to config/rootfiles/oldcore/83/update.sh diff --git a/make.sh b/make.sh index 9084df249..23ef2b66e 100755 --- a/make.sh +++ b/make.sh @@ -25,7 +25,7 @@ NAME="IPFire" # Software name SNAME="ipfire" # Short name VERSION="2.15" # Version number -CORE="83" # Core Level (Filename) +CORE="84" # Core Level (Filename) PAKFIRE_CORE="83" # Core Level (PAKFIRE) GIT_BRANCH=`git rev-parse --abbrev-ref HEAD` # Git Branch SLOGAN="www.ipfire.org" # Software slogan From b7784e38bdca9a8377ffd3e7e990592510f13a35 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Fri, 26 Sep 2014 12:25:48 +0200 Subject: [PATCH 11/36] core84: Add dnsmasq update --- config/rootfiles/core/84/filelists/dnsmasq | 1 + config/rootfiles/core/84/update.sh | 2 ++ 2 files changed, 3 insertions(+) create mode 120000 config/rootfiles/core/84/filelists/dnsmasq diff --git a/config/rootfiles/core/84/filelists/dnsmasq b/config/rootfiles/core/84/filelists/dnsmasq new file mode 120000 index 000000000..d469c7463 --- /dev/null +++ b/config/rootfiles/core/84/filelists/dnsmasq @@ -0,0 +1 @@ +../../../common/dnsmasq \ No newline at end of file diff --git a/config/rootfiles/core/84/update.sh b/config/rootfiles/core/84/update.sh index 04e6d8db9..1b8332664 100644 --- a/config/rootfiles/core/84/update.sh +++ b/config/rootfiles/core/84/update.sh @@ -32,6 +32,7 @@ do done # Stop services +/etc/init.d/dnsmasq stop # Remove old files @@ -39,6 +40,7 @@ done extract_files # Start services +/etc/init.d/dnsmasq start # Update Language cache perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang" From b30890aa068415f5c47ee76d90b19753f0ee1da5 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Fri, 26 Sep 2014 12:42:27 +0200 Subject: [PATCH 12/36] bash: Import upstream patches for CVE-2014-6271 and CVE-2014-7169 --- config/rootfiles/core/84/filelists/bash | 1 + lfs/bash | 4 +- src/patches/bash-3.2-CVE-2014-7169.patch | 11 ---- .../bash32-052} | 32 +++++++++++ src/patches/bash/bash32-053 | 54 +++++++++++++++++++ 5 files changed, 88 insertions(+), 14 deletions(-) create mode 120000 config/rootfiles/core/84/filelists/bash delete mode 100644 src/patches/bash-3.2-CVE-2014-7169.patch rename src/patches/{bash-3.2-CVE-2014-6271.patch => bash/bash32-052} (75%) create mode 100644 src/patches/bash/bash32-053 diff --git a/config/rootfiles/core/84/filelists/bash b/config/rootfiles/core/84/filelists/bash new file mode 120000 index 000000000..de970cb1d --- /dev/null +++ b/config/rootfiles/core/84/filelists/bash @@ -0,0 +1 @@ +../../../common/bash \ No newline at end of file diff --git a/lfs/bash b/lfs/bash index 58556faf0..55afd24ef 100644 --- a/lfs/bash +++ b/lfs/bash @@ -89,15 +89,13 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) - for i in $$(seq 1 51); do \ + for i in $$(seq 1 53); do \ cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash/bash32-$$(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) diff --git a/src/patches/bash-3.2-CVE-2014-7169.patch b/src/patches/bash-3.2-CVE-2014-7169.patch deleted file mode 100644 index 964b91f51..000000000 --- a/src/patches/bash-3.2-CVE-2014-7169.patch +++ /dev/null @@ -1,11 +0,0 @@ -*** ../bash-20140912/parse.y 2014-08-26 15:09:42.000000000 -0400 ---- parse.y 2014-09-24 22:47:28.000000000 -0400 -*************** -*** 2959,2962 **** ---- 2959,2964 ---- - word_desc_to_read = (WORD_DESC *)NULL; - -+ eol_ungetc_lookahead = 0; -+ - current_token = '\n'; /* XXX */ - last_read_token = '\n'; diff --git a/src/patches/bash-3.2-CVE-2014-6271.patch b/src/patches/bash/bash32-052 similarity index 75% rename from src/patches/bash-3.2-CVE-2014-6271.patch rename to src/patches/bash/bash32-052 index 396491603..78e7d9270 100644 --- a/src/patches/bash-3.2-CVE-2014-6271.patch +++ b/src/patches/bash/bash32-052 @@ -1,3 +1,20 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-052 + +Bug-Reported-by: Stephane Chazelas +Bug-Reference-ID: +Bug-Reference-URL: + +Bug-Description: + +Under certain circumstances, bash will execute user code while processing the +environment for exported function definitions. + +Patch (apply with `patch -p0'): + *** ../bash-3.2.51/builtins/common.h 2006-03-06 09:38:44.000000000 -0500 --- builtins/common.h 2014-09-16 19:08:02.000000000 -0400 *************** @@ -70,3 +87,18 @@ } #if defined (ARRAY_VARS) --- 331,334 ---- +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 51 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 52 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-053 b/src/patches/bash/bash32-053 new file mode 100644 index 000000000..e7efce71a --- /dev/null +++ b/src/patches/bash/bash32-053 @@ -0,0 +1,54 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-053 + +Bug-Reported-by: Tavis Ormandy +Bug-Reference-ID: +Bug-Reference-URL: http://twitter.com/taviso/statuses/514887394294652929 + +Bug-Description: + +Under certain circumstances, bash can incorrectly save a lookahead character and +return it on a subsequent call, even when reading a new line. + +Patch: + +*** ../bash-3.2.52/parse.y 2008-04-29 21:24:55.000000000 -0400 +--- parse.y 2014-09-25 16:18:41.000000000 -0400 +*************** +*** 2504,2507 **** +--- 2504,2509 ---- + word_desc_to_read = (WORD_DESC *)NULL; + ++ eol_ungetc_lookahead = 0; ++ + last_read_token = '\n'; + token_to_read = '\n'; +*** ../bash-3.2.52/y.tab.c 2006-09-25 08:15:16.000000000 -0400 +--- y.tab.c 2014-09-25 20:28:17.000000000 -0400 +*************** +*** 3833,3836 **** +--- 3833,3838 ---- + word_desc_to_read = (WORD_DESC *)NULL; + ++ eol_ungetc_lookahead = 0; ++ + last_read_token = '\n'; + token_to_read = '\n'; +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 52 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 53 + + #endif /* _PATCHLEVEL_H_ */ From 82f8d118b731a6bcd619c4a0e6bb55a27b47eb93 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Fri, 26 Sep 2014 12:58:13 +0200 Subject: [PATCH 13/36] core84: Add changed files from the firewall-dnat branch --- config/rootfiles/core/84/filelists/files | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/config/rootfiles/core/84/filelists/files b/config/rootfiles/core/84/filelists/files index 409e5fe8a..a44c6dded 100644 --- a/config/rootfiles/core/84/filelists/files +++ b/config/rootfiles/core/84/filelists/files @@ -1,2 +1,6 @@ etc/system-release etc/issue +srv/web/ipfire/cgi-bin/firewall.cgi +srv/web/ipfire/cgi-bin/fwhosts.cgi +usr/lib/firewall/firewall-lib.pl +usr/lib/firewall/rules.pl From 2acc3cd9e72789df0b05904559a73e98d9f840d2 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Fri, 26 Sep 2014 13:00:38 +0200 Subject: [PATCH 14/36] core84: Add changed files from fw-checksubnet branch --- config/rootfiles/core/84/filelists/files | 1 + 1 file changed, 1 insertion(+) diff --git a/config/rootfiles/core/84/filelists/files b/config/rootfiles/core/84/filelists/files index a44c6dded..6b0dcea5e 100644 --- a/config/rootfiles/core/84/filelists/files +++ b/config/rootfiles/core/84/filelists/files @@ -4,3 +4,4 @@ srv/web/ipfire/cgi-bin/firewall.cgi srv/web/ipfire/cgi-bin/fwhosts.cgi usr/lib/firewall/firewall-lib.pl usr/lib/firewall/rules.pl +var/ipfire/langs From 21df0788abbb174bb675c5ade256f86f6427d6a0 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Fri, 26 Sep 2014 13:03:48 +0200 Subject: [PATCH 15/36] core84: Add changed files from #10620 --- config/rootfiles/core/84/filelists/files | 1 + 1 file changed, 1 insertion(+) diff --git a/config/rootfiles/core/84/filelists/files b/config/rootfiles/core/84/filelists/files index 6b0dcea5e..85bca9950 100644 --- a/config/rootfiles/core/84/filelists/files +++ b/config/rootfiles/core/84/filelists/files @@ -1,5 +1,6 @@ etc/system-release etc/issue +etc/rc.d/init.d/firewall srv/web/ipfire/cgi-bin/firewall.cgi srv/web/ipfire/cgi-bin/fwhosts.cgi usr/lib/firewall/firewall-lib.pl From d71bcfce59ceac8c5cb9d96ef33de10742d161aa Mon Sep 17 00:00:00 2001 From: Alexander Marx Date: Wed, 17 Sep 2014 15:52:45 +0200 Subject: [PATCH 16/36] squid-accounting: set right permissions of html directory for graphs and logo --- lfs/squid-accounting | 2 +- src/paks/squid-accounting/install.sh | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lfs/squid-accounting b/lfs/squid-accounting index 6f0fdc3b2..0dca63f75 100644 --- a/lfs/squid-accounting +++ b/lfs/squid-accounting @@ -15,7 +15,7 @@ THISAPP = squid-accounting-$(VER) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) PROG = squid-accounting -PAK_VER = 2 +PAK_VER = 3 DEPS = "perl-DBI perl-DBD-SQLite perl-File-ReadBackwards perl-PDF-API2 sendEmail" diff --git a/src/paks/squid-accounting/install.sh b/src/paks/squid-accounting/install.sh index f20b85f46..835055ad5 100644 --- a/src/paks/squid-accounting/install.sh +++ b/src/paks/squid-accounting/install.sh @@ -31,5 +31,8 @@ if [ ! -f /var/ipfire/accounting/acct.db ]; then chmod 644 /var/ipfire/accounting/acct.db chown nobody.nobody /var/ipfire/accounting/acct.db fi +#Set right permissions of directory /srv/web/ipfire/html/accounting +chown -R nobody.nobody /srv/web/ipfire/html/accounting +chmod 755 -R /srv/web/ipfire/html/accounting rm -f /var/ipfire/accounting/dbinstall.pl /usr/local/bin/update-lang-cache From 6ae884e5f9e8d2e6f0a71163d1a2e595942b35ce Mon Sep 17 00:00:00 2001 From: Timo Eissler Date: Fri, 26 Sep 2014 22:15:13 +0200 Subject: [PATCH 17/36] urlfilter.cgi: safe search enhancements Fixes: #10415 Activate bing safe search. Add nwshp to google url patterns. --- html/cgi-bin/urlfilter.cgi | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/html/cgi-bin/urlfilter.cgi b/html/cgi-bin/urlfilter.cgi index 78f7b321b..82d9d7181 100644 --- a/html/cgi-bin/urlfilter.cgi +++ b/html/cgi-bin/urlfilter.cgi @@ -2854,11 +2854,13 @@ sub writeconfigfile if ($filtersettings{'ENABLE_SAFESEARCH'} eq 'on') { print FILE " # rewrite safesearch\n"; - print FILE " s@(.*\\Wgoogle\\.\\w+/(webhp|search|imghp|images|grphp|groups|frghp|froogle)\\?)(.*)(\\bsafe=\\w+)(.*)\@\\1\\3safe=strict\\5\@i\n"; - print FILE " s@(.*\\Wgoogle\\.\\w+/(webhp|search|imghp|images|grphp|groups|frghp|froogle)\\?)(.*)\@\\1safe=strict\\\&\\3\@i\n"; + print FILE " s@(.*\\Wgoogle\\.\\w+/(webhp|search|imghp|images|grphp|groups|nwshp|frghp|froogle)\\?)(.*)(\\bsafe=\\w+)(.*)\@\\1\\3safe=strict\\5\@i\n"; + print FILE " s@(.*\\Wgoogle\\.\\w+/(webhp|search|imghp|images|grphp|groups|nwshp|frghp|froogle)\\?)(.*)\@\\1safe=strict\\\&\\3\@i\n"; print FILE " s@(.*\\Wsearch\\.yahoo\\.\\w+/search\\W)(.*)(\\bvm=\\w+)(.*)\@\\1\\2vm=r\\4\@i\n"; print FILE " s@(.*\\Wsearch\\.yahoo\\.\\w+/search\\W.*)\@\\1\\\&vm=r\@i\n"; print FILE " s@(.*\\Walltheweb\\.com/customize\\?)(.*)(\\bcopt_offensive=\\w+)(.*)\@\\1\\2copt_offensive=on\\4\@i\n"; + print FILE " s@(.*\\Wbing\\.\\w+/)(.*)(\\badlt=\\w+)(.*)\@\\1\\2adlt=strict\\4\@i\n"; + print FILE " s@(.*\\Wbing\\.\\w+/.*)\@\\1\\\&adlt=strict\@i\n"; } print FILE "}\n\n"; From b7981215da3482d3b9370cff4f19ed73ef24180d Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 27 Sep 2014 20:43:49 +0200 Subject: [PATCH 18/36] core84: Add changed urlfilter.cgi --- config/rootfiles/core/84/filelists/files | 1 + 1 file changed, 1 insertion(+) diff --git a/config/rootfiles/core/84/filelists/files b/config/rootfiles/core/84/filelists/files index 85bca9950..359fbe0e4 100644 --- a/config/rootfiles/core/84/filelists/files +++ b/config/rootfiles/core/84/filelists/files @@ -3,6 +3,7 @@ etc/issue etc/rc.d/init.d/firewall 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 From 1c4308c1f25a0618ca858920ecfe94f0675189c2 Mon Sep 17 00:00:00 2001 From: Timo Eissler Date: Sat, 27 Sep 2014 22:24:26 +0200 Subject: [PATCH 19/36] urlfilter.cgi: enhance file extension blocking Fixes #10535 Add flv, mkv and mp4 as audio/video file exentions. Add 7z as archive file extension. --- html/cgi-bin/urlfilter.cgi | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/html/cgi-bin/urlfilter.cgi b/html/cgi-bin/urlfilter.cgi index 78f7b321b..2b042b310 100644 --- a/html/cgi-bin/urlfilter.cgi +++ b/html/cgi-bin/urlfilter.cgi @@ -2722,9 +2722,9 @@ sub setpermissions sub writeconfigfile { - my $executables = "\\.\(ade|adp|asx|bas|bat|chm|com|cmd|cpl|crt|dll|eml|exe|hiv|hlp|hta|inc|inf|ins|isp|jse|jtd|lnk|msc|msh|msi|msp|mst|nws|ocx|oft|ops|pcd|pif|plx|reg|scr|sct|sha|shb|shm|shs|sys|tlb|tsp|url|vbe|vbs|vxd|wsc|wsf|wsh\)\$"; - my $audiovideo = "\\.\(aiff|asf|avi|dif|divx|mov|movie|mp3|mpe?g?|mpv2|ogg|ra?m|snd|qt|wav|wma|wmf|wmv\)\$"; - my $archives = "\\.\(bin|bz2|cab|cdr|dmg|gz|hqx|rar|smi|sit|sea|tar|tgz|zip\)\$"; + my $executables = "/[^/]*\\.\(ade|adp|asx|bas|bat|chm|com|cmd|cpl|crt|dll|eml|exe|hiv|hlp|hta|inc|inf|ins|isp|jse|jtd|lnk|msc|msh|msi|msp|mst|nws|ocx|oft|ops|pcd|pif|plx|reg|scr|sct|sha|shb|shm|shs|sys|tlb|tsp|url|vbe|vbs|vxd|wsc|wsf|wsh\)\$"; + my $audiovideo = "/[^/]*\\.\(aiff|asf|avi|dif|divx|flv|mkv|mov|movie|mp3|mp4|mpe?g?|mpv2|ogg|ra?m|snd|qt|wav|wma|wmf|wmv\)\$"; + my $archives = "/[^/]*\\.\(7z|bin|bz2|cab|cdr|dmg|gz|hqx|rar|smi|sit|sea|tar|tgz|zip\)\$"; my $ident = " anonymous"; From 627fdda8e87fa266fb450938e7248ad190a03e55 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 27 Sep 2014 22:59:05 +0200 Subject: [PATCH 20/36] Fix wording. Remove "got". Fixes #10632 --- langs/en/cgi-bin/en.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl index a15090a41..198640934 100644 --- a/langs/en/cgi-bin/en.pl +++ b/langs/en/cgi-bin/en.pl @@ -2114,8 +2114,8 @@ 'swap usage per' => 'Swap usage per', 'system' => 'System', 'system graphs' => 'System Graphs', -'system has hwrng' => 'This system has got a hardware random number generator.', -'system has rdrand' => 'This system has got support for Intel(R) RDRAND.', +'system has hwrng' => 'This system has a hardware random number generator.', +'system has rdrand' => 'This system has support for Intel(R) RDRAND.', 'system information' => 'System Information', 'system log viewer' => 'System Log Viewer', 'system logs' => 'System Logs', From d51e4906648359f91e61ff74a0df35d77a0f0a24 Mon Sep 17 00:00:00 2001 From: Timo Eissler Date: Sat, 27 Sep 2014 23:16:57 +0200 Subject: [PATCH 21/36] network: fix coding style --- src/initscripts/init.d/network | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/initscripts/init.d/network b/src/initscripts/init.d/network index 5aecd1557..1e48af949 100644 --- a/src/initscripts/init.d/network +++ b/src/initscripts/init.d/network @@ -26,7 +26,7 @@ shift if [ -n "${1}" ]; then ALL=0 - for i in green red blue orange; do + for i in green red blue orange; do eval "${i}=0" done else @@ -68,7 +68,7 @@ case "${DO}" in rm -f /var/ipfire/red/{active,device,dial-on-demand,dns1,dns2,local-ipaddress,remote-ipaddress,resolv.conf} [ "$AUTOCONNECT" == "off" ] || /etc/rc.d/init.d/networking/red start fi - fi + fi ;; stop) From 1d4897f30894ad52a37072454ccf690c51e9a0b1 Mon Sep 17 00:00:00 2001 From: Timo Eissler Date: Sat, 27 Sep 2014 23:28:04 +0200 Subject: [PATCH 22/36] network: move start of static-routes Fixes #10454 Create static routes after network interfaces are initialised. --- src/initscripts/init.d/network | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/initscripts/init.d/network b/src/initscripts/init.d/network index 1e48af949..9182e9801 100644 --- a/src/initscripts/init.d/network +++ b/src/initscripts/init.d/network @@ -18,7 +18,6 @@ eval $(/usr/local/bin/readhash /var/ipfire/ethernet/settings) init_networking() { /etc/rc.d/init.d/dnsmasq start - /etc/rc.d/init.d/static-routes start } DO="${1}" @@ -69,6 +68,8 @@ case "${DO}" in [ "$AUTOCONNECT" == "off" ] || /etc/rc.d/init.d/networking/red start fi fi + + /etc/rc.d/init.d/static-routes start ;; stop) From 9a818c0eb4fc801363e319e346876f2abc6a28a9 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 28 Sep 2014 13:32:17 +0200 Subject: [PATCH 23/36] core84: Add changed /etc/rc.d/init.d/network --- config/rootfiles/core/84/filelists/files | 1 + 1 file changed, 1 insertion(+) diff --git a/config/rootfiles/core/84/filelists/files b/config/rootfiles/core/84/filelists/files index 359fbe0e4..c26e2ea09 100644 --- a/config/rootfiles/core/84/filelists/files +++ b/config/rootfiles/core/84/filelists/files @@ -1,6 +1,7 @@ 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 From ce84ace5bf3b2de70fd437e61ef369e5afd82101 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 26 Jul 2014 20:00:17 +0200 Subject: [PATCH 24/36] bash: Update to 4.3. Conflicts: lfs/bash --- config/rootfiles/common/bash | 50 +++ lfs/bash | 37 +-- src/patches/bash-3.2-ssh_source_bash.patch | 17 +- src/patches/bash-4.0-paths-1.patch | 21 +- src/patches/bash/bash32-001 | 47 --- src/patches/bash/bash32-002 | 48 --- src/patches/bash/bash32-003 | 147 --------- src/patches/bash/bash32-004 | 96 ------ src/patches/bash/bash32-005 | 223 -------------- src/patches/bash/bash32-006 | 45 --- src/patches/bash/bash32-007 | 55 ---- src/patches/bash/bash32-008 | 48 --- src/patches/bash/bash32-009 | 61 ---- src/patches/bash/bash32-010 | 207 ------------- src/patches/bash/bash32-011 | 138 --------- src/patches/bash/bash32-012 | 96 ------ src/patches/bash/bash32-013 | 65 ---- src/patches/bash/bash32-014 | 307 ------------------ src/patches/bash/bash32-015 | 95 ------ src/patches/bash/bash32-016 | 52 ---- src/patches/bash/bash32-017 | 85 ----- src/patches/bash/bash32-018 | 98 ------ src/patches/bash/bash32-019 | 343 --------------------- src/patches/bash/bash32-020 | 183 ----------- src/patches/bash/bash32-021 | 72 ----- src/patches/bash/bash32-022 | 126 -------- src/patches/bash/bash32-023 | 51 --- src/patches/bash/bash32-024 | 77 ----- src/patches/bash/bash32-025 | 79 ----- src/patches/bash/bash32-026 | 82 ----- src/patches/bash/bash32-027 | 85 ----- src/patches/bash/bash32-028 | 60 ---- src/patches/bash/bash32-029 | 52 ---- src/patches/bash/bash32-030 | 50 --- src/patches/bash/bash32-031 | 62 ---- src/patches/bash/bash32-032 | 47 --- src/patches/bash/bash32-033 | 88 ------ src/patches/bash/bash32-034 | 74 ----- src/patches/bash/bash32-035 | 159 ---------- src/patches/bash/bash32-036 | 44 --- src/patches/bash/bash32-037 | 110 ------- src/patches/bash/bash32-038 | 80 ----- src/patches/bash/bash32-039 | 175 ----------- src/patches/bash/bash32-040 | 47 --- src/patches/bash/bash32-041 | 154 --------- src/patches/bash/bash32-042 | 48 --- src/patches/bash/bash32-043 | 62 ---- src/patches/bash/bash32-044 | 150 --------- src/patches/bash/bash32-045 | 50 --- src/patches/bash/bash32-046 | 47 --- src/patches/bash/bash32-047 | 65 ---- src/patches/bash/bash32-048 | 56 ---- src/patches/bash/bash32-049 | 64 ---- src/patches/bash/bash32-050 | 56 ---- src/patches/bash/bash32-051 | 46 --- src/patches/bash/bash43-001 | 58 ++++ src/patches/bash/bash43-002 | 62 ++++ src/patches/bash/bash43-003 | 48 +++ src/patches/bash/bash43-004 | 47 +++ src/patches/bash/bash43-005 | 63 ++++ src/patches/bash/bash43-006 | 48 +++ src/patches/bash/bash43-007 | 50 +++ src/patches/bash/bash43-008 | 188 +++++++++++ src/patches/bash/bash43-009 | 64 ++++ src/patches/bash/bash43-010 | 157 ++++++++++ src/patches/bash/bash43-011 | 49 +++ src/patches/bash/bash43-012 | 43 +++ src/patches/bash/bash43-013 | 66 ++++ src/patches/bash/bash43-014 | 102 ++++++ src/patches/bash/bash43-015 | 58 ++++ src/patches/bash/bash43-016 | 132 ++++++++ src/patches/bash/bash43-017 | 51 +++ src/patches/bash/bash43-018 | 44 +++ 73 files changed, 1410 insertions(+), 4902 deletions(-) delete mode 100644 src/patches/bash/bash32-001 delete mode 100644 src/patches/bash/bash32-002 delete mode 100644 src/patches/bash/bash32-003 delete mode 100644 src/patches/bash/bash32-004 delete mode 100644 src/patches/bash/bash32-005 delete mode 100644 src/patches/bash/bash32-006 delete mode 100644 src/patches/bash/bash32-007 delete mode 100644 src/patches/bash/bash32-008 delete mode 100644 src/patches/bash/bash32-009 delete mode 100644 src/patches/bash/bash32-010 delete mode 100644 src/patches/bash/bash32-011 delete mode 100644 src/patches/bash/bash32-012 delete mode 100644 src/patches/bash/bash32-013 delete mode 100644 src/patches/bash/bash32-014 delete mode 100644 src/patches/bash/bash32-015 delete mode 100644 src/patches/bash/bash32-016 delete mode 100644 src/patches/bash/bash32-017 delete mode 100644 src/patches/bash/bash32-018 delete mode 100644 src/patches/bash/bash32-019 delete mode 100644 src/patches/bash/bash32-020 delete mode 100644 src/patches/bash/bash32-021 delete mode 100644 src/patches/bash/bash32-022 delete mode 100644 src/patches/bash/bash32-023 delete mode 100644 src/patches/bash/bash32-024 delete mode 100644 src/patches/bash/bash32-025 delete mode 100644 src/patches/bash/bash32-026 delete mode 100644 src/patches/bash/bash32-027 delete mode 100644 src/patches/bash/bash32-028 delete mode 100644 src/patches/bash/bash32-029 delete mode 100644 src/patches/bash/bash32-030 delete mode 100644 src/patches/bash/bash32-031 delete mode 100644 src/patches/bash/bash32-032 delete mode 100644 src/patches/bash/bash32-033 delete mode 100644 src/patches/bash/bash32-034 delete mode 100644 src/patches/bash/bash32-035 delete mode 100644 src/patches/bash/bash32-036 delete mode 100644 src/patches/bash/bash32-037 delete mode 100644 src/patches/bash/bash32-038 delete mode 100644 src/patches/bash/bash32-039 delete mode 100644 src/patches/bash/bash32-040 delete mode 100644 src/patches/bash/bash32-041 delete mode 100644 src/patches/bash/bash32-042 delete mode 100644 src/patches/bash/bash32-043 delete mode 100644 src/patches/bash/bash32-044 delete mode 100644 src/patches/bash/bash32-045 delete mode 100644 src/patches/bash/bash32-046 delete mode 100644 src/patches/bash/bash32-047 delete mode 100644 src/patches/bash/bash32-048 delete mode 100644 src/patches/bash/bash32-049 delete mode 100644 src/patches/bash/bash32-050 delete mode 100644 src/patches/bash/bash32-051 create mode 100644 src/patches/bash/bash43-001 create mode 100644 src/patches/bash/bash43-002 create mode 100644 src/patches/bash/bash43-003 create mode 100644 src/patches/bash/bash43-004 create mode 100644 src/patches/bash/bash43-005 create mode 100644 src/patches/bash/bash43-006 create mode 100644 src/patches/bash/bash43-007 create mode 100644 src/patches/bash/bash43-008 create mode 100644 src/patches/bash/bash43-009 create mode 100644 src/patches/bash/bash43-010 create mode 100644 src/patches/bash/bash43-011 create mode 100644 src/patches/bash/bash43-012 create mode 100644 src/patches/bash/bash43-013 create mode 100644 src/patches/bash/bash43-014 create mode 100644 src/patches/bash/bash43-015 create mode 100644 src/patches/bash/bash43-016 create mode 100644 src/patches/bash/bash43-017 create mode 100644 src/patches/bash/bash43-018 diff --git a/config/rootfiles/common/bash b/config/rootfiles/common/bash index ecaeb1bdd..6afa0e45e 100644 --- a/config/rootfiles/common/bash +++ b/config/rootfiles/common/bash @@ -1,6 +1,56 @@ 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/man/man1/bash.1 #usr/share/man/man1/bashbug.1 +#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/LC_MESSAGES/bash.mo +#usr/share/locale/eo/LC_MESSAGES/bash.mo +#usr/share/locale/es/LC_MESSAGES/bash.mo +#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/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/LC_MESSAGES/bash.mo +#usr/share/locale/ru/LC_MESSAGES/bash.mo +#usr/share/locale/sk/LC_MESSAGES/bash.mo +#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/LC_MESSAGES/bash.mo diff --git a/lfs/bash b/lfs/bash index 55afd24ef..862c94432 100644 --- a/lfs/bash +++ b/lfs/bash @@ -24,7 +24,7 @@ include Config -VER = 3.2 +VER = 4.3 THISAPP = bash-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -35,20 +35,15 @@ DIR_APP = $(DIR_SRC)/$(THISAPP) # ifeq "$(ROOT)" "" TARGET = $(DIR_INFO)/$(THISAPP) - EXTRA_CONFIG = --prefix=/usr --bindir=/bin \ - --without-bash-malloc --with-installed-readline \ - --disable-nls - EXTRA_MAKE = - EXTRA_INSTALL = + CONFIGURE_OPTIONS = --prefix=/usr --bindir=/bin \ + --with-installed-readline else TARGET = $(DIR_INFO)/$(THISAPP)-tools - EXTRA_CONFIG = --prefix=/tools --without-bash-malloc \ - --disable-nls - EXTRA_MAKE = - EXTRA_INSTALL = + CONFIGURE_OPTIONS = --prefix=/tools endif -EXTRA_CONFIG += ac_cv_func_working_mktime=yes +CONFIGURE_OPTIONS += \ + --without-bash-malloc ############################################################################### # Top-level Rules @@ -58,7 +53,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 00bfa16d58e034e3c2aa27f390390d30 +$(DL_FILE)_MD5 = 81348932d5da294953e15d4814c74dd1 install : $(TARGET) @@ -87,25 +82,31 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zaxf $(DIR_DL)/$(DL_FILE) - for i in $$(seq 1 53); 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 18); 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) && ./configure $(EXTRA_CONFIG) - cd $(DIR_APP) && make $(EXTRA_MAKE) - cd $(DIR_APP) && make $(EXTRA_INSTALL) install + cd $(DIR_APP) && ./configure $(CONFIGURE_OPTIONS) + cd $(DIR_APP) && make $(MAKETUNING) + cd $(DIR_APP) && make install + ln -sf bash /bin/sh + ifneq "$(ROOT)" "" -mkdir -p $(ROOT)/bin -mkdir -p $(ROOT)/usr/bin ln -sf bash /tools/bin/sh -ln -sf /tools/bin/bash $(ROOT)/bin/sh endif + @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/src/patches/bash-3.2-ssh_source_bash.patch b/src/patches/bash-3.2-ssh_source_bash.patch index 4b371326a..5bd19ce9a 100644 --- a/src/patches/bash-3.2-ssh_source_bash.patch +++ b/src/patches/bash-3.2-ssh_source_bash.patch @@ -1,9 +1,12 @@ -diff -up bash-3.2/config-top.h.ssh_source_bash bash-3.2/config-top.h ---- bash-3.2/config-top.h.ssh_source_bash 2008-10-23 15:08:04.000000000 +0200 -+++ bash-3.2/config-top.h 2008-10-23 15:08:33.000000000 +0200 -@@ -86,4 +86,4 @@ - - /* Define this if you want bash to try to check whether it's being run by - sshd and source the .bashrc if so (like the rshd behavior). */ +diff -up bash-4.0/config-top.h.ssh_source_bash bash-4.0/config-top.h +--- bash-4.0/config-top.h.ssh_source_bash 2009-01-21 15:20:06.000000000 +0100 ++++ bash-4.0/config-top.h 2009-01-21 15:25:46.000000000 +0100 +@@ -90,7 +90,7 @@ + sshd and source the .bashrc if so (like the rshd behavior). This checks + for the presence of SSH_CLIENT or SSH2_CLIENT in the initial environment, + which can be fooled under certain not-uncommon circumstances. */ -/* #define SSH_SOURCE_BASHRC */ +#define SSH_SOURCE_BASHRC + + /* Define if you want the case-capitalizing operators (~[~]) and the + `capcase' variable attribute (declare -c). */ diff --git a/src/patches/bash-4.0-paths-1.patch b/src/patches/bash-4.0-paths-1.patch index 735a3810f..24ec5cc0b 100644 --- a/src/patches/bash-4.0-paths-1.patch +++ b/src/patches/bash-4.0-paths-1.patch @@ -1,25 +1,6 @@ ---- bash-3.0/config.h.in.paths 2004-07-21 21:08:31.000000000 +0100 -+++ bash-3.0/config.h.in 2004-07-28 09:16:27.257884999 +0100 -@@ -197,7 +197,7 @@ - - /* System paths */ - --#define DEFAULT_MAIL_DIRECTORY "/usr/spool/mail" -+#define DEFAULT_MAIL_DIRECTORY "/var/spool/mail" - - /* Characteristics of the system's header files and libraries that affect - the compilation environment. */ --- bash-3.0/config-top.h.paths 2003-08-05 15:36:12.000000000 +0100 +++ bash-3.0/config-top.h 2004-07-28 09:36:27.117205637 +0100 -@@ -52,14 +52,14 @@ - /* The default value of the PATH variable. */ - #ifndef DEFAULT_PATH_VALUE - #define DEFAULT_PATH_VALUE \ -- "/usr/gnu/bin:/usr/local/bin:/bin:/usr/bin:." -+ "/usr/local/bin:/bin:/usr/bin" - #endif - - /* The value for PATH when invoking `command -p'. This is only used when +@@ -66,7 +66,7 @@ the Posix.2 confstr () function, or CS_PATH define are not present. */ #ifndef STANDARD_UTILS_PATH #define STANDARD_UTILS_PATH \ diff --git a/src/patches/bash/bash32-001 b/src/patches/bash/bash32-001 deleted file mode 100644 index b7d1f1e07..000000000 --- a/src/patches/bash/bash32-001 +++ /dev/null @@ -1,47 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-001 - -Bug-Reported-by: Greg Schafer -Bug-Reference-ID: <20061012084940.GA15768@tigers.local> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-10/msg00046.html - -Bug-Description: - -When using historical ``-style command substitution, bash incorrectly attempts -to interpret shell comments while scanning for the closing backquote. - -Patch: - -*** ../bash-3.2/parse.y Tue Sep 19 16:37:21 2006 ---- parse.y Thu Oct 12 10:30:57 2006 -*************** -*** 2736,2740 **** - count = 1; - pass_next_character = backq_backslash = was_dollar = in_comment = 0; -! check_comment = (flags & P_COMMAND) && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0; - - /* RFLAGS is the set of flags we want to pass to recursive calls. */ ---- 2736,2740 ---- - count = 1; - pass_next_character = backq_backslash = was_dollar = in_comment = 0; -! check_comment = (flags & P_COMMAND) && qc != '`' && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0; - - /* RFLAGS is the set of flags we want to pass to recursive calls. */ -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 0 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 1 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-002 b/src/patches/bash/bash32-002 deleted file mode 100644 index b934df9fa..000000000 --- a/src/patches/bash/bash32-002 +++ /dev/null @@ -1,48 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-002 - -Bug-Reported-by: Jim Gifford -Bug-Reference-ID: <12j2pc3aq35mb04@corp.supernews.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-10/msg00082.html - -Bug-Description: - -An incorrect encoding specification in the Content-Type header causes msgfmt -to fail, which causes `make install' to fail. - -Patch: - -*** ../bash-3.2/po/ru.po Tue Jan 10 17:51:03 2006 ---- po/ru.po Mon Oct 16 15:13:23 2006 -*************** -*** 13,17 **** - "Language-Team: Russian \n" - "MIME-Version: 1.0\n" -! "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" - "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" ---- 13,17 ---- - "Language-Team: Russian \n" - "MIME-Version: 1.0\n" -! "Content-Type: text/plain; charset=KOI8-R\n" - "Content-Transfer-Encoding: 8bit\n" - "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 1 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 2 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-003 b/src/patches/bash/bash32-003 deleted file mode 100644 index 922041b4a..000000000 --- a/src/patches/bash/bash32-003 +++ /dev/null @@ -1,147 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-003 - -Bug-Reported-by: John Gatewood Ham -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-10/msg00045.html - -Bug-Description: - -When using the conditional command's `=~' operator to match regular -expressions, the parser did not skip over shell metacharacters in the -regular expression, leading to syntax errors. - -Patch: - -*** ../bash-3.2-patched/parse.y Tue Oct 17 11:45:20 2006 ---- parse.y Sat Oct 14 14:56:16 2006 -*************** -*** 1029,1034 **** ---- 1029,1035 ---- - #define PST_CMDTOKEN 0x1000 /* command token OK - unused */ - #define PST_COMPASSIGN 0x2000 /* parsing x=(...) compound assignment */ - #define PST_ASSIGNOK 0x4000 /* assignment statement ok in this context */ -+ #define PST_REGEXP 0x8000 /* parsing an ERE/BRE as a single word */ - - /* Initial size to allocate for tokens, and the - amount to grow them by. */ -*************** -*** 2591,2596 **** ---- 2592,2600 ---- - return (character); - } - -+ if (parser_state & PST_REGEXP) -+ goto tokword; -+ - /* Shell meta-characters. */ - if MBTEST(shellmeta (character) && ((parser_state & PST_DBLPAREN) == 0)) - { -*************** -*** 2698,2703 **** ---- 2702,2708 ---- - if MBTEST(character == '-' && (last_read_token == LESS_AND || last_read_token == GREATER_AND)) - return (character); - -+ tokword: - /* Okay, if we got this far, we have to read a word. Read one, - and then check it against the known ones. */ - result = read_token_word (character); -*************** -*** 3202,3209 **** - if (tok == WORD && test_binop (yylval.word->word)) - op = yylval.word; - #if defined (COND_REGEXP) -! else if (tok == WORD && STREQ (yylval.word->word,"=~")) -! op = yylval.word; - #endif - else if (tok == '<' || tok == '>') - op = make_word_from_token (tok); /* ( */ ---- 3207,3217 ---- - if (tok == WORD && test_binop (yylval.word->word)) - op = yylval.word; - #if defined (COND_REGEXP) -! else if (tok == WORD && STREQ (yylval.word->word, "=~")) -! { -! op = yylval.word; -! parser_state |= PST_REGEXP; -! } - #endif - else if (tok == '<' || tok == '>') - op = make_word_from_token (tok); /* ( */ -*************** -*** 3234,3239 **** ---- 3242,3248 ---- - - /* rhs */ - tok = read_token (READ); -+ parser_state &= ~PST_REGEXP; - if (tok == WORD) - { - tright = make_cond_node (COND_TERM, yylval.word, (COND_COM *)NULL, (COND_COM *)NULL); -*************** -*** 3419,3427 **** - goto next_character; - } - - #ifdef EXTENDED_GLOB - /* Parse a ksh-style extended pattern matching specification. */ -! if (extended_glob && PATTERN_CHAR (character)) - { - peek_char = shell_getc (1); - if MBTEST(peek_char == '(') /* ) */ ---- 3428,3461 ---- - goto next_character; - } - -+ #ifdef COND_REGEXP -+ /* When parsing a regexp as a single word inside a conditional command, -+ we need to special-case characters special to both the shell and -+ regular expressions. Right now, that is only '(' and '|'. */ /*)*/ -+ if MBTEST((parser_state & PST_REGEXP) && (character == '(' || character == '|')) /*)*/ -+ { -+ if (character == '|') -+ goto got_character; -+ -+ push_delimiter (dstack, character); -+ ttok = parse_matched_pair (cd, '(', ')', &ttoklen, 0); -+ pop_delimiter (dstack); -+ if (ttok == &matched_pair_error) -+ return -1; /* Bail immediately. */ -+ RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 2, -+ token_buffer_size, TOKEN_DEFAULT_GROW_SIZE); -+ token[token_index++] = character; -+ strcpy (token + token_index, ttok); -+ token_index += ttoklen; -+ FREE (ttok); -+ dollar_present = all_digit_token = 0; -+ goto next_character; -+ } -+ #endif /* COND_REGEXP */ -+ - #ifdef EXTENDED_GLOB - /* Parse a ksh-style extended pattern matching specification. */ -! if MBTEST(extended_glob && PATTERN_CHAR (character)) - { - peek_char = shell_getc (1); - if MBTEST(peek_char == '(') /* ) */ - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 2 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 3 - - #endif /* _PATCHLEVEL_H_ */ - diff --git a/src/patches/bash/bash32-004 b/src/patches/bash/bash32-004 deleted file mode 100644 index cd2accfa3..000000000 --- a/src/patches/bash/bash32-004 +++ /dev/null @@ -1,96 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-004 - -Bug-Reported-by: Stuart Shelton -Bug-Reference-ID: <619141e40610261203y6cda5aa6i23cb24c7aeba996e@mail.gmail.com> -Bug-Reference-URL: - -Bug-Description: - -A bug in the parameter pattern substitution implementation treated a pattern -whose first character was `/' (after expansion) as specifying global -replacement. - -Patch: - -*** ../bash-3.2/subst.c Tue Sep 19 08:35:09 2006 ---- subst.c Thu Oct 26 09:17:50 2006 -*************** -*** 5707,5712 **** ---- 5707,5717 ---- - vtype &= ~VT_STARSUB; - - mflags = 0; -+ if (patsub && *patsub == '/') -+ { -+ mflags |= MATCH_GLOBREP; -+ patsub++; -+ } - - /* Malloc this because expand_string_if_necessary or one of the expansion - functions in its call chain may free it on a substitution error. */ -*************** -*** 5741,5753 **** - } - - /* ksh93 doesn't allow the match specifier to be a part of the expanded -! pattern. This is an extension. */ - p = pat; -! if (pat && pat[0] == '/') -! { -! mflags |= MATCH_GLOBREP|MATCH_ANY; -! p++; -! } - else if (pat && pat[0] == '#') - { - mflags |= MATCH_BEG; ---- 5746,5757 ---- - } - - /* ksh93 doesn't allow the match specifier to be a part of the expanded -! pattern. This is an extension. Make sure we don't anchor the pattern -! at the beginning or end of the string if we're doing global replacement, -! though. */ - p = pat; -! if (mflags & MATCH_GLOBREP) -! mflags |= MATCH_ANY; - else if (pat && pat[0] == '#') - { - mflags |= MATCH_BEG; -*** ../bash-3.2/tests/new-exp.right Thu Aug 10 12:00:00 2006 ---- tests/new-exp.right Sun Oct 29 16:03:36 2006 -*************** -*** 430,436 **** - Case06---1---A B C::--- - Case07---3---A:B:C--- - Case08---3---A:B:C--- -! ./new-exp.tests: line 506: /${$(($#-1))}: bad substitution - argv[1] = - argv[2] = - argv[3] = ---- 430,436 ---- - Case06---1---A B C::--- - Case07---3---A:B:C--- - Case08---3---A:B:C--- -! ./new-exp.tests: line 506: ${$(($#-1))}: bad substitution - argv[1] = - argv[2] = - argv[3] = -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 3 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 4 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-005 b/src/patches/bash/bash32-005 deleted file mode 100644 index 903ec5840..000000000 --- a/src/patches/bash/bash32-005 +++ /dev/null @@ -1,223 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-005 - -Bug-Reported-by: Stuart Shelton -Bug-Reference-ID: <453F7CC8.6030907@openobjects.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-10/msg00127.html - -Bug-Description: - -A missing extern declaration for `asprintf' caused `double' arguments to be -passed as `0', leading to incorrect results. Additionally, a bug in the -replacement asprintf/snprintf function caused an infinite loop when passed -0 arguments to the floating point conversions under some circumstances. - -Patch: - -*** ../bash-3.2/builtins/printf.def Mon Sep 18 08:48:42 2006 ---- builtins/printf.def Tue Oct 31 08:19:44 2006 -*************** -*** 49,54 **** ---- 49,60 ---- - # define INT_MIN (-2147483647-1) - #endif - -+ #if defined (PREFER_STDARG) -+ # include -+ #else -+ # include -+ #endif -+ - #include - #include - -*************** -*** 151,156 **** ---- 157,166 ---- - #define SKIP1 "#'-+ 0" - #define LENMODS "hjlLtz" - -+ #ifndef HAVE_ASPRINTF -+ extern int asprintf __P((char **, const char *, ...)) __attribute__((__format__ (printf, 2, 3))); -+ #endif -+ - static void printf_erange __P((char *)); - static int printstr __P((char *, char *, int, int, int)); - static int tescape __P((char *, char *, int *)); - - -*** ../bash-3.2/lib/sh/snprintf.c Thu Apr 6 09:48:40 2006 ---- lib/sh/snprintf.c Sat Oct 28 00:00:13 2006 -*************** -*** 471,476 **** ---- 476,483 ---- - 10^x ~= r - * log_10(200) = 2; - * log_10(250) = 2; -+ * -+ * NOTE: do not call this with r == 0 -- an infinite loop results. - */ - static int - log_10(r) -*************** -*** 576,583 **** - { - integral_part[0] = '0'; - integral_part[1] = '\0'; -! fraction_part[0] = '0'; -! fraction_part[1] = '\0'; - if (fract) - *fract = fraction_part; - return integral_part; ---- 583,593 ---- - { - integral_part[0] = '0'; - integral_part[1] = '\0'; -! /* The fractional part has to take the precision into account */ -! for (ch = 0; ch < precision-1; ch++) -! fraction_part[ch] = '0'; -! fraction_part[ch] = '0'; -! fraction_part[ch+1] = '\0'; - if (fract) - *fract = fraction_part; - return integral_part; -*************** -*** 805,810 **** ---- 815,821 ---- - PUT_CHAR(*tmp, p); - tmp++; - } -+ - PAD_LEFT(p); - } - -*************** -*** 972,982 **** - if ((p->flags & PF_THOUSANDS) && grouping && (t = groupnum (tmp))) - tmp = t; - - /* calculate the padding. 1 for the dot */ - p->width = p->width - - ((d > 0. && p->justify == RIGHT) ? 1:0) - - ((p->flags & PF_SPACE) ? 1:0) - -! strlen(tmp) - p->precision - 1; - PAD_RIGHT(p); - PUT_PLUS(d, p, 0.); - PUT_SPACE(d, p, 0.); ---- 983,1003 ---- - if ((p->flags & PF_THOUSANDS) && grouping && (t = groupnum (tmp))) - tmp = t; - -+ if ((*p->pf == 'g' || *p->pf == 'G') && (p->flags & PF_ALTFORM) == 0) -+ { -+ /* smash the trailing zeros unless altform */ -+ for (i = strlen(tmp2) - 1; i >= 0 && tmp2[i] == '0'; i--) -+ tmp2[i] = '\0'; -+ if (tmp2[0] == '\0') -+ p->precision = 0; -+ } -+ - /* calculate the padding. 1 for the dot */ - p->width = p->width - - ((d > 0. && p->justify == RIGHT) ? 1:0) - - ((p->flags & PF_SPACE) ? 1:0) - -! strlen(tmp) - p->precision - -! ((p->precision != 0 || (p->flags & PF_ALTFORM)) ? 1 : 0); /* radix char */ - PAD_RIGHT(p); - PUT_PLUS(d, p, 0.); - PUT_SPACE(d, p, 0.); -*************** -*** 991,1001 **** - if (p->precision != 0 || (p->flags & PF_ALTFORM)) - PUT_CHAR(decpoint, p); /* put the '.' */ - -- if ((*p->pf == 'g' || *p->pf == 'G') && (p->flags & PF_ALTFORM) == 0) -- /* smash the trailing zeros unless altform */ -- for (i = strlen(tmp2) - 1; i >= 0 && tmp2[i] == '0'; i--) -- tmp2[i] = '\0'; -- - for (; *tmp2; tmp2++) - PUT_CHAR(*tmp2, p); /* the fraction */ - ---- 1012,1017 ---- -*************** -*** 1011,1024 **** - char *tmp, *tmp2; - int j, i; - -! if (chkinfnan(p, d, 1) || chkinfnan(p, d, 2)) - return; /* already printed nan or inf */ - - GETLOCALEDATA(decpoint, thoussep, grouping); - DEF_PREC(p); -! j = log_10(d); -! d = d / pow_10(j); /* get the Mantissa */ -! d = ROUND(d, p); - tmp = dtoa(d, p->precision, &tmp2); - - /* 1 for unit, 1 for the '.', 1 for 'e|E', ---- 1027,1045 ---- - char *tmp, *tmp2; - int j, i; - -! if (d != 0 && (chkinfnan(p, d, 1) || chkinfnan(p, d, 2))) - return; /* already printed nan or inf */ - - GETLOCALEDATA(decpoint, thoussep, grouping); - DEF_PREC(p); -! if (d == 0.) -! j = 0; -! else -! { -! j = log_10(d); -! d = d / pow_10(j); /* get the Mantissa */ -! d = ROUND(d, p); -! } - tmp = dtoa(d, p->precision, &tmp2); - - /* 1 for unit, 1 for the '.', 1 for 'e|E', -*************** -*** 1076,1081 **** ---- 1097,1103 ---- - PUT_CHAR(*tmp, p); - tmp++; - } -+ - PAD_LEFT(p); - } - #endif -*************** -*** 1358,1364 **** - STAR_ARGS(data); - DEF_PREC(data); - d = GETDOUBLE(data); -! i = log_10(d); - /* - * for '%g|%G' ANSI: use f if exponent - * is in the range or [-4,p] exclusively ---- 1380,1386 ---- - STAR_ARGS(data); - DEF_PREC(data); - d = GETDOUBLE(data); -! i = (d != 0.) ? log_10(d) : -1; - /* - * for '%g|%G' ANSI: use f if exponent - * is in the range or [-4,p] exclusively -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 4 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 5 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-006 b/src/patches/bash/bash32-006 deleted file mode 100644 index 589db9e59..000000000 --- a/src/patches/bash/bash32-006 +++ /dev/null @@ -1,45 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-006 - -Bug-Reported-by: ebb9@byu.net -Bug-Reference-ID: <45540862.9030900@byu.net> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00017.html - http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00016.html - -Bug-Description: - -In some cases, code that is intended to be used in the presence of multibyte -characters is called when no such characters are present, leading to incorrect -display position calculations and incorrect redisplay. - -Patch: - -*** ../bash-3.2-patched/lib/readline/display.c Thu Sep 14 14:20:12 2006 ---- lib/readline/display.c Mon Nov 13 17:55:57 2006 -*************** -*** 2381,2384 **** ---- 2409,2414 ---- - if (end <= start) - return 0; -+ if (MB_CUR_MAX == 1 || rl_byte_oriented) -+ return (end - start); - - memset (&ps, 0, sizeof (mbstate_t)); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 5 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 6 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-007 b/src/patches/bash/bash32-007 deleted file mode 100644 index 9b86f4af7..000000000 --- a/src/patches/bash/bash32-007 +++ /dev/null @@ -1,55 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-007 - -Bug-Reported-by: jidanni@jidanni.org -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00039.html - -Bug-Description: - -When removing the current or previous job from the jobs list, bash incorrectly -resets the current job under some circumstances. - -Patch: - -*** ../bash-3.2-patched/jobs.c Sat Jul 29 16:40:48 2006 ---- jobs.c Fri Nov 24 14:50:01 2006 -*************** -*** 985,990 **** - if (temp == 0) - return; -- if (job_index == js.j_current || job_index == js.j_previous) -- reset_current (); - - if ((dflags & DEL_NOBGPID) == 0) ---- 985,988 ---- -*************** -*** 1029,1032 **** ---- 1027,1033 ---- - else if (jobs[js.j_firstj] == 0 || jobs[js.j_lastj] == 0) - reset_job_indices (); -+ -+ if (job_index == js.j_current || job_index == js.j_previous) -+ reset_current (); - } - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 6 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 7 - - #endif /* _PATCHLEVEL_H_ */ - - diff --git a/src/patches/bash/bash32-008 b/src/patches/bash/bash32-008 deleted file mode 100644 index 7ec07ffe6..000000000 --- a/src/patches/bash/bash32-008 +++ /dev/null @@ -1,48 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-008 - -Bug-Reported-by: Linda Walsh -Bug-Reference-ID: <456041FD.8000605@tlinx.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00040.html - -Bug-Description: - -When checking pathnames from the command hash table (e.g., when the `checkhash' -shell option is enabled), a bug causes bash to delete and re-lookup each -command. - -Patch: - -*** ../bash-3.2-patched/findcmd.c Wed Aug 17 16:49:54 2005 ---- findcmd.c Fri Nov 24 10:48:37 2006 -*************** -*** 309,313 **** - { - st = file_status (hashed_file); -! if ((st ^ (FS_EXISTS | FS_EXECABLE)) != 0) - { - phash_remove (pathname); ---- 309,313 ---- - { - st = file_status (hashed_file); -! if ((st & (FS_EXISTS|FS_EXECABLE)) != (FS_EXISTS|FS_EXECABLE)) - { - phash_remove (pathname); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 7 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 8 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-009 b/src/patches/bash/bash32-009 deleted file mode 100644 index 9cfd16e94..000000000 --- a/src/patches/bash/bash32-009 +++ /dev/null @@ -1,61 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-009 - -Bug-Reported-by: James.M.Botte@lowes.com -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-12/msg00000.html - -Bug-Description: - -When using its built-in replacement for snprintf/asprintf, bash does not -treat the %x, %X, and %o format specifiers as unsigned numbers. - -Patch: - -*** ../bash-3.2-patched/lib/sh/snprintf.c Mon Nov 13 08:58:52 2006 ---- lib/sh/snprintf.c Wed Dec 6 11:15:04 2006 -*************** -*** 669,673 **** - - sd = d; /* signed for ' ' padding in base 10 */ -! flags = (*p->pf == 'u' || *p->pf == 'U') ? FL_UNSIGNED : 0; - if (*p->pf == 'X') - flags |= FL_HEXUPPER; ---- 674,679 ---- - - sd = d; /* signed for ' ' padding in base 10 */ -! flags = 0; -! flags = (*p->pf == 'x' || *p->pf == 'X' || *p->pf == 'o' || *p->pf == 'u' || *p->pf == 'U') ? FL_UNSIGNED : 0; - if (*p->pf == 'X') - flags |= FL_HEXUPPER; -*************** -*** 739,743 **** - - sd = d; /* signed for ' ' padding in base 10 */ -! flags = (*p->pf == 'u' || *p->pf == 'U') ? FL_UNSIGNED : 0; - if (*p->pf == 'X') - flags |= FL_HEXUPPER; ---- 745,749 ---- - - sd = d; /* signed for ' ' padding in base 10 */ -! flags = (*p->pf == 'x' || *p->pf == 'X' || *p->pf == 'o' || *p->pf == 'u' || *p->pf == 'U') ? FL_UNSIGNED : 0; - if (*p->pf == 'X') - flags |= FL_HEXUPPER; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 8 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 9 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-010 b/src/patches/bash/bash32-010 deleted file mode 100644 index 88de5758f..000000000 --- a/src/patches/bash/bash32-010 +++ /dev/null @@ -1,207 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-010 - -Bug-Reported-by: Ryan Waldron -Bug-Reference-ID: <20070119065603.546D011E9C@kansas.erebor.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-01/msg00059.html - -Bug-Description: - -The glibc implementation of regcomp/regexec does not allow backslashes to -escape "ordinary" pattern characters when matching. Bash used backslashes -to quote all characters when the pattern argument to the [[ special -command's =~ operator was quoted. This caused the match to fail on Linux -and other systems using GNU libc. - -Patch: - -*** ../bash-3.2.9/pathexp.h Sat Feb 19 17:23:18 2005 ---- pathexp.h Wed Jan 31 22:53:16 2007 -*************** -*** 1,5 **** - /* pathexp.h -- The shell interface to the globbing library. */ - -! /* Copyright (C) 1987-2005 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 1,5 ---- - /* pathexp.h -- The shell interface to the globbing library. */ - -! /* Copyright (C) 1987-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 33,36 **** ---- 33,37 ---- - #define QGLOB_CVTNULL 0x01 /* convert QUOTED_NULL strings to '\0' */ - #define QGLOB_FILENAME 0x02 /* do correct quoting for matching filenames */ -+ #define QGLOB_REGEXP 0x04 /* quote an ERE for regcomp/regexec */ - - #if defined (EXTENDED_GLOB) -*** ../bash-3.2.9/pathexp.c Mon May 6 13:43:05 2002 ---- pathexp.c Mon Feb 26 16:59:23 2007 -*************** -*** 1,5 **** - /* pathexp.c -- The shell interface to the globbing library. */ - -! /* Copyright (C) 1995-2002 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 1,5 ---- - /* pathexp.c -- The shell interface to the globbing library. */ - -! /* Copyright (C) 1995-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 111,114 **** ---- 111,141 ---- - } - -+ /* Return 1 if C is a character that is `special' in a POSIX ERE and needs to -+ be quoted to match itself. */ -+ static inline int -+ ere_char (c) -+ int c; -+ { -+ switch (c) -+ { -+ case '.': -+ case '[': -+ case '\\': -+ case '(': -+ case ')': -+ case '*': -+ case '+': -+ case '?': -+ case '{': -+ case '|': -+ case '^': -+ case '$': -+ return 1; -+ default: -+ return 0; -+ } -+ return (0); -+ } -+ - /* PATHNAME can contain characters prefixed by CTLESC; this indicates - that the character is to be quoted. We quote it here in the style -*************** -*** 143,146 **** ---- 170,175 ---- - if ((qflags & QGLOB_FILENAME) && pathname[i+1] == '/') - continue; -+ if ((qflags & QGLOB_REGEXP) && ere_char (pathname[i+1]) == 0) -+ continue; - temp[j++] = '\\'; - i++; -*** ../bash-3.2.9/subst.c Tue Nov 7 16:14:41 2006 ---- subst.c Wed Jan 31 23:09:58 2007 -*************** -*** 5,9 **** - beauty, but, hey, you're alright.'' */ - -! /* Copyright (C) 1987-2006 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 5,9 ---- - beauty, but, hey, you're alright.'' */ - -! /* Copyright (C) 1987-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 2647,2655 **** - /* This needs better error handling. */ - /* Expand W for use as an argument to a unary or binary operator in a -! [[...]] expression. If SPECIAL is nonzero, this is the rhs argument - to the != or == operator, and should be treated as a pattern. In -! this case, we quote the string specially for the globbing code. The -! caller is responsible for removing the backslashes if the unquoted -! words is needed later. */ - char * - cond_expand_word (w, special) ---- 2647,2656 ---- - /* This needs better error handling. */ - /* Expand W for use as an argument to a unary or binary operator in a -! [[...]] expression. If SPECIAL is 1, this is the rhs argument - to the != or == operator, and should be treated as a pattern. In -! this case, we quote the string specially for the globbing code. If -! SPECIAL is 2, this is an rhs argument for the =~ operator, and should -! be quoted appropriately for regcomp/regexec. The caller is responsible -! for removing the backslashes if the unquoted word is needed later. */ - char * - cond_expand_word (w, special) -*************** -*** 2659,2662 **** ---- 2660,2664 ---- - char *r, *p; - WORD_LIST *l; -+ int qflags; - - if (w->word == 0 || w->word[0] == '\0') -*************** -*** 2673,2678 **** - else - { - p = string_list (l); -! r = quote_string_for_globbing (p, QGLOB_CVTNULL); - free (p); - } ---- 2675,2683 ---- - else - { -+ qflags = QGLOB_CVTNULL; -+ if (special == 2) -+ qflags |= QGLOB_REGEXP; - p = string_list (l); -! r = quote_string_for_globbing (p, qflags); - free (p); - } -*** ../bash-3.2.9/execute_cmd.c Sat Aug 26 00:23:17 2006 ---- execute_cmd.c Wed Jan 31 23:12:06 2007 -*************** -*** 1,5 **** - /* execute_cmd.c -- Execute a COMMAND structure. */ - -! /* Copyright (C) 1987-2005 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 1,5 ---- - /* execute_cmd.c -- Execute a COMMAND structure. */ - -! /* Copyright (C) 1987-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 2547,2551 **** - if (arg1 == 0) - arg1 = nullstr; -! arg2 = cond_expand_word (cond->right->op, patmatch||rmatch); - if (arg2 == 0) - arg2 = nullstr; ---- 2547,2551 ---- - if (arg1 == 0) - arg1 = nullstr; -! arg2 = cond_expand_word (cond->right->op, rmatch ? 2 : (patmatch ? 1 : 0)); - if (arg2 == 0) - arg2 = nullstr; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 9 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 10 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-011 b/src/patches/bash/bash32-011 deleted file mode 100644 index c021f52f8..000000000 --- a/src/patches/bash/bash32-011 +++ /dev/null @@ -1,138 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-011 - -Bug-Reported-by: Petr Sumbera -Bug-Reference-ID: <45AF5F4B.1020800@sun.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-01/msg00049.html - -Bug-Description: - -Under certain circumstances (loopback mounts), the bash getcwd does not -return correct results. This patch allows the use of the Solaris libc -getcwd even though it doesn't dynamically allocate memory. - -Run `touch configure' to make sure make doesn't try to run autoconf. -Then run configure with whatever options you like. - -Patch: - -*** ../bash-3.2-patched/configure.in Tue Sep 26 11:05:45 2006 ---- configure.in Wed Jan 31 09:48:00 2007 -*************** -*** 6,10 **** - dnl Process this file with autoconf to produce a configure script. - -! # Copyright (C) 1987-2006 Free Software Foundation, Inc. - - # This program is free software; you can redistribute it and/or modify ---- 6,10 ---- - dnl Process this file with autoconf to produce a configure script. - -! # Copyright (C) 1987-2007 Free Software Foundation, Inc. - - # This program is free software; you can redistribute it and/or modify -*************** -*** 992,996 **** - sco3.2*) LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;; - sunos4*) LOCAL_CFLAGS=-DSunOS4 ;; -! solaris2.5*) LOCAL_CFLAGS=-DSunOS5 ;; - lynxos*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; - linux*) LOCAL_LDFLAGS=-rdynamic # allow dynamic loading ---- 992,997 ---- - sco3.2*) LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;; - sunos4*) LOCAL_CFLAGS=-DSunOS4 ;; -! solaris2.5*) LOCAL_CFLAGS="-DSunOS5 -DSOLARIS" ;; -! solaris2*) LOCAL_CFLAGS=-DSOLARIS ;; - lynxos*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; - linux*) LOCAL_LDFLAGS=-rdynamic # allow dynamic loading -*** ../bash-3.2-patched/config-bot.h Tue Sep 12 16:43:04 2006 ---- config-bot.h Tue Mar 6 10:41:31 2007 -*************** -*** 2,6 **** - /* modify settings or make new ones based on what autoconf tells us. */ - -! /* Copyright (C) 1989-2002 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 2,6 ---- - /* modify settings or make new ones based on what autoconf tells us. */ - -! /* Copyright (C) 1989-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 71,77 **** - #endif - -! /* If we have a getcwd(3), but it calls popen(), #undef HAVE_GETCWD so -! the replacement in getcwd.c will be built. */ -! #if defined (HAVE_GETCWD) && defined (GETCWD_BROKEN) - # undef HAVE_GETCWD - #endif ---- 71,79 ---- - #endif - -! /* If we have a getcwd(3), but one that does not dynamically allocate memory, -! #undef HAVE_GETCWD so the replacement in getcwd.c will be built. We do -! not do this on Solaris, because their implementation of loopback mounts -! breaks the traditional file system assumptions that getcwd uses. */ -! #if defined (HAVE_GETCWD) && defined (GETCWD_BROKEN) && !defined (SOLARIS) - # undef HAVE_GETCWD - #endif -*** ../bash-3.2-patched/builtins/common.c Thu Jul 27 09:39:51 2006 ---- builtins/common.c Tue Mar 6 10:43:27 2007 -*************** -*** 1,3 **** -! /* Copyright (C) 1987-2005 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 1,3 ---- -! /* Copyright (C) 1987-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 476,480 **** ---- 476,484 ---- - if (the_current_working_directory == 0) - { -+ #if defined (GETCWD_BROKEN) -+ the_current_working_directory = getcwd (0, PATH_MAX); -+ #else - the_current_working_directory = getcwd (0, 0); -+ #endif - if (the_current_working_directory == 0) - { -*** ../bash-3.2-patched/configure Tue Sep 26 11:06:01 2006 ---- configure Tue Mar 6 10:59:20 2007 -*************** -*** 27317,27321 **** - sco3.2*) LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;; - sunos4*) LOCAL_CFLAGS=-DSunOS4 ;; -! solaris2.5*) LOCAL_CFLAGS=-DSunOS5 ;; - lynxos*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; - linux*) LOCAL_LDFLAGS=-rdynamic # allow dynamic loading ---- 27317,27322 ---- - sco3.2*) LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;; - sunos4*) LOCAL_CFLAGS=-DSunOS4 ;; -! solaris2.5*) LOCAL_CFLAGS="-DSunOS5 -DSOLARIS" ;; -! solaris2*) LOCAL_CFLAGS=-DSOLARIS ;; - lynxos*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; - linux*) LOCAL_LDFLAGS=-rdynamic # allow dynamic loading -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 10 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 11 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-012 b/src/patches/bash/bash32-012 deleted file mode 100644 index 8d669d27c..000000000 --- a/src/patches/bash/bash32-012 +++ /dev/null @@ -1,96 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-012 - -Bug-Reported-by: John Wyman -Bug-Reference-ID: <5E7DEFC094C35044B87FAE761D9F0EE20143A3B7@exchange2k.celink.com> -Bug-Reference-URL: - -Bug-Description: - -Some systems (AIX 4.x) don't implement the PRI_xxx macros correctly, -causing syntax errors when attempting to compile bash on those systems. -This patch adds support for the PRI_MACROS_BROKEN define. - -You will need to re-run `configure' after applying the patch. Run -`touch configure' so make doesn't try to run autoconf. - -Patch: - -*** ../bash-3.2.11/config.h.in Tue Sep 12 16:00:54 2006 ---- config.h.in Tue Mar 6 11:17:55 2007 -*************** -*** 1,5 **** - /* config.h -- Configuration file for bash. */ - -! /* Copyright (C) 1987-2006 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 1,5 ---- - /* config.h -- Configuration file for bash. */ - -! /* Copyright (C) 1987-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 414,417 **** ---- 414,419 ---- - #undef HAVE_DECL_STRTOLD - -+ #undef PRI_MACROS_BROKEN -+ - #undef STRTOLD_BROKEN - -*************** -*** 1007,1010 **** ---- 1009,1015 ---- - #undef HAVE_DCGETTEXT - -+ /* Define if you have the `localeconv' function. */ -+ #undef HAVE_LOCALECONV -+ - /* Define if your system has a working `malloc' function. */ - /* #undef HAVE_MALLOC */ -*** ../bash-3.2.11/builtins/printf.def Mon Nov 13 08:58:52 2006 ---- builtins/printf.def Sun Feb 4 13:58:59 2007 -*************** -*** 2,6 **** - It implements the builtin "printf" in Bash. - -! Copyright (C) 1997-2005 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 2,6 ---- - It implements the builtin "printf" in Bash. - -! Copyright (C) 1997-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 71,74 **** ---- 71,78 ---- - #include "common.h" - -+ #if defined (PRI_MACROS_BROKEN) -+ # undef PRIdMAX -+ #endif -+ - #if !defined (PRIdMAX) - # if HAVE_LONG_LONG -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 11 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 12 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-013 b/src/patches/bash/bash32-013 deleted file mode 100644 index d47bc1a5f..000000000 --- a/src/patches/bash/bash32-013 +++ /dev/null @@ -1,65 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-013 - -Bug-Reported-by: Magnus Svensson -Bug-Reference-ID: <45BDC44D.80609@mysql.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-01/msg00002.html - -Bug-Description: - -Readline neglects to reallocate the array it uses to keep track of wrapped -screen lines when increasing its size. This will eventually result in -segmentation faults when given sufficiently long input. - -Patch: - -*** ../bash-3.2-patched/lib/readline/display.c Thu Sep 14 14:20:12 2006 ---- lib/readline/display.c Fri Feb 2 20:23:17 2007 -*************** -*** 561,574 **** ---- 561,586 ---- - wrap_offset = prompt_invis_chars_first_line = 0; - } - -+ #if defined (HANDLE_MULTIBYTE) - #define CHECK_INV_LBREAKS() \ - do { \ - if (newlines >= (inv_lbsize - 2)) \ - { \ - inv_lbsize *= 2; \ - inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ -+ _rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \ - } \ - } while (0) -+ #else -+ #define CHECK_INV_LBREAKS() \ -+ do { \ -+ if (newlines >= (inv_lbsize - 2)) \ -+ { \ -+ inv_lbsize *= 2; \ -+ inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ -+ } \ -+ } while (0) -+ #endif /* HANDLE_MULTIBYTE */ - - #if defined (HANDLE_MULTIBYTE) - #define CHECK_LPOS() \ - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 12 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 13 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-014 b/src/patches/bash/bash32-014 deleted file mode 100644 index b706505b7..000000000 --- a/src/patches/bash/bash32-014 +++ /dev/null @@ -1,307 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-014 - -Bug-Reported-by: Brett Stahlman -Bug-Reference-ID: <000701c72d29$a227e0e0$5ec7cf47@computerroom> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-12/msg00065.html - -Bug-Description: - -Bash mishandles word splitting under certain circumstances when IFS is -null (IFS=). Constructs affected include ${param/pat/sub} and others -when expanding arrays (array[@]). - -Patch: - -*** ../bash-3.2-patched/array.c Wed Jun 1 16:39:22 2005 ---- array.c Mon Jan 15 22:58:00 2007 -*************** -*** 121,125 **** - } - -- #ifdef INCLUDE_UNUSED - /* - * Make and return a new array composed of the elements in array A from ---- 121,124 ---- -*************** -*** 142,146 **** - n = array_create_element (element_index(p), element_value(p)); - ADD_BEFORE(a->head, n); -! mi = element_index(ae); - } - a->num_elements = i; ---- 141,145 ---- - n = array_create_element (element_index(p), element_value(p)); - ADD_BEFORE(a->head, n); -! mi = element_index(n); - } - a->num_elements = i; -*************** -*** 148,152 **** - return a; - } -- #endif - - /* ---- 147,150 ---- -*************** -*** 301,304 **** ---- 299,319 ---- - } - -+ ARRAY * -+ array_quote_escapes(array) -+ ARRAY *array; -+ { -+ ARRAY_ELEMENT *a; -+ char *t; -+ -+ if (array == 0 || array_head(array) == 0 || array_empty(array)) -+ return (ARRAY *)NULL; -+ for (a = element_forw(array->head); a != array->head; a = element_forw(a)) { -+ t = quote_escapes (a->value); -+ FREE(a->value); -+ a->value = t; -+ } -+ return array; -+ } -+ - /* - * Return a string whose elements are the members of array A beginning at -*************** -*** 312,318 **** - int starsub, quoted; - { - ARRAY_ELEMENT *h, *p; - arrayind_t i; -! char *ifs, sep[2]; - - p = a ? array_head (a) : 0; ---- 327,334 ---- - int starsub, quoted; - { -+ ARRAY *a2; - ARRAY_ELEMENT *h, *p; - arrayind_t i; -! char *ifs, sep[2], *t; - - p = a ? array_head (a) : 0; -*************** -*** 337,340 **** ---- 353,363 ---- - ; - -+ a2 = array_slice(a, h, p); -+ -+ if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) -+ array_quote(a2); -+ else -+ array_quote_escapes(a2); -+ - if (starsub && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))) { - ifs = getifs(); -*************** -*** 344,348 **** - sep[1] = '\0'; - -! return (array_to_string_internal (h, p, sep, quoted)); - } - ---- 367,374 ---- - sep[1] = '\0'; - -! t = array_to_string (a2, sep, 0); -! array_dispose(a2); -! -! return t; - } - -*************** -*** 368,372 **** - - if (mflags & MATCH_QUOTED) -! array_quote (a2); - if (mflags & MATCH_STARSUB) { - ifs = getifs(); ---- 394,400 ---- - - if (mflags & MATCH_QUOTED) -! array_quote(a2); -! else -! array_quote_escapes(a2); - if (mflags & MATCH_STARSUB) { - ifs = getifs(); -*** ../bash-3.2-patched/array.h Sun Jun 1 15:50:30 2003 ---- array.h Mon Jan 15 22:35:35 2007 -*************** -*** 56,59 **** ---- 56,60 ---- - extern int array_shift_element __P((ARRAY *, char *)); - extern ARRAY *array_quote __P((ARRAY *)); -+ extern ARRAY *array_quote_escapes __P((ARRAY *)); - - extern char *array_subrange __P((ARRAY *, arrayind_t, arrayind_t, int, int)); -*** ../bash-3.2-patched/subst.c Fri Mar 2 16:20:50 2007 ---- subst.c Tue Mar 6 11:40:55 2007 -*************** -*** 1888,1892 **** ---- 1889,1899 ---- - #endif - -+ /* XXX -- why call quote_list if ifs == 0? we can get away without doing -+ it now that quote_escapes quotes spaces */ -+ #if 0 - tlist = ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || (ifs && *ifs == 0)) -+ #else -+ tlist = (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) -+ #endif - ? quote_list (list) - : list_quote_escapes (list); -*************** -*** 2922,2926 **** - /* Quote escape characters in string s, but no other characters. This is - used to protect CTLESC and CTLNUL in variable values from the rest of -! the word expansion process after the variable is expanded. */ - char * - quote_escapes (string) ---- 2935,2944 ---- - /* Quote escape characters in string s, but no other characters. This is - used to protect CTLESC and CTLNUL in variable values from the rest of -! the word expansion process after the variable is expanded. If IFS is -! null, we quote spaces as well, just in case we split on spaces later -! (in the case of unquoted $@, we will eventually attempt to split the -! entire word on spaces). Corresponding code exists in dequote_escapes. -! Even if we don't end up splitting on spaces, quoting spaces is not a -! problem. */ - char * - quote_escapes (string) -*************** -*** 2930,2933 **** ---- 2948,2952 ---- - size_t slen; - char *result, *send; -+ int quote_spaces; - DECLARE_MBSTATE; - -*************** -*** 2935,2938 **** ---- 2954,2958 ---- - send = string + slen; - -+ quote_spaces = (ifs_value && *ifs_value == 0); - t = result = (char *)xmalloc ((slen * 2) + 1); - s = string; -*************** -*** 2940,2944 **** - while (*s) - { -! if (*s == CTLESC || *s == CTLNUL) - *t++ = CTLESC; - COPY_CHAR_P (t, s, send); ---- 2960,2964 ---- - while (*s) - { -! if (*s == CTLESC || *s == CTLNUL || (quote_spaces && *s == ' ')) - *t++ = CTLESC; - COPY_CHAR_P (t, s, send); -*************** -*** 2982,2985 **** ---- 3002,3006 ---- - size_t slen; - char *result, *send; -+ int quote_spaces; - DECLARE_MBSTATE; - -*************** -*** 2996,3002 **** - return (strcpy (result, s)); - - while (*s) - { -! if (*s == CTLESC && (s[1] == CTLESC || s[1] == CTLNUL)) - { - s++; ---- 3017,3024 ---- - return (strcpy (result, s)); - -+ quote_spaces = (ifs_value && *ifs_value == 0); - while (*s) - { -! if (*s == CTLESC && (s[1] == CTLESC || s[1] == CTLNUL || (quote_spaces && s[1] == ' '))) - { - s++; -*************** -*** 4462,4466 **** - RESIZE_MALLOCED_BUFFER (istring, istring_index, 2, istring_size, DEFAULT_ARRAY_SIZE); - -! if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || c == CTLESC || c == CTLNUL) - istring[istring_index++] = CTLESC; - ---- 4498,4510 ---- - RESIZE_MALLOCED_BUFFER (istring, istring_index, 2, istring_size, DEFAULT_ARRAY_SIZE); - -! /* This is essentially quote_string inline */ -! if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) /* || c == CTLESC || c == CTLNUL */) -! istring[istring_index++] = CTLESC; -! /* Escape CTLESC and CTLNUL in the output to protect those characters -! from the rest of the word expansions (word splitting and globbing.) -! This is essentially quote_escapes inline. */ -! else if (c == CTLESC) -! istring[istring_index++] = CTLESC; -! else if (c == CTLNUL || (c == ' ' && (ifs_value && *ifs_value == 0))) - istring[istring_index++] = CTLESC; - -*************** -*** 5552,5555 **** ---- 5610,5616 ---- - rely on array_subrange to understand how to deal with them). */ - tt = array_subrange (array_cell (v), e1, e2, starsub, quoted); -+ #if 0 -+ /* array_subrange now calls array_quote_escapes as appropriate, so the -+ caller no longer needs to. */ - if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) == 0) - { -*************** -*** 5558,5561 **** ---- 5619,5623 ---- - } - else -+ #endif - temp = tt; - break; -*************** -*** 5808,5811 **** ---- 5870,5876 ---- - case VT_ARRAYVAR: - temp = array_patsub (array_cell (v), p, rep, mflags); -+ #if 0 -+ /* Don't need to do this anymore; array_patsub calls array_quote_escapes -+ as appropriate before adding the space separators. */ - if (temp && (mflags & MATCH_QUOTED) == 0) - { -*************** -*** 5814,5817 **** ---- 5879,5883 ---- - temp = tt; - } -+ #endif - break; - #endif -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 13 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 14 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-015 b/src/patches/bash/bash32-015 deleted file mode 100644 index d887f6e56..000000000 --- a/src/patches/bash/bash32-015 +++ /dev/null @@ -1,95 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-015 - -Bug-Reported-by: -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -Under certain circumstances, when using FIFOs for process substitution, -bash fails to unlink the FIFOs. This leaves open file descriptors that -can cause the shell to hang and litters the file system. - -Patch: - -*** ../bash-3.2-patched/execute_cmd.c Fri Mar 2 16:20:50 2007 ---- execute_cmd.c Wed Jan 31 23:12:06 2007 -*************** -*** 3051,3054 **** ---- 3051,3059 ---- - command_line = savestring (the_printed_command_except_trap); - -+ #if defined (PROCESS_SUBSTITUTION) -+ if ((subshell_environment & SUBSHELL_COMSUB) && (simple_command->flags & CMD_NO_FORK) && fifos_pending() > 0) -+ simple_command->flags &= ~CMD_NO_FORK; -+ #endif -+ - execute_disk_command (words, simple_command->redirects, command_line, - pipe_in, pipe_out, async, fds_to_close, -*** ../bash-3.2-patched/subst.c Fri Mar 2 16:20:50 2007 ---- subst.c Tue Mar 6 11:40:55 2007 -*************** -*** 4129,4132 **** ---- 4151,4160 ---- - } - -+ int -+ fifos_pending () -+ { -+ return nfifo; -+ } -+ - static char * - make_named_pipe () -*************** -*** 4178,4181 **** ---- 4206,4215 ---- - } - -+ int -+ fifos_pending () -+ { -+ return 0; /* used for cleanup; not needed with /dev/fd */ -+ } -+ - void - unlink_fifo_list () -*************** -*** 4671,4674 **** ---- 4719,4725 ---- - last_command_exit_value = rc; - rc = run_exit_trap (); -+ #if defined (PROCESS_SUBSTITUTION) -+ unlink_fifo_list (); -+ #endif - exit (rc); - } -*** ../bash-3.2-patched/subst.h Tue Sep 19 08:34:41 2006 ---- subst.h Wed Jan 10 09:46:47 2007 -*************** -*** 223,226 **** ---- 223,227 ---- - extern char *pat_subst __P((char *, char *, char *, int)); - -+ extern int fifos_pending __P((void)); - extern void unlink_fifo_list __P((void)); - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 14 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 15 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-016 b/src/patches/bash/bash32-016 deleted file mode 100644 index a0f065ad3..000000000 --- a/src/patches/bash/bash32-016 +++ /dev/null @@ -1,52 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-016 - -Bug-Reported-by: Peter Volkov -Bug-Reference-ID: <1171795523.8021.18.camel@localhost> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-02/msg00054.html - -Bug-Description: - -When moving the cursor, bash sometimes misplaces the cursor when the prompt -contains two or more multibyte characters. The particular circumstance that -uncovered the problem was having the (multibyte) current directory name in -the prompt string. - -Patch: - -*** ../bash-3.2/lib/readline/display.c Fri Jan 19 13:34:50 2007 ---- lib/readline/display.c Sat Mar 10 17:25:44 2007 -*************** -*** 1745,1749 **** - { - dpos = _rl_col_width (data, 0, new); -! if (dpos > prompt_last_invisible) /* XXX - don't use woff here */ - { - dpos -= woff; ---- 1745,1752 ---- - { - dpos = _rl_col_width (data, 0, new); -! /* Use NEW when comparing against the last invisible character in the -! prompt string, since they're both buffer indices and DPOS is a -! desired display position. */ -! if (new > prompt_last_invisible) /* XXX - don't use woff here */ - { - dpos -= woff; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 15 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 16 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-017 b/src/patches/bash/bash32-017 deleted file mode 100644 index 99e5e70d2..000000000 --- a/src/patches/bash/bash32-017 +++ /dev/null @@ -1,85 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-017 - -Bug-Reported-by: Peter Volkov -Bug-Reference-ID: <1173636022.7039.36.camel@localhost> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00039.html - -Bug-Description: - -When restoring the original prompt after finishing an incremental search, -bash sometimes places the cursor incorrectly if the primary prompt contains -invisible characters. - -Patch: - -*** ../bash-3.2.16/lib/readline/display.c Fri Apr 20 13:30:16 2007 ---- lib/readline/display.c Fri Apr 20 15:17:01 2007 -*************** -*** 1599,1604 **** - if (temp > 0) - { - _rl_output_some_chars (nfd, temp); -! _rl_last_c_pos += _rl_col_width (nfd, 0, temp);; - } - } ---- 1599,1618 ---- - if (temp > 0) - { -+ /* If nfd begins at the prompt, or before the invisible -+ characters in the prompt, we need to adjust _rl_last_c_pos -+ in a multibyte locale to account for the wrap offset and -+ set cpos_adjusted accordingly. */ - _rl_output_some_chars (nfd, temp); -! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -! { -! _rl_last_c_pos += _rl_col_width (nfd, 0, temp); -! if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) -! { -! _rl_last_c_pos -= wrap_offset; -! cpos_adjusted = 1; -! } -! } -! else -! _rl_last_c_pos += temp; - } - } -*************** -*** 1608,1613 **** ---- 1622,1639 ---- - if (temp > 0) - { -+ /* If nfd begins at the prompt, or before the invisible -+ characters in the prompt, we need to adjust _rl_last_c_pos -+ in a multibyte locale to account for the wrap offset and -+ set cpos_adjusted accordingly. */ - _rl_output_some_chars (nfd, temp); - _rl_last_c_pos += col_temp; /* XXX */ -+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -+ { -+ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) -+ { -+ _rl_last_c_pos -= wrap_offset; -+ cpos_adjusted = 1; -+ } -+ } - } - lendiff = (oe - old) - (ne - new); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 16 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 17 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-018 b/src/patches/bash/bash32-018 deleted file mode 100644 index d729aaf5e..000000000 --- a/src/patches/bash/bash32-018 +++ /dev/null @@ -1,98 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-018 - -Bug-Reported-by: osicka@post.cz -Bug-Reference-ID: <228.177-19682-1132061412-1179356692@post.cz> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-05/msg00061.html - -Bug-Description: - -In certain cases, bash can lose the saved status of a background job, though -it should still be reported by `wait'. Bash can also loop infinitely after -creating and waiting for 4096 jobs. - -Patch: - -*** ../bash-20070510/jobs.c Thu Mar 8 16:05:50 2007 ---- jobs.c Fri May 18 11:40:14 2007 -*************** -*** 784,792 **** - { - old = js.j_firstj++; - while (js.j_firstj != old) - { - if (js.j_firstj >= js.j_jobslots) - js.j_firstj = 0; -! if (jobs[js.j_firstj]) - break; - js.j_firstj++; ---- 784,794 ---- - { - old = js.j_firstj++; -+ if (old >= js.j_jobslots) -+ old = js.j_jobslots - 1; - while (js.j_firstj != old) - { - if (js.j_firstj >= js.j_jobslots) - js.j_firstj = 0; -! if (jobs[js.j_firstj] || js.j_firstj == old) /* needed if old == 0 */ - break; - js.j_firstj++; -*************** -*** 798,806 **** - { - old = js.j_lastj--; - while (js.j_lastj != old) - { - if (js.j_lastj < 0) - js.j_lastj = js.j_jobslots - 1; -! if (jobs[js.j_lastj]) - break; - js.j_lastj--; ---- 800,810 ---- - { - old = js.j_lastj--; -+ if (old < 0) -+ old = 0; - while (js.j_lastj != old) - { - if (js.j_lastj < 0) - js.j_lastj = js.j_jobslots - 1; -! if (jobs[js.j_lastj] || js.j_lastj == old) /* needed if old == js.j_jobslots */ - break; - js.j_lastj--; -*************** -*** 964,968 **** - realloc_jobs_list (); - -! return (js.j_lastj); - } - ---- 975,983 ---- - realloc_jobs_list (); - -! #ifdef DEBUG -! itrace("compact_jobs_list: returning %d", (js.j_lastj || jobs[js.j_lastj]) ? js.j_lastj + 1 : 0); -! #endif -! -! return ((js.j_lastj || jobs[js.j_lastj]) ? js.j_lastj + 1 : 0); - } - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 17 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 18 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-019 b/src/patches/bash/bash32-019 deleted file mode 100644 index 647bd1fa3..000000000 --- a/src/patches/bash/bash32-019 +++ /dev/null @@ -1,343 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-019 - -Bug-Reported-by: Thomas Loeber -Bug-Reference-ID: <200703082223.08919.ifp@loeber1.de> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00036.html - -Bug-Description: - -When rl_read_key returns -1, indicating that bash's controlling terminal -has been invalidated for some reason (e.g., receiving a SIGHUP), the error -status was not reported correctly to the caller. This could cause input -loops. - -Patch: - -*** ../bash-3.2-patched/lib/readline/complete.c Fri Jul 28 11:35:49 2006 ---- lib/readline/complete.c Tue Mar 13 08:50:16 2007 -*************** -*** 429,433 **** - if (c == 'n' || c == 'N' || c == RUBOUT) - return (0); -! if (c == ABORT_CHAR) - _rl_abort_internal (); - if (for_pager && (c == NEWLINE || c == RETURN)) ---- 440,444 ---- - if (c == 'n' || c == 'N' || c == RUBOUT) - return (0); -! if (c == ABORT_CHAR || c < 0) - _rl_abort_internal (); - if (for_pager && (c == NEWLINE || c == RETURN)) -*** ../bash-3.2-patched/lib/readline/input.c Wed Aug 16 15:15:16 2006 ---- lib/readline/input.c Wed May 2 16:07:59 2007 -*************** -*** 514,518 **** - int size; - { -! int mb_len = 0; - size_t mbchar_bytes_length; - wchar_t wc; ---- 522,526 ---- - int size; - { -! int mb_len, c; - size_t mbchar_bytes_length; - wchar_t wc; -*************** -*** 521,531 **** - memset(&ps, 0, sizeof (mbstate_t)); - memset(&ps_back, 0, sizeof (mbstate_t)); -! - while (mb_len < size) - { - RL_SETSTATE(RL_STATE_MOREINPUT); -! mbchar[mb_len++] = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - - mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps); - if (mbchar_bytes_length == (size_t)(-1)) ---- 529,545 ---- - memset(&ps, 0, sizeof (mbstate_t)); - memset(&ps_back, 0, sizeof (mbstate_t)); -! -! mb_len = 0; - while (mb_len < size) - { - RL_SETSTATE(RL_STATE_MOREINPUT); -! c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -+ if (c < 0) -+ break; -+ -+ mbchar[mb_len++] = c; -+ - mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps); - if (mbchar_bytes_length == (size_t)(-1)) -*************** -*** 565,569 **** - c = first; - memset (mb, 0, mlen); -! for (i = 0; i < mlen; i++) - { - mb[i] = (char)c; ---- 579,583 ---- - c = first; - memset (mb, 0, mlen); -! for (i = 0; c >= 0 && i < mlen; i++) - { - mb[i] = (char)c; -*** ../bash-3.2-patched/lib/readline/isearch.c Mon Dec 26 17:18:53 2005 ---- lib/readline/isearch.c Fri Mar 9 14:30:59 2007 -*************** -*** 328,333 **** - - f = (rl_command_func_t *)NULL; -! -! /* Translate the keys we do something with to opcodes. */ - if (c >= 0 && _rl_keymap[c].type == ISFUNC) - { ---- 328,340 ---- - - f = (rl_command_func_t *)NULL; -! -! if (c < 0) -! { -! cxt->sflags |= SF_FAILED; -! cxt->history_pos = cxt->last_found_line; -! return -1; -! } -! -! /* Translate the keys we do something with to opcodes. */ - if (c >= 0 && _rl_keymap[c].type == ISFUNC) - { -*** ../bash-3.2-patched/lib/readline/misc.c Mon Dec 26 17:20:46 2005 ---- lib/readline/misc.c Fri Mar 9 14:44:11 2007 -*************** -*** 147,150 **** ---- 147,152 ---- - rl_clear_message (); - RL_UNSETSTATE(RL_STATE_NUMERICARG); -+ if (key < 0) -+ return -1; - return (_rl_dispatch (key, _rl_keymap)); - } -*** ../bash-3.2-patched/lib/readline/readline.c Wed Aug 16 15:00:36 2006 ---- lib/readline/readline.c Fri Mar 9 14:47:24 2007 -*************** -*** 646,649 **** ---- 669,677 ---- - { - nkey = _rl_subseq_getchar (cxt->okey); -+ if (nkey < 0) -+ { -+ _rl_abort_internal (); -+ return -1; -+ } - r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg); - cxt->flags |= KSEQ_DISPATCHED; -*** ../bash-3.2-patched/lib/readline/text.c Fri Jul 28 11:55:27 2006 ---- lib/readline/text.c Sun Mar 25 13:41:38 2007 -*************** -*** 858,861 **** ---- 864,870 ---- - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -+ if (c < 0) -+ return -1; -+ - #if defined (HANDLE_SIGNALS) - if (RL_ISSTATE (RL_STATE_CALLBACK) == 0) -*************** -*** 1521,1524 **** ---- 1530,1536 ---- - mb_len = _rl_read_mbchar (mbchar, MB_LEN_MAX); - -+ if (mb_len <= 0) -+ return -1; -+ - if (count < 0) - return (_rl_char_search_internal (-count, bdir, mbchar, mb_len)); -*************** -*** 1537,1540 **** ---- 1549,1555 ---- - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -+ if (c < 0) -+ return -1; -+ - if (count < 0) - return (_rl_char_search_internal (-count, bdir, c)); -*** ../bash-3.2-patched/lib/readline/vi_mode.c Sat Jul 29 16:42:28 2006 ---- lib/readline/vi_mode.c Fri Mar 9 15:02:11 2007 -*************** -*** 887,890 **** ---- 887,897 ---- - c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); -+ -+ if (c < 0) -+ { -+ *nextkey = 0; -+ return -1; -+ } -+ - *nextkey = c; - -*************** -*** 903,906 **** ---- 910,918 ---- - c = rl_read_key (); /* real command */ - RL_UNSETSTATE(RL_STATE_MOREINPUT); -+ if (c < 0) -+ { -+ *nextkey = 0; -+ return -1; -+ } - *nextkey = c; - } -*************** -*** 1225,1236 **** - _rl_callback_generic_arg *data; - { - #if defined (HANDLE_MULTIBYTE) -! _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); - #else - RL_SETSTATE(RL_STATE_MOREINPUT); -! _rl_vi_last_search_char = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - #endif - - _rl_callback_func = 0; - _rl_want_redisplay = 1; ---- 1243,1262 ---- - _rl_callback_generic_arg *data; - { -+ int c; - #if defined (HANDLE_MULTIBYTE) -! c = _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); - #else - RL_SETSTATE(RL_STATE_MOREINPUT); -! c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - #endif - -+ if (c <= 0) -+ return -1; -+ -+ #if !defined (HANDLE_MULTIBYTE) -+ _rl_vi_last_search_char = c; -+ #endif -+ - _rl_callback_func = 0; - _rl_want_redisplay = 1; -*************** -*** 1248,1251 **** ---- 1274,1278 ---- - int count, key; - { -+ int c; - #if defined (HANDLE_MULTIBYTE) - static char *target; -*************** -*** 1294,1302 **** - { - #if defined (HANDLE_MULTIBYTE) -! _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); - #else - RL_SETSTATE(RL_STATE_MOREINPUT); -! _rl_vi_last_search_char = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - #endif - } ---- 1321,1335 ---- - { - #if defined (HANDLE_MULTIBYTE) -! c = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); -! if (c <= 0) -! return -1; -! _rl_vi_last_search_mblen = c; - #else - RL_SETSTATE(RL_STATE_MOREINPUT); -! c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); -+ if (c < 0) -+ return -1; -+ _rl_vi_last_search_char = c; - #endif - } -*************** -*** 1468,1471 **** ---- 1501,1507 ---- - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -+ if (c < 0) -+ return -1; -+ - #if defined (HANDLE_MULTIBYTE) - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -*************** -*** 1486,1489 **** ---- 1522,1528 ---- - _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); - -+ if (c < 0) -+ return -1; -+ - _rl_callback_func = 0; - _rl_want_redisplay = 1; -*************** -*** 1517,1520 **** ---- 1556,1562 ---- - _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); - -+ if (c < 0) -+ return -1; -+ - return (_rl_vi_change_char (count, c, mb)); - } -*************** -*** 1651,1655 **** - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -! if (ch < 'a' || ch > 'z') - { - rl_ding (); ---- 1693,1697 ---- - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -! if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ - { - rl_ding (); -*************** -*** 1703,1707 **** - return 0; - } -! else if (ch < 'a' || ch > 'z') - { - rl_ding (); ---- 1745,1749 ---- - return 0; - } -! else if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ - { - rl_ding (); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 18 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 19 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-020 b/src/patches/bash/bash32-020 deleted file mode 100644 index 8c7e32890..000000000 --- a/src/patches/bash/bash32-020 +++ /dev/null @@ -1,183 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-020 - -Bug-Reported-by: Ian A Watson -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -In some cases of error processing, a jump back to the top-level processing -loop from a builtin command would leave the shell in an inconsistent state. - -Patch: - -*** ../bash-3.2-patched/sig.c Wed Jan 25 14:57:59 2006 ---- sig.c Sat Mar 10 11:11:30 2007 -*************** -*** 351,354 **** ---- 351,373 ---- - #undef XHANDLER - -+ /* Run some of the cleanups that should be performed when we run -+ jump_to_top_level from a builtin command context. XXX - might want to -+ also call reset_parser here. */ -+ void -+ top_level_cleanup () -+ { -+ /* Clean up string parser environment. */ -+ while (parse_and_execute_level) -+ parse_and_execute_cleanup (); -+ -+ #if defined (PROCESS_SUBSTITUTION) -+ unlink_fifo_list (); -+ #endif /* PROCESS_SUBSTITUTION */ -+ -+ run_unwind_protects (); -+ loop_level = continuing = breaking = 0; -+ return_catch_flag = 0; -+ } -+ - /* What to do when we've been interrupted, and it is safe to handle it. */ - void -*** ../bash-3.2-patched/sig.h Wed Jan 25 14:50:27 2006 ---- sig.h Sat Mar 10 11:14:18 2007 -*************** -*** 122,125 **** ---- 122,126 ---- - extern void initialize_terminating_signals __P((void)); - extern void reset_terminating_signals __P((void)); -+ extern void top_level_cleanup __P((void)); - extern void throw_to_top_level __P((void)); - extern void jump_to_top_level __P((int)) __attribute__((__noreturn__)); -*** ../bash-3.2-patched/builtins/common.c Tue Apr 3 16:47:13 2007 ---- builtins/common.c Mon Apr 30 15:01:33 2007 -*************** -*** 132,135 **** ---- 132,136 ---- - { - builtin_error (_("too many arguments")); -+ top_level_cleanup (); - jump_to_top_level (DISCARD); - } -*************** -*** 396,400 **** - throw_to_top_level (); - else -! jump_to_top_level (DISCARD); - } - no_args (list->next); ---- 410,417 ---- - throw_to_top_level (); - else -! { -! top_level_cleanup (); -! jump_to_top_level (DISCARD); -! } - } - no_args (list->next); -*** ../bash-3.2-patched/subst.c Tue Apr 3 16:47:19 2007 ---- subst.c Tue Jul 17 09:45:11 2007 -*************** -*** 1279,1283 **** - if (no_longjmp_on_fatal_error == 0) - { /* { */ -! report_error ("bad substitution: no closing `%s' in %s", "}", string); - last_command_exit_value = EXECUTION_FAILURE; - exp_jump_to_top_level (DISCARD); ---- 1290,1294 ---- - if (no_longjmp_on_fatal_error == 0) - { /* { */ -! report_error (_("bad substitution: no closing `%s' in %s"), "}", string); - last_command_exit_value = EXECUTION_FAILURE; - exp_jump_to_top_level (DISCARD); -*************** -*** 7662,7665 **** ---- 7706,7711 ---- - expand_no_split_dollar_star = 0; /* XXX */ - expanding_redir = 0; -+ -+ top_level_cleanup (); /* from sig.c */ - - jump_to_top_level (v); -*************** -*** 7880,7884 **** - { - report_error (_("no match: %s"), tlist->word->word); -! jump_to_top_level (DISCARD); - } - else if (allow_null_glob_expansion == 0) ---- 7927,7931 ---- - { - report_error (_("no match: %s"), tlist->word->word); -! exp_jump_to_top_level (DISCARD); - } - else if (allow_null_glob_expansion == 0) -*** ../bash-3.2-patched/arrayfunc.c Thu Jul 27 09:37:59 2006 ---- arrayfunc.c Thu May 31 11:55:46 2007 -*************** -*** 619,622 **** ---- 619,624 ---- - { - last_command_exit_value = EXECUTION_FAILURE; -+ -+ top_level_cleanup (); - jump_to_top_level (DISCARD); - } -*** ../bash-3.2-patched/expr.c Wed Dec 28 17:47:03 2005 ---- expr.c Tue Apr 24 14:17:59 2007 -*************** -*** 930,933 **** ---- 930,934 ---- - { - expr_unwind (); -+ top_level_cleanup (); - jump_to_top_level (DISCARD); - } -*** ../bash-3.2-patched/variables.c Fri Sep 8 13:33:32 2006 ---- variables.c Tue Jul 17 09:54:59 2007 -*************** -*** 1822,1830 **** - lval = evalexp (oval, &expok); /* ksh93 seems to do this */ - if (expok == 0) -! jump_to_top_level (DISCARD); - } - rval = evalexp (value, &expok); - if (expok == 0) -! jump_to_top_level (DISCARD); - if (flags & ASS_APPEND) - rval += lval; ---- 1855,1869 ---- - lval = evalexp (oval, &expok); /* ksh93 seems to do this */ - if (expok == 0) -! { -! top_level_cleanup (); -! jump_to_top_level (DISCARD); -! } - } - rval = evalexp (value, &expok); - if (expok == 0) -! { -! top_level_cleanup (); -! jump_to_top_level (DISCARD); -! } - if (flags & ASS_APPEND) - rval += lval; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 19 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 20 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-021 b/src/patches/bash/bash32-021 deleted file mode 100644 index 003489c6b..000000000 --- a/src/patches/bash/bash32-021 +++ /dev/null @@ -1,72 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-021 - -Bug-Reported-by: BAGSHAW Paul RD-TECH-REN -Bug-Reference-ID: <941BA0BF46DB8F4983FF7C8AFE800BC205EA7D4B@ftrdmel3.rd.francetelecom.fr> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00065.html - -Bug-Description: - -When the parser read a backslash-escaped character that would be treated -internally as an escape, it would double the number of escape characters. - -Patch: - -*** ../bash-3.2-patched/parse.y Mon Oct 30 17:22:00 2006 ---- parse.y Sat Mar 24 17:13:20 2007 -*************** -*** 3377,3381 **** - { - pass_next_character = 0; -! goto got_character; - } - ---- 3377,3381 ---- - { - pass_next_character = 0; -! goto got_escaped_character; - } - -*************** -*** 3651,3660 **** - got_character: - -- all_digit_token &= DIGIT (character); -- dollar_present |= character == '$'; -- - if (character == CTLESC || character == CTLNUL) - token[token_index++] = CTLESC; - - token[token_index++] = character; - ---- 3651,3662 ---- - got_character: - - if (character == CTLESC || character == CTLNUL) - token[token_index++] = CTLESC; - -+ got_escaped_character: -+ -+ all_digit_token &= DIGIT (character); -+ dollar_present |= character == '$'; -+ - token[token_index++] = character; - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 20 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 21 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-022 b/src/patches/bash/bash32-022 deleted file mode 100644 index d3679e67f..000000000 --- a/src/patches/bash/bash32-022 +++ /dev/null @@ -1,126 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-022 - -Bug-Reported-by: Chet Ramey -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -POSIX specifies that the `read' builtin invoked from an interative shell -must prompt with $PS2 when a line is continued using a backslash while -reading from a terminal. - -Patch: - -*** ../bash-3.2-patched/builtins/read.def Tue Sep 19 08:45:48 2006 ---- builtins/read.def Thu May 24 16:03:30 2007 -*************** -*** 128,133 **** - { - register char *varname; -! int size, i, nr, pass_next, saw_escape, eof, opt, retval, code; -! int input_is_tty, input_is_pipe, unbuffered_read; - int raw, edit, nchars, silent, have_timeout, fd; - unsigned int tmout; ---- 131,136 ---- - { - register char *varname; -! int size, i, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2; -! int input_is_tty, input_is_pipe, unbuffered_read, skip_ctlesc, skip_ctlnul; - int raw, edit, nchars, silent, have_timeout, fd; - unsigned int tmout; -*************** -*** 135,139 **** - char c; - char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname; -! char *e, *t, *t1; - struct stat tsb; - SHELL_VAR *var; ---- 138,142 ---- - char c; - char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname; -! char *e, *t, *t1, *ps2; - struct stat tsb; - SHELL_VAR *var; -*************** -*** 149,152 **** ---- 152,156 ---- - USE_VAR(i); - USE_VAR(pass_next); -+ USE_VAR(print_ps2); - USE_VAR(saw_escape); - USE_VAR(input_is_pipe); -*************** -*** 164,167 **** ---- 168,172 ---- - #endif - USE_VAR(list); -+ USE_VAR(ps2); - - i = 0; /* Index into the string that we are reading. */ -*************** -*** 387,391 **** - #endif - -! for (eof = retval = 0;;) - { - #if defined (READLINE) ---- 394,399 ---- - #endif - -! ps2 = 0; -! for (print_ps2 = eof = retval = 0;;) - { - #if defined (READLINE) -*************** -*** 413,416 **** ---- 421,433 ---- - #endif - -+ if (print_ps2) -+ { -+ if (ps2 == 0) -+ ps2 = get_string_value ("PS2"); -+ fprintf (stderr, "%s", ps2 ? ps2 : ""); -+ fflush (stderr); -+ print_ps2 = 0; -+ } -+ - if (unbuffered_read) - retval = zread (fd, &c, 1); -*************** -*** 441,445 **** - pass_next = 0; - if (c == '\n') -! i--; /* back up over the CTLESC */ - else - goto add_char; ---- 458,466 ---- - pass_next = 0; - if (c == '\n') -! { -! i--; /* back up over the CTLESC */ -! if (interactive && input_is_tty && raw == 0) -! print_ps2 = 1; -! } - else - goto add_char; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 21 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 22 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-023 b/src/patches/bash/bash32-023 deleted file mode 100644 index 34a63947f..000000000 --- a/src/patches/bash/bash32-023 +++ /dev/null @@ -1,51 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-023 - -Bug-Reported-by: Chet Ramey -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -When an error occurs during the pattern removal word expansion, the shell -can free unallocated memory or free memory multiple times. - -Patch: - -*** ../bash-3.2-patched/subst.c Tue Apr 3 16:47:19 2007 ---- subst.c Tue Jul 17 09:45:11 2007 -*************** -*** 3975,3979 **** - patstr++; - -! pattern = getpattern (patstr, quoted, 1); - - temp1 = (char *)NULL; /* shut up gcc */ ---- 4008,4016 ---- - patstr++; - -! /* Need to pass getpattern newly-allocated memory in case of expansion -- -! the expansion code will free the passed string on an error. */ -! temp1 = savestring (patstr); -! pattern = getpattern (temp1, quoted, 1); -! free (temp1); - - temp1 = (char *)NULL; /* shut up gcc */ -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 22 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 23 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-024 b/src/patches/bash/bash32-024 deleted file mode 100644 index 1575f37a9..000000000 --- a/src/patches/bash/bash32-024 +++ /dev/null @@ -1,77 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-024 - -Bug-Reported-by: Peter Volkov -Bug-Reference-ID: <1178376645.9063.25.camel@localhost> -Bug-Reference-URL: http://bugs.gentoo.org/177095 - -Bug-Description: - -The readline display code miscalculated the screen position when performing -a redisplay in which the new text occupies more screen space that the old, -but takes fewer bytes to do so (e.g., when replacing a shorter string -containing multibyte characters with a longer one containing only ASCII). - -Patch: - -*** ../bash-3.2-patched/lib/readline/display.c Thu Apr 26 11:38:22 2007 ---- lib/readline/display.c Thu Jul 12 23:10:10 2007 -*************** -*** 1519,1527 **** - /* Non-zero if we're increasing the number of lines. */ - int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; - /* Sometimes it is cheaper to print the characters rather than - use the terminal's capabilities. If we're growing the number - of lines, make sure we actually cause the new line to wrap - around on auto-wrapping terminals. */ -! if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) - { - /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and ---- 1568,1596 ---- - /* Non-zero if we're increasing the number of lines. */ - int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; -+ /* If col_lendiff is > 0, implying that the new string takes up more -+ screen real estate than the old, but lendiff is < 0, meaning that it -+ takes fewer bytes, we need to just output the characters starting -+ from the first difference. These will overwrite what is on the -+ display, so there's no reason to do a smart update. This can really -+ only happen in a multibyte environment. */ -+ if (lendiff < 0) -+ { -+ _rl_output_some_chars (nfd, temp); -+ _rl_last_c_pos += _rl_col_width (nfd, 0, temp); -+ /* If nfd begins before any invisible characters in the prompt, -+ adjust _rl_last_c_pos to account for wrap_offset and set -+ cpos_adjusted to let the caller know. */ -+ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) -+ { -+ _rl_last_c_pos -= wrap_offset; -+ cpos_adjusted = 1; -+ } -+ return; -+ } - /* Sometimes it is cheaper to print the characters rather than - use the terminal's capabilities. If we're growing the number - of lines, make sure we actually cause the new line to wrap - around on auto-wrapping terminals. */ -! else if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) - { - /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 23 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 24 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-025 b/src/patches/bash/bash32-025 deleted file mode 100644 index 4d53d89d7..000000000 --- a/src/patches/bash/bash32-025 +++ /dev/null @@ -1,79 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-025 - -Bug-Reported-by: Tom Bjorkholm -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-04/msg00004.html - -Bug-Description: - -An off-by-one error in readline's input buffering caused readline to drop -each 511th character of buffered input (e.g., when pasting a large amount -of data into a terminal window). - -Patch: - -*** ../bash-3.2-patched/lib/readline/input.c Wed Aug 16 15:15:16 2006 ---- lib/readline/input.c Tue Jul 17 09:24:21 2007 -*************** -*** 134,139 **** - - *key = ibuffer[pop_index++]; -! - if (pop_index >= ibuffer_len) - pop_index = 0; - ---- 134,142 ---- - - *key = ibuffer[pop_index++]; -! #if 0 - if (pop_index >= ibuffer_len) -+ #else -+ if (pop_index > ibuffer_len) -+ #endif - pop_index = 0; - -*************** -*** 251,255 **** - { - k = (*rl_getc_function) (rl_instream); -! rl_stuff_char (k); - if (k == NEWLINE || k == RETURN) - break; ---- 254,259 ---- - { - k = (*rl_getc_function) (rl_instream); -! if (rl_stuff_char (k) == 0) -! break; /* some problem; no more room */ - if (k == NEWLINE || k == RETURN) - break; -*************** -*** 374,378 **** ---- 378,386 ---- - } - ibuffer[push_index++] = key; -+ #if 0 - if (push_index >= ibuffer_len) -+ #else -+ if (push_index > ibuffer_len) -+ #endif - push_index = 0; - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 24 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 25 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-026 b/src/patches/bash/bash32-026 deleted file mode 100644 index ba7de50a8..000000000 --- a/src/patches/bash/bash32-026 +++ /dev/null @@ -1,82 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-026 - -Bug-Reported-by: Chet Ramey -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -This keeps the Apple linker from attempting to link bash against Apple's -readline library "replacement" rather than the one shipped with bash. It -extends the configure workaround to Mac OS X Leopard (10.5). - -As a side effect, the patch updates the copyright date displayed in the -version string. - -You must re-run configure after applying the patch, and before rebuilding -bash. - -Patch: - -*** ../bash-3.2-patched/configure.in 2007-03-06 11:07:38.000000000 -0500 ---- configure.in 2007-11-23 15:37:41.000000000 -0500 -*************** -*** 519,523 **** - # dynamic version - case "${host_os}" in -! darwin8*) READLINE_LIB='${READLINE_LIBRARY}' ;; - *) READLINE_LIB=-lreadline ;; - esac ---- 519,523 ---- - # dynamic version - case "${host_os}" in -! darwin[[89]]*) READLINE_LIB='${READLINE_LIBRARY}' ;; - *) READLINE_LIB=-lreadline ;; - esac -*** ../bash-3.2-patched/configure 2007-03-24 14:51:22.000000000 -0400 ---- configure 2007-11-23 15:46:15.000000000 -0500 -*************** -*** 4872,4876 **** - # dynamic version - case "${host_os}" in -! darwin8*) READLINE_LIB='${READLINE_LIBRARY}' ;; - *) READLINE_LIB=-lreadline ;; - esac ---- 4872,4876 ---- - # dynamic version - case "${host_os}" in -! darwin[89]*) READLINE_LIB='${READLINE_LIBRARY}' ;; - *) READLINE_LIB=-lreadline ;; - esac -*** ../bash-3.2-patched/version.c 2005-05-16 11:58:34.000000000 -0400 ---- version.c 2007-11-23 16:03:40.000000000 -0500 -*************** -*** 80,83 **** - printf ("GNU bash, version %s (%s)\n", shell_version_string (), MACHTYPE); - if (extended) -! printf (_("Copyright (C) 2005 Free Software Foundation, Inc.\n")); - } ---- 80,83 ---- - printf ("GNU bash, version %s (%s)\n", shell_version_string (), MACHTYPE); - if (extended) -! printf (_("Copyright (C) 2007 Free Software Foundation, Inc.\n")); - } -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 25 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 26 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-027 b/src/patches/bash/bash32-027 deleted file mode 100644 index 5e110cb96..000000000 --- a/src/patches/bash/bash32-027 +++ /dev/null @@ -1,85 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-027 - -Bug-Reported-by: dAniel hAhler -Bug-Reference-ID: <4702ED8A.5000503@thequod.de> -Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/119938 - -Bug-Description: - -When updating the display after displaying, for instance, a list of possible -completions, readline will place the cursor at the wrong position if the -prompt contains invisible characters and a newline. - -Patch: - -*** ../bash-3.2.25/lib/readline/display.c Mon Aug 6 14:26:29 2007 ---- lib/readline/display.c Wed Oct 10 22:43:58 2007 -*************** -*** 1049,1053 **** - else - tx = nleft; -! if (_rl_last_c_pos > tx) - { - _rl_backspace (_rl_last_c_pos - tx); /* XXX */ ---- 1049,1053 ---- - else - tx = nleft; -! if (tx >= 0 && _rl_last_c_pos > tx) - { - _rl_backspace (_rl_last_c_pos - tx); /* XXX */ -*************** -*** 1205,1209 **** - { - register char *ofd, *ols, *oe, *nfd, *nls, *ne; -! int temp, lendiff, wsatend, od, nd; - int current_invis_chars; - int col_lendiff, col_temp; ---- 1205,1209 ---- - { - register char *ofd, *ols, *oe, *nfd, *nls, *ne; -! int temp, lendiff, wsatend, od, nd, o_cpos; - int current_invis_chars; - int col_lendiff, col_temp; -*************** -*** 1466,1469 **** ---- 1466,1471 ---- - } - -+ o_cpos = _rl_last_c_pos; -+ - /* When this function returns, _rl_last_c_pos is correct, and an absolute - cursor postion in multibyte mode, but a buffer index when not in a -*************** -*** 1475,1479 **** - invisible characters in the prompt string. Let's see if setting this when - we make sure we're at the end of the drawn prompt string works. */ -! if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && _rl_last_c_pos == prompt_physical_chars) - cpos_adjusted = 1; - #endif ---- 1477,1483 ---- - invisible characters in the prompt string. Let's see if setting this when - we make sure we're at the end of the drawn prompt string works. */ -! if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && -! (_rl_last_c_pos > 0 || o_cpos > 0) && -! _rl_last_c_pos == prompt_physical_chars) - cpos_adjusted = 1; - #endif -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 26 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 27 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-028 b/src/patches/bash/bash32-028 deleted file mode 100644 index e8182948d..000000000 --- a/src/patches/bash/bash32-028 +++ /dev/null @@ -1,60 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-028 - -Bug-Reported-by: dAniel hAhler -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -Under some circumstances, readline will incorrectly display a prompt string -containing invisible characters after the final newline. - -Patch: - -*** ../bash-3.2-patched/lib/readline/display.c 2007-08-25 13:47:08.000000000 -0400 ---- lib/readline/display.c 2007-11-10 17:51:29.000000000 -0500 -*************** -*** 392,396 **** - local_prompt = expand_prompt (p, &prompt_visible_length, - &prompt_last_invisible, -! (int *)NULL, - &prompt_physical_chars); - c = *t; *t = '\0'; ---- 420,424 ---- - local_prompt = expand_prompt (p, &prompt_visible_length, - &prompt_last_invisible, -! &prompt_invis_chars_first_line, - &prompt_physical_chars); - c = *t; *t = '\0'; -*************** -*** 399,403 **** - local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length, - (int *)NULL, -! &prompt_invis_chars_first_line, - (int *)NULL); - *t = c; ---- 427,431 ---- - local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length, - (int *)NULL, -! (int *)NULL, - (int *)NULL); - *t = c; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 27 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 28 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-029 b/src/patches/bash/bash32-029 deleted file mode 100644 index 9de208584..000000000 --- a/src/patches/bash/bash32-029 +++ /dev/null @@ -1,52 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-029 - -Bug-Reported-by: Tomas Janousek -Bug-Reference-ID: <20071102104034.GA26893@redhat.com> -Bug-Reference-URL: https://bugzilla.redhat.com/show_bug.cgi?id=286861 - -Bug-Description: - -When the bash arithmetic expression evaluator has temporarily turned off -evalation, such as when parsing a pre- or post-decrement or -increment -operator, and an error occurs, evaluation is not re-enabled. - -Patch: - -*** ../bash-3.2-patched/expr.c 2007-08-25 13:47:05.000000000 -0400 ---- expr.c 2007-10-18 08:08:44.000000000 -0400 -*************** -*** 287,290 **** ---- 287,292 ---- - } - free (expr_stack[expr_depth]); /* free the allocated EXPR_CONTEXT */ -+ -+ noeval = 0; /* XXX */ - } - -*************** -*** 320,323 **** ---- 322,326 ---- - - val = 0; -+ noeval = 0; - - FASTCOPY (evalbuf, oevalbuf, sizeof (evalbuf)); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 28 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 29 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-030 b/src/patches/bash/bash32-030 deleted file mode 100644 index 3f12c2833..000000000 --- a/src/patches/bash/bash32-030 +++ /dev/null @@ -1,50 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-030 - -Bug-Reported-by: Paul Eggert Andreas Schwab -Bug-Reference-ID: <877il0nu84.fsf_-_@penguin.cs.ucla.edu> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-11/msg00023.html http://lists.gnu.org/archive/html/bug-bash/2007-11/msg00022.htmlhttp://lists.gnu.org/archive/html/bug-bash/2007-11/msg00022.html - -Bug-Description: - -If redirections attached to a compound command fail, bash does not set the -command's exit status correctly. This only happens when the command is the -first in a sequential list. - -Patch: - -*** ../bash-3.2-patched/execute_cmd.c 2007-03-24 14:51:05.000000000 -0400 ---- execute_cmd.c 2007-11-05 22:31:14.000000000 -0500 -*************** -*** 615,619 **** - redirection_undo_list = (REDIRECT *)NULL; - dispose_exec_redirects (); -! return (EXECUTION_FAILURE); - } - ---- 620,624 ---- - redirection_undo_list = (REDIRECT *)NULL; - dispose_exec_redirects (); -! return (last_command_exit_value = EXECUTION_FAILURE); - } - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 29 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 30 - - #endif /* _PATCHLEVEL_H_ */ - - diff --git a/src/patches/bash/bash32-031 b/src/patches/bash/bash32-031 deleted file mode 100644 index 6c96fb9d0..000000000 --- a/src/patches/bash/bash32-031 +++ /dev/null @@ -1,62 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-031 - -Bug-Reported-by: Miroslav Lichvar -Bug-Reference-ID: Fri, 02 Nov 2007 14:07:45 +0100 -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-11/msg00000.html - -Bug-Description: - -In certain cases when outputting characters at the end of the line, -e.g., when displaying the prompt string, readline positions the cursor -incorrectly if the prompt string contains invisible characters and the -text being drawn begins before the last invisible character in the line. - -Patch: - -*** ../bash-3.2-patched/lib/readline/display.c 2007-08-25 13:47:08.000000000 -0400 ---- lib/readline/display.c 2007-11-10 17:51:29.000000000 -0500 -*************** -*** 1566,1574 **** - else - { -- /* We have horizontal scrolling and we are not inserting at -- the end. We have invisible characters in this line. This -- is a dumb update. */ - _rl_output_some_chars (nfd, temp); - _rl_last_c_pos += col_temp; - return; - } ---- 1619,1632 ---- - else - { - _rl_output_some_chars (nfd, temp); - _rl_last_c_pos += col_temp; -+ /* If nfd begins before any invisible characters in the prompt, -+ adjust _rl_last_c_pos to account for wrap_offset and set -+ cpos_adjusted to let the caller know. */ -+ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) -+ { -+ _rl_last_c_pos -= wrap_offset; -+ cpos_adjusted = 1; -+ } - return; - } -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 30 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 31 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-032 b/src/patches/bash/bash32-032 deleted file mode 100644 index 5e53e2919..000000000 --- a/src/patches/bash/bash32-032 +++ /dev/null @@ -1,47 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-032 - -Bug-Reported-by: Uwe Doering -Bug-Reference-ID: <46F3DD72.2090801@geminix.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-09/msg00102.html - -Bug-Description: - -There is an off-by-one error in the code that buffers characters received -very quickly in succession, causing characters to be dropped. - -Patch: - -*** ../bash-3.2-patched/lib/readline/input.c 2007-08-25 13:47:10.000000000 -0400 ---- lib/readline/input.c 2007-10-12 22:55:25.000000000 -0400 -*************** -*** 155,159 **** - pop_index--; - if (pop_index < 0) -! pop_index = ibuffer_len - 1; - ibuffer[pop_index] = key; - return (1); ---- 155,159 ---- - pop_index--; - if (pop_index < 0) -! pop_index = ibuffer_len; - ibuffer[pop_index] = key; - return (1); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 31 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 32 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-033 b/src/patches/bash/bash32-033 deleted file mode 100644 index 0d698108b..000000000 --- a/src/patches/bash/bash32-033 +++ /dev/null @@ -1,88 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-033 - -Bug-Reported-by: Christophe Martin -Bug-Reference-ID: <465ABA4A.3030805@free.fr> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-05/msg00104.html - -Bug-Description: - -References made within a function to an uninitialized local array variable -using the [*] subscript in a double-quoted string can result in spurious -ASCII 127 characters in the expanded value. - -Patch: - -*** ../bash-3.2-patched/arrayfunc.c 2007-08-25 13:47:05.000000000 -0400 ---- arrayfunc.c 2007-05-31 11:55:46.000000000 -0400 -*************** -*** 723,727 **** - { - if (rtype) -! *rtype = 1; - if (allow_all == 0) - { ---- 723,727 ---- - { - if (rtype) -! *rtype = (t[0] == '*') ? 1 : 2; - if (allow_all == 0) - { -*** ../bash-3.2-patched/subst.c 2007-08-25 13:47:08.000000000 -0400 ---- subst.c 2007-11-14 15:43:00.000000000 -0500 -*************** -*** 4908,4915 **** - intmax_t arg_index; - SHELL_VAR *var; -! int atype; - - ret = 0; - temp = 0; - - /* Handle multiple digit arguments, as in ${11}. */ ---- 4973,4981 ---- - intmax_t arg_index; - SHELL_VAR *var; -! int atype, rflags; - - ret = 0; - temp = 0; -+ rflags = 0; - - /* Handle multiple digit arguments, as in ${11}. */ -*************** -*** 4944,4947 **** ---- 5010,5015 ---- - ? quote_string (temp) - : quote_escapes (temp); -+ else if (atype == 1 && temp && QUOTED_NULL (temp) && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))) -+ rflags |= W_HASQUOTEDNULL; - } - #endif -*************** -*** 4971,4974 **** ---- 5039,5043 ---- - ret = alloc_word_desc (); - ret->word = temp; -+ ret->flags |= rflags; - } - return ret; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 32 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 33 - - #endif /* _PATCHLEVEL_H_ */ - diff --git a/src/patches/bash/bash32-034 b/src/patches/bash/bash32-034 deleted file mode 100644 index 4f081624b..000000000 --- a/src/patches/bash/bash32-034 +++ /dev/null @@ -1,74 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-034 - -Bug-Reported-by: Ian Campbell -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-10/msg00060.html - -Bug-Description: - -The bash getcwd replacement will write past the end of allocated memory -when it allocates the buffer itself if it uses the buffer size passed as -an argument, and that size is less than the length of the pathname. - -Patch: - -*** ../bash-3.2-patched/lib/sh/getcwd.c 2004-07-21 17:15:19.000000000 -0400 ---- lib/sh/getcwd.c 2007-12-31 19:26:36.000000000 -0500 -*************** -*** 252,268 **** - { - size_t len = pathbuf + pathsize - pathp; - if (buf == NULL) - { -! if (len < (size_t) size) -! len = size; -! buf = (char *) malloc (len); - if (buf == NULL) - goto lose2; - } -! else if ((size_t) size < len) -! { -! errno = ERANGE; -! goto lose2; -! } - (void) memcpy((PTR_T) buf, (PTR_T) pathp, len); - } ---- 287,305 ---- - { - size_t len = pathbuf + pathsize - pathp; -+ if (buf == NULL && size <= 0) -+ size = len; -+ -+ if ((size_t) size < len) -+ { -+ errno = ERANGE; -+ goto lose2; -+ } - if (buf == NULL) - { -! buf = (char *) malloc (size); - if (buf == NULL) - goto lose2; - } -! - (void) memcpy((PTR_T) buf, (PTR_T) pathp, len); - } -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 33 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 34 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-035 b/src/patches/bash/bash32-035 deleted file mode 100644 index 55506baef..000000000 --- a/src/patches/bash/bash32-035 +++ /dev/null @@ -1,159 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-035 - -Bug-Reported-by: Ingo Molnar -Bug-Reference-ID: <20071205202901.GA25202@elte.hu> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-12/msg00014.html - -Bug-Description: - -Bash incorrectly puts the second and subsequent children spawned by a -shell forked to run a command substitution in the wrong process group. - -Patch: - -*** ../bash-3.2-patched/subst.c 2007-12-13 22:31:21.000000000 -0500 ---- subst.c 2008-01-17 22:48:15.000000000 -0500 -*************** -*** 4621,4627 **** - - #if defined (JOB_CONTROL) - set_sigchld_handler (); - stop_making_children (); -! pipeline_pgrp = old_pipeline_pgrp; - #else - stop_making_children (); ---- 4721,4728 ---- - - #if defined (JOB_CONTROL) - set_sigchld_handler (); - stop_making_children (); -! if (pid != 0) -! pipeline_pgrp = old_pipeline_pgrp; - #else - stop_making_children (); -*** ../bash-3.2-patched/jobs.c 2007-08-25 13:46:59.000000000 -0400 ---- jobs.c 2007-12-08 16:47:43.000000000 -0500 -*************** -*** 251,254 **** ---- 251,255 ---- - static int set_job_status_and_cleanup __P((int)); - -+ static WAIT job_signal_status __P((int)); - static WAIT raw_job_exit_status __P((int)); - -*************** -*** 2220,2223 **** ---- 2238,2261 ---- - } - -+ static WAIT -+ job_signal_status (job) -+ int job; -+ { -+ register PROCESS *p; -+ WAIT s; -+ -+ p = jobs[job]->pipe; -+ do -+ { -+ s = p->status; -+ if (WIFSIGNALED(s) || WIFSTOPPED(s)) -+ break; -+ p = p->next; -+ } -+ while (p != jobs[job]->pipe); -+ -+ return s; -+ } -+ - /* Return the exit status of the last process in the pipeline for job JOB. - This is the exit status of the entire job. */ -*************** -*** 2302,2310 **** - received, only if one of the jobs run is killed via SIGINT. If - job control is not set, the job will be run in the same pgrp as -! the shell, and the shell will see any signals the job gets. */ - - /* This is possibly a race condition -- should it go in stop_pipeline? */ - wait_sigint_received = 0; -! if (job_control == 0) - { - old_sigint_handler = set_signal_handler (SIGINT, wait_sigint_handler); ---- 2343,2354 ---- - received, only if one of the jobs run is killed via SIGINT. If - job control is not set, the job will be run in the same pgrp as -! the shell, and the shell will see any signals the job gets. In -! fact, we want this set every time the waiting shell and the waited- -! for process are in the same process group, including command -! substitution. */ - - /* This is possibly a race condition -- should it go in stop_pipeline? */ - wait_sigint_received = 0; -! if (job_control == 0 || (subshell_environment&SUBSHELL_COMSUB)) - { - old_sigint_handler = set_signal_handler (SIGINT, wait_sigint_handler); -*************** -*** 2452,2464 **** - the last process in the pipeline. If no process exits due to a - signal, S is left as the status of the last job in the pipeline. */ -! p = jobs[job]->pipe; -! do -! { -! s = p->status; -! if (WIFSIGNALED(s) || WIFSTOPPED(s)) -! break; -! p = p->next; -! } -! while (p != jobs[job]->pipe); - - if (WIFSIGNALED (s) || WIFSTOPPED (s)) ---- 2496,2500 ---- - the last process in the pipeline. If no process exits due to a - signal, S is left as the status of the last job in the pipeline. */ -! s = job_signal_status (job); - - if (WIFSIGNALED (s) || WIFSTOPPED (s)) -*************** -*** 2494,2497 **** ---- 2530,2551 ---- - } - } -+ else if ((subshell_environment & SUBSHELL_COMSUB) && wait_sigint_received) -+ { -+ /* If waiting for a job in a subshell started to do command -+ substitution, simulate getting and being killed by the SIGINT to -+ pass the status back to our parent. */ -+ s = job_signal_status (job); -+ -+ if (WIFSIGNALED (s) && WTERMSIG (s) == SIGINT && signal_is_trapped (SIGINT) == 0) -+ { -+ UNBLOCK_CHILD (oset); -+ restore_sigint_handler (); -+ old_sigint_handler = set_signal_handler (SIGINT, SIG_DFL); -+ if (old_sigint_handler == SIG_IGN) -+ restore_sigint_handler (); -+ else -+ kill (getpid (), SIGINT); -+ } -+ } - - /* Moved here from set_job_status_and_cleanup, which is in the SIGCHLD -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 34 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 35 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-036 b/src/patches/bash/bash32-036 deleted file mode 100644 index ef22e60e0..000000000 --- a/src/patches/bash/bash32-036 +++ /dev/null @@ -1,44 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-036 - -Bug-Reported-by: Len Lattanzi -Bug-Reference-ID: <87493131-7AEC-4301-A684-E6CC6D06E3E1@apple.com> -Bug-Reference-URL: - -Bug-Description: - -When initializing a subshell, bash did not reset a sentinel keeping track -of the number of command substitutions, leading to an infinite loop if -an error was encountered in the subshell. - -Patch: - -*** ../bash-3.2-patched/execute_cmd.c 2007-12-13 22:31:14.000000000 -0500 ---- execute_cmd.c 2007-12-20 08:52:34.000000000 -0500 -*************** -*** 3881,3884 **** ---- 3916,3921 ---- - - clear_unwind_protect_list (0); -+ /* XXX -- are there other things we should be resetting here? */ -+ parse_and_execute_level = 0; /* nothing left to restore it */ - - /* We're no longer inside a shell function. */ -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 35 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 36 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-037 b/src/patches/bash/bash32-037 deleted file mode 100644 index 376bd937c..000000000 --- a/src/patches/bash/bash32-037 +++ /dev/null @@ -1,110 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-037 - -Bug-Reported-by: jared r r spiegel -Bug-Reference-ID: <200801152201.m0FM1lDp021260@iorek.ice-nine.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-01/msg00049.html - -Bug-Description: - -Bash inappropriately evaluates command substitutions while expanding -directory names as part of command substitution. - -Patch: - -*** ../bash-3.2-patched/subst.c 2007-12-13 22:31:21.000000000 -0500 ---- subst.c 2008-01-17 22:48:15.000000000 -0500 -*************** -*** 2815,2821 **** - to jump_to_top_level here so we don't endlessly loop. */ - WORD_LIST * -! expand_prompt_string (string, quoted) - char *string; - int quoted; - { - WORD_LIST *value; ---- 2895,2902 ---- - to jump_to_top_level here so we don't endlessly loop. */ - WORD_LIST * -! expand_prompt_string (string, quoted, wflags) - char *string; - int quoted; -+ int wflags; - { - WORD_LIST *value; -*************** -*** 2825,2829 **** - return ((WORD_LIST *)NULL); - -! td.flags = 0; - td.word = savestring (string); - ---- 2906,2910 ---- - return ((WORD_LIST *)NULL); - -! td.flags = wflags; - td.word = savestring (string); - -*** ../bash-3.2-patched/subst.h 2007-03-24 14:51:05.000000000 -0400 ---- subst.h 2008-01-17 22:46:08.000000000 -0500 -*************** -*** 136,140 **** - - /* Expand a prompt string. */ -! extern WORD_LIST *expand_prompt_string __P((char *, int)); - - /* Expand STRING just as if you were expanding a word. This also returns ---- 137,141 ---- - - /* Expand a prompt string. */ -! extern WORD_LIST *expand_prompt_string __P((char *, int, int)); - - /* Expand STRING just as if you were expanding a word. This also returns -*** ../bash-3.2-patched/parse.y 2007-08-25 13:47:06.000000000 -0400 ---- parse.y 2008-01-17 22:46:30.000000000 -0500 -*************** -*** 4367,4371 **** - { - last_exit_value = last_command_exit_value; -! list = expand_prompt_string (result, Q_DOUBLE_QUOTES); - free (result); - result = string_list (list); ---- 4367,4371 ---- - { - last_exit_value = last_command_exit_value; -! list = expand_prompt_string (result, Q_DOUBLE_QUOTES, 0); - free (result); - result = string_list (list); -*** ../bash-3.2-patched/bashline.c 2006-07-29 16:39:30.000000000 -0400 ---- bashline.c 2008-02-17 12:53:42.000000000 -0500 -*************** -*** 2358,2362 **** - { - new_dirname = savestring (local_dirname); -! wl = expand_prompt_string (new_dirname, 0); /* does the right thing */ - if (wl) - { ---- 2376,2380 ---- - { - new_dirname = savestring (local_dirname); -! wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB); /* does the right thing */ - if (wl) - { -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 36 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 37 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-038 b/src/patches/bash/bash32-038 deleted file mode 100644 index 842b1b501..000000000 --- a/src/patches/bash/bash32-038 +++ /dev/null @@ -1,80 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-038 - -Bug-Reported-by: Wojciech Puchar -Bug-Reference-ID: <200803131141.m2DBf9vo001136@wojtek.tensor.gdynia.pl> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-03/msg00029.html - -Bug-Description: - -When reading input lines into a single variable using the `read' builtin, -bash did not free the memory it read after assigining it to the named -variable, causing a memory leak noticable when reading large amounts of -data. - - -Patch: - -*** ../bash-3.2-patched/builtins/read.def 2007-08-25 13:47:07.000000000 -0400 ---- builtins/read.def 2008-03-07 12:55:47.000000000 -0500 -*************** -*** 135,139 **** - char c; - char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname; -! char *e, *t, *t1, *ps2; - struct stat tsb; - SHELL_VAR *var; ---- 152,156 ---- - char c; - char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname; -! char *e, *t, *t1, *ps2, *tofree; - struct stat tsb; - SHELL_VAR *var; -*************** -*** 675,678 **** ---- 728,732 ---- - /* Check whether or not the number of fields is exactly the same as the - number of variables. */ -+ tofree = NULL; - if (*input_string) - { -*************** -*** 680,684 **** - t = get_word_from_string (&input_string, ifs_chars, &e); - if (*input_string == 0) -! input_string = t; - else - input_string = strip_trailing_ifs_whitespace (t1, ifs_chars, saw_escape); ---- 734,738 ---- - t = get_word_from_string (&input_string, ifs_chars, &e); - if (*input_string == 0) -! tofree = input_string = t; - else - input_string = strip_trailing_ifs_whitespace (t1, ifs_chars, saw_escape); -*************** -*** 695,698 **** ---- 749,754 ---- - var = bind_read_variable (list->word->word, input_string); - stupidly_hack_special_variables (list->word->word); -+ FREE (tofree); -+ - if (var) - VUNSETATTR (var, att_invisible); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 37 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 38 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-039 b/src/patches/bash/bash32-039 deleted file mode 100644 index c225a5af4..000000000 --- a/src/patches/bash/bash32-039 +++ /dev/null @@ -1,175 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-039 - -Bug-Reported-by: rew@erebor.com -Bug-Reference-ID: <20070119065603.546D011E9C@kansas.erebor.com> -Bug-Reference-URL: - -Bug-Description: - -Bash-3.2 changed the behavior of the [[ command's `=~' operator when the -right-hand side was quoted: it matched the quoted portions as strings. -This patch introduces a new shell option: compat31. When enabled, it -restores the bash-3.1 behavior with respect to evaluating quoted arguments -to the =~ operator. - -Patch: - -*** ../bash-3.2-patched/execute_cmd.c 2007-12-14 21:12:39.000000000 -0500 ---- execute_cmd.c 2008-02-22 21:20:40.000000000 -0500 -*************** -*** 2547,2551 **** - if (arg1 == 0) - arg1 = nullstr; -! arg2 = cond_expand_word (cond->right->op, rmatch ? 2 : (patmatch ? 1 : 0)); - if (arg2 == 0) - arg2 = nullstr; ---- 2552,2557 ---- - if (arg1 == 0) - arg1 = nullstr; -! arg2 = cond_expand_word (cond->right->op, -! (rmatch && shell_compatibility_level > 31) ? 2 : (patmatch ? 1 : 0)); - if (arg2 == 0) - arg2 = nullstr; -*** ../bash-3.2-patched/shell.h 2003-06-01 15:04:36.000000000 -0400 ---- shell.h 2008-02-22 21:16:48.000000000 -0500 -*************** -*** 90,93 **** ---- 90,94 ---- - extern int interactive, interactive_shell; - extern int startup_state; -+ extern int shell_compatibility_level; - - /* Structure to pass around that holds a bitmap of file descriptors -*** ../bash-3.2-patched/version.c 2007-12-14 21:12:29.000000000 -0500 ---- version.c 2008-04-10 08:22:22.000000000 -0400 -*************** -*** 44,47 **** ---- 44,50 ---- - const char *sccs_version = SCCSVERSION; - -+ /* If == 31, shell compatible with bash-3.1, == 32 with bash-3.2, and so on */ -+ int shell_compatibility_level = 32; -+ - /* Functions for getting, setting, and displaying the shell version. */ - -*** ../bash-3.2-patched/builtins/shopt.def 2005-02-19 17:25:03.000000000 -0500 ---- builtins/shopt.def 2008-04-10 08:13:32.000000000 -0400 -*************** -*** 102,105 **** ---- 102,107 ---- - static int set_shellopts_after_change __P((int)); - -+ static int set_compatibility_level __P((int)); -+ - #if defined (RESTRICTED_SHELL) - static int set_restricted_shell __P((int)); -*************** -*** 107,110 **** ---- 109,113 ---- - - static int shopt_login_shell; -+ static int shopt_compat31; - - typedef int shopt_set_func_t __P((int)); -*************** -*** 122,125 **** ---- 125,129 ---- - { "cmdhist", &command_oriented_history, (shopt_set_func_t *)NULL }, - #endif -+ { "compat31", &shopt_compat31, set_compatibility_level }, - { "dotglob", &glob_dot_filenames, (shopt_set_func_t *)NULL }, - { "execfail", &no_exit_on_failed_exec, (shopt_set_func_t *)NULL }, -*************** -*** 460,463 **** ---- 464,479 ---- - } - -+ static int -+ set_compatibility_level (mode) -+ int mode; -+ { -+ /* Need to change logic here as we add more compatibility levels */ -+ if (shopt_compat31) -+ shell_compatibility_level = 31; -+ else -+ shell_compatibility_level = 32; -+ return 0; -+ } -+ - #if defined (RESTRICTED_SHELL) - /* Don't allow the value of restricted_shell to be modified. */ -*** ../bash-3.2-patched/doc/bash.1 2006-09-28 10:26:05.000000000 -0400 ---- doc/bash.1 2008-04-25 12:32:49.000000000 -0400 -*************** -*** 7978,7981 **** ---- 8200,8209 ---- - easy re-editing of multi-line commands. - .TP 8 -+ .B compat31 -+ If set, -+ .B bash -+ changes its behavior to that of version 3.1 with respect to quoted -+ arguments to the conditional command's =~ operator. -+ .TP 8 - .B dotglob - If set, -*** ../bash-20080214/doc/bashref.texi 2008-02-08 21:28:35.000000000 -0500 ---- doc/bashref.texi 2008-02-22 21:44:51.000000000 -0500 -*************** -*** 4053,4056 **** ---- 4061,4069 ---- - easy re-editing of multi-line commands. - -+ @item compat31 -+ If set, Bash -+ changes its behavior to that of version 3.1 with respect to quoted -+ arguments to the conditional command's =~ operator. -+ - @item dotglob - If set, Bash includes filenames beginning with a `.' in -*** ../bash-3.2-patched/tests/shopt.right 2005-02-19 17:46:09.000000000 -0500 ---- tests/shopt.right 2008-04-28 09:13:07.000000000 -0400 -*************** -*** 7,10 **** ---- 7,11 ---- - shopt -u checkwinsize - shopt -s cmdhist -+ shopt -u compat31 - shopt -u dotglob - shopt -u execfail -*************** -*** 54,57 **** ---- 55,59 ---- - shopt -u checkhash - shopt -u checkwinsize -+ shopt -u compat31 - shopt -u dotglob - shopt -u execfail -*************** -*** 78,81 **** ---- 80,84 ---- - checkhash off - checkwinsize off -+ compat31 off - dotglob off - execfail off - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 38 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 39 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-040 b/src/patches/bash/bash32-040 deleted file mode 100644 index 50b85bbe5..000000000 --- a/src/patches/bash/bash32-040 +++ /dev/null @@ -1,47 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-040 - -Bug-Reported-by: John McCabe-Dansted -Bug-Reference-ID: -Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/202885 - -Bug-Description: - -When using the `set' builtin to list all shell variables, the shell uses -the wrong variable when computing the length of a variable's value. - -Patch: - -*** ../bash-3.2-patched/array.c 2007-03-24 14:51:03.000000000 -0400 ---- array.c 2008-08-17 13:07:04.000000000 -0400 -*************** -*** 684,688 **** - valstr = element_value (ae) ? sh_double_quote (element_value(ae)) - : (char *)NULL; -! elen = STRLEN (indstr) + 8 + STRLEN (valstr); - RESIZE_MALLOCED_BUFFER (result, rlen, (elen + 1), rsize, rsize); - ---- 809,813 ---- - valstr = element_value (ae) ? sh_double_quote (element_value(ae)) - : (char *)NULL; -! elen = STRLEN (is) + 8 + STRLEN (valstr); - RESIZE_MALLOCED_BUFFER (result, rlen, (elen + 1), rsize, rsize); - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 39 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 40 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-041 b/src/patches/bash/bash32-041 deleted file mode 100644 index 3c05c04ea..000000000 --- a/src/patches/bash/bash32-041 +++ /dev/null @@ -1,154 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-041 - -Bug-Reported-by: Dan Jacobson -Bug-Reference-ID: <873arjs11h.fsf@jidanni.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-02/msg00049.html - -Bug-Description: - -Bash saved and restored the value of `set -o history' while sourcing files, -preventing users from turning off history with `set +o history' in .bashrc. - -Patch: - -*** ../bash-3.2-patched/bashhist.c 2005-12-26 13:31:16.000000000 -0500 ---- bashhist.c 2008-08-17 13:07:40.000000000 -0400 -*************** -*** 81,84 **** ---- 81,85 ---- - becomes zero when we read lines from a file, for example. */ - int remember_on_history = 1; -+ int enable_history_list = 1; /* value for `set -o history' */ - - /* The number of lines that Bash has added to this history session. The -*************** -*** 235,239 **** - history_expansion_inhibited = 1; - #endif -! remember_on_history = interact != 0; - history_inhibit_expansion_function = bash_history_inhibit_expansion; - } ---- 236,240 ---- - history_expansion_inhibited = 1; - #endif -! remember_on_history = enable_history_list = interact != 0; - history_inhibit_expansion_function = bash_history_inhibit_expansion; - } -*** ../bash-3.2-patched/builtins/set.def 2006-07-27 09:41:43.000000000 -0400 ---- builtins/set.def 2008-08-14 16:33:41.000000000 -0400 -*************** -*** 190,194 **** - #endif /* BANG_HISTORY */ - #if defined (HISTORY) -! { "history", '\0', &remember_on_history, bash_set_history, (setopt_get_func_t *)NULL }, - #endif - { "ignoreeof", '\0', &ignoreeof, set_ignoreeof, (setopt_get_func_t *)NULL }, ---- 198,202 ---- - #endif /* BANG_HISTORY */ - #if defined (HISTORY) -! { "history", '\0', &enable_history_list, bash_set_history, (setopt_get_func_t *)NULL }, - #endif - { "ignoreeof", '\0', &ignoreeof, set_ignoreeof, (setopt_get_func_t *)NULL }, -*************** -*** 382,385 **** ---- 390,394 ---- - if (on_or_off == FLAG_ON) - { -+ enable_history_list = 1; - bash_history_enable (); - if (history_lines_this_session == 0) -*************** -*** 387,392 **** - } - else -! bash_history_disable (); -! return (1 - remember_on_history); - } - #endif ---- 396,404 ---- - } - else -! { -! enable_history_list = 0; -! bash_history_disable (); -! } -! return (1 - enable_history_list); - } - #endif -*************** -*** 566,570 **** - { - #if defined (HISTORY) -! remember_on_history = 1; - #endif - ignoreeof = 0; ---- 578,582 ---- - { - #if defined (HISTORY) -! remember_on_history = enable_history_list = 1; - #endif - ignoreeof = 0; -*** ../bash-3.2-patched/builtins/evalstring.c 2006-07-28 15:12:16.000000000 -0400 ---- builtins/evalstring.c 2008-11-10 21:17:16.000000000 -0500 -*************** -*** 68,71 **** ---- 68,79 ---- - static int cat_file __P((REDIRECT *)); - -+ #if defined (HISTORY) -+ static void -+ set_history_remembering () -+ { -+ remember_on_history = enable_history_list; -+ } -+ #endif -+ - /* How to force parse_and_execute () to clean up after itself. */ - void -*************** -*** 116,120 **** - - #if defined (HISTORY) -! unwind_protect_int (remember_on_history); /* can be used in scripts */ - # if defined (BANG_HISTORY) - if (interactive_shell) ---- 124,131 ---- - - #if defined (HISTORY) -! if (parse_and_execute_level == 0) -! add_unwind_protect (set_history_remembering, (char *)NULL); -! else -! unwind_protect_int (remember_on_history); /* can be used in scripts */ - # if defined (BANG_HISTORY) - if (interactive_shell) -*** ../bash-3.2-patched/bashhist.h 2005-07-01 15:44:41.000000000 -0400 ---- bashhist.h 2008-08-17 12:51:07.000000000 -0400 -*************** -*** 32,35 **** ---- 32,38 ---- - - extern int remember_on_history; -+ extern int enable_history_list; /* value for `set -o history' */ -+ extern int literal_history; /* controlled by `shopt lithist' */ -+ extern int force_append_history; - extern int history_lines_this_session; - extern int history_lines_in_file; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 40 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 41 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-042 b/src/patches/bash/bash32-042 deleted file mode 100644 index 4c9f4d6df..000000000 --- a/src/patches/bash/bash32-042 +++ /dev/null @@ -1,48 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-042 - -Bug-Reported-by: Archimerged Ark Submedes -Bug-Reference-ID: <5ba4bef00804182116g65ff71e0qdffcf672f205e708@mail.gmail.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-04/msg00041.html - -Bug-Description: - -An operator precedence error prevented the bash arithmetic evaluator from -parsing conditional commands correctly. - -Patch: - -*** ../bash-3.2-patched/expr.c 2007-12-13 22:30:43.000000000 -0500 ---- expr.c 2008-08-17 13:09:59.000000000 -0400 -*************** -*** 521,525 **** - noeval++; - } -! val2 = explor (); - if (set_noeval) - noeval--; ---- 521,526 ---- - noeval++; - } -! -! val2 = expcond (); - if (set_noeval) - noeval--; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 41 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 42 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-043 b/src/patches/bash/bash32-043 deleted file mode 100644 index 5a51843d2..000000000 --- a/src/patches/bash/bash32-043 +++ /dev/null @@ -1,62 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-043 - -Bug-Reported-by: Morita Sho -Bug-Reference-ID: -Bug-Reference-URL: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=478096 - -Bug-Description: - -Side effects caused by setting function-local versions of variables bash -handles specially persisted after the function returned. - -Patch: - -*** ../bash-3.2-patched/variables.c 2007-08-25 13:47:05.000000000 -0400 ---- variables.c 2008-11-09 17:47:31.000000000 -0500 -*************** -*** 3459,3465 **** - var->attributes &= ~(att_tempvar|att_propagate); - else -! shell_variables->flags |= VC_HASTMPVAR; - v->attributes |= var->attributes; - } - - dispose_variable (var); ---- 3771,3779 ---- - var->attributes &= ~(att_tempvar|att_propagate); - else -! shell_variables->flags |= VC_HASTMPVAR; - v->attributes |= var->attributes; - } -+ else -+ stupidly_hack_special_variables (var->name); /* XXX */ - - dispose_variable (var); -*************** -*** 3548,3551 **** ---- 3862,3867 ---- - v->attributes |= var->attributes; - } -+ else -+ stupidly_hack_special_variables (var->name); /* XXX */ - - dispose_variable (var); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 42 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 43 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-044 b/src/patches/bash/bash32-044 deleted file mode 100644 index 3e7a392d4..000000000 --- a/src/patches/bash/bash32-044 +++ /dev/null @@ -1,150 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-044 - -Bug-Reported-by: slinkp -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-05/msg00085.html - -Bug-Description: - -The presence of invisible characters in a prompt longer than the screenwidth -with invisible characters on the first and last prompt lines caused readline -to place the cursor in the wrong physical location. - -Patch: - -*** ../bash-3.2-patched/lib/readline/display.c 2007-12-14 21:12:40.000000000 -0500 ---- lib/readline/display.c 2008-10-23 09:39:46.000000000 -0400 -*************** -*** 911,914 **** ---- 944,951 ---- - OFFSET (which has already been calculated above). */ - -+ #define INVIS_FIRST() (prompt_physical_chars > _rl_screenwidth ? prompt_invis_chars_first_line : wrap_offset) -+ #define WRAP_OFFSET(line, offset) ((line == 0) \ -+ ? (offset ? INVIS_FIRST() : 0) \ -+ : ((line == prompt_last_screen_line) ? wrap_offset-prompt_invis_chars_first_line : 0)) - #define W_OFFSET(line, offset) ((line) == 0 ? offset : 0) - #define VIS_LLEN(l) ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l])) -*************** -*** 945,949 **** - _rl_last_c_pos > wrap_offset && - o_cpos < prompt_last_invisible) -! _rl_last_c_pos -= wrap_offset; - - /* If this is the line with the prompt, we might need to ---- 982,992 ---- - _rl_last_c_pos > wrap_offset && - o_cpos < prompt_last_invisible) -! _rl_last_c_pos -= prompt_invis_chars_first_line; /* XXX - was wrap_offset */ -! else if (linenum == prompt_last_screen_line && prompt_physical_chars > _rl_screenwidth && -! (MB_CUR_MAX > 1 && rl_byte_oriented == 0) && -! cpos_adjusted == 0 && -! _rl_last_c_pos != o_cpos && -! _rl_last_c_pos > (prompt_last_invisible - _rl_screenwidth - prompt_invis_chars_first_line)) -! _rl_last_c_pos -= (wrap_offset-prompt_invis_chars_first_line); - - /* If this is the line with the prompt, we might need to -*************** -*** 1205,1209 **** - { - register char *ofd, *ols, *oe, *nfd, *nls, *ne; -! int temp, lendiff, wsatend, od, nd, o_cpos; - int current_invis_chars; - int col_lendiff, col_temp; ---- 1264,1268 ---- - { - register char *ofd, *ols, *oe, *nfd, *nls, *ne; -! int temp, lendiff, wsatend, od, nd, twidth, o_cpos; - int current_invis_chars; - int col_lendiff, col_temp; -*************** -*** 1221,1225 **** - temp = _rl_last_c_pos; - else -! temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset); - if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode - && _rl_last_v_pos == current_line - 1) ---- 1280,1284 ---- - temp = _rl_last_c_pos; - else -! temp = _rl_last_c_pos - WRAP_OFFSET (_rl_last_v_pos, visible_wrap_offset); - if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode - && _rl_last_v_pos == current_line - 1) -*************** -*** 1587,1599 **** - { - _rl_output_some_chars (nfd + lendiff, temp - lendiff); -- #if 1 - /* XXX -- this bears closer inspection. Fixes a redisplay bug - reported against bash-3.0-alpha by Andreas Schwab involving - multibyte characters and prompt strings with invisible - characters, but was previously disabled. */ -! _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); -! #else -! _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-lendiff); -! #endif - } - } ---- 1648,1660 ---- - { - _rl_output_some_chars (nfd + lendiff, temp - lendiff); - /* XXX -- this bears closer inspection. Fixes a redisplay bug - reported against bash-3.0-alpha by Andreas Schwab involving - multibyte characters and prompt strings with invisible - characters, but was previously disabled. */ -! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -! twidth = _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); -! else -! twidth = temp - lendiff; -! _rl_last_c_pos += twidth; - } - } -*************** -*** 1789,1793 **** - int cpos, dpos; /* current and desired cursor positions */ - -! woff = W_OFFSET (_rl_last_v_pos, wrap_offset); - cpos = _rl_last_c_pos; - #if defined (HANDLE_MULTIBYTE) ---- 1850,1854 ---- - int cpos, dpos; /* current and desired cursor positions */ - -! woff = WRAP_OFFSET (_rl_last_v_pos, wrap_offset); - cpos = _rl_last_c_pos; - #if defined (HANDLE_MULTIBYTE) -*************** -*** 1803,1807 **** - prompt string, since they're both buffer indices and DPOS is a - desired display position. */ -! if (new > prompt_last_invisible) /* XXX - don't use woff here */ - { - dpos -= woff; ---- 1864,1872 ---- - prompt string, since they're both buffer indices and DPOS is a - desired display position. */ -! if ((new > prompt_last_invisible) || /* XXX - don't use woff here */ -! (prompt_physical_chars > _rl_screenwidth && -! _rl_last_v_pos == prompt_last_screen_line && -! wrap_offset != woff && -! new > (prompt_last_invisible-_rl_screenwidth-wrap_offset))) - { - dpos -= woff; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 43 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 44 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-045 b/src/patches/bash/bash32-045 deleted file mode 100644 index 68b91ffe1..000000000 --- a/src/patches/bash/bash32-045 +++ /dev/null @@ -1,50 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-045 - -Bug-Reported-by: Roman Rakus -Bug-Reference-ID: <4864B4A0.1060402@redhat.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-06/msg00098.html - -Bug-Description: - -When short-circuiting execution due to the `break' or `continue' builtins, -bash did not preserve the value of $?. - -Patch: - -*** ../bash-3.2-patched/execute_cmd.c 2008-04-28 22:00:24.000000000 -0400 ---- execute_cmd.c 2008-10-18 14:35:03.000000000 -0400 -*************** -*** 502,507 **** ---- 514,526 ---- - volatile int save_line_number; - -+ #if 0 - if (command == 0 || breaking || continuing || read_but_dont_execute) - return (EXECUTION_SUCCESS); -+ #else -+ if (breaking || continuing) -+ return (last_command_exit_value); -+ if (command == 0 || read_but_dont_execute) -+ return (EXECUTION_SUCCESS); -+ #endif - - QUIT; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 44 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 45 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-046 b/src/patches/bash/bash32-046 deleted file mode 100644 index 78aaf0176..000000000 --- a/src/patches/bash/bash32-046 +++ /dev/null @@ -1,47 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-046 - -Bug-Reported-by: Wang Xin -Bug-Reference-ID: <9a73e1570807062042ide16698m10e1b18036c95592@mail.gmail.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-07/msg00014.html - -Bug-Description: - -Bash did not compute the length of multibyte characters correctly when -performing array element length references (e.g., ${#var[subscript]}). - -Patch: - -*** /usr/src/local/bash/bash-3.2-patched/subst.c 2008-04-28 22:00:20.000000000 -0400 ---- subst.c 2008-11-10 22:02:38.000000000 -0500 -*************** -*** 4813,4817 **** - t = (ind == 0) ? value_cell (var) : (char *)NULL; - -! len = STRLEN (t); - return (len); - } ---- 4813,4817 ---- - t = (ind == 0) ? value_cell (var) : (char *)NULL; - -! len = MB_STRLEN (t); - return (len); - } -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 45 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 46 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-047 b/src/patches/bash/bash32-047 deleted file mode 100644 index b8272b1ee..000000000 --- a/src/patches/bash/bash32-047 +++ /dev/null @@ -1,65 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-047 - -Bug-Reported-by: Roman Rakus -Bug-Reference-ID: <48A89EBC.906@redhat.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-08/msg00026.html - -Bug-Description: - -When using the `.' (source) builtin, under certain circumstances bash was -too careful in discarding state to preserve internal consistency. One -effect was that assignments to readonly variables would cause entire scripts -to be aborted instead of execution of the offending command. This behavior -was introduced by bash-3.2 patch 20. - -Patch: - -*** /usr/src/local/chet/src/bash/bash-3.2-patched/subst.c 2008-04-29 21:24:55.000000000 -0400 ---- subst.c 2008-11-13 17:44:25.000000000 -0500 -*************** -*** 138,142 **** - extern int last_command_exit_value, last_command_exit_signal; - extern int subshell_environment; -! extern int subshell_level; - extern int eof_encountered; - extern int return_catch_flag, return_catch_value; ---- 138,142 ---- - extern int last_command_exit_value, last_command_exit_signal; - extern int subshell_environment; -! extern int subshell_level, parse_and_execute_level; - extern int eof_encountered; - extern int return_catch_flag, return_catch_value; -*************** -*** 7673,7677 **** - expanding_redir = 0; - -! top_level_cleanup (); /* from sig.c */ - - jump_to_top_level (v); ---- 7673,7679 ---- - expanding_redir = 0; - -! if (parse_and_execute_level == 0) -! top_level_cleanup (); /* from sig.c */ -! - - jump_to_top_level (v); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 46 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 47 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-048 b/src/patches/bash/bash32-048 deleted file mode 100644 index 551dadefe..000000000 --- a/src/patches/bash/bash32-048 +++ /dev/null @@ -1,56 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-048 - -Bug-Reported-by: Steffen Kiess -Bug-Reference-ID: <1223929957.5383.6.camel@fips> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-10/msg00047.html - -Bug-Description: - -When invoked as `bash -c', bash did not execute an EXIT trap when the last -command in the executed list was a command run from the file system. - -Patch: - -*** /Users/chet/src/bash/bash-3.2-patched/builtins/evalstring.c 2006-07-28 15:12:16.000000000 -0400 ---- builtins/evalstring.c 2008-11-13 18:38:45.000000000 -0500 -*************** -*** 249,252 **** ---- 249,253 ---- - * we're not running a trap AND - * we have parsed the full command (string == '\0') AND -+ * we're not going to run the exit trap AND - * we have a simple command without redirections AND - * the command is not being timed AND -*************** -*** 259,263 **** - *bash_input.location.string == '\0' && - command->type == cm_simple && -! !command->redirects && !command->value.Simple->redirects && - ((command->flags & CMD_TIME_PIPELINE) == 0) && - ((command->flags & CMD_INVERT_RETURN) == 0)) ---- 260,265 ---- - *bash_input.location.string == '\0' && - command->type == cm_simple && -! signal_is_trapped (EXIT_TRAP) == 0 && -! command->redirects == 0 && command->value.Simple->redirects == 0 && - ((command->flags & CMD_TIME_PIPELINE) == 0) && - ((command->flags & CMD_INVERT_RETURN) == 0)) -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 47 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 48 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-049 b/src/patches/bash/bash32-049 deleted file mode 100644 index 469c4c891..000000000 --- a/src/patches/bash/bash32-049 +++ /dev/null @@ -1,64 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-049 - -Bug-Reported-by: Len Lattanzi -Bug-Reference-ID: <52B1297F-6675-45CC-B63E-24745337D006@apple.com> -Bug-Reference-URL: - -Bug-Description: - -On systems where mbrtowc() returns -2 when passed a length argument with -value 0, when using a multibyte locale, Readline's emacs-mode forward-char -at the end of a line will leave the point beyond the end of the line. - -Patch: - -*** ../bash-3.2-patched/lib/readline/mbutil.c 2009-05-29 23:09:26.000000000 -0400 ---- lib/readline/mbutil.c 2009-05-29 23:10:12.000000000 -0400 -*************** -*** 78,82 **** - int seed, count, find_non_zero; - { -! size_t tmp; - mbstate_t ps; - int point; ---- 78,82 ---- - int seed, count, find_non_zero; - { -! size_t tmp, len; - mbstate_t ps; - int point; -*************** -*** 99,103 **** - while (count > 0) - { -! tmp = mbrtowc (&wc, string+point, strlen(string + point), &ps); - if (MB_INVALIDCH ((size_t)tmp)) - { ---- 99,106 ---- - while (count > 0) - { -! len = strlen (string + point); -! if (len == 0) -! break; -! tmp = mbrtowc (&wc, string+point, len, &ps); - if (MB_INVALIDCH ((size_t)tmp)) - { -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 48 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 49 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-050 b/src/patches/bash/bash32-050 deleted file mode 100644 index aef537e18..000000000 --- a/src/patches/bash/bash32-050 +++ /dev/null @@ -1,56 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-050 - -Bug-Reported-by: Jan Hnatek -Bug-Reference-ID: <4A44991F.8010005@sun.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-06/msg00084.html - -Bug-Description: - -On systems where mbrtowc() returns -2 when passed a length argument with -value 0, when using a multibyte locale, Readline's emacs-mode forward-char -at the end of a line will leave the point beyond the end of the line. - -Patch: - -*** ../bash-3.2-patched/lib/readline/mbutil.c 2009-06-16 11:26:50.000000000 -0400 ---- lib/readline/mbutil.c 2009-01-04 14:32:33.000000000 -0500 -*************** -*** 132,141 **** - { - tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); -! while (tmp > 0 && wcwidth (wc) == 0) - { - point += tmp; - tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); -- if (MB_NULLWCH (tmp) || MB_INVALIDCH (tmp)) -- break; - } - } ---- 130,137 ---- - { - tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); -! while (MB_NULLWCH (tmp) == 0 && MB_INVALIDCH (tmp) == 0 && wcwidth (wc) == 0) - { - point += tmp; - tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); - } - } -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 49 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 50 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-051 b/src/patches/bash/bash32-051 deleted file mode 100644 index 404fbd646..000000000 --- a/src/patches/bash/bash32-051 +++ /dev/null @@ -1,46 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-051 - -Bug-Reported-by: werner@suse.de -Bug-Reference-ID: <201002251238.o1PCcYcg016893@boole.suse.de> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2010-02/msg00132.html - -Bug-Description: - -When the `read' builtin times out after the timeout specified with -t is -exceeded, it does not reset the flags that tell signal handlers to process -signals immediately instead of deferring their handling. This can result -in unsafe functions being called from signal handlers, which can cause bash -to hang or dump core. - -Patch: - -*** ../bash-3.2-patched/builtins/read.def 2008-04-29 21:25:00.000000000 -0400 ---- builtins/read.def 2010-03-17 09:50:51.000000000 -0400 -*************** -*** 327,330 **** ---- 327,332 ---- - if (code) - { -+ interrupt_immediately--; -+ terminate_immediately = 0; - run_unwind_frame ("read_builtin"); - return (EXECUTION_FAILURE); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 50 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 51 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-001 b/src/patches/bash/bash43-001 new file mode 100644 index 000000000..ea1c6b265 --- /dev/null +++ b/src/patches/bash/bash43-001 @@ -0,0 +1,58 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-001 + +Bug-Reported-by: NBaH +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00092.html + +Bug-Description: + +A missing check for a valid option prevented `test -R' from working. There +is another problem that causes bash to look up the wrong variable name when +processing the argument to `test -R'. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3/test.c 2014-02-04 16:52:58.000000000 -0500 +--- test.c 2014-02-28 21:22:44.000000000 -0500 +*************** +*** 647,652 **** + + case 'R': +! v = find_variable (arg); +! return (v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v) ? TRUE : FALSE); + } + +--- 647,652 ---- + + case 'R': +! v = find_variable_noref (arg); +! return ((v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v)) ? TRUE : FALSE); + } + +*************** +*** 724,727 **** +--- 724,728 ---- + case 'u': case 'v': case 'w': case 'x': case 'z': + case 'G': case 'L': case 'O': case 'S': case 'N': ++ case 'R': + return (1); + } +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 0 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 1 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-002 b/src/patches/bash/bash43-002 new file mode 100644 index 000000000..735b7b81a --- /dev/null +++ b/src/patches/bash/bash43-002 @@ -0,0 +1,62 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-002 + +Bug-Reported-by: Moe Tunes +Bug-Reference-ID: <53103F49.3070100@gmail.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00086.html + +Bug-Description: + +A change to save state while running the DEBUG trap caused pipelines to hang +on systems which need process group synchronization while building pipelines. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3/trap.c 2014-02-05 10:03:21.000000000 -0500 +--- trap.c 2014-02-28 09:51:43.000000000 -0500 +*************** +*** 921,925 **** + + #if defined (JOB_CONTROL) +! save_pipeline (1); /* XXX only provides one save level */ + #endif + +--- 921,926 ---- + + #if defined (JOB_CONTROL) +! if (sig != DEBUG_TRAP) /* run_debug_trap does this */ +! save_pipeline (1); /* XXX only provides one save level */ + #endif + +*************** +*** 941,945 **** + + #if defined (JOB_CONTROL) +! restore_pipeline (1); + #endif + +--- 942,947 ---- + + #if defined (JOB_CONTROL) +! if (sig != DEBUG_TRAP) /* run_debug_trap does this */ +! restore_pipeline (1); + #endif + +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 1 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 2 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-003 b/src/patches/bash/bash43-003 new file mode 100644 index 000000000..0f32f410d --- /dev/null +++ b/src/patches/bash/bash43-003 @@ -0,0 +1,48 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-003 + +Bug-Reported-by: Anatol Pomozov +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2014-03/msg00010.html + +Bug-Description: + +When in callback mode, some readline commands can cause readline to seg +fault by passing invalid contexts to callback functions. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3/lib/readline/readline.c 2013-10-28 14:58:06.000000000 -0400 +--- lib/readline/readline.c 2014-03-10 14:15:02.000000000 -0400 +*************** +*** 745,749 **** + + RL_CHECK_SIGNALS (); +! if (r == 0) /* success! */ + { + _rl_keyseq_chain_dispose (); +--- 745,750 ---- + + RL_CHECK_SIGNALS (); +! /* We only treat values < 0 specially to simulate recursion. */ +! if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0)) /* success! or failure! */ + { + _rl_keyseq_chain_dispose (); +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 2 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 3 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-004 b/src/patches/bash/bash43-004 new file mode 100644 index 000000000..010f04a2a --- /dev/null +++ b/src/patches/bash/bash43-004 @@ -0,0 +1,47 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-004 + +Bug-Reported-by: Daan van Rossum +Bug-Reference-ID: <20140307072523.GA14250@flash.uchicago.edu> +Bug-Reference-URL: + +Bug-Description: + +The `.' command in vi mode cannot undo multi-key commands beginning with +`c', `d', and `y' (command plus motion specifier). + +Patch (apply with `patch -p0'): + +*** ../bash-4.3/lib/readline/readline.c 2013-10-28 14:58:06.000000000 -0400 +--- lib/readline/readline.c 2014-03-07 15:20:33.000000000 -0500 +*************** +*** 965,969 **** + if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap && + key != ANYOTHERKEY && +! rl_key_sequence_length == 1 && /* XXX */ + _rl_vi_textmod_command (key)) + _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign); +--- 965,969 ---- + if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap && + key != ANYOTHERKEY && +! _rl_dispatching_keymap == vi_movement_keymap && + _rl_vi_textmod_command (key)) + _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign); +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 3 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 4 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-005 b/src/patches/bash/bash43-005 new file mode 100644 index 000000000..bcd40697c --- /dev/null +++ b/src/patches/bash/bash43-005 @@ -0,0 +1,63 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-005 + +Bug-Reported-by: David Sines +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00037.html + +Bug-Description: + +When in Posix mode, bash did not correctly interpret the ANSI-C-style +$'...' quoting mechanism when performing pattern substitution word +expansions within double quotes. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3/parse.y 2014-02-11 09:42:10.000000000 -0500 +--- parse.y 2014-03-07 20:57:15.000000000 -0500 +*************** +*** 3399,3403 **** + unescaped double-quotes or single-quotes, if any, shall occur." */ + /* This was changed in Austin Group Interp 221 */ +! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') + continue; + +--- 3399,3403 ---- + unescaped double-quotes or single-quotes, if any, shall occur." */ + /* This was changed in Austin Group Interp 221 */ +! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') + continue; + +*** ../bash-4.3/y.tab.c 2014-02-11 10:57:47.000000000 -0500 +--- y.tab.c 2014-03-28 10:41:15.000000000 -0400 +*************** +*** 5711,5715 **** + unescaped double-quotes or single-quotes, if any, shall occur." */ + /* This was changed in Austin Group Interp 221 */ +! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') + continue; + +--- 5711,5715 ---- + unescaped double-quotes or single-quotes, if any, shall occur." */ + /* This was changed in Austin Group Interp 221 */ +! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') + continue; + +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 4 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 5 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-006 b/src/patches/bash/bash43-006 new file mode 100644 index 000000000..24ff057a5 --- /dev/null +++ b/src/patches/bash/bash43-006 @@ -0,0 +1,48 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-006 + +Bug-Reported-by: Eduardo A . Bustamante Lopez +Bug-Reference-ID: <20140228170013.GA16015@dualbus.me> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00091.html + +Bug-Description: + +A shell that started with job control active but was not interactive left +the terminal in the wrong process group when exiting, causing its parent +shell to get a stop signal when it attempted to read from the terminal. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3/jobs.c 2014-01-10 09:05:34.000000000 -0500 +--- jobs.c 2014-03-02 18:05:09.000000000 -0500 +*************** +*** 4375,4379 **** + end_job_control () + { +! if (interactive_shell) /* XXX - should it be interactive? */ + { + terminate_stopped_jobs (); +--- 4375,4379 ---- + end_job_control () + { +! if (interactive_shell || job_control) /* XXX - should it be just job_control? */ + { + terminate_stopped_jobs (); +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 5 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 6 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-007 b/src/patches/bash/bash43-007 new file mode 100644 index 000000000..0d62c9ec6 --- /dev/null +++ b/src/patches/bash/bash43-007 @@ -0,0 +1,50 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-007 + +Bug-Reported-by: geir.hauge@gmail.com +Bug-Reference-ID: <20140318093650.B181C1C5B0B@gina.itea.ntnu.no> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00095.html + +Bug-Description: + +Using compound assignments for associative arrays like + +assoc=( [x]= [y]=bar ) + +left the value corresponding to the key `x' NULL. This caused subsequent +lookups to interpret it as unset. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3/arrayfunc.c 2013-08-02 16:19:59.000000000 -0400 +--- arrayfunc.c 2014-03-18 11:08:15.000000000 -0400 +*************** +*** 598,601 **** +--- 598,606 ---- + { + val = expand_assignment_string_to_string (val, 0); ++ if (val == 0) ++ { ++ val = (char *)xmalloc (1); ++ val[0] = '\0'; /* like do_assignment_internal */ ++ } + free_val = 1; + } +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 6 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 7 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-008 b/src/patches/bash/bash43-008 new file mode 100644 index 000000000..0ae7c9522 --- /dev/null +++ b/src/patches/bash/bash43-008 @@ -0,0 +1,188 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-008 + +Bug-Reported-by: Stephane Chazelas +Bug-Reference-ID: <20140318135901.GB22158@chaz.gmail.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00098.html + +Bug-Description: + +Some extended glob patterns incorrectly matched filenames with a leading +dot, regardless of the setting of the `dotglob' option. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3/lib/glob/gmisc.c 2013-10-28 14:45:25.000000000 -0400 +--- lib/glob/gmisc.c 2014-03-19 09:16:08.000000000 -0400 +*************** +*** 211,214 **** +--- 211,215 ---- + case '!': + case '@': ++ case '?': + return (pat[1] == LPAREN); + default: +*** ../bash-4.3/lib/glob/glob.c 2014-01-31 21:43:51.000000000 -0500 +--- lib/glob/glob.c 2014-03-20 09:01:26.000000000 -0400 +*************** +*** 180,202 **** + int flags; + { +! char *pp, *pe, *t; +! int n, r; + + pp = pat + 2; +! pe = pp + strlen (pp) - 1; /*(*/ +! if (*pe != ')') +! return 0; +! if ((t = strchr (pp, '|')) == 0) /* easy case first */ + { + *pe = '\0'; + r = skipname (pp, dname, flags); /*(*/ + *pe = ')'; + return r; + } + while (t = glob_patscan (pp, pe, '|')) + { + n = t[-1]; + t[-1] = '\0'; + r = skipname (pp, dname, flags); + t[-1] = n; + if (r == 0) /* if any pattern says not skip, we don't skip */ +--- 180,215 ---- + int flags; + { +! char *pp, *pe, *t, *se; +! int n, r, negate; + ++ negate = *pat == '!'; + pp = pat + 2; +! se = pp + strlen (pp) - 1; /* end of string */ +! pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */ +! /* we should check for invalid extglob pattern here */ +! /* if pe != se we have more of the pattern at the end of the extglob +! pattern. Check the easy case first ( */ +! if (pe == se && *pe == ')' && (t = strchr (pp, '|')) == 0) + { + *pe = '\0'; ++ #if defined (HANDLE_MULTIBYTE) ++ r = mbskipname (pp, dname, flags); ++ #else + r = skipname (pp, dname, flags); /*(*/ ++ #endif + *pe = ')'; + return r; + } ++ ++ /* check every subpattern */ + while (t = glob_patscan (pp, pe, '|')) + { + n = t[-1]; + t[-1] = '\0'; ++ #if defined (HANDLE_MULTIBYTE) ++ r = mbskipname (pp, dname, flags); ++ #else + r = skipname (pp, dname, flags); ++ #endif + t[-1] = n; + if (r == 0) /* if any pattern says not skip, we don't skip */ +*************** +*** 205,219 **** + } /*(*/ + +! if (pp == pe) /* glob_patscan might find end of pattern */ + return r; + +! *pe = '\0'; +! # if defined (HANDLE_MULTIBYTE) +! r = mbskipname (pp, dname, flags); /*(*/ +! # else +! r = skipname (pp, dname, flags); /*(*/ +! # endif +! *pe = ')'; +! return r; + } + #endif +--- 218,227 ---- + } /*(*/ + +! /* glob_patscan might find end of pattern */ +! if (pp == se) + return r; + +! /* but if it doesn't then we didn't match a leading dot */ +! return 0; + } + #endif +*************** +*** 278,289 **** + { + #if EXTENDED_GLOB +! wchar_t *pp, *pe, *t, n; +! int r; + + pp = pat + 2; +! pe = pp + wcslen (pp) - 1; /*(*/ +! if (*pe != L')') +! return 0; +! if ((t = wcschr (pp, L'|')) == 0) + { + *pe = L'\0'; +--- 286,298 ---- + { + #if EXTENDED_GLOB +! wchar_t *pp, *pe, *t, n, *se; +! int r, negate; + ++ negate = *pat == L'!'; + pp = pat + 2; +! se = pp + wcslen (pp) - 1; /*(*/ +! pe = glob_patscan_wc (pp, se, 0); +! +! if (pe == se && *pe == ')' && (t = wcschr (pp, L'|')) == 0) + { + *pe = L'\0'; +*************** +*** 292,295 **** +--- 301,306 ---- + return r; + } ++ ++ /* check every subpattern */ + while (t = glob_patscan_wc (pp, pe, '|')) + { +*************** +*** 306,313 **** + return r; + +! *pe = L'\0'; +! r = wchkname (pp, dname); /*(*/ +! *pe = L')'; +! return r; + #else + return (wchkname (pat, dname)); +--- 317,322 ---- + return r; + +! /* but if it doesn't then we didn't match a leading dot */ +! return 0; + #else + return (wchkname (pat, dname)); +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 7 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 8 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-009 b/src/patches/bash/bash43-009 new file mode 100644 index 000000000..015835cde --- /dev/null +++ b/src/patches/bash/bash43-009 @@ -0,0 +1,64 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-009 + +Bug-Reported-by: Matthias Klose +Bug-Reference-ID: <53346FC8.6090005@debian.org> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00171.html + +Bug-Description: + +There is a problem with unsigned sign extension when attempting to reallocate +the input line when it is fewer than 3 characters long and there has been a +history expansion. The sign extension causes the shell to not reallocate the +line, which results in a segmentation fault when it writes past the end. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3-patched/parse.y 2014-02-11 09:42:10.000000000 -0500 +--- parse.y 2014-03-27 16:33:29.000000000 -0400 +*************** +*** 2425,2429 **** + if (shell_input_line_terminator != EOF) + { +! if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3) + shell_input_line = (char *)xrealloc (shell_input_line, + 1 + (shell_input_line_size += 2)); +--- 2425,2429 ---- + if (shell_input_line_terminator != EOF) + { +! if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size)) + shell_input_line = (char *)xrealloc (shell_input_line, + 1 + (shell_input_line_size += 2)); +*** ../bash-4.3-patched/y.tab.c 2014-03-28 11:17:06.000000000 -0400 +--- y.tab.c 2014-04-07 11:48:31.000000000 -0400 +*************** +*** 4737,4741 **** + if (shell_input_line_terminator != EOF) + { +! if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3) + shell_input_line = (char *)xrealloc (shell_input_line, + 1 + (shell_input_line_size += 2)); +--- 4737,4741 ---- + if (shell_input_line_terminator != EOF) + { +! if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size)) + shell_input_line = (char *)xrealloc (shell_input_line, + 1 + (shell_input_line_size += 2)); +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 8 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 9 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-010 b/src/patches/bash/bash43-010 new file mode 100644 index 000000000..835a96ead --- /dev/null +++ b/src/patches/bash/bash43-010 @@ -0,0 +1,157 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-010 + +Bug-Reported-by: Albert Shih +Bug-Reference-ID: Wed, 5 Mar 2014 23:01:40 +0100 +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00028.html + +Bug-Description: + +Patch (apply with `patch -p0'): + +This patch changes the behavior of programmable completion to compensate +for two assumptions made by the bash-completion package. Bash-4.3 changed +to dequote the argument to programmable completion only under certain +circumstances, to make the behavior of compgen more consistent when run +from the command line -- closer to the behavior when run by a shell function +run as part of programmable completion. Bash-completion can pass quoted +arguments to compgen when the original word to be completed was not quoted, +expecting programmable completion to dequote the word before attempting +completion. + +This patch fixes two cases: + +1. An empty string that bash-completion passes to compgen as a quoted null + string (''). + +2. An unquoted word that bash-completion quotes using single quotes or + backslashes before passing it to compgen. + +In these cases, since readline did not detect a quote character in the original +word to be completed, bash-4.3 + +*** ../bash-4.3/externs.h 2014-01-02 14:58:20.000000000 -0500 +--- externs.h 2014-03-13 14:42:57.000000000 -0400 +*************** +*** 325,328 **** +--- 325,329 ---- + extern char *sh_backslash_quote_for_double_quotes __P((char *)); + extern int sh_contains_shell_metas __P((char *)); ++ extern int sh_contains_quotes __P((char *)); + + /* declarations for functions defined in lib/sh/spell.c */ +*** ../bash-4.3/lib/sh/shquote.c 2013-03-31 21:53:32.000000000 -0400 +--- lib/sh/shquote.c 2014-03-13 14:42:57.000000000 -0400 +*************** +*** 312,313 **** +--- 312,327 ---- + return (0); + } ++ ++ int ++ sh_contains_quotes (string) ++ char *string; ++ { ++ char *s; ++ ++ for (s = string; s && *s; s++) ++ { ++ if (*s == '\'' || *s == '"' || *s == '\\') ++ return 1; ++ } ++ return 0; ++ } +*** ../bash-4.3/pcomplete.c 2013-08-26 15:23:45.000000000 -0400 +--- pcomplete.c 2014-03-25 17:23:23.000000000 -0400 +*************** +*** 184,187 **** +--- 184,188 ---- + COMPSPEC *pcomp_curcs; + const char *pcomp_curcmd; ++ const char *pcomp_curtxt; + + #ifdef DEBUG +*************** +*** 754,757 **** +--- 755,784 ---- + dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character); + } ++ /* Intended to solve a mismatched assumption by bash-completion. If ++ the text to be completed is empty, but bash-completion turns it into ++ a quoted string ('') assuming that this code will dequote it before ++ calling readline, do the dequoting. */ ++ else if (iscompgen && iscompleting && ++ pcomp_curtxt && *pcomp_curtxt == 0 && ++ text && (*text == '\'' || *text == '"') && text[1] == text[0] && text[2] == 0 && ++ rl_filename_dequoting_function) ++ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character); ++ /* Another mismatched assumption by bash-completion. If compgen is being ++ run as part of bash-completion, and the argument to compgen is not ++ the same as the word originally passed to the programmable completion ++ code, dequote the argument if it has quote characters. It's an ++ attempt to detect when bash-completion is quoting its filename ++ argument before calling compgen. */ ++ /* We could check whether gen_shell_function_matches is in the call ++ stack by checking whether the gen-shell-function-matches tag is in ++ the unwind-protect stack, but there's no function to do that yet. ++ We could simply check whether we're executing in a function by ++ checking variable_context, and may end up doing that. */ ++ else if (iscompgen && iscompleting && rl_filename_dequoting_function && ++ pcomp_curtxt && text && ++ STREQ (pcomp_curtxt, text) == 0 && ++ variable_context && ++ sh_contains_quotes (text)) /* guess */ ++ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character); + else + dfn = savestring (text); +*************** +*** 1523,1527 **** + { + COMPSPEC *cs, *oldcs; +! const char *oldcmd; + STRINGLIST *ret; + +--- 1550,1554 ---- + { + COMPSPEC *cs, *oldcs; +! const char *oldcmd, *oldtxt; + STRINGLIST *ret; + +*************** +*** 1546,1552 **** +--- 1573,1581 ---- + oldcs = pcomp_curcs; + oldcmd = pcomp_curcmd; ++ oldtxt = pcomp_curtxt; + + pcomp_curcs = cs; + pcomp_curcmd = cmd; ++ pcomp_curtxt = word; + + ret = gen_compspec_completions (cs, cmd, word, start, end, foundp); +*************** +*** 1554,1557 **** +--- 1583,1587 ---- + pcomp_curcs = oldcs; + pcomp_curcmd = oldcmd; ++ pcomp_curtxt = oldtxt; + + /* We need to conditionally handle setting *retryp here */ +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 9 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 10 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-011 b/src/patches/bash/bash43-011 new file mode 100644 index 000000000..cdc1572ee --- /dev/null +++ b/src/patches/bash/bash43-011 @@ -0,0 +1,49 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-011 + +Bug-Reported-by: Egmont Koblinger +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00153.html + +Bug-Description: + +The signal handling changes to bash and readline (to avoid running any code +in a signal handler context) cause the cursor to be placed on the wrong +line of a multi-line command after a ^C interrupts editing. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3-patched/lib/readline/display.c 2013-12-27 13:10:56.000000000 -0500 +--- lib/readline/display.c 2014-03-27 11:52:45.000000000 -0400 +*************** +*** 2678,2682 **** + if (_rl_echoing_p) + { +! _rl_move_vert (_rl_vis_botlin); + _rl_vis_botlin = 0; + fflush (rl_outstream); +--- 2678,2683 ---- + if (_rl_echoing_p) + { +! if (_rl_vis_botlin > 0) /* minor optimization plus bug fix */ +! _rl_move_vert (_rl_vis_botlin); + _rl_vis_botlin = 0; + fflush (rl_outstream); +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 10 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 11 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-012 b/src/patches/bash/bash43-012 new file mode 100644 index 000000000..176fa15bd --- /dev/null +++ b/src/patches/bash/bash43-012 @@ -0,0 +1,43 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-012 + +Bug-Reported-by: Eduardo A. Bustamante López +Bug-Reference-ID: <5346B54C.4070205@case.edu> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00051.html + +Bug-Description: + +When a SIGCHLD trap runs a command containing a shell builtin while +a script is running `wait' to wait for all running children to complete, +the SIGCHLD trap will not be run once for each child that terminates. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3-patched/jobs.c 2014-03-28 10:54:19.000000000 -0400 +--- jobs.c 2014-04-15 08:47:03.000000000 -0400 +*************** +*** 3598,3601 **** +--- 3598,3602 ---- + unwind_protect_pointer (the_pipeline); + unwind_protect_pointer (subst_assign_varlist); ++ unwind_protect_pointer (this_shell_builtin); + + /* We have to add the commands this way because they will be run +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 11 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 12 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-013 b/src/patches/bash/bash43-013 new file mode 100644 index 000000000..8f4006b48 --- /dev/null +++ b/src/patches/bash/bash43-013 @@ -0,0 +1,66 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-013 + +Bug-Reported-by: +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00069.html + +Bug-Description: + +Using reverse-i-search when horizontal scrolling is enabled does not redisplay +the entire line containing the successful search results. + +Patch (apply with `patch -p0'): +*** ../bash-4.3-patched/lib/readline/display.c 2014-04-08 18:19:36.000000000 -0400 +--- lib/readline/display.c 2014-04-20 18:32:52.000000000 -0400 +*************** +*** 1638,1642 **** + the spot of first difference is before the end of the invisible chars, + lendiff needs to be adjusted. */ +! if (current_line == 0 && !_rl_horizontal_scroll_mode && + current_invis_chars != visible_wrap_offset) + { +--- 1638,1642 ---- + the spot of first difference is before the end of the invisible chars, + lendiff needs to be adjusted. */ +! if (current_line == 0 && /* !_rl_horizontal_scroll_mode && */ + current_invis_chars != visible_wrap_offset) + { +*************** +*** 1826,1831 **** + _rl_last_c_pos += bytes_to_insert; + + if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new))) +! goto clear_rest_of_line; + } + } +--- 1826,1836 ---- + _rl_last_c_pos += bytes_to_insert; + ++ /* XXX - we only want to do this if we are at the end of the line ++ so we move there with _rl_move_cursor_relative */ + if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new))) +! { +! _rl_move_cursor_relative (ne-new, new); +! goto clear_rest_of_line; +! } + } + } +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 12 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 13 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-014 b/src/patches/bash/bash43-014 new file mode 100644 index 000000000..f8371967f --- /dev/null +++ b/src/patches/bash/bash43-014 @@ -0,0 +1,102 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-014 + +Bug-Reported-by: Greg Wooledge +Bug-Reference-ID: <20140418202123.GB7660@eeg.ccf.org> +Bug-Reference-URL: http://lists.gnu.org/archive/html/help-bash/2014-04/msg00004.html + +Bug-Description: + +Under certain circumstances, $@ is expanded incorrectly in contexts where +word splitting is not performed. + +Patch (apply with `patch -p0'): +*** ../bash-4.3-patched/subst.c 2014-01-23 16:26:37.000000000 -0500 +--- subst.c 2014-04-19 15:41:26.000000000 -0400 +*************** +*** 3249,3254 **** +--- 3249,3256 ---- + return ((char *)NULL); + ++ expand_no_split_dollar_star = 1; + w->flags |= W_NOSPLIT2; + l = call_expand_word_internal (w, 0, 0, (int *)0, (int *)0); ++ expand_no_split_dollar_star = 0; + if (l) + { +*************** +*** 7848,7851 **** +--- 7850,7857 ---- + according to POSIX.2, this expands to a list of the positional + parameters no matter what IFS is set to. */ ++ /* XXX - what to do when in a context where word splitting is not ++ performed? Even when IFS is not the default, posix seems to imply ++ that we behave like unquoted $* ? Maybe we should use PF_NOSPLIT2 ++ here. */ + temp = string_list_dollar_at (list, (pflags & PF_ASSIGNRHS) ? (quoted|Q_DOUBLE_QUOTES) : quoted); + +*************** +*** 8817,8820 **** +--- 8823,8827 ---- + { + char *ifs_chars; ++ char *tstring; + + ifs_chars = (quoted_dollar_at || has_dollar_at) ? ifs_value : (char *)NULL; +*************** +*** 8831,8834 **** +--- 8838,8865 ---- + if (split_on_spaces) + list = list_string (istring, " ", 1); /* XXX quoted == 1? */ ++ /* If we have $@ (has_dollar_at != 0) and we are in a context where we ++ don't want to split the result (W_NOSPLIT2), and we are not quoted, ++ we have already separated the arguments with the first character of ++ $IFS. In this case, we want to return a list with a single word ++ with the separator possibly replaced with a space (it's what other ++ shells seem to do). ++ quoted_dollar_at is internal to this function and is set if we are ++ passed an argument that is unquoted (quoted == 0) but we encounter a ++ double-quoted $@ while expanding it. */ ++ else if (has_dollar_at && quoted_dollar_at == 0 && ifs_chars && quoted == 0 && (word->flags & W_NOSPLIT2)) ++ { ++ /* Only split and rejoin if we have to */ ++ if (*ifs_chars && *ifs_chars != ' ') ++ { ++ list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1); ++ tstring = string_list (list); ++ } ++ else ++ tstring = istring; ++ tword = make_bare_word (tstring); ++ if (tstring != istring) ++ free (tstring); ++ goto set_word_flags; ++ } + else if (has_dollar_at && ifs_chars) + list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1); +*************** +*** 8836,8839 **** +--- 8867,8871 ---- + { + tword = make_bare_word (istring); ++ set_word_flags: + if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) || (quoted_state == WHOLLY_QUOTED)) + tword->flags |= W_QUOTED; +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 13 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 14 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-015 b/src/patches/bash/bash43-015 new file mode 100644 index 000000000..9c4e5ea48 --- /dev/null +++ b/src/patches/bash/bash43-015 @@ -0,0 +1,58 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-015 + +Bug-Reported-by: Clark Wang +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00095.html + +Bug-Description: + +When completing directory names, the directory name is dequoted twice. +This causes problems for directories with single and double quotes in +their names. + +Patch (apply with `patch -p0'): +*** ../bash-4.3-patched/bashline.c 2014-02-09 19:56:58.000000000 -0500 +--- bashline.c 2014-04-25 14:57:52.000000000 -0400 +*************** +*** 4168,4174 **** + + qc = rl_dispatching ? rl_completion_quote_character : 0; +! dfn = bash_dequote_filename ((char *)text, qc); + m1 = rl_completion_matches (dfn, rl_filename_completion_function); +! free (dfn); + + if (m1 == 0 || m1[0] == 0) +--- 4209,4222 ---- + + qc = rl_dispatching ? rl_completion_quote_character : 0; +! /* If rl_completion_found_quote != 0, rl_completion_matches will call the +! filename dequoting function, causing the directory name to be dequoted +! twice. */ +! if (rl_dispatching && rl_completion_found_quote == 0) +! dfn = bash_dequote_filename ((char *)text, qc); +! else +! dfn = (char *)text; + m1 = rl_completion_matches (dfn, rl_filename_completion_function); +! if (dfn != text) +! free (dfn); + + if (m1 == 0 || m1[0] == 0) +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 14 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 15 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-016 b/src/patches/bash/bash43-016 new file mode 100644 index 000000000..882d5939b --- /dev/null +++ b/src/patches/bash/bash43-016 @@ -0,0 +1,132 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-016 + +Bug-Reported-by: Pierre Gaston +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00100.html + +Bug-Description: + +An extended glob pattern containing a slash (`/') causes the globbing code +to misinterpret it as a directory separator. + +Patch (apply with `patch -p0'): +*** ../bash-4.3-patched/lib/glob/glob.c 2014-03-28 10:54:23.000000000 -0400 +--- lib/glob/glob.c 2014-05-02 10:24:28.000000000 -0400 +*************** +*** 124,127 **** +--- 124,129 ---- + extern wchar_t *glob_patscan_wc __P((wchar_t *, wchar_t *, int)); + ++ extern char *glob_dirscan __P((char *, int)); ++ + /* Compile `glob_loop.c' for single-byte characters. */ + #define CHAR unsigned char +*************** +*** 188,191 **** +--- 190,196 ---- + pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */ + /* we should check for invalid extglob pattern here */ ++ if (pe == 0) ++ return 0; ++ + /* if pe != se we have more of the pattern at the end of the extglob + pattern. Check the easy case first ( */ +*************** +*** 1016,1020 **** + char **result; + unsigned int result_size; +! char *directory_name, *filename, *dname; + unsigned int directory_len; + int free_dirname; /* flag */ +--- 1021,1025 ---- + char **result; + unsigned int result_size; +! char *directory_name, *filename, *dname, *fn; + unsigned int directory_len; + int free_dirname; /* flag */ +*************** +*** 1032,1035 **** +--- 1037,1052 ---- + /* Find the filename. */ + filename = strrchr (pathname, '/'); ++ #if defined (EXTENDED_GLOB) ++ if (filename && extended_glob) ++ { ++ fn = glob_dirscan (pathname, '/'); ++ #if DEBUG_MATCHING ++ if (fn != filename) ++ fprintf (stderr, "glob_filename: glob_dirscan: fn (%s) != filename (%s)\n", fn ? fn : "(null)", filename); ++ #endif ++ filename = fn; ++ } ++ #endif ++ + if (filename == NULL) + { +*** ../bash-4.3-patched/lib/glob/gmisc.c 2014-03-28 10:54:23.000000000 -0400 +--- lib/glob/gmisc.c 2014-05-02 09:35:57.000000000 -0400 +*************** +*** 43,46 **** +--- 43,48 ---- + #define WRPAREN L')' + ++ extern char *glob_patscan __P((char *, char *, int)); ++ + /* Return 1 of the first character of WSTRING could match the first + character of pattern WPAT. Wide character version. */ +*************** +*** 376,377 **** +--- 378,410 ---- + return matlen; + } ++ ++ /* Skip characters in PAT and return the final occurrence of DIRSEP. This ++ is only called when extended_glob is set, so we have to skip over extglob ++ patterns x(...) */ ++ char * ++ glob_dirscan (pat, dirsep) ++ char *pat; ++ int dirsep; ++ { ++ char *p, *d, *pe, *se; ++ ++ d = pe = se = 0; ++ for (p = pat; p && *p; p++) ++ { ++ if (extglob_pattern_p (p)) ++ { ++ if (se == 0) ++ se = p + strlen (p) - 1; ++ pe = glob_patscan (p + 2, se, 0); ++ if (pe == 0) ++ continue; ++ else if (*pe == 0) ++ break; ++ p = pe - 1; /* will do increment above */ ++ continue; ++ } ++ if (*p == dirsep) ++ d = p; ++ } ++ return d; ++ } + +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 15 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 16 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-017 b/src/patches/bash/bash43-017 new file mode 100644 index 000000000..4016fb934 --- /dev/null +++ b/src/patches/bash/bash43-017 @@ -0,0 +1,51 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-017 + +Bug-Reported-by: Dan Douglas +Bug-Reference-ID: <7781746.RhfoTROLxF@smorgbox> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-05/msg00026.html + +Bug-Description: + +The code that creates local variables should not clear the `invisible' +attribute when returning an existing local variable. Let the code that +actually assigns a value clear it. + +Patch (apply with `patch -p0'): +*** ../bash-4.3-patched/variables.c 2014-02-14 11:55:12.000000000 -0500 +--- variables.c 2014-05-07 10:53:57.000000000 -0400 +*************** +*** 2198,2205 **** + old_var = find_variable (name); + if (old_var && local_p (old_var) && old_var->context == variable_context) +! { +! VUNSETATTR (old_var, att_invisible); /* XXX */ +! return (old_var); +! } + + was_tmpvar = old_var && tempvar_p (old_var); +--- 2260,2264 ---- + old_var = find_variable (name); + if (old_var && local_p (old_var) && old_var->context == variable_context) +! return (old_var); + + was_tmpvar = old_var && tempvar_p (old_var); + +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 16 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 17 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-018 b/src/patches/bash/bash43-018 new file mode 100644 index 000000000..39499f663 --- /dev/null +++ b/src/patches/bash/bash43-018 @@ -0,0 +1,44 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-018 + +Bug-Reported-by: Geir Hauge +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-05/msg00040.html + +Bug-Description: + +When assigning an array variable using the compound assignment syntax, +but using `declare' with the rhs of the compound assignment quoted, the +shell did not mark the variable as visible after successfully performing +the assignment. + +Patch (apply with `patch -p0'): +*** ../bash-4.3-patched/arrayfunc.c 2014-03-28 10:54:21.000000000 -0400 +--- arrayfunc.c 2014-05-12 11:19:00.000000000 -0400 +*************** +*** 180,183 **** +--- 180,184 ---- + FREE (newval); + ++ VUNSETATTR (entry, att_invisible); /* no longer invisible */ + return (entry); + } + +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 17 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 18 + + #endif /* _PATCHLEVEL_H_ */ From 77b3d64a169130ad4d51a35b54749415687f5c01 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 24 Sep 2014 21:02:22 +0200 Subject: [PATCH 25/36] bash: Fix for CVE-2014-6271 A flaw was found in the way Bash evaluated certain specially crafted environment variables. An attacker could use this flaw to override or bypass environment restrictions to execute shell commands. Certain services and applications allow remote unauthenticated attackers to provide environment variables, allowing them to exploit this issue. --- lfs/bash | 1 + src/patches/bash-4.3-CVE-2014-6271.patch | 91 ++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 src/patches/bash-4.3-CVE-2014-6271.patch diff --git a/lfs/bash b/lfs/bash index 862c94432..e09f91ceb 100644 --- a/lfs/bash +++ b/lfs/bash @@ -94,6 +94,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) 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-4.3-CVE-2014-6271.patch cd $(DIR_APP) && ./configure $(CONFIGURE_OPTIONS) cd $(DIR_APP) && make $(MAKETUNING) diff --git a/src/patches/bash-4.3-CVE-2014-6271.patch b/src/patches/bash-4.3-CVE-2014-6271.patch new file mode 100644 index 000000000..7859d400f --- /dev/null +++ b/src/patches/bash-4.3-CVE-2014-6271.patch @@ -0,0 +1,91 @@ +*** ../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); From 56a435a001c4c33e72e4e8b412ba512b4d5fc796 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 25 Sep 2014 19:38:23 +0200 Subject: [PATCH 26/36] bash: Import fix for CVE-2014-7169 http://www.openwall.com/lists/oss-security/2014/09/25/10 Conflicts: lfs/bash --- lfs/bash | 1 + src/patches/bash-3.2-CVE-2014-7169.patch | 11 +++++++++++ 2 files changed, 12 insertions(+) create mode 100644 src/patches/bash-3.2-CVE-2014-7169.patch diff --git a/lfs/bash b/lfs/bash index e09f91ceb..ee1946ec0 100644 --- a/lfs/bash +++ b/lfs/bash @@ -95,6 +95,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) 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-4.3-CVE-2014-6271.patch + cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash-3.2-CVE-2014-7169.patch cd $(DIR_APP) && ./configure $(CONFIGURE_OPTIONS) cd $(DIR_APP) && make $(MAKETUNING) diff --git a/src/patches/bash-3.2-CVE-2014-7169.patch b/src/patches/bash-3.2-CVE-2014-7169.patch new file mode 100644 index 000000000..964b91f51 --- /dev/null +++ b/src/patches/bash-3.2-CVE-2014-7169.patch @@ -0,0 +1,11 @@ +*** ../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'; From 3347f993b67f13aa6776d66ee1819c9558ca202a Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Fri, 26 Sep 2014 12:46:44 +0200 Subject: [PATCH 27/36] bash: Import upstream fixes --- lfs/bash | 4 +- src/patches/bash-3.2-CVE-2014-7169.patch | 11 -- src/patches/bash/bash43-019 | 84 +++++++++++++ src/patches/bash/bash43-020 | 110 ++++++++++++++++++ src/patches/bash/bash43-021 | 52 +++++++++ src/patches/bash/bash43-022 | 56 +++++++++ src/patches/bash/bash43-023 | 104 +++++++++++++++++ src/patches/bash/bash43-024 | 54 +++++++++ .../bash43-025} | 32 +++++ src/patches/bash/bash43-026 | 60 ++++++++++ 10 files changed, 553 insertions(+), 14 deletions(-) delete mode 100644 src/patches/bash-3.2-CVE-2014-7169.patch create mode 100644 src/patches/bash/bash43-019 create mode 100644 src/patches/bash/bash43-020 create mode 100644 src/patches/bash/bash43-021 create mode 100644 src/patches/bash/bash43-022 create mode 100644 src/patches/bash/bash43-023 create mode 100644 src/patches/bash/bash43-024 rename src/patches/{bash-4.3-CVE-2014-6271.patch => bash/bash43-025} (79%) create mode 100644 src/patches/bash/bash43-026 diff --git a/lfs/bash b/lfs/bash index ee1946ec0..ae5a2837a 100644 --- a/lfs/bash +++ b/lfs/bash @@ -87,15 +87,13 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) sed -e "s/filename, RTLD_LAZY/filename, RTLD_NOW/" \ -i $(DIR_APP)/builtins/enable.def - for i in $$(seq 1 18); do \ + for i in $$(seq 1 26); 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-4.3-CVE-2014-6271.patch - cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash-3.2-CVE-2014-7169.patch cd $(DIR_APP) && ./configure $(CONFIGURE_OPTIONS) cd $(DIR_APP) && make $(MAKETUNING) diff --git a/src/patches/bash-3.2-CVE-2014-7169.patch b/src/patches/bash-3.2-CVE-2014-7169.patch deleted file mode 100644 index 964b91f51..000000000 --- a/src/patches/bash-3.2-CVE-2014-7169.patch +++ /dev/null @@ -1,11 +0,0 @@ -*** ../bash-20140912/parse.y 2014-08-26 15:09:42.000000000 -0400 ---- parse.y 2014-09-24 22:47:28.000000000 -0400 -*************** -*** 2959,2962 **** ---- 2959,2964 ---- - word_desc_to_read = (WORD_DESC *)NULL; - -+ eol_ungetc_lookahead = 0; -+ - current_token = '\n'; /* XXX */ - last_read_token = '\n'; diff --git a/src/patches/bash/bash43-019 b/src/patches/bash/bash43-019 new file mode 100644 index 000000000..a93714beb --- /dev/null +++ b/src/patches/bash/bash43-019 @@ -0,0 +1,84 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-019 + +Bug-Reported-by: John Lenton +Bug-Reference-ID: +Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1317476 + +Bug-Description: + +The -t timeout option to `read' does not work when the -e option is used. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3-patched/lib/readline/input.c 2014-01-10 15:07:08.000000000 -0500 +--- lib/readline/input.c 2014-05-22 18:40:59.000000000 -0400 +*************** +*** 535,540 **** +--- 538,551 ---- + else if (_rl_caught_signal == SIGHUP || _rl_caught_signal == SIGTERM) + return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF); ++ /* keyboard-generated signals of interest */ + else if (_rl_caught_signal == SIGINT || _rl_caught_signal == SIGQUIT) + RL_CHECK_SIGNALS (); ++ /* non-keyboard-generated signals of interest */ ++ else if (_rl_caught_signal == SIGALRM ++ #if defined (SIGVTALRM) ++ || _rl_caught_signal == SIGVTALRM ++ #endif ++ ) ++ RL_CHECK_SIGNALS (); + + if (rl_signal_event_hook) +*** ../bash-4.3-patched/builtins/read.def 2013-09-02 11:54:00.000000000 -0400 +--- builtins/read.def 2014-05-08 11:43:35.000000000 -0400 +*************** +*** 443,447 **** + #if defined (READLINE) + if (edit) +! add_unwind_protect (reset_attempted_completion_function, (char *)NULL); + #endif + falarm (tmsec, tmusec); +--- 443,450 ---- + #if defined (READLINE) + if (edit) +! { +! add_unwind_protect (reset_attempted_completion_function, (char *)NULL); +! add_unwind_protect (bashline_reset_event_hook, (char *)NULL); +! } + #endif + falarm (tmsec, tmusec); +*************** +*** 1022,1025 **** +--- 1025,1029 ---- + old_attempted_completion_function = rl_attempted_completion_function; + rl_attempted_completion_function = (rl_completion_func_t *)NULL; ++ bashline_set_event_hook (); + if (itext) + { +*************** +*** 1033,1036 **** +--- 1037,1041 ---- + rl_attempted_completion_function = old_attempted_completion_function; + old_attempted_completion_function = (rl_completion_func_t *)NULL; ++ bashline_reset_event_hook (); + + if (ret == 0) +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 18 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 19 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-020 b/src/patches/bash/bash43-020 new file mode 100644 index 000000000..5f533ef8d --- /dev/null +++ b/src/patches/bash/bash43-020 @@ -0,0 +1,110 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-020 + +Bug-Reported-by: Jared Yanovich +Bug-Reference-ID: <20140417073654.GB26875@nightderanger.psc.edu> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00065.html + +Bug-Description: + +When PS2 contains a command substitution, here-documents entered in an +interactive shell can sometimes cause a segmentation fault. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3-patched/shell.h 2012-12-25 21:11:01.000000000 -0500 +--- shell.h 2014-06-03 09:24:28.000000000 -0400 +*************** +*** 169,173 **** + int expand_aliases; + int echo_input_at_read; +! + } sh_parser_state_t; + +--- 169,174 ---- + int expand_aliases; + int echo_input_at_read; +! int need_here_doc; +! + } sh_parser_state_t; + +*** ../bash-4.3-patched/parse.y 2014-05-14 09:16:40.000000000 -0400 +--- parse.y 2014-04-30 09:27:59.000000000 -0400 +*************** +*** 2643,2647 **** + + r = 0; +! while (need_here_doc) + { + parser_state |= PST_HEREDOC; +--- 2643,2647 ---- + + r = 0; +! while (need_here_doc > 0) + { + parser_state |= PST_HEREDOC; +*************** +*** 6076,6079 **** +--- 6076,6080 ---- + ps->expand_aliases = expand_aliases; + ps->echo_input_at_read = echo_input_at_read; ++ ps->need_here_doc = need_here_doc; + + ps->token = token; +*************** +*** 6124,6127 **** +--- 6125,6129 ---- + expand_aliases = ps->expand_aliases; + echo_input_at_read = ps->echo_input_at_read; ++ need_here_doc = ps->need_here_doc; + + FREE (token); +*** ../bash-4.3-patched/y.tab.c 2014-04-07 11:56:12.000000000 -0400 +--- y.tab.c 2014-07-30 09:55:57.000000000 -0400 +*************** +*** 4955,4959 **** + + r = 0; +! while (need_here_doc) + { + parser_state |= PST_HEREDOC; +--- 5151,5155 ---- + + r = 0; +! while (need_here_doc > 0) + { + parser_state |= PST_HEREDOC; +*************** +*** 8388,8391 **** +--- 8584,8588 ---- + ps->expand_aliases = expand_aliases; + ps->echo_input_at_read = echo_input_at_read; ++ ps->need_here_doc = need_here_doc; + + ps->token = token; +*************** +*** 8436,8439 **** +--- 8633,8637 ---- + expand_aliases = ps->expand_aliases; + echo_input_at_read = ps->echo_input_at_read; ++ need_here_doc = ps->need_here_doc; + + FREE (token); +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 19 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 20 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-021 b/src/patches/bash/bash43-021 new file mode 100644 index 000000000..fd1c945ec --- /dev/null +++ b/src/patches/bash/bash43-021 @@ -0,0 +1,52 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-021 + +Bug-Reported-by: Jared Yanovich +Bug-Reference-ID: <20140625225019.GJ17044@nightderanger.psc.edu> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00070.html + +Bug-Description: + +When the readline `revert-all-at-newline' option is set, pressing newline +when the current line is one retrieved from history results in a double free +and a segmentation fault. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3-patched/lib/readline/misc.c 2012-09-01 18:03:11.000000000 -0400 +--- lib/readline/misc.c 2014-06-30 13:41:19.000000000 -0400 +*************** +*** 462,465 **** +--- 462,466 ---- + /* Set up rl_line_buffer and other variables from history entry */ + rl_replace_from_history (entry, 0); /* entry->line is now current */ ++ entry->data = 0; /* entry->data is now current undo list */ + /* Undo all changes to this history entry */ + while (rl_undo_list) +*************** +*** 469,473 **** + FREE (entry->line); + entry->line = savestring (rl_line_buffer); +- entry->data = 0; + } + entry = previous_history (); +--- 470,473 ---- + +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 20 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 21 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-022 b/src/patches/bash/bash43-022 new file mode 100644 index 000000000..7ce39ec0a --- /dev/null +++ b/src/patches/bash/bash43-022 @@ -0,0 +1,56 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-022 + +Bug-Reported-by: scorp.dev.null@gmail.com +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00061.html + +Bug-Description: + +Using nested pipelines within loops with the `lastpipe' option set can result +in a segmentation fault. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3-patched/execute_cmd.c 2014-01-31 10:54:52.000000000 -0500 +--- execute_cmd.c 2014-06-19 08:05:49.000000000 -0400 +*************** +*** 2410,2414 **** + lstdin = wait_for (lastpid); + #if defined (JOB_CONTROL) +! exec_result = job_exit_status (lastpipe_jid); + #endif + unfreeze_jobs_list (); +--- 2425,2438 ---- + lstdin = wait_for (lastpid); + #if defined (JOB_CONTROL) +! /* If wait_for removes the job from the jobs table, use result of last +! command as pipeline's exit status as usual. The jobs list can get +! frozen and unfrozen at inconvenient times if there are multiple pipelines +! running simultaneously. */ +! if (INVALID_JOB (lastpipe_jid) == 0) +! exec_result = job_exit_status (lastpipe_jid); +! else if (pipefail_opt) +! exec_result = exec_result | lstdin; /* XXX */ +! /* otherwise we use exec_result */ +! + #endif + unfreeze_jobs_list (); +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 21 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 22 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-023 b/src/patches/bash/bash43-023 new file mode 100644 index 000000000..d1e4e9d7c --- /dev/null +++ b/src/patches/bash/bash43-023 @@ -0,0 +1,104 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-023 + +Bug-Reported-by: Tim Friske +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00056.html + +Bug-Description: + +Bash does not correctly parse process substitution constructs that contain +unbalanced parentheses as part of the contained command. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3-patched/subst.h 2014-01-11 21:02:27.000000000 -0500 +--- subst.h 2014-07-20 17:25:01.000000000 -0400 +*************** +*** 83,87 **** + Start extracting at (SINDEX) as if we had just seen "<(". + Make (SINDEX) get the position just after the matching ")". */ +! extern char *extract_process_subst __P((char *, char *, int *)); + #endif /* PROCESS_SUBSTITUTION */ + +--- 83,87 ---- + Start extracting at (SINDEX) as if we had just seen "<(". + Make (SINDEX) get the position just after the matching ")". */ +! extern char *extract_process_subst __P((char *, char *, int *, int)); + #endif /* PROCESS_SUBSTITUTION */ + +*** ../bash-4.3-patched/subst.c 2014-05-15 08:26:45.000000000 -0400 +--- subst.c 2014-07-20 17:26:44.000000000 -0400 +*************** +*** 1193,1202 **** + Make (SINDEX) get the position of the matching ")". */ /*))*/ + char * +! extract_process_subst (string, starter, sindex) + char *string; + char *starter; + int *sindex; + { + return (extract_delimited_string (string, sindex, starter, "(", ")", SX_COMMAND)); + } + #endif /* PROCESS_SUBSTITUTION */ +--- 1193,1208 ---- + Make (SINDEX) get the position of the matching ")". */ /*))*/ + char * +! extract_process_subst (string, starter, sindex, xflags) + char *string; + char *starter; + int *sindex; ++ int xflags; + { ++ #if 0 + return (extract_delimited_string (string, sindex, starter, "(", ")", SX_COMMAND)); ++ #else ++ xflags |= (no_longjmp_on_fatal_error ? SX_NOLONGJMP : 0); ++ return (xparse_dolparen (string, string+*sindex, sindex, xflags)); ++ #endif + } + #endif /* PROCESS_SUBSTITUTION */ +*************** +*** 1786,1790 **** + if (string[si] == '\0') + CQ_RETURN(si); +! temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si); + free (temp); /* no SX_ALLOC here */ + i = si; +--- 1792,1796 ---- + if (string[si] == '\0') + CQ_RETURN(si); +! temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si, 0); + free (temp); /* no SX_ALLOC here */ + i = si; +*************** +*** 8250,8254 **** + t_index = sindex + 1; /* skip past both '<' and LPAREN */ + +! temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index); /*))*/ + sindex = t_index; + +--- 8256,8260 ---- + t_index = sindex + 1; /* skip past both '<' and LPAREN */ + +! temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index, 0); /*))*/ + sindex = t_index; + +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 22 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 23 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-024 b/src/patches/bash/bash43-024 new file mode 100644 index 000000000..a24b8fbbc --- /dev/null +++ b/src/patches/bash/bash43-024 @@ -0,0 +1,54 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-024 + +Bug-Reported-by: Corentin Peuvrel +Bug-Reference-ID: <53CE9E5D.6050203@pom-monitoring.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-07/msg00021.html + +Bug-Description: + +Indirect variable references do not work correctly if the reference +variable expands to an array reference using a subscript other than 0 +(e.g., foo='bar[1]' ; echo ${!foo}). + +Patch (apply with `patch -p0'): + +*** ../bash-4.3-patched/subst.c 2014-06-03 09:32:44.000000000 -0400 +--- subst.c 2014-07-23 09:58:19.000000000 -0400 +*************** +*** 7375,7379 **** + + if (want_indir) +! tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at); + else + tdesc = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND|(pflags&(PF_NOSPLIT2|PF_ASSIGNRHS)), &ind); +--- 7445,7455 ---- + + if (want_indir) +! { +! tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at); +! /* Turn off the W_ARRAYIND flag because there is no way for this function +! to return the index we're supposed to be using. */ +! if (tdesc && tdesc->flags) +! tdesc->flags &= ~W_ARRAYIND; +! } + else + tdesc = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND|(pflags&(PF_NOSPLIT2|PF_ASSIGNRHS)), &ind); +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 23 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 24 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash-4.3-CVE-2014-6271.patch b/src/patches/bash/bash43-025 similarity index 79% rename from src/patches/bash-4.3-CVE-2014-6271.patch rename to src/patches/bash/bash43-025 index 7859d400f..721aca030 100644 --- a/src/patches/bash-4.3-CVE-2014-6271.patch +++ b/src/patches/bash/bash43-025 @@ -1,3 +1,20 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-025 + +Bug-Reported-by: Stephane Chazelas +Bug-Reference-ID: +Bug-Reference-URL: + +Bug-Description: + +Under certain circumstances, bash will execute user code while processing the +environment for exported function definitions. + +Patch (apply with `patch -p0'): + *** ../bash-4.3-patched/builtins/common.h 2013-07-08 16:54:47.000000000 -0400 --- builtins/common.h 2014-09-12 14:25:47.000000000 -0400 *************** @@ -89,3 +106,18 @@ ! else if ((var = find_variable_last_nameref (temp1)) && var_isset (var) && invisible_p (var) == 0) { temp = nameref_cell (var); +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 24 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 25 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-026 b/src/patches/bash/bash43-026 new file mode 100644 index 000000000..e48141b01 --- /dev/null +++ b/src/patches/bash/bash43-026 @@ -0,0 +1,60 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-026 + +Bug-Reported-by: Tavis Ormandy +Bug-Reference-ID: +Bug-Reference-URL: http://twitter.com/taviso/statuses/514887394294652929 + +Bug-Description: + +Under certain circumstances, bash can incorrectly save a lookahead character and +return it on a subsequent call, even when reading a new line. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3.25/parse.y 2014-07-30 10:14:31.000000000 -0400 +--- parse.y 2014-09-25 20:20:21.000000000 -0400 +*************** +*** 2954,2957 **** +--- 2954,2959 ---- + word_desc_to_read = (WORD_DESC *)NULL; + ++ eol_ungetc_lookahead = 0; ++ + current_token = '\n'; /* XXX */ + last_read_token = '\n'; +*** ../bash-4.3.25/y.tab.c 2014-07-30 10:14:32.000000000 -0400 +--- y.tab.c 2014-09-25 20:21:48.000000000 -0400 +*************** +*** 5266,5269 **** +--- 5266,5271 ---- + word_desc_to_read = (WORD_DESC *)NULL; + ++ eol_ungetc_lookahead = 0; ++ + current_token = '\n'; /* XXX */ + last_read_token = '\n'; +*************** +*** 8540,8542 **** + } + #endif /* HANDLE_MULTIBYTE */ +- +--- 8542,8543 ---- +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 25 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 26 + + #endif /* _PATCHLEVEL_H_ */ From c02899be0491a40ee6ac865a405ca6199a18c849 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 26 Jul 2014 19:56:54 +0200 Subject: [PATCH 28/36] readline: Update to 6.3. --- config/rootfiles/common/readline | 8 +- lfs/readline | 8 +- src/patches/readline/readline52-001 | 30 --- src/patches/readline/readline52-002 | 49 ----- src/patches/readline/readline52-003 | 37 ---- src/patches/readline/readline52-004 | 70 ------ src/patches/readline/readline52-005 | 328 ---------------------------- src/patches/readline/readline52-006 | 62 ------ src/patches/readline/readline52-007 | 65 ------ src/patches/readline/readline52-008 | 70 ------ src/patches/readline/readline52-009 | 45 ---- src/patches/readline/readline52-010 | 47 ---- src/patches/readline/readline52-011 | 32 --- src/patches/readline/readline52-012 | 150 ------------- src/patches/readline/readline52-013 | 135 ------------ src/patches/readline/readline52-014 | 49 ----- src/patches/readline/readline62-001 | 46 ---- src/patches/readline/readline62-002 | 57 ----- src/patches/readline/readline62-003 | 76 ------- src/patches/readline/readline62-004 | 108 --------- src/patches/readline/readline63-001 | 43 ++++ src/patches/readline/readline63-002 | 44 ++++ src/patches/readline/readline63-003 | 47 ++++ src/patches/readline/readline63-004 | 45 ++++ src/patches/readline/readline63-005 | 58 +++++ src/patches/readline/readline63-006 | 63 ++++++ 26 files changed, 310 insertions(+), 1462 deletions(-) delete mode 100644 src/patches/readline/readline52-001 delete mode 100644 src/patches/readline/readline52-002 delete mode 100644 src/patches/readline/readline52-003 delete mode 100644 src/patches/readline/readline52-004 delete mode 100644 src/patches/readline/readline52-005 delete mode 100644 src/patches/readline/readline52-006 delete mode 100644 src/patches/readline/readline52-007 delete mode 100644 src/patches/readline/readline52-008 delete mode 100644 src/patches/readline/readline52-009 delete mode 100644 src/patches/readline/readline52-010 delete mode 100644 src/patches/readline/readline52-011 delete mode 100644 src/patches/readline/readline52-012 delete mode 100644 src/patches/readline/readline52-013 delete mode 100644 src/patches/readline/readline52-014 delete mode 100644 src/patches/readline/readline62-001 delete mode 100644 src/patches/readline/readline62-002 delete mode 100644 src/patches/readline/readline62-003 delete mode 100644 src/patches/readline/readline62-004 create mode 100644 src/patches/readline/readline63-001 create mode 100644 src/patches/readline/readline63-002 create mode 100644 src/patches/readline/readline63-003 create mode 100644 src/patches/readline/readline63-004 create mode 100644 src/patches/readline/readline63-005 create mode 100644 src/patches/readline/readline63-006 diff --git a/config/rootfiles/common/readline b/config/rootfiles/common/readline index 7bef2c18f..b2ac26dd4 100644 --- a/config/rootfiles/common/readline +++ b/config/rootfiles/common/readline @@ -9,10 +9,14 @@ #usr/include/readline/tilde.h #usr/lib/libhistory.so usr/lib/libhistory.so.6 -usr/lib/libhistory.so.6.2 +usr/lib/libhistory.so.6.3 #usr/lib/libreadline.so usr/lib/libreadline.so.6 -usr/lib/libreadline.so.6.2 +usr/lib/libreadline.so.6.3 +#usr/share/doc/readline +#usr/share/doc/readline/CHANGES +#usr/share/doc/readline/INSTALL +#usr/share/doc/readline/README #usr/share/info/history.info #usr/share/info/readline.info #usr/share/info/rluserman.info diff --git a/lfs/readline b/lfs/readline index 7b88adff2..eb488e336 100644 --- a/lfs/readline +++ b/lfs/readline @@ -24,7 +24,7 @@ include Config -VER = 6.2 +VER = 6.3 THISAPP = readline-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -40,7 +40,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 67948acb2ca081f23359d0256e9a271c +$(DL_FILE)_MD5 = 33c8fb279e981274f485fd91da77e94a install : $(TARGET) @@ -71,8 +71,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) - for i in $$(seq 1 4); do \ - cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/readline/readline62-$$(printf "%03d" "$${i}") || exit 1; \ + for i in $$(seq 1 6); do \ + cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/readline/readline63-$$(printf "%03d" "$${i}") || exit 1; \ done cd $(DIR_APP) && ./configure --prefix=/usr --disable-static diff --git a/src/patches/readline/readline52-001 b/src/patches/readline/readline52-001 deleted file mode 100644 index 0bec9a278..000000000 --- a/src/patches/readline/readline52-001 +++ /dev/null @@ -1,30 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-001 - -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: - -*** ../readline-5.2/display.c Thu Sep 14 14:20:12 2006 ---- 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)); diff --git a/src/patches/readline/readline52-002 b/src/patches/readline/readline52-002 deleted file mode 100644 index b0d8c9223..000000000 --- a/src/patches/readline/readline52-002 +++ /dev/null @@ -1,49 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-002 - -Bug-Reported-by: Magnus Svensson -Bug-Reference-ID: <45BDC44D.80609@mysql.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-01/msg00002.html - -Bug-Description: - -Readline neglects to reallocate the array it uses to keep track of wrapped -screen lines when increasing its size. This will eventually result in -segmentation faults when given sufficiently long input. - -Patch: - -*** ../readline-5.2-patched/display.c Thu Sep 14 14:20:12 2006 ---- 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() \ diff --git a/src/patches/readline/readline52-003 b/src/patches/readline/readline52-003 deleted file mode 100644 index 06916b3b2..000000000 --- a/src/patches/readline/readline52-003 +++ /dev/null @@ -1,37 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-003 - -Bug-Reported-by: Peter Volkov -Bug-Reference-ID: <1171795523.8021.18.camel@localhost> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-02/msg00054.html - -Bug-Description: - -When moving the cursor, bash sometimes misplaces the cursor when the prompt -contains two or more multibyte characters. The particular circumstance that -uncovered the problem was having the (multibyte) current directory name in -the prompt string. - -Patch: - -*** ../readline-5.2.2/display.c Fri Jan 19 13:34:50 2007 ---- 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; diff --git a/src/patches/readline/readline52-004 b/src/patches/readline/readline52-004 deleted file mode 100644 index b165ad9f4..000000000 --- a/src/patches/readline/readline52-004 +++ /dev/null @@ -1,70 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-004 - -Bug-Reported-by: Peter Volkov -Bug-Reference-ID: <1173636022.7039.36.camel@localhost> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00039.html - -Bug-Description: - -When restoring the original prompt after finishing an incremental search, -bash sometimes places the cursor incorrectly if the primary prompt contains -invisible characters. - -Patch: - -*** ../readline-5.2.3/display.c Fri Apr 20 13:30:16 2007 ---- 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); diff --git a/src/patches/readline/readline52-005 b/src/patches/readline/readline52-005 deleted file mode 100644 index d192ac152..000000000 --- a/src/patches/readline/readline52-005 +++ /dev/null @@ -1,328 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-005 - -Bug-Reported-by: Thomas Loeber -Bug-Reference-ID: <200703082223.08919.ifp@loeber1.de> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00036.html - -Bug-Description: - -When rl_read_key returns -1, indicating that readline'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: - -*** ../readline-5.2/complete.c Fri Jul 28 11:35:49 2006 ---- 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)) -*** ../readline-5.2/input.c Wed Aug 16 15:15:16 2006 ---- 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; -*** ../readline-5.2/isearch.c Mon Dec 26 17:18:53 2005 ---- 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) - { -*** ../readline-5.2/misc.c Mon Dec 26 17:20:46 2005 ---- 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)); - } -*** ../readline-5.2/readline.c Wed Aug 16 15:00:36 2006 ---- 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; -*** ../readline-5.2/text.c Fri Jul 28 11:55:27 2006 ---- 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)); -*** ../readline-5.2/vi_mode.c Sat Jul 29 16:42:28 2006 ---- 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 (); diff --git a/src/patches/readline/readline52-006 b/src/patches/readline/readline52-006 deleted file mode 100644 index d7391438d..000000000 --- a/src/patches/readline/readline52-006 +++ /dev/null @@ -1,62 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-006 - -Bug-Reported-by: Peter Volkov -Bug-Reference-ID: <1178376645.9063.25.camel@localhost> -Bug-Reference-URL: http://bugs.gentoo.org/177095 - -Bug-Description: - -The readline display code miscalculated the screen position when performing -a redisplay in which the new text occupies more screen space that the old, -but takes fewer bytes to do so (e.g., when replacing a shorter string -containing multibyte characters with a longer one containing only ASCII). - -Patch: - -*** ../readline-5.2/display.c Thu Apr 26 11:38:22 2007 ---- 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 diff --git a/src/patches/readline/readline52-007 b/src/patches/readline/readline52-007 deleted file mode 100644 index f75f53fc6..000000000 --- a/src/patches/readline/readline52-007 +++ /dev/null @@ -1,65 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-007 - -Bug-Reported-by: Tom Bjorkholm -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-04/msg00004.html - - -Bug-Description: - -An off-by-one error in readline's input buffering caused readline to drop -each 511th character of buffered input (e.g., when pasting a large amount -of data into a terminal window). - -Patch: - -*** ../readline-5.2/input.c Wed Aug 16 15:15:16 2006 ---- 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; - diff --git a/src/patches/readline/readline52-008 b/src/patches/readline/readline52-008 deleted file mode 100644 index 1d7f3277f..000000000 --- a/src/patches/readline/readline52-008 +++ /dev/null @@ -1,70 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-008 - -Bug-Reported-by: dAniel hAhler -Bug-Reference-ID: <4702ED8A.5000503@thequod.de> -Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/119938 - -Bug-Description: - -When updating the display after displaying, for instance, a list of possible -completions, readline will place the cursor at the wrong position if the -prompt contains invisible characters and a newline. - -Patch: - -*** ../readline-5.2-patched/display.c Mon Aug 6 14:26:29 2007 ---- 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 diff --git a/src/patches/readline/readline52-009 b/src/patches/readline/readline52-009 deleted file mode 100644 index af9e38174..000000000 --- a/src/patches/readline/readline52-009 +++ /dev/null @@ -1,45 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-009 - -Bug-Reported-by: dAniel hAhler -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -Under some circumstances, readline will incorrectly display a prompt string -containing invisible characters after the final newline. - -Patch: - -*** ../readline-5.2-patched/display.c 2007-08-25 13:47:08.000000000 -0400 ---- 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; diff --git a/src/patches/readline/readline52-010 b/src/patches/readline/readline52-010 deleted file mode 100644 index ee5c026f8..000000000 --- a/src/patches/readline/readline52-010 +++ /dev/null @@ -1,47 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-010 - -Bug-Reported-by: Miroslav Lichvar -Bug-Reference-ID: Fri, 02 Nov 2007 14:07:45 +0100 -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-11/msg00000.html - -Bug-Description: - -In certain cases when outputting characters at the end of the line, -e.g., when displaying the prompt string, readline positions the cursor -incorrectly if the prompt string contains invisible characters and the -text being drawn begins before the last invisible character in the line. - -Patch: - -*** ../readline-5.2-patched/display.c 2007-08-25 13:47:08.000000000 -0400 ---- 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; - } diff --git a/src/patches/readline/readline52-011 b/src/patches/readline/readline52-011 deleted file mode 100644 index a1197ede6..000000000 --- a/src/patches/readline/readline52-011 +++ /dev/null @@ -1,32 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-011 - -Bug-Reported-by: Uwe Doering -Bug-Reference-ID: <46F3DD72.2090801@geminix.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-09/msg00102.html - -Bug-Description: - -There is an off-by-one error in the code that buffers characters received -very quickly in succession, causing characters to be dropped. - -Patch: - -*** ../readline-5.2-patched/input.c 2007-08-25 13:47:10.000000000 -0400 ---- 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); diff --git a/src/patches/readline/readline52-012 b/src/patches/readline/readline52-012 deleted file mode 100644 index 7b370240c..000000000 --- a/src/patches/readline/readline52-012 +++ /dev/null @@ -1,150 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-012 - -Bug-Reported-by: Chet Ramey -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -This updates the options required to create shared libraries on several -systems, including Mac OS X 10.5 (darwin9.x), FreeBSD, NetBSD, OpenBSD, -AIX, and HP/UX. - -Patch: - -*** ../readline-5.2-patched/support/shobj-conf 2006-04-11 09:15:43.000000000 -0400 ---- support/shobj-conf 2007-12-06 23:46:41.000000000 -0500 -*************** -*** 11,15 **** - # chet@po.cwru.edu - -! # Copyright (C) 1996-2002 Free Software Foundation, Inc. - # - # This program is free software; you can redistribute it and/or modify ---- 11,15 ---- - # chet@po.cwru.edu - -! # Copyright (C) 1996-2007 Free Software Foundation, Inc. - # - # This program is free software; you can redistribute it and/or modify -*************** -*** 115,119 **** - ;; - -! freebsd2* | netbsd*) - SHOBJ_CFLAGS=-fpic - SHOBJ_LD=ld ---- 115,119 ---- - ;; - -! freebsd2*) - SHOBJ_CFLAGS=-fpic - SHOBJ_LD=ld -*************** -*** 126,130 **** - # FreeBSD-3.x ELF - freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*|dragonfly*) -! SHOBJ_CFLAGS=-fpic - SHOBJ_LD='${CC}' - ---- 126,130 ---- - # FreeBSD-3.x ELF - freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*|dragonfly*) -! SHOBJ_CFLAGS=-fPIC - SHOBJ_LD='${CC}' - -*************** -*** 143,147 **** - - # Darwin/MacOS X -! darwin8*) - SHOBJ_STATUS=supported - SHLIB_STATUS=supported ---- 143,147 ---- - - # Darwin/MacOS X -! darwin[89]*) - SHOBJ_STATUS=supported - SHLIB_STATUS=supported -*************** -*** 154,158 **** - SHLIB_LIBSUFF='dylib' - -! SHOBJ_LDFLAGS='-undefined dynamic_lookup' - SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' - ---- 154,158 ---- - SHLIB_LIBSUFF='dylib' - -! SHOBJ_LDFLAGS='-dynamiclib -dynamic -undefined dynamic_lookup -arch_only `/usr/bin/arch`' - SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' - -*************** -*** 172,176 **** - - case "${host_os}" in -! darwin[78]*) SHOBJ_LDFLAGS='' - SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' - ;; ---- 172,176 ---- - - case "${host_os}" in -! darwin[789]*) SHOBJ_LDFLAGS='' - SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' - ;; -*************** -*** 183,187 **** - ;; - -! openbsd*) - SHOBJ_CFLAGS=-fPIC - SHOBJ_LD='${CC}' ---- 183,187 ---- - ;; - -! openbsd*|netbsd*) - SHOBJ_CFLAGS=-fPIC - SHOBJ_LD='${CC}' -*************** -*** 248,252 **** - ;; - -! aix4.[2-9]*-*gcc*) # lightly tested by jik@cisco.com - SHOBJ_CFLAGS=-fpic - SHOBJ_LD='ld' ---- 248,252 ---- - ;; - -! aix4.[2-9]*-*gcc*|aix[5-9].*-*gcc*) # lightly tested by jik@cisco.com - SHOBJ_CFLAGS=-fpic - SHOBJ_LD='ld' -*************** -*** 259,263 **** - ;; - -! aix4.[2-9]*) - SHOBJ_CFLAGS=-K - SHOBJ_LD='ld' ---- 259,263 ---- - ;; - -! aix4.[2-9]*|aix[5-9].*) - SHOBJ_CFLAGS=-K - SHOBJ_LD='ld' -*************** -*** 330,334 **** - # if you have problems linking here, moving the `-Wl,+h,$@' from - # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work -! SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s' - - SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)' ---- 330,334 ---- - # if you have problems linking here, moving the `-Wl,+h,$@' from - # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work -! SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s' - - SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)' diff --git a/src/patches/readline/readline52-013 b/src/patches/readline/readline52-013 deleted file mode 100644 index 82a18972a..000000000 --- a/src/patches/readline/readline52-013 +++ /dev/null @@ -1,135 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-013 - -Bug-Reported-by: slinkp -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-05/msg00085.html - -Bug-Description: - -The presence of invisible characters in a prompt longer than the screenwidth -with invisible characters on the first and last prompt lines caused readline -to place the cursor in the wrong physical location. - -Patch: - -*** ../readline-5.2-patched/display.c 2007-12-14 21:12:40.000000000 -0500 ---- 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; diff --git a/src/patches/readline/readline52-014 b/src/patches/readline/readline52-014 deleted file mode 100644 index 8dfaae45d..000000000 --- a/src/patches/readline/readline52-014 +++ /dev/null @@ -1,49 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-014 - -Bug-Reported-by: Len Lattanzi -Bug-Reference-ID: <52B1297F-6675-45CC-B63E-24745337D006@apple.com> -Bug-Reference-URL: - -Bug-Description: - -On systems where mbrtowc() returns -2 when passed a length argument with -value 0, when using a multibyte locale, Readline's emacs-mode forward-char -at the end of a line will leave the point beyond the end of the line. - -Patch: - -*** ../readline-5.2-patched/mbutil.c 2009-05-29 23:09:26.000000000 -0400 ---- 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)) - { diff --git a/src/patches/readline/readline62-001 b/src/patches/readline/readline62-001 deleted file mode 100644 index d4563c3b1..000000000 --- a/src/patches/readline/readline62-001 +++ /dev/null @@ -1,46 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 6.2 -Patch-ID: readline62-001 - -Bug-Reported-by: Clark J. Wang -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00157.html - -Bug-Description: - -The readline vi-mode `cc', `dd', and `yy' commands failed to modify the -entire line. - -[This patch intentionally does not modify patchlevel] - -Patch (apply with `patch -p0'): - -*** ../readline-6.2-patched/vi_mode.c 2010-11-20 19:51:39.000000000 -0500 ---- vi_mode.c 2011-02-17 20:24:25.000000000 -0500 -*************** -*** 1115,1119 **** - _rl_vi_last_motion = c; - RL_UNSETSTATE (RL_STATE_VIMOTION); -! return (0); - } - #if defined (READLINE_CALLBACKS) ---- 1115,1119 ---- - _rl_vi_last_motion = c; - RL_UNSETSTATE (RL_STATE_VIMOTION); -! return (vidomove_dispatch (m)); - } - #if defined (READLINE_CALLBACKS) -*** ../readline-6.2-patched/callback.c 2010-06-06 12:18:58.000000000 -0400 ---- callback.c 2011-02-17 20:43:28.000000000 -0500 -*************** -*** 149,152 **** ---- 149,155 ---- - /* Should handle everything, including cleanup, numeric arguments, - and turning off RL_STATE_VIMOTION */ -+ if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0) -+ _rl_internal_char_cleanup (); -+ - return; - } diff --git a/src/patches/readline/readline62-002 b/src/patches/readline/readline62-002 deleted file mode 100644 index 3dc260400..000000000 --- a/src/patches/readline/readline62-002 +++ /dev/null @@ -1,57 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 6.2 -Patch-ID: readline62-002 - -Bug-Reported-by: Vincent Sheffer -Bug-Reference-ID: -Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-readline/2011-08/msg00000.html - -Bug-Description: - -The readline shared library helper script needs to be updated for Mac OS X -10.7 (Lion, darwin11). - -Patch (apply with `patch -p0'): - -*** ../readline-6.2-patched/support/shobj-conf 2009-10-28 09:20:21.000000000 -0400 ---- support/shobj-conf 2011-08-27 13:25:23.000000000 -0400 -*************** -*** 158,162 **** - - # Darwin/MacOS X -! darwin[89]*|darwin10*) - SHOBJ_STATUS=supported - SHLIB_STATUS=supported ---- 172,176 ---- - - # Darwin/MacOS X -! darwin[89]*|darwin1[012]*) - SHOBJ_STATUS=supported - SHLIB_STATUS=supported -*************** -*** 187,191 **** - - case "${host_os}" in -! darwin[789]*|darwin10*) SHOBJ_LDFLAGS='' - SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' - ;; ---- 201,205 ---- - - case "${host_os}" in -! darwin[789]*|darwin1[012]*) SHOBJ_LDFLAGS='' - SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' - ;; - -*** ../readline-6.2-patched/patchlevel 2010-01-14 10:15:52.000000000 -0500 ---- patchlevel 2011-11-17 11:09:35.000000000 -0500 -*************** -*** 1,3 **** - # Do not edit -- exists only for use by patch - -! 1 ---- 1,3 ---- - # Do not edit -- exists only for use by patch - -! 2 diff --git a/src/patches/readline/readline62-003 b/src/patches/readline/readline62-003 deleted file mode 100644 index 0462242e0..000000000 --- a/src/patches/readline/readline62-003 +++ /dev/null @@ -1,76 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 6.2 -Patch-ID: readline62-003 - -Bug-Reported-by: Max Horn -Bug-Reference-ID: <20CC5C60-07C3-4E41-9817-741E48D407C5@quendi.de> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2012-06/msg00005.html - -Bug-Description: - -A change between readline-6.1 and readline-6.2 to prevent the readline input -hook from being called too frequently had the side effect of causing delays -when reading pasted input on systems such as Mac OS X. This patch fixes -those delays while retaining the readline-6.2 behavior. - -Patch (apply with `patch -p0'): - -*** ../readline-6.2-patched/input.c 2010-05-30 18:33:01.000000000 -0400 ---- input.c 2012-06-25 21:08:42.000000000 -0400 -*************** -*** 410,414 **** - rl_read_key () - { -! int c; - - rl_key_sequence_length++; ---- 412,416 ---- - rl_read_key () - { -! int c, r; - - rl_key_sequence_length++; -*************** -*** 430,441 **** - while (rl_event_hook) - { -! if (rl_gather_tyi () < 0) /* XXX - EIO */ - { - rl_done = 1; - return ('\n'); - } - RL_CHECK_SIGNALS (); -- if (rl_get_char (&c) != 0) -- break; - if (rl_done) /* XXX - experimental */ - return ('\n'); ---- 432,447 ---- - while (rl_event_hook) - { -! if (rl_get_char (&c) != 0) -! break; -! -! if ((r = rl_gather_tyi ()) < 0) /* XXX - EIO */ - { - rl_done = 1; - return ('\n'); - } -+ else if (r == 1) /* read something */ -+ continue; -+ - RL_CHECK_SIGNALS (); - if (rl_done) /* XXX - experimental */ - return ('\n'); -*** ../readline-6.2-patched/patchlevel 2010-01-14 10:15:52.000000000 -0500 ---- patchlevel 2011-11-17 11:09:35.000000000 -0500 -*************** -*** 1,3 **** - # Do not edit -- exists only for use by patch - -! 2 ---- 1,3 ---- - # Do not edit -- exists only for use by patch - -! 3 diff --git a/src/patches/readline/readline62-004 b/src/patches/readline/readline62-004 deleted file mode 100644 index 5f3ba9bb3..000000000 --- a/src/patches/readline/readline62-004 +++ /dev/null @@ -1,108 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 6.2 -Patch-ID: readline62-004 - -Bug-Reported-by: Jakub Filak -Bug-Reference-ID: -Bug-Reference-URL: https://bugzilla.redhat.com/show_bug.cgi?id=813289 - -Bug-Description: - -Attempting to redo (using `.') the vi editing mode `cc', `dd', or `yy' -commands leads to an infinite loop. - -Patch (apply with `patch -p0'): - -*** ../readline-6.2-patched/vi_mode.c 2011-02-25 11:17:02.000000000 -0500 ---- vi_mode.c 2012-06-02 12:24:47.000000000 -0400 -*************** -*** 1235,1243 **** - r = rl_domove_motion_callback (_rl_vimvcxt); - } -! else if (vi_redoing) - { - _rl_vimvcxt->motion = _rl_vi_last_motion; - r = rl_domove_motion_callback (_rl_vimvcxt); - } - #if defined (READLINE_CALLBACKS) - else if (RL_ISSTATE (RL_STATE_CALLBACK)) ---- 1297,1313 ---- - r = rl_domove_motion_callback (_rl_vimvcxt); - } -! else if (vi_redoing && _rl_vi_last_motion != 'd') /* `dd' is special */ - { - _rl_vimvcxt->motion = _rl_vi_last_motion; - r = rl_domove_motion_callback (_rl_vimvcxt); - } -+ else if (vi_redoing) /* handle redoing `dd' here */ -+ { -+ _rl_vimvcxt->motion = _rl_vi_last_motion; -+ rl_mark = rl_end; -+ rl_beg_of_line (1, key); -+ RL_UNSETSTATE (RL_STATE_VIMOTION); -+ r = vidomove_dispatch (_rl_vimvcxt); -+ } - #if defined (READLINE_CALLBACKS) - else if (RL_ISSTATE (RL_STATE_CALLBACK)) -*************** -*** 1317,1325 **** - r = rl_domove_motion_callback (_rl_vimvcxt); - } -! else if (vi_redoing) - { - _rl_vimvcxt->motion = _rl_vi_last_motion; - r = rl_domove_motion_callback (_rl_vimvcxt); - } - #if defined (READLINE_CALLBACKS) - else if (RL_ISSTATE (RL_STATE_CALLBACK)) ---- 1387,1403 ---- - r = rl_domove_motion_callback (_rl_vimvcxt); - } -! else if (vi_redoing && _rl_vi_last_motion != 'c') /* `cc' is special */ - { - _rl_vimvcxt->motion = _rl_vi_last_motion; - r = rl_domove_motion_callback (_rl_vimvcxt); - } -+ else if (vi_redoing) /* handle redoing `cc' here */ -+ { -+ _rl_vimvcxt->motion = _rl_vi_last_motion; -+ rl_mark = rl_end; -+ rl_beg_of_line (1, key); -+ RL_UNSETSTATE (RL_STATE_VIMOTION); -+ r = vidomove_dispatch (_rl_vimvcxt); -+ } - #if defined (READLINE_CALLBACKS) - else if (RL_ISSTATE (RL_STATE_CALLBACK)) -*************** -*** 1378,1381 **** ---- 1456,1472 ---- - r = rl_domove_motion_callback (_rl_vimvcxt); - } -+ else if (vi_redoing && _rl_vi_last_motion != 'y') /* `yy' is special */ -+ { -+ _rl_vimvcxt->motion = _rl_vi_last_motion; -+ r = rl_domove_motion_callback (_rl_vimvcxt); -+ } -+ else if (vi_redoing) /* handle redoing `yy' here */ -+ { -+ _rl_vimvcxt->motion = _rl_vi_last_motion; -+ rl_mark = rl_end; -+ rl_beg_of_line (1, key); -+ RL_UNSETSTATE (RL_STATE_VIMOTION); -+ r = vidomove_dispatch (_rl_vimvcxt); -+ } - #if defined (READLINE_CALLBACKS) - else if (RL_ISSTATE (RL_STATE_CALLBACK)) -*** ../readline-6.2-patched/patchlevel 2010-01-14 10:15:52.000000000 -0500 ---- patchlevel 2011-11-17 11:09:35.000000000 -0500 -*************** -*** 1,3 **** - # Do not edit -- exists only for use by patch - -! 3 ---- 1,3 ---- - # Do not edit -- exists only for use by patch - -! 4 diff --git a/src/patches/readline/readline63-001 b/src/patches/readline/readline63-001 new file mode 100644 index 000000000..bae6a2f52 --- /dev/null +++ b/src/patches/readline/readline63-001 @@ -0,0 +1,43 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 6.3 +Patch-ID: readline63-001 + +Bug-Reported-by: Daan van Rossum +Bug-Reference-ID: <20140307072523.GA14250@flash.uchicago.edu> +Bug-Reference-URL: + +Bug-Description: + +The `.' command in vi mode cannot undo multi-key commands beginning with +`c', `d', and `y' (command plus motion specifier). + +Patch (apply with `patch -p0'): + +*** ../readline-6.3/readline.c 2013-10-28 14:58:06.000000000 -0400 +--- readline.c 2014-03-07 15:20:33.000000000 -0500 +*************** +*** 965,969 **** + if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap && + key != ANYOTHERKEY && +! rl_key_sequence_length == 1 && /* XXX */ + _rl_vi_textmod_command (key)) + _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign); +--- 965,969 ---- + if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap && + key != ANYOTHERKEY && +! _rl_dispatching_keymap == vi_movement_keymap && + _rl_vi_textmod_command (key)) + _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign); +*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500 +--- patchlevel 2014-03-21 08:28:40.000000000 -0400 +*************** +*** 1,3 **** + # Do not edit -- exists only for use by patch + +! 5 +--- 1,3 ---- + # Do not edit -- exists only for use by patch + +! 1 diff --git a/src/patches/readline/readline63-002 b/src/patches/readline/readline63-002 new file mode 100644 index 000000000..0e79f13f6 --- /dev/null +++ b/src/patches/readline/readline63-002 @@ -0,0 +1,44 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 6.3 +Patch-ID: readline63-002 + +Bug-Reported-by: Anatol Pomozov +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2014-03/msg00010.html + +Bug-Description: + +When in callback mode, some readline commands can cause readline to seg +fault by passing invalid contexts to callback functions. + +Patch (apply with `patch -p0'): + +*** ../readline-6.3/readline.c 2013-10-28 14:58:06.000000000 -0400 +--- readline.c 2014-03-10 14:15:02.000000000 -0400 +*************** +*** 745,749 **** + + RL_CHECK_SIGNALS (); +! if (r == 0) /* success! */ + { + _rl_keyseq_chain_dispose (); +--- 745,750 ---- + + RL_CHECK_SIGNALS (); +! /* We only treat values < 0 specially to simulate recursion. */ +! if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0)) /* success! or failure! */ + { + _rl_keyseq_chain_dispose (); +*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500 +--- patchlevel 2014-03-21 08:28:40.000000000 -0400 +*************** +*** 1,3 **** + # Do not edit -- exists only for use by patch + +! 1 +--- 1,3 ---- + # Do not edit -- exists only for use by patch + +! 2 diff --git a/src/patches/readline/readline63-003 b/src/patches/readline/readline63-003 new file mode 100644 index 000000000..d2cad94f9 --- /dev/null +++ b/src/patches/readline/readline63-003 @@ -0,0 +1,47 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 6.3 +Patch-ID: readline63-003 + +Bug-Reported-by: +Bug-Reference-ID: +Bug-Reference-URL: + +Bug-Description: + +There are debugging functions in the readline release that are theoretically +exploitable as security problems. They are not public functions, but have +global linkage. + +Patch (apply with `patch -p0'): + +*** ../readline-6.3/util.c 2013-09-02 13:36:12.000000000 -0400 +--- util.c 2014-03-20 10:25:53.000000000 -0400 +*************** +*** 477,480 **** +--- 479,483 ---- + } + ++ #if defined (DEBUG) + #if defined (USE_VARARGS) + static FILE *_rl_tracefp; +*************** +*** 539,542 **** +--- 542,546 ---- + } + #endif ++ #endif /* DEBUG */ + + +*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500 +--- patchlevel 2014-03-21 08:28:40.000000000 -0400 +*************** +*** 1,3 **** + # Do not edit -- exists only for use by patch + +! 2 +--- 1,3 ---- + # Do not edit -- exists only for use by patch + +! 3 diff --git a/src/patches/readline/readline63-004 b/src/patches/readline/readline63-004 new file mode 100644 index 000000000..3cd89e3a0 --- /dev/null +++ b/src/patches/readline/readline63-004 @@ -0,0 +1,45 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 6.3 +Patch-ID: readline63-004 + +Bug-Reported-by: Egmont Koblinger +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00153.html + +Bug-Description: + +The signal handling changes to bash and readline (to avoid running any code +in a signal handler context) cause the cursor to be placed on the wrong +line of a multi-line command after a ^C interrupts editing. + +Patch (apply with `patch -p0'): + +*** ../readline-6.3-patched/display.c 2013-12-27 13:10:56.000000000 -0500 +--- display.c 2014-03-27 11:52:45.000000000 -0400 +*************** +*** 2678,2682 **** + if (_rl_echoing_p) + { +! _rl_move_vert (_rl_vis_botlin); + _rl_vis_botlin = 0; + fflush (rl_outstream); +--- 2678,2683 ---- + if (_rl_echoing_p) + { +! if (_rl_vis_botlin > 0) /* minor optimization plus bug fix */ +! _rl_move_vert (_rl_vis_botlin); + _rl_vis_botlin = 0; + fflush (rl_outstream); +*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500 +--- patchlevel 2014-03-21 08:28:40.000000000 -0400 +*************** +*** 1,3 **** + # Do not edit -- exists only for use by patch + +! 3 +--- 1,3 ---- + # Do not edit -- exists only for use by patch + +! 4 diff --git a/src/patches/readline/readline63-005 b/src/patches/readline/readline63-005 new file mode 100644 index 000000000..8a6373849 --- /dev/null +++ b/src/patches/readline/readline63-005 @@ -0,0 +1,58 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 6.3 +Patch-ID: readline63-005 + +Bug-Reported-by: Juergen Daubert +Bug-Reference-ID: <20140303180430.GA7346@jue.netz> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2014-03/msg00002.html + +Bug-Description: + +There are still applications using the deprecated Function/VFunction/etc. +typedefs in rltypedefs.h. This patch restores the typedefs, but attempts +to mark them as deprecated using gcc/clang attributes. Thanks to Max Horn +for the suggestion. + +Patch (apply with `patch -p0'): + +*** ../readline-6.3-patched/rltypedefs.h 2011-03-26 14:53:31.000000000 -0400 +--- rltypedefs.h 2014-04-10 11:30:45.000000000 -0400 +*************** +*** 27,30 **** +--- 27,49 ---- + #endif + ++ /* Old-style, attempt to mark as deprecated in some way people will notice. */ ++ ++ #if !defined (_FUNCTION_DEF) ++ # define _FUNCTION_DEF ++ ++ #if defined(__GNUC__) || defined(__clang__) ++ typedef int Function () __attribute__ ((deprecated)); ++ typedef void VFunction () __attribute__ ((deprecated)); ++ typedef char *CPFunction () __attribute__ ((deprecated)); ++ typedef char **CPPFunction () __attribute__ ((deprecated)); ++ #else ++ typedef int Function (); ++ typedef void VFunction (); ++ typedef char *CPFunction (); ++ typedef char **CPPFunction (); ++ #endif ++ ++ #endif /* _FUNCTION_DEF */ ++ + /* New style. */ + +*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500 +--- patchlevel 2014-03-21 08:28:40.000000000 -0400 +*************** +*** 1,3 **** + # Do not edit -- exists only for use by patch + +! 4 +--- 1,3 ---- + # Do not edit -- exists only for use by patch + +! 5 diff --git a/src/patches/readline/readline63-006 b/src/patches/readline/readline63-006 new file mode 100644 index 000000000..a3f09304a --- /dev/null +++ b/src/patches/readline/readline63-006 @@ -0,0 +1,63 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 6.3 +Patch-ID: readline63-006 + +Bug-Reported-by: +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00069.html + +Bug-Description: + +Using reverse-i-search when horizontal scrolling is enabled does not redisplay +the entire line containing the successful search results. + +Patch (apply with `patch -p0'): + +*** ../readline-6.3-patched/display.c 2014-04-08 18:19:36.000000000 -0400 +--- display.c 2014-04-20 18:32:52.000000000 -0400 +*************** +*** 1638,1642 **** + the spot of first difference is before the end of the invisible chars, + lendiff needs to be adjusted. */ +! if (current_line == 0 && !_rl_horizontal_scroll_mode && + current_invis_chars != visible_wrap_offset) + { +--- 1638,1642 ---- + the spot of first difference is before the end of the invisible chars, + lendiff needs to be adjusted. */ +! if (current_line == 0 && /* !_rl_horizontal_scroll_mode && */ + current_invis_chars != visible_wrap_offset) + { +*************** +*** 1826,1831 **** + _rl_last_c_pos += bytes_to_insert; + + if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new))) +! goto clear_rest_of_line; + } + } +--- 1826,1836 ---- + _rl_last_c_pos += bytes_to_insert; + ++ /* XXX - we only want to do this if we are at the end of the line ++ so we move there with _rl_move_cursor_relative */ + if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new))) +! { +! _rl_move_cursor_relative (ne-new, new); +! goto clear_rest_of_line; +! } + } + } +*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500 +--- patchlevel 2014-03-21 08:28:40.000000000 -0400 +*************** +*** 1,3 **** + # Do not edit -- exists only for use by patch + +! 5 +--- 1,3 ---- + # Do not edit -- exists only for use by patch + +! 6 From 625c95d2be8260187b22cd9770faf81a3819c117 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 29 Sep 2014 13:52:16 +0200 Subject: [PATCH 29/36] core84: Add updated readline --- config/rootfiles/core/84/filelists/readline | 1 + 1 file changed, 1 insertion(+) create mode 120000 config/rootfiles/core/84/filelists/readline diff --git a/config/rootfiles/core/84/filelists/readline b/config/rootfiles/core/84/filelists/readline new file mode 120000 index 000000000..84209f189 --- /dev/null +++ b/config/rootfiles/core/84/filelists/readline @@ -0,0 +1 @@ +../../../common/readline \ No newline at end of file From 801dcd70b0ec02566c704ff4f450cc90f6283f60 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 29 Sep 2014 21:29:57 +0200 Subject: [PATCH 30/36] bash: Import patch for version 4.3.27 See #10633 --- lfs/bash | 2 +- src/patches/bash/bash43-027 | 221 ++++++++++++++++++++++++++++++++++++ 2 files changed, 222 insertions(+), 1 deletion(-) create mode 100644 src/patches/bash/bash43-027 diff --git a/lfs/bash b/lfs/bash index ae5a2837a..e6c8d5eb2 100644 --- a/lfs/bash +++ b/lfs/bash @@ -87,7 +87,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) sed -e "s/filename, RTLD_LAZY/filename, RTLD_NOW/" \ -i $(DIR_APP)/builtins/enable.def - for i in $$(seq 1 26); do \ + for i in $$(seq 1 27); do \ cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash/bash43-$$(printf "%03d" "$${i}") || exit 1; \ done diff --git a/src/patches/bash/bash43-027 b/src/patches/bash/bash43-027 new file mode 100644 index 000000000..ef48bd82d --- /dev/null +++ b/src/patches/bash/bash43-027 @@ -0,0 +1,221 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-027 + +Bug-Reported-by: Florian Weimer +Bug-Reference-ID: +Bug-Reference-URL: + +Bug-Description: + +This patch changes the encoding bash uses for exported functions to avoid +clashes with shell variables and to avoid depending only on an environment +variable's contents to determine whether or not to interpret it as a shell +function. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3.26/variables.c 2014-09-25 23:02:18.000000000 -0400 +--- variables.c 2014-09-27 20:52:04.000000000 -0400 +*************** +*** 84,87 **** +--- 84,92 ---- + #define ifsname(s) ((s)[0] == 'I' && (s)[1] == 'F' && (s)[2] == 'S' && (s)[3] == '\0') + ++ #define BASHFUNC_PREFIX "BASH_FUNC_" ++ #define BASHFUNC_PREFLEN 10 /* == strlen(BASHFUNC_PREFIX */ ++ #define BASHFUNC_SUFFIX "%%" ++ #define BASHFUNC_SUFFLEN 2 /* == strlen(BASHFUNC_SUFFIX) */ ++ + extern char **environ; + +*************** +*** 280,284 **** + static void dispose_temporary_env __P((sh_free_func_t *)); + +! static inline char *mk_env_string __P((const char *, const char *)); + static char **make_env_array_from_var_list __P((SHELL_VAR **)); + static char **make_var_export_array __P((VAR_CONTEXT *)); +--- 285,289 ---- + static void dispose_temporary_env __P((sh_free_func_t *)); + +! static inline char *mk_env_string __P((const char *, const char *, int)); + static char **make_env_array_from_var_list __P((SHELL_VAR **)); + static char **make_var_export_array __P((VAR_CONTEXT *)); +*************** +*** 350,369 **** + /* If exported function, define it now. Don't import functions from + the environment in privileged mode. */ +! if (privmode == 0 && read_but_dont_execute == 0 && STREQN ("() {", string, 4)) + { + string_length = strlen (string); +! temp_string = (char *)xmalloc (3 + string_length + char_index); + +! strcpy (temp_string, name); +! temp_string[char_index] = ' '; +! strcpy (temp_string + char_index + 1, string); + + /* Don't import function names that are invalid identifiers from the + environment, though we still allow them to be defined as shell + variables. */ +! if (legal_identifier (name)) +! parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD); + +! if (temp_var = find_function (name)) + { + VSETATTR (temp_var, (att_exported|att_imported)); +--- 355,385 ---- + /* If exported function, define it now. Don't import functions from + the environment in privileged mode. */ +! if (privmode == 0 && read_but_dont_execute == 0 && +! STREQN (BASHFUNC_PREFIX, name, BASHFUNC_PREFLEN) && +! STREQ (BASHFUNC_SUFFIX, name + char_index - BASHFUNC_SUFFLEN) && +! STREQN ("() {", string, 4)) + { ++ size_t namelen; ++ char *tname; /* desired imported function name */ ++ ++ namelen = char_index - BASHFUNC_PREFLEN - BASHFUNC_SUFFLEN; ++ ++ tname = name + BASHFUNC_PREFLEN; /* start of func name */ ++ tname[namelen] = '\0'; /* now tname == func name */ ++ + string_length = strlen (string); +! temp_string = (char *)xmalloc (namelen + string_length + 2); + +! memcpy (temp_string, tname, namelen); +! temp_string[namelen] = ' '; +! memcpy (temp_string + namelen + 1, string, string_length + 1); + + /* Don't import function names that are invalid identifiers from the + environment, though we still allow them to be defined as shell + variables. */ +! if (absolute_program (tname) == 0 && (posixly_correct == 0 || legal_identifier (tname))) +! parse_and_execute (temp_string, tname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD); + +! if (temp_var = find_function (tname)) + { + VSETATTR (temp_var, (att_exported|att_imported)); +*************** +*** 378,383 **** + } + last_command_exit_value = 1; +! report_error (_("error importing function definition for `%s'"), name); + } + } + #if defined (ARRAY_VARS) +--- 394,402 ---- + } + last_command_exit_value = 1; +! report_error (_("error importing function definition for `%s'"), tname); + } ++ ++ /* Restore original suffix */ ++ tname[namelen] = BASHFUNC_SUFFIX[0]; + } + #if defined (ARRAY_VARS) +*************** +*** 2955,2959 **** + + INVALIDATE_EXPORTSTR (var); +! var->exportstr = mk_env_string (name, value); + + array_needs_making = 1; +--- 2974,2978 ---- + + INVALIDATE_EXPORTSTR (var); +! var->exportstr = mk_env_string (name, value, 0); + + array_needs_making = 1; +*************** +*** 3853,3871 **** + + static inline char * +! mk_env_string (name, value) + const char *name, *value; + { +! int name_len, value_len; +! char *p; + + name_len = strlen (name); + value_len = STRLEN (value); +! p = (char *)xmalloc (2 + name_len + value_len); +! strcpy (p, name); +! p[name_len] = '='; + if (value && *value) +! strcpy (p + name_len + 1, value); + else +! p[name_len + 1] = '\0'; + return (p); + } +--- 3872,3911 ---- + + static inline char * +! mk_env_string (name, value, isfunc) + const char *name, *value; ++ int isfunc; + { +! size_t name_len, value_len; +! char *p, *q; + + name_len = strlen (name); + value_len = STRLEN (value); +! +! /* If we are exporting a shell function, construct the encoded function +! name. */ +! if (isfunc && value) +! { +! p = (char *)xmalloc (BASHFUNC_PREFLEN + name_len + BASHFUNC_SUFFLEN + value_len + 2); +! q = p; +! memcpy (q, BASHFUNC_PREFIX, BASHFUNC_PREFLEN); +! q += BASHFUNC_PREFLEN; +! memcpy (q, name, name_len); +! q += name_len; +! memcpy (q, BASHFUNC_SUFFIX, BASHFUNC_SUFFLEN); +! q += BASHFUNC_SUFFLEN; +! } +! else +! { +! p = (char *)xmalloc (2 + name_len + value_len); +! memcpy (p, name, name_len); +! q = p + name_len; +! } +! +! q[0] = '='; + if (value && *value) +! memcpy (q + 1, value, value_len + 1); + else +! q[1] = '\0'; +! + return (p); + } +*************** +*** 3953,3957 **** + using the cached exportstr... */ + list[list_index] = USE_EXPORTSTR ? savestring (value) +! : mk_env_string (var->name, value); + + if (USE_EXPORTSTR == 0) +--- 3993,3997 ---- + using the cached exportstr... */ + list[list_index] = USE_EXPORTSTR ? savestring (value) +! : mk_env_string (var->name, value, function_p (var)); + + if (USE_EXPORTSTR == 0) +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 26 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 27 + + #endif /* _PATCHLEVEL_H_ */ From efa808ba115001d36efb964019101a791a9e1039 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 26 Jul 2014 22:02:03 +0200 Subject: [PATCH 31/36] readline: Re-add accidentially deleted patches of -compat package --- src/patches/readline/readline52-001 | 30 +++ src/patches/readline/readline52-002 | 49 +++++ src/patches/readline/readline52-003 | 37 ++++ src/patches/readline/readline52-004 | 70 ++++++ src/patches/readline/readline52-005 | 328 ++++++++++++++++++++++++++++ src/patches/readline/readline52-006 | 62 ++++++ src/patches/readline/readline52-007 | 65 ++++++ src/patches/readline/readline52-008 | 70 ++++++ src/patches/readline/readline52-009 | 45 ++++ src/patches/readline/readline52-010 | 47 ++++ src/patches/readline/readline52-011 | 32 +++ src/patches/readline/readline52-012 | 150 +++++++++++++ src/patches/readline/readline52-013 | 135 ++++++++++++ src/patches/readline/readline52-014 | 49 +++++ 14 files changed, 1169 insertions(+) create mode 100644 src/patches/readline/readline52-001 create mode 100644 src/patches/readline/readline52-002 create mode 100644 src/patches/readline/readline52-003 create mode 100644 src/patches/readline/readline52-004 create mode 100644 src/patches/readline/readline52-005 create mode 100644 src/patches/readline/readline52-006 create mode 100644 src/patches/readline/readline52-007 create mode 100644 src/patches/readline/readline52-008 create mode 100644 src/patches/readline/readline52-009 create mode 100644 src/patches/readline/readline52-010 create mode 100644 src/patches/readline/readline52-011 create mode 100644 src/patches/readline/readline52-012 create mode 100644 src/patches/readline/readline52-013 create mode 100644 src/patches/readline/readline52-014 diff --git a/src/patches/readline/readline52-001 b/src/patches/readline/readline52-001 new file mode 100644 index 000000000..0bec9a278 --- /dev/null +++ b/src/patches/readline/readline52-001 @@ -0,0 +1,30 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-001 + +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: + +*** ../readline-5.2/display.c Thu Sep 14 14:20:12 2006 +--- 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)); diff --git a/src/patches/readline/readline52-002 b/src/patches/readline/readline52-002 new file mode 100644 index 000000000..b0d8c9223 --- /dev/null +++ b/src/patches/readline/readline52-002 @@ -0,0 +1,49 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-002 + +Bug-Reported-by: Magnus Svensson +Bug-Reference-ID: <45BDC44D.80609@mysql.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-01/msg00002.html + +Bug-Description: + +Readline neglects to reallocate the array it uses to keep track of wrapped +screen lines when increasing its size. This will eventually result in +segmentation faults when given sufficiently long input. + +Patch: + +*** ../readline-5.2-patched/display.c Thu Sep 14 14:20:12 2006 +--- 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() \ diff --git a/src/patches/readline/readline52-003 b/src/patches/readline/readline52-003 new file mode 100644 index 000000000..06916b3b2 --- /dev/null +++ b/src/patches/readline/readline52-003 @@ -0,0 +1,37 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-003 + +Bug-Reported-by: Peter Volkov +Bug-Reference-ID: <1171795523.8021.18.camel@localhost> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-02/msg00054.html + +Bug-Description: + +When moving the cursor, bash sometimes misplaces the cursor when the prompt +contains two or more multibyte characters. The particular circumstance that +uncovered the problem was having the (multibyte) current directory name in +the prompt string. + +Patch: + +*** ../readline-5.2.2/display.c Fri Jan 19 13:34:50 2007 +--- 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; diff --git a/src/patches/readline/readline52-004 b/src/patches/readline/readline52-004 new file mode 100644 index 000000000..b165ad9f4 --- /dev/null +++ b/src/patches/readline/readline52-004 @@ -0,0 +1,70 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-004 + +Bug-Reported-by: Peter Volkov +Bug-Reference-ID: <1173636022.7039.36.camel@localhost> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00039.html + +Bug-Description: + +When restoring the original prompt after finishing an incremental search, +bash sometimes places the cursor incorrectly if the primary prompt contains +invisible characters. + +Patch: + +*** ../readline-5.2.3/display.c Fri Apr 20 13:30:16 2007 +--- 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); diff --git a/src/patches/readline/readline52-005 b/src/patches/readline/readline52-005 new file mode 100644 index 000000000..d192ac152 --- /dev/null +++ b/src/patches/readline/readline52-005 @@ -0,0 +1,328 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-005 + +Bug-Reported-by: Thomas Loeber +Bug-Reference-ID: <200703082223.08919.ifp@loeber1.de> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00036.html + +Bug-Description: + +When rl_read_key returns -1, indicating that readline'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: + +*** ../readline-5.2/complete.c Fri Jul 28 11:35:49 2006 +--- 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)) +*** ../readline-5.2/input.c Wed Aug 16 15:15:16 2006 +--- 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; +*** ../readline-5.2/isearch.c Mon Dec 26 17:18:53 2005 +--- 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) + { +*** ../readline-5.2/misc.c Mon Dec 26 17:20:46 2005 +--- 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)); + } +*** ../readline-5.2/readline.c Wed Aug 16 15:00:36 2006 +--- 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; +*** ../readline-5.2/text.c Fri Jul 28 11:55:27 2006 +--- 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)); +*** ../readline-5.2/vi_mode.c Sat Jul 29 16:42:28 2006 +--- 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 (); diff --git a/src/patches/readline/readline52-006 b/src/patches/readline/readline52-006 new file mode 100644 index 000000000..d7391438d --- /dev/null +++ b/src/patches/readline/readline52-006 @@ -0,0 +1,62 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-006 + +Bug-Reported-by: Peter Volkov +Bug-Reference-ID: <1178376645.9063.25.camel@localhost> +Bug-Reference-URL: http://bugs.gentoo.org/177095 + +Bug-Description: + +The readline display code miscalculated the screen position when performing +a redisplay in which the new text occupies more screen space that the old, +but takes fewer bytes to do so (e.g., when replacing a shorter string +containing multibyte characters with a longer one containing only ASCII). + +Patch: + +*** ../readline-5.2/display.c Thu Apr 26 11:38:22 2007 +--- 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 diff --git a/src/patches/readline/readline52-007 b/src/patches/readline/readline52-007 new file mode 100644 index 000000000..f75f53fc6 --- /dev/null +++ b/src/patches/readline/readline52-007 @@ -0,0 +1,65 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-007 + +Bug-Reported-by: Tom Bjorkholm +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-04/msg00004.html + + +Bug-Description: + +An off-by-one error in readline's input buffering caused readline to drop +each 511th character of buffered input (e.g., when pasting a large amount +of data into a terminal window). + +Patch: + +*** ../readline-5.2/input.c Wed Aug 16 15:15:16 2006 +--- 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; + diff --git a/src/patches/readline/readline52-008 b/src/patches/readline/readline52-008 new file mode 100644 index 000000000..1d7f3277f --- /dev/null +++ b/src/patches/readline/readline52-008 @@ -0,0 +1,70 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-008 + +Bug-Reported-by: dAniel hAhler +Bug-Reference-ID: <4702ED8A.5000503@thequod.de> +Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/119938 + +Bug-Description: + +When updating the display after displaying, for instance, a list of possible +completions, readline will place the cursor at the wrong position if the +prompt contains invisible characters and a newline. + +Patch: + +*** ../readline-5.2-patched/display.c Mon Aug 6 14:26:29 2007 +--- 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 diff --git a/src/patches/readline/readline52-009 b/src/patches/readline/readline52-009 new file mode 100644 index 000000000..af9e38174 --- /dev/null +++ b/src/patches/readline/readline52-009 @@ -0,0 +1,45 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-009 + +Bug-Reported-by: dAniel hAhler +Bug-Reference-ID: +Bug-Reference-URL: + +Bug-Description: + +Under some circumstances, readline will incorrectly display a prompt string +containing invisible characters after the final newline. + +Patch: + +*** ../readline-5.2-patched/display.c 2007-08-25 13:47:08.000000000 -0400 +--- 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; diff --git a/src/patches/readline/readline52-010 b/src/patches/readline/readline52-010 new file mode 100644 index 000000000..ee5c026f8 --- /dev/null +++ b/src/patches/readline/readline52-010 @@ -0,0 +1,47 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-010 + +Bug-Reported-by: Miroslav Lichvar +Bug-Reference-ID: Fri, 02 Nov 2007 14:07:45 +0100 +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-11/msg00000.html + +Bug-Description: + +In certain cases when outputting characters at the end of the line, +e.g., when displaying the prompt string, readline positions the cursor +incorrectly if the prompt string contains invisible characters and the +text being drawn begins before the last invisible character in the line. + +Patch: + +*** ../readline-5.2-patched/display.c 2007-08-25 13:47:08.000000000 -0400 +--- 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; + } diff --git a/src/patches/readline/readline52-011 b/src/patches/readline/readline52-011 new file mode 100644 index 000000000..a1197ede6 --- /dev/null +++ b/src/patches/readline/readline52-011 @@ -0,0 +1,32 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-011 + +Bug-Reported-by: Uwe Doering +Bug-Reference-ID: <46F3DD72.2090801@geminix.org> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-09/msg00102.html + +Bug-Description: + +There is an off-by-one error in the code that buffers characters received +very quickly in succession, causing characters to be dropped. + +Patch: + +*** ../readline-5.2-patched/input.c 2007-08-25 13:47:10.000000000 -0400 +--- 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); diff --git a/src/patches/readline/readline52-012 b/src/patches/readline/readline52-012 new file mode 100644 index 000000000..7b370240c --- /dev/null +++ b/src/patches/readline/readline52-012 @@ -0,0 +1,150 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-012 + +Bug-Reported-by: Chet Ramey +Bug-Reference-ID: +Bug-Reference-URL: + +Bug-Description: + +This updates the options required to create shared libraries on several +systems, including Mac OS X 10.5 (darwin9.x), FreeBSD, NetBSD, OpenBSD, +AIX, and HP/UX. + +Patch: + +*** ../readline-5.2-patched/support/shobj-conf 2006-04-11 09:15:43.000000000 -0400 +--- support/shobj-conf 2007-12-06 23:46:41.000000000 -0500 +*************** +*** 11,15 **** + # chet@po.cwru.edu + +! # Copyright (C) 1996-2002 Free Software Foundation, Inc. + # + # This program is free software; you can redistribute it and/or modify +--- 11,15 ---- + # chet@po.cwru.edu + +! # Copyright (C) 1996-2007 Free Software Foundation, Inc. + # + # This program is free software; you can redistribute it and/or modify +*************** +*** 115,119 **** + ;; + +! freebsd2* | netbsd*) + SHOBJ_CFLAGS=-fpic + SHOBJ_LD=ld +--- 115,119 ---- + ;; + +! freebsd2*) + SHOBJ_CFLAGS=-fpic + SHOBJ_LD=ld +*************** +*** 126,130 **** + # FreeBSD-3.x ELF + freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*|dragonfly*) +! SHOBJ_CFLAGS=-fpic + SHOBJ_LD='${CC}' + +--- 126,130 ---- + # FreeBSD-3.x ELF + freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*|dragonfly*) +! SHOBJ_CFLAGS=-fPIC + SHOBJ_LD='${CC}' + +*************** +*** 143,147 **** + + # Darwin/MacOS X +! darwin8*) + SHOBJ_STATUS=supported + SHLIB_STATUS=supported +--- 143,147 ---- + + # Darwin/MacOS X +! darwin[89]*) + SHOBJ_STATUS=supported + SHLIB_STATUS=supported +*************** +*** 154,158 **** + SHLIB_LIBSUFF='dylib' + +! SHOBJ_LDFLAGS='-undefined dynamic_lookup' + SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' + +--- 154,158 ---- + SHLIB_LIBSUFF='dylib' + +! SHOBJ_LDFLAGS='-dynamiclib -dynamic -undefined dynamic_lookup -arch_only `/usr/bin/arch`' + SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' + +*************** +*** 172,176 **** + + case "${host_os}" in +! darwin[78]*) SHOBJ_LDFLAGS='' + SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' + ;; +--- 172,176 ---- + + case "${host_os}" in +! darwin[789]*) SHOBJ_LDFLAGS='' + SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' + ;; +*************** +*** 183,187 **** + ;; + +! openbsd*) + SHOBJ_CFLAGS=-fPIC + SHOBJ_LD='${CC}' +--- 183,187 ---- + ;; + +! openbsd*|netbsd*) + SHOBJ_CFLAGS=-fPIC + SHOBJ_LD='${CC}' +*************** +*** 248,252 **** + ;; + +! aix4.[2-9]*-*gcc*) # lightly tested by jik@cisco.com + SHOBJ_CFLAGS=-fpic + SHOBJ_LD='ld' +--- 248,252 ---- + ;; + +! aix4.[2-9]*-*gcc*|aix[5-9].*-*gcc*) # lightly tested by jik@cisco.com + SHOBJ_CFLAGS=-fpic + SHOBJ_LD='ld' +*************** +*** 259,263 **** + ;; + +! aix4.[2-9]*) + SHOBJ_CFLAGS=-K + SHOBJ_LD='ld' +--- 259,263 ---- + ;; + +! aix4.[2-9]*|aix[5-9].*) + SHOBJ_CFLAGS=-K + SHOBJ_LD='ld' +*************** +*** 330,334 **** + # if you have problems linking here, moving the `-Wl,+h,$@' from + # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work +! SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s' + + SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)' +--- 330,334 ---- + # if you have problems linking here, moving the `-Wl,+h,$@' from + # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work +! SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s' + + SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)' diff --git a/src/patches/readline/readline52-013 b/src/patches/readline/readline52-013 new file mode 100644 index 000000000..82a18972a --- /dev/null +++ b/src/patches/readline/readline52-013 @@ -0,0 +1,135 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-013 + +Bug-Reported-by: slinkp +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-05/msg00085.html + +Bug-Description: + +The presence of invisible characters in a prompt longer than the screenwidth +with invisible characters on the first and last prompt lines caused readline +to place the cursor in the wrong physical location. + +Patch: + +*** ../readline-5.2-patched/display.c 2007-12-14 21:12:40.000000000 -0500 +--- 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; diff --git a/src/patches/readline/readline52-014 b/src/patches/readline/readline52-014 new file mode 100644 index 000000000..8dfaae45d --- /dev/null +++ b/src/patches/readline/readline52-014 @@ -0,0 +1,49 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-014 + +Bug-Reported-by: Len Lattanzi +Bug-Reference-ID: <52B1297F-6675-45CC-B63E-24745337D006@apple.com> +Bug-Reference-URL: + +Bug-Description: + +On systems where mbrtowc() returns -2 when passed a length argument with +value 0, when using a multibyte locale, Readline's emacs-mode forward-char +at the end of a line will leave the point beyond the end of the line. + +Patch: + +*** ../readline-5.2-patched/mbutil.c 2009-05-29 23:09:26.000000000 -0400 +--- 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)) + { From a00d9432060de2d4d762d188cd85650544a4cdb5 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Tue, 30 Sep 2014 09:33:27 +0200 Subject: [PATCH 32/36] set PAK_VER to core84. --- make.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make.sh b/make.sh index 23ef2b66e..074f120dc 100755 --- a/make.sh +++ b/make.sh @@ -26,7 +26,7 @@ NAME="IPFire" # Software name SNAME="ipfire" # Short name VERSION="2.15" # Version number CORE="84" # Core Level (Filename) -PAKFIRE_CORE="83" # Core Level (PAKFIRE) +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 From da8c74ee53b5e04ba2c9b9b3a9406ecc1516ff85 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 26 Jul 2014 21:08:12 +0200 Subject: [PATCH 33/36] parted: Update to 3.1. --- config/rootfiles/packages/parted | 11 +++++++++-- lfs/parted | 12 ++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/config/rootfiles/packages/parted b/config/rootfiles/packages/parted index 74164e0b7..223a580cb 100644 --- a/config/rootfiles/packages/parted +++ b/config/rootfiles/packages/parted @@ -10,11 +10,16 @@ #usr/include/parted/parted.h #usr/include/parted/timer.h #usr/include/parted/unit.h +#usr/lib/libparted-fs-resize.a +#usr/lib/libparted-fs-resize.la +#usr/lib/libparted-fs-resize.so +usr/lib/libparted-fs-resize.so.0 +usr/lib/libparted-fs-resize.so.0.0.0 #usr/lib/libparted.a #usr/lib/libparted.la #usr/lib/libparted.so -usr/lib/libparted.so.0 -usr/lib/libparted.so.0.0.1 +usr/lib/libparted.so.2 +usr/lib/libparted.so.2.0.0 #usr/lib/pkgconfig/libparted.pc usr/sbin/parted usr/sbin/partprobe @@ -38,6 +43,8 @@ usr/sbin/partprobe #usr/share/locale/ru/LC_MESSAGES/parted.mo #usr/share/locale/rw/LC_MESSAGES/parted.mo #usr/share/locale/sk/LC_MESSAGES/parted.mo +#usr/share/locale/sl/LC_MESSAGES/parted.mo +#usr/share/locale/sr/LC_MESSAGES/parted.mo #usr/share/locale/sv/LC_MESSAGES/parted.mo #usr/share/locale/tr/LC_MESSAGES/parted.mo #usr/share/locale/uk/LC_MESSAGES/parted.mo diff --git a/lfs/parted b/lfs/parted index 25db9e5c3..5dee653a4 100644 --- a/lfs/parted +++ b/lfs/parted @@ -1,7 +1,7 @@ ############################################################################### # # # IPFire.org - A linux based firewall # -# Copyright (C) 2007-2011 IPFire Team # +# Copyright (C) 2007-2014 IPFire Team # # # # This program is free software: you can redistribute it and/or modify # # it under the terms of the GNU General Public License as published by # @@ -24,16 +24,16 @@ include Config -VER = 2.3 +VER = 3.1 THISAPP = parted-$(VER) -DL_FILE = $(THISAPP).tar.gz +DL_FILE = $(THISAPP).tar.xz DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) PROG = parted -PAK_VER = 1 +PAK_VER = 2 DEPS = "" @@ -45,7 +45,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 30ceb6df7e8681891e865e2fe5a7903d +$(DL_FILE)_MD5 = 5d89d64d94bcfefa9ce8f59f4b81bdcb install : $(TARGET) @@ -77,7 +77,7 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) cd $(DIR_APP) && ./configure --prefix=/usr --disable-device-mapper cd $(DIR_APP) && make $(MAKETUNING) cd $(DIR_APP) && make install From 34b26caca13f6f59cac9c96fd8b80fa05f480ef7 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Tue, 30 Sep 2014 23:49:47 +0200 Subject: [PATCH 34/36] bash: rootfile update. --- config/rootfiles/common/bash | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/config/rootfiles/common/bash b/config/rootfiles/common/bash index 6afa0e45e..af3a03719 100644 --- a/config/rootfiles/common/bash +++ b/config/rootfiles/common/bash @@ -1,5 +1,3 @@ -bin/sh -bin/bash #bin/bashbug #usr/share/doc/bash #usr/share/doc/bash/CHANGES @@ -13,8 +11,6 @@ bin/bash #usr/share/doc/bash/bash.html #usr/share/doc/bash/bashref.html #usr/share/info/bash.info -#usr/share/man/man1/bash.1 -#usr/share/man/man1/bashbug.1 #usr/share/locale/af #usr/share/locale/af/LC_MESSAGES #usr/share/locale/af/LC_MESSAGES/bash.mo @@ -27,12 +23,20 @@ bin/bash #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 @@ -44,13 +48,26 @@ bin/bash #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 From 243f8ca6e937084c18085d85278ee9c200c69936 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 2 Oct 2014 18:21:51 +0200 Subject: [PATCH 35/36] squid: Update to 3.4.8 Contains some security fixes: * CVE-2014-6270 http://www.squid-cache.org/Advisories/SQUID-2014_3.txt * CVE-2014-7141 CVE-2014-7142 http://www.squid-cache.org/Advisories/SQUID-2014_4.txt --- config/rootfiles/core/84/filelists/squid | 1 + config/rootfiles/core/84/update.sh | 2 ++ lfs/squid | 4 ++-- 3 files changed, 5 insertions(+), 2 deletions(-) create mode 120000 config/rootfiles/core/84/filelists/squid diff --git a/config/rootfiles/core/84/filelists/squid b/config/rootfiles/core/84/filelists/squid new file mode 120000 index 000000000..2dc8372a0 --- /dev/null +++ b/config/rootfiles/core/84/filelists/squid @@ -0,0 +1 @@ +../../../common/squid \ No newline at end of file diff --git a/config/rootfiles/core/84/update.sh b/config/rootfiles/core/84/update.sh index 1b8332664..93a9e2016 100644 --- a/config/rootfiles/core/84/update.sh +++ b/config/rootfiles/core/84/update.sh @@ -32,6 +32,7 @@ do done # Stop services +/etc/init.d/squid stop /etc/init.d/dnsmasq stop # Remove old files @@ -41,6 +42,7 @@ 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" diff --git a/lfs/squid b/lfs/squid index 921feebf2..548abd937 100644 --- a/lfs/squid +++ b/lfs/squid @@ -24,7 +24,7 @@ include Config -VER = 3.4.7 +VER = 3.4.8 THISAPP = squid-$(VER) DL_FILE = $(THISAPP).tar.xz @@ -40,7 +40,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 74677634121649ccb87a5655fcd4298d +$(DL_FILE)_MD5 = b0c4335447248810169f58ea4d8b204a install : $(TARGET) From 791c2b45d873d02d3955ac846b69a3ee1e1f6f47 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 4 Oct 2014 13:52:15 +0200 Subject: [PATCH 36/36] firewall: fix rules.pl for old rules without ratelimiting. --- config/firewall/rules.pl | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/config/firewall/rules.pl b/config/firewall/rules.pl index 40fb8dd2a..4d703825d 100755 --- a/config/firewall/rules.pl +++ b/config/firewall/rules.pl @@ -131,6 +131,12 @@ sub print_rule { print "\n"; } +sub count_elements { + my $hash = shift; + + return scalar @$hash; +} + sub flush { run("$IPTABLES -F $CHAIN_INPUT"); run("$IPTABLES -F $CHAIN_FORWARD"); @@ -186,6 +192,9 @@ sub buildrules { # Skip disabled rules. next unless ($$hash{$key}[2] eq 'ON'); + # Count number of elements in this line + my $elements = &count_elements($$hash{$key}); + if ($DEBUG) { print_rule($$hash{$key}); } @@ -270,7 +279,8 @@ sub buildrules { # Concurrent connection limit my @ratelimit_options = (); - if ($$hash{$key}[32] eq 'ON') { + + if (($elements gt 34) && ($$hash{$key}[32] eq 'ON')) { my $conn_limit = $$hash{$key}[33]; if ($conn_limit ge 1) { @@ -286,7 +296,7 @@ sub buildrules { } # Ratelimit - if ($$hash{$key}[34] eq 'ON') { + if (($elements gt 37) && ($$hash{$key}[34] eq 'ON')) { my $rate_limit = "$$hash{$key}[35]/$$hash{$key}[36]"; if ($rate_limit) {