diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2015-03-11 18:11:53 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2015-03-11 18:11:53 +0200 |
commit | 5ab43d2f5e0d4a3ec44bd015dedb9e92108fa9d4 (patch) | |
tree | 5f2f185476d27fbefbae328dbbd6da7c842dd285 | |
parent | b27a289caa427329684a48f63ee6b37736bb3258 (diff) | |
download | aports-5ab43d2f5e0d4a3ec44bd015dedb9e92108fa9d4.tar.bz2 aports-5ab43d2f5e0d4a3ec44bd015dedb9e92108fa9d4.tar.xz |
main/augeas: lens for parsing DNS zone files
-rw-r--r-- | main/augeas/0001-Dns_Zone-new-lens-to-parse-DNS-zone-files.patch | 495 | ||||
-rw-r--r-- | main/augeas/APKBUILD | 6 |
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 |