aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rwxr-xr-xmirror-checker.lua37
1 files changed, 25 insertions, 12 deletions
diff --git a/mirror-checker.lua b/mirror-checker.lua
index d141f8e..aab62cc 100755
--- a/mirror-checker.lua
+++ b/mirror-checker.lua
@@ -3,6 +3,12 @@
3 3
4local args = {...} 4local args = {...}
5 5
6--[[ TODO - What to do about HTTPS://deb.devuan.org/ redirects.
7 Some mirrors give a 404.
8 Sledjhamr gives a 404, coz it's not listening on 443 for deb.devuan.org.
9 Some mirrors give a 200.
10 They shouldn't have the proper certificate, but are giving a result anyway.
11]]
6 12
7verbosity = 0 13verbosity = 0
8keep = false 14keep = false
@@ -80,6 +86,7 @@ local logFile
80local socket = require 'socket' 86local socket = require 'socket'
81local ftp = require 'socket.ftp' 87local ftp = require 'socket.ftp'
82local http = require 'socket.http' 88local http = require 'socket.http'
89local https = require 'ssl.https' -- See https://github.com/brunoos/luasec/wiki/LuaSec-0.6 for docs.
83local url = require 'socket.url' 90local url = require 'socket.url'
84 91
85 92
@@ -117,6 +124,7 @@ dumpTableSub = function (table, space)
117 return r 124 return r
118end 125end
119 126
127
120local log = function(v, t, s) 128local log = function(v, t, s)
121 if v <= verbosity then 129 if v <= verbosity then
122 if 3 <= verbosity then t = os.date() .. " " .. t end 130 if 3 <= verbosity then t = os.date() .. " " .. t end
@@ -227,9 +235,15 @@ checkURL = function (host, URL, r, retry)
227 end 235 end
228 local PU = url.parse(URL, defaultURL) 236 local PU = url.parse(URL, defaultURL)
229 D(PU.scheme .. " :// " .. check .. " " .. host .. " -> " .. URL) 237 D(PU.scheme .. " :// " .. check .. " " .. host .. " -> " .. URL)
230 if not testing(PU.scheme) then D("not testing " .. PU.scheme .. " " .. host .. " -> " .. URL); return end 238 if not testing(PU.scheme, host) then D("Not testing " .. PU.scheme .. " " .. host .. " -> " .. URL); return end
239 -- TODO - Perhaps we should try it anyway, and mark it as a warning if it DOES work?
240 if "https" == PU.scheme and "deb.devuan.org" == host then D("Not testing " .. PU.scheme .. " " .. host .. " -> " .. URL .. " mirrors shouldn't have the correct cert."); return end
231 local hd = {Host = host} 241 local hd = {Host = host}
232 local p, c, h, s = http.request{method = "HEAD", redirect = false, url = URL, headers = hd} 242 local htp = http;
243 if PU.scheme == "https" then htp = https end
244 -- NOTE - the docs for lua-sec say that redirect isn't supported is version 0.6, no idea if that means it ignores redirections like we want.
245 -- The protocol and options are lua-sec specific arguments.
246 local p, c, h, s = htp.request{method = "HEAD", redirect = false, url = URL, headers = hd, protocol = "any", options = "all"}
233 if nil == s then s = "" end 247 if nil == s then s = "" end
234 if nil == p then 248 if nil == p then
235 E(" " .. c .. " " .. s .. "! " .. check .. " " .. host .. " -> " .. URL) 249 E(" " .. c .. " " .. s .. "! " .. check .. " " .. host .. " -> " .. URL)
@@ -245,18 +259,17 @@ checkURL = function (host, URL, r, retry)
245 l = h.location 259 l = h.location
246 if nil ~= l then 260 if nil ~= l then
247 local pu = url.parse(l, defaultURL) 261 local pu = url.parse(l, defaultURL)
248 if l == URL then 262 if pu.scheme ~= PU.scheme then
263 if testing("Protocol") then
264 W(" protocol changed during redirect! " .. check .. " " .. host .. " -> " .. URL .. " -> " .. l)
265 end
266 elseif l == URL then
249 E(" redirect loop! " .. check .. " " .. host .. " -> " .. URL) 267 E(" redirect loop! " .. check .. " " .. host .. " -> " .. URL)
268 elseif nil == pu.host then
269 W(" no location host! " .. check .. " " .. host .. " -> " .. URL .. " -> " .. l)
270 checkURL(host, PU.scheme .. "://" .. PU.host .. l, r + 1)
250 else 271 else
251 if nil == pu.host then 272 checkURL(pu.host, l, r + 1)
252 W(" no location host! " .. check .. " " .. host .. " -> " .. URL .. " -> " .. l)
253 checkURL(host, PU.scheme .. "://" .. PU.host .. l, r + 1)
254 else
255 if testing("Protocol") and pu.scheme ~= PU.scheme then
256 W(" protocol changed during redirect! " .. check .. " " .. host .. " -> " .. URL .. " -> " .. l)
257 end
258 checkURL(pu.host, l, r + 1, retry)
259 end
260 end 273 end
261 end 274 end
262 end 275 end