aboutsummaryrefslogtreecommitdiffstats
path: root/main/augeas
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2015-03-11 18:11:53 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2015-03-11 18:11:53 +0200
commit5ab43d2f5e0d4a3ec44bd015dedb9e92108fa9d4 (patch)
tree5f2f185476d27fbefbae328dbbd6da7c842dd285 /main/augeas
parentb27a289caa427329684a48f63ee6b37736bb3258 (diff)
downloadaports-5ab43d2f5e0d4a3ec44bd015dedb9e92108fa9d4.tar.bz2
aports-5ab43d2f5e0d4a3ec44bd015dedb9e92108fa9d4.tar.xz
main/augeas: lens for parsing DNS zone files
Diffstat (limited to 'main/augeas')
-rw-r--r--main/augeas/0001-Dns_Zone-new-lens-to-parse-DNS-zone-files.patch495
-rw-r--r--main/augeas/APKBUILD6
2 files changed, 500 insertions, 1 deletions
diff --git a/main/augeas/0001-Dns_Zone-new-lens-to-parse-DNS-zone-files.patch b/main/augeas/0001-Dns_Zone-new-lens-to-parse-DNS-zone-files.patch
new file mode 100644
index 0000000000..dcccbb939e
--- /dev/null
+++ b/main/augeas/0001-Dns_Zone-new-lens-to-parse-DNS-zone-files.patch
@@ -0,0 +1,495 @@
+From 4f64912f569a537470c22ac8eefc0a00a6dc623b Mon Sep 17 00:00:00 2001
+From: Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>
+Date: Fri, 27 Feb 2015 14:48:11 +0200
+Subject: [PATCH] Dns_Zone: new lens to parse DNS zone files
+
+---
+ lenses/dns_zone.aug | 113 +++++++++++++
+ lenses/tests/test_dns_zone.aug | 355 +++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 468 insertions(+)
+ create mode 100644 lenses/dns_zone.aug
+ create mode 100644 lenses/tests/test_dns_zone.aug
+
+diff --git a/lenses/dns_zone.aug b/lenses/dns_zone.aug
+new file mode 100644
+index 0000000..77c3485
+--- /dev/null
++++ b/lenses/dns_zone.aug
+@@ -0,0 +1,113 @@
++(*
++Module: Dns_Zone
++ Lens for parsing DNS zone files
++
++Authors:
++ Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>
++
++About: Reference
++ RFC 1035, RFC 2782, RFC 3403
++
++About: License
++ This file is licensed under the LGPL v2+
++*)
++
++module Dns_Zone =
++
++autoload xfm
++
++let eol = del /(([ \t\n]*;[^\n]*)?\n)+/ "\n"
++let opt_eol = del /(([ \t\n]*;[^\n]*)?\n)*/ ""
++
++let ws = del /[ \t]+|(([ \t\n]*;[^\n]*)?\n)+[ \t]*/ " "
++let opt_ws = del /(([ \t\n]*;[^\n]*)?\n)*[ \t]*/ ""
++
++let token = /([^ \t\n";()\\]|\\\\.)+|"([^"\\]|\\\\.)*"/
++
++
++let control = [ key /\$[^ \t\n\/]+/
++ . Util.del_ws_tab
++ . store token
++ . eol ]
++
++
++let labeled_token (lbl:string) (re:regexp) (sep:lens) =
++ [ label lbl . store re . sep ]
++
++let regexp_token (lbl:string) (re:regexp) =
++ labeled_token lbl re Util.del_ws_tab
++
++let type_token (re:regexp) = regexp_token "type" re
++
++let simple_token (lbl:string) = regexp_token lbl token
++
++let enclosed_token (lbl:string) = labeled_token lbl token ws
++
++let last_token (lbl:string) = labeled_token lbl token eol
++
++
++let class_re = /IN/
++
++let ttl = regexp_token "ttl" /[0-9]+[DHMWdhmw]?/
++let class = regexp_token "class" class_re
++
++let rr =
++ let simple_type = /[A-Z]+/ - class_re - /MX|NAPTR|SOA|SRV/
++ in type_token simple_type . last_token "rdata"
++
++
++let mx = type_token "MX"
++ . simple_token "priority"
++ . last_token "exchange"
++
++let naptr = type_token "NAPTR"
++ . simple_token "order"
++ . simple_token "preference"
++ . simple_token "flags"
++ . simple_token "service"
++ . simple_token "regexp"
++ . last_token "replacement"
++
++let soa = type_token "SOA"
++ . simple_token "mname"
++ . simple_token "rname"
++ . Util.del_str "("
++ . opt_ws
++ . enclosed_token "serial"
++ . enclosed_token "refresh"
++ . enclosed_token "retry"
++ . enclosed_token "expiry"
++ . labeled_token "minimum" token opt_ws
++ . Util.del_str ")"
++ . eol
++
++let srv = type_token "SRV"
++ . simple_token "priority"
++ . simple_token "weight"
++ . simple_token "port"
++ . last_token "target"
++
++
++let record = seq "owner"
++ . ((ttl? . class?) | (class . ttl))
++ . (rr|mx|naptr|soa|srv)
++let ws_record = [ Util.del_ws_tab . record ]
++let records (k:regexp) = [ key k . counter "owner" . ws_record+ ]
++
++let any_record_block = records /[^ \t\n;\/$][^ \t\n;\/]*/
++let non_root_records = records /@[^ \t\n;\/]+|[^ \t\n;\/$@][^ \t\n;\/]*/
++
++let root_records = [ del /@?/ "@"
++ . Util.del_ws_tab
++ . label "@"
++ . counter "owner"
++ . [ record ]
++ . ws_record* ]
++
++let lns = opt_eol
++ . control*
++ . ( (root_records|non_root_records)
++ . (control|any_record_block)* )?
++
++let filter = incl "/var/bind/pri/*.zone"
++let xfm = transform Dns_Zone.lns filter
+diff --git a/lenses/tests/test_dns_zone.aug b/lenses/tests/test_dns_zone.aug
+new file mode 100644
+index 0000000..07ff583
+--- /dev/null
++++ b/lenses/tests/test_dns_zone.aug
+@@ -0,0 +1,355 @@
++module Test_Dns_Zone =
++
++let lns = Dns_Zone.lns
++
++(* RFC 1034 §6 *)
++test lns get "
++EDU. IN SOA SRI-NIC.ARPA. HOSTMASTER.SRI-NIC.ARPA. (
++ 870729 ;serial
++ 1800 ;refresh every 30 minutes
++ 300 ;retry every 5 minutes
++ 604800 ;expire after a week
++ 86400 ;minimum of a day
++ )
++ NS SRI-NIC.ARPA.
++ NS C.ISI.EDU.
++
++UCI 172800 NS ICS.UCI
++ 172800 NS ROME.UCI
++ICS.UCI 172800 A 192.5.19.1
++ROME.UCI 172800 A 192.5.19.31
++
++ISI 172800 NS VAXA.ISI
++ 172800 NS A.ISI
++ 172800 NS VENERA.ISI.EDU.
++VAXA.ISI 172800 A 10.2.0.27
++ 172800 A 128.9.0.33
++VENERA.ISI.EDU. 172800 A 10.1.0.52
++ 172800 A 128.9.0.32
++A.ISI 172800 A 26.3.0.103
++
++UDEL.EDU. 172800 NS LOUIE.UDEL.EDU.
++ 172800 NS UMN-REI-UC.ARPA.
++LOUIE.UDEL.EDU. 172800 A 10.0.0.96
++ 172800 A 192.5.39.3
++
++YALE.EDU. 172800 NS YALE.ARPA.
++YALE.EDU. 172800 NS YALE-BULLDOG.ARPA.
++
++MIT.EDU. 43200 NS XX.LCS.MIT.EDU.
++ 43200 NS ACHILLES.MIT.EDU.
++XX.LCS.MIT.EDU. 43200 A 10.0.0.44
++ACHILLES.MIT.EDU. 43200 A 18.72.0.8
++" =
++ { "EDU."
++ { "1"
++ { "class" = "IN" }
++ { "type" = "SOA" }
++ { "mname" = "SRI-NIC.ARPA." }
++ { "rname" = "HOSTMASTER.SRI-NIC.ARPA." }
++ { "serial" = "870729" }
++ { "refresh" = "1800" }
++ { "retry" = "300" }
++ { "expiry" = "604800" }
++ { "minimum" = "86400" }
++ }
++ { "2" { "type" = "NS" } { "rdata" = "SRI-NIC.ARPA." } }
++ { "3" { "type" = "NS" } { "rdata" = "C.ISI.EDU." } }
++ }
++ { "UCI"
++ { "1" { "ttl" = "172800" } { "type" = "NS" } { "rdata" = "ICS.UCI" } }
++ { "2" { "ttl" = "172800" } { "type" = "NS" } { "rdata" = "ROME.UCI" } }
++ }
++ { "ICS.UCI"
++ { "1" { "ttl" = "172800" } { "type" = "A" } { "rdata" = "192.5.19.1" } }
++ }
++ { "ROME.UCI"
++ { "1" { "ttl" = "172800" } { "type" = "A" } { "rdata" = "192.5.19.31" } }
++ }
++ { "ISI"
++ { "1" { "ttl" = "172800" } { "type" = "NS" } { "rdata" = "VAXA.ISI" } }
++ { "2" { "ttl" = "172800" } { "type" = "NS" } { "rdata" = "A.ISI" } }
++ { "3"
++ { "ttl" = "172800" } { "type" = "NS" } { "rdata" = "VENERA.ISI.EDU." }
++ }
++ }
++ { "VAXA.ISI"
++ { "1" { "ttl" = "172800" } { "type" = "A" } { "rdata" = "10.2.0.27" } }
++ { "2" { "ttl" = "172800" } { "type" = "A" } { "rdata" = "128.9.0.33" } }
++ }
++ { "VENERA.ISI.EDU."
++ { "1" { "ttl" = "172800" } { "type" = "A" } { "rdata" = "10.1.0.52" } }
++ { "2" { "ttl" = "172800" } { "type" = "A" } { "rdata" = "128.9.0.32" } }
++ }
++ { "A.ISI"
++ { "1" { "ttl" = "172800" } { "type" = "A" } { "rdata" = "26.3.0.103" } }
++ }
++ { "UDEL.EDU."
++ { "1"
++ { "ttl" = "172800" } { "type" = "NS" } { "rdata" = "LOUIE.UDEL.EDU." }
++ }
++ { "2"
++ { "ttl" = "172800" } { "type" = "NS" } { "rdata" = "UMN-REI-UC.ARPA." }
++ }
++ }
++ { "LOUIE.UDEL.EDU."
++ { "1" { "ttl" = "172800" } { "type" = "A" } { "rdata" = "10.0.0.96" } }
++ { "2" { "ttl" = "172800" } { "type" = "A" } { "rdata" = "192.5.39.3" } }
++ }
++ { "YALE.EDU."
++ { "1" { "ttl" = "172800" } { "type" = "NS" } { "rdata" = "YALE.ARPA." } }
++ }
++ { "YALE.EDU."
++ { "1"
++ { "ttl" = "172800" } { "type" = "NS" } { "rdata" = "YALE-BULLDOG.ARPA." }
++ }
++ }
++ { "MIT.EDU."
++ { "1"
++ { "ttl" = "43200" } { "type" = "NS" } { "rdata" = "XX.LCS.MIT.EDU." }
++ }
++ { "2"
++ { "ttl" = "43200" } { "type" = "NS" } { "rdata" = "ACHILLES.MIT.EDU." }
++ }
++ }
++ { "XX.LCS.MIT.EDU."
++ { "1" { "ttl" = "43200" } { "type" = "A" } { "rdata" = "10.0.0.44" } }
++ }
++ { "ACHILLES.MIT.EDU."
++ { "1" { "ttl" = "43200" } { "type" = "A" } { "rdata" = "18.72.0.8" } }
++ }
++
++
++(* RFC 1035 §5.3 *)
++test lns get "
++@ IN SOA VENERA Action\.domains (
++ 20 ; SERIAL
++ 7200 ; REFRESH
++ 600 ; RETRY
++ 3600000; EXPIRE
++ 60) ; MINIMUM
++
++ NS A.ISI.EDU.
++ NS VENERA
++ NS VAXA
++ MX 10 VENERA
++ MX 20 VAXA
++
++A A 26.3.0.103
++
++VENERA A 10.1.0.52
++ A 128.9.0.32
++
++VAXA A 10.2.0.27
++ A 128.9.0.33
++" =
++ { "@"
++ { "1"
++ { "class" = "IN" }
++ { "type" = "SOA" }
++ { "mname" = "VENERA" }
++ { "rname" = "Action\\.domains" }
++ { "serial" = "20" }
++ { "refresh" = "7200" }
++ { "retry" = "600" }
++ { "expiry" = "3600000" }
++ { "minimum" = "60" }
++ }
++ { "2" { "type" = "NS" } { "rdata" = "A.ISI.EDU." } }
++ { "3" { "type" = "NS" } { "rdata" = "VENERA" } }
++ { "4" { "type" = "NS" } { "rdata" = "VAXA" } }
++ { "5" { "type" = "MX" } { "priority" = "10" } { "exchange" = "VENERA" } }
++ { "6" { "type" = "MX" } { "priority" = "20" } { "exchange" = "VAXA" } }
++ }
++ { "A" { "1" { "type" = "A" } { "rdata" = "26.3.0.103" } } }
++ { "VENERA"
++ { "1" { "type" = "A" } { "rdata" = "10.1.0.52" } }
++ { "2" { "type" = "A" } { "rdata" = "128.9.0.32" } }
++ }
++ { "VAXA"
++ { "1" { "type" = "A" } { "rdata" = "10.2.0.27" } }
++ { "2" { "type" = "A" } { "rdata" = "128.9.0.33" } }
++ }
++
++
++(* RFC 2782 *)
++test lns get "
++$ORIGIN example.com.
++@ SOA server.example.com. root.example.com. (
++ 1995032001 3600 3600 604800 86400 )
++ NS server.example.com.
++ NS ns1.ip-provider.net.
++ NS ns2.ip-provider.net.
++; foobar - use old-slow-box or new-fast-box if either is
++; available, make three quarters of the logins go to
++; new-fast-box.
++_foobar._tcp SRV 0 1 9 old-slow-box.example.com.
++ SRV 0 3 9 new-fast-box.example.com.
++; if neither old-slow-box or new-fast-box is up, switch to
++; using the sysdmin's box and the server
++ SRV 1 0 9 sysadmins-box.example.com.
++ SRV 1 0 9 server.example.com.
++server A 172.30.79.10
++old-slow-box A 172.30.79.11
++sysadmins-box A 172.30.79.12
++new-fast-box A 172.30.79.13
++; NO other services are supported
++*._tcp SRV 0 0 0 .
++*._udp SRV 0 0 0 .
++" =
++ { "$ORIGIN" = "example.com." }
++ { "@"
++ { "1"
++ { "type" = "SOA" }
++ { "mname" = "server.example.com." }
++ { "rname" = "root.example.com." }
++ { "serial" = "1995032001" }
++ { "refresh" = "3600" }
++ { "retry" = "3600" }
++ { "expiry" = "604800" }
++ { "minimum" = "86400" }
++ }
++ { "2" { "type" = "NS" } { "rdata" = "server.example.com." } }
++ { "3" { "type" = "NS" } { "rdata" = "ns1.ip-provider.net." } }
++ { "4" { "type" = "NS" } { "rdata" = "ns2.ip-provider.net." } }
++ }
++ { "_foobar._tcp"
++ { "1"
++ { "type" = "SRV" }
++ { "priority" = "0" }
++ { "weight" = "1" }
++ { "port" = "9" }
++ { "target" = "old-slow-box.example.com." }
++ }
++ { "2"
++ { "type" = "SRV" }
++ { "priority" = "0" }
++ { "weight" = "3" }
++ { "port" = "9" }
++ { "target" = "new-fast-box.example.com." }
++ }
++ { "3"
++ { "type" = "SRV" }
++ { "priority" = "1" }
++ { "weight" = "0" }
++ { "port" = "9" }
++ { "target" = "sysadmins-box.example.com." }
++ }
++ { "4"
++ { "type" = "SRV" }
++ { "priority" = "1" }
++ { "weight" = "0" }
++ { "port" = "9" }
++ { "target" = "server.example.com." }
++ }
++ }
++ { "server" { "1" { "type" = "A" } { "rdata" = "172.30.79.10" } } }
++ { "old-slow-box" { "1" { "type" = "A" } { "rdata" = "172.30.79.11" } } }
++ { "sysadmins-box" { "1" { "type" = "A" } { "rdata" = "172.30.79.12" } } }
++ { "new-fast-box" { "1" { "type" = "A" } { "rdata" = "172.30.79.13" } } }
++ { "*._tcp"
++ { "1"
++ { "type" = "SRV" }
++ { "priority" = "0" }
++ { "weight" = "0" }
++ { "port" = "0" }
++ { "target" = "." }
++ }
++ }
++ { "*._udp"
++ { "1"
++ { "type" = "SRV" }
++ { "priority" = "0" }
++ { "weight" = "0" }
++ { "port" = "0" }
++ { "target" = "." }
++ }
++ }
++
++
++(* RFC 3403 §6.2 *)
++test lns get "
++$ORIGIN 2.1.2.1.5.5.5.0.7.7.1.e164.arpa.
++ IN NAPTR 100 10 \"u\" \"sip+E2U\" \"!^.*$!sip:information@foo.se!i\" .
++ IN NAPTR 102 10 \"u\" \"smtp+E2U\" \"!^.*$!mailto:information@foo.se!i\" .
++" =
++ { "$ORIGIN" = "2.1.2.1.5.5.5.0.7.7.1.e164.arpa." }
++ { "@"
++ { "1"
++ { "class" = "IN" }
++ { "type" = "NAPTR" }
++ { "order" = "100" }
++ { "preference" = "10" }
++ { "flags" = "\"u\"" }
++ { "service" = "\"sip+E2U\"" }
++ { "regexp" = "\"!^.*$!sip:information@foo.se!i\"" }
++ { "replacement" = "." }
++ }
++ { "2"
++ { "class" = "IN" }
++ { "type" = "NAPTR" }
++ { "order" = "102" }
++ { "preference" = "10" }
++ { "flags" = "\"u\"" }
++ { "service" = "\"smtp+E2U\"" }
++ { "regexp" = "\"!^.*$!mailto:information@foo.se!i\"" }
++ { "replacement" = "." }
++ }
++ }
++
++
++(* SOA record on a single line *)
++test lns get "
++$ORIGIN example.com.
++@ IN SOA ns root.example.com. (1 2 3 4 5)
++" =
++ { "$ORIGIN" = "example.com." }
++ { "@"
++ { "1"
++ { "class" = "IN" }
++ { "type" = "SOA" }
++ { "mname" = "ns" }
++ { "rname" = "root.example.com." }
++ { "serial" = "1" }
++ { "refresh" = "2" }
++ { "retry" = "3" }
++ { "expiry" = "4" }
++ { "minimum" = "5" }
++ }
++ }
++
++
++(* Different ordering of TTL and class *)
++test lns get "
++$ORIGIN example.com.
++foo 1D IN A 10.1.2.3
++bar IN 2W A 10.4.5.6
++" =
++ { "$ORIGIN" = "example.com." }
++ { "foo"
++ { "1"
++ { "ttl" = "1D" }
++ { "class" = "IN" }
++ { "type" = "A" }
++ { "rdata" = "10.1.2.3" }
++ }
++ }
++ { "bar"
++ { "1"
++ { "class" = "IN" }
++ { "ttl" = "2W" }
++ { "type" = "A" }
++ { "rdata" = "10.4.5.6" }
++ }
++ }
++
++
++(* Escaping *)
++test lns get "
++$ORIGIN example.com.
++foo TXT abc\\\\def\\\"ghi
++bar TXT \"ab cd\\\\ef\\\"gh\"
++" =
++ { "$ORIGIN" = "example.com." }
++ { "foo" { "1" { "type" = "TXT" } { "rdata" = "abc\\\\def\\\"ghi" } } }
++ { "bar" { "1" { "type" = "TXT" } { "rdata" = "\"ab cd\\\\ef\\\"gh\"" } } }
+--
+1.9.3
+
diff --git a/main/augeas/APKBUILD b/main/augeas/APKBUILD
index a71a25965b..e0734f2de8 100644
--- a/main/augeas/APKBUILD
+++ b/main/augeas/APKBUILD
@@ -1,7 +1,7 @@
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=augeas
pkgver=1.3.0
-pkgrel=2
+pkgrel=3
pkgdesc="A configuration editing tool"
url="http://augeas.net"
arch="all"
@@ -12,6 +12,7 @@ makedepends="$depends_dev readline-dev"
install=""
subpackages="$pkgname-dev $pkgname-doc $pkgname-tests $pkgname-libs"
source="http://download.augeas.net/augeas-$pkgver.tar.gz
+ 0001-Dns_Zone-new-lens-to-parse-DNS-zone-files.patch
0001-Dnsmasq-add-structure-to-address-and-server-options.patch
0001-Shellvars-allow-partial-quoting-mixing-multiple-styl.patch
0002-Shellvars-allow-wrapping-loop-condition-to-multiple-.patch
@@ -75,6 +76,7 @@ libs() {
}
md5sums="c8890b11a04795ecfe5526eeae946b2d augeas-1.3.0.tar.gz
+cf358f5ff6c222cebd443922bf7ab51d 0001-Dns_Zone-new-lens-to-parse-DNS-zone-files.patch
b140791828aec2037c411164102ef8cd 0001-Dnsmasq-add-structure-to-address-and-server-options.patch
0b7d8ef1d472a1cd3b5742afcbc40c7b 0001-Shellvars-allow-partial-quoting-mixing-multiple-styl.patch
51c15f48a3086aedcb9b50c379396e9a 0002-Shellvars-allow-wrapping-loop-condition-to-multiple-.patch
@@ -88,6 +90,7 @@ e48785687b03c48022426182fbba785e 0009-Shellvars-case-support-on-same-line-with-
07fcbed83f7f507beeac919aa96eb7c4 0010-Shellvars-allow-the-builtin.patch
4bfc55219b2a1284b84c739951221f63 0011-Shellvars-allow-command-specific-environment-variabl.patch"
sha256sums="80763031af76515a8ea66013ddc3c466742a15d2e907c7c8e2e3b7410262e2af augeas-1.3.0.tar.gz
+f025c4cf27dee9c59a5f4a0eede5e4843c4b28cea0d7c32ed7f07181d71acb47 0001-Dns_Zone-new-lens-to-parse-DNS-zone-files.patch
0cb29dfdef3f293c5a4db06704072a6672ce728c82d4b2a7260da341522efc37 0001-Dnsmasq-add-structure-to-address-and-server-options.patch
3824c87fca915f2ace1acbcbaed075d8e77268d239d5159aa8603907558f638f 0001-Shellvars-allow-partial-quoting-mixing-multiple-styl.patch
e05119d39bba5dd49bf6fa887f38ba3825e308efd9e8dc491694414f740b9737 0002-Shellvars-allow-wrapping-loop-condition-to-multiple-.patch
@@ -101,6 +104,7 @@ ef71befc9759945fc953b28c7e81db63057a58297c8dd9642d52ec12e77f105e 0008-Shellvars
13017bf58ec6d7d72d2dd5954d2636f47147207543ccd9537bb08e16ae032406 0010-Shellvars-allow-the-builtin.patch
61bffc11faf4442f23c22b3a06c329284cfa75ca9db5d27b60ac528dbedc3ba3 0011-Shellvars-allow-command-specific-environment-variabl.patch"
sha512sums="92cc2cf83faa42e83621fe0f73fe9f7247d802f17da781e51d068056d20b1645de1f0ea0d5070c0d5729a3f6554d64a95e31111bf3e44b959386559619843e79 augeas-1.3.0.tar.gz
+f495b8f98b08489b46188b5fbd5c571409c323433cf246eeb8daac054b473e61ff39fdbc438b29a37d0435c24ec5720533d064e28d614dd7c520d2b68bef4c7d 0001-Dns_Zone-new-lens-to-parse-DNS-zone-files.patch
f2cdf6fcd84de4f86bc54d89292d3c4c19070b1c6d5149af6a8d7c49678e2a7527b6549ad114e5ccec53d4d9582814153732f69a4c0228243aac96c48a0e1d1d 0001-Dnsmasq-add-structure-to-address-and-server-options.patch
2a231a4f5db8c86b2710e83d4c74062a67980812df367276fc4876ccb01799881da98d95f0385972a7c229e83c18a758c67e7d5a9bef03fe8e3bd549136dcfc9 0001-Shellvars-allow-partial-quoting-mixing-multiple-styl.patch
af2c9021f4f1286e449b0bcb3e9bee781aa7b9be2835fd48cc3fe4e2ac50d4979af06edc6272fd4fc08eaa93a7e7cc77472ca6f9b093090443657630a6512b5a 0002-Shellvars-allow-wrapping-loop-condition-to-multiple-.patch