diff options
Diffstat (limited to 'apt-panopticon.lua')
-rwxr-xr-x | apt-panopticon.lua | 114 |
1 files changed, 51 insertions, 63 deletions
diff --git a/apt-panopticon.lua b/apt-panopticon.lua index b140831..889058b 100755 --- a/apt-panopticon.lua +++ b/apt-panopticon.lua | |||
@@ -163,7 +163,7 @@ local ip = "" | |||
163 | local cor = nil | 163 | local cor = nil |
164 | 164 | ||
165 | local downloadLock = "flock -n results/curl-" | 165 | local downloadLock = "flock -n results/curl-" |
166 | 166 | local arw = ' <font color="magenta"><b>-></b></font> ' | |
167 | 167 | ||
168 | local repoExists = function (r) | 168 | local repoExists = function (r) |
169 | r = r:match("([%a-]*)") | 169 | r = r:match("([%a-]*)") |
@@ -215,14 +215,15 @@ end | |||
215 | 215 | ||
216 | local timeouts = 0; | 216 | local timeouts = 0; |
217 | local totalTimeouts = 0 | 217 | local totalTimeouts = 0 |
218 | local spcd = ' ' | ||
218 | checkHEAD = function (host, URL, r, retry, sanity) | 219 | checkHEAD = function (host, URL, r, retry, sanity) |
219 | if nil == r then r = 0 end | 220 | if nil == r then r = 0 end |
220 | if nil == retry then retry = 0 end | 221 | if nil == retry then retry = 0 end |
221 | if nil == sanity then sanity = false end | 222 | if true == sanity then sanity = 'URLSanity' else sanity = '' end |
222 | local check = "Checking file" | 223 | local check = "HEAD testing file" |
223 | local PU = url.parse(URL, defaultURL) | 224 | local PU = url.parse(URL, defaultURL) |
224 | local pu = url.parse(PU.scheme .. "://" .. host, defaultURL) | 225 | local pu = url.parse(PU.scheme .. "://" .. host, defaultURL) |
225 | if not APT.testing(PU.scheme, host) and APT.redir then I("Not supported, not tested " .. PU.scheme .. " " .. host .. " -> " .. URL, PU.scheme, "", host); return end | 226 | if not APT.testing(PU.scheme, host) and APT.redir then I(spcd .. string.upper(PU.scheme) .. " not supported, not tested. " .. URL, host); return end |
226 | if 0 < r then | 227 | if 0 < r then |
227 | check = "Redirecting to" | 228 | check = "Redirecting to" |
228 | end | 229 | end |
@@ -231,23 +232,27 @@ checkHEAD = function (host, URL, r, retry, sanity) | |||
231 | check = "Retry " .. retry .. " " .. check | 232 | check = "Retry " .. retry .. " " .. check |
232 | end | 233 | end |
233 | if 2 <= timeouts then | 234 | if 2 <= timeouts then |
234 | E("too many timeouts! " .. check .. " " .. host .. " -> " .. URL, PU.scheme, "", host) | 235 | E(spcd .. spcd .. "too many timeouts! " .. check .. " " .. host .. arw .. URL, PU.scheme, "", host) |
235 | return | 236 | return |
236 | end | 237 | end |
237 | if APT.options.timeouts.value <= (totalTimeouts) then | 238 | if APT.options.timeouts.value <= (totalTimeouts) then |
238 | E("Way too many timeouts!", PU.scheme, "", host) | 239 | E(spcd .. spcd .. "Way too many timeouts!", PU.scheme, "", host) |
239 | return | 240 | return |
240 | end | 241 | end |
241 | if 20 <= r then | 242 | if 20 <= r then |
242 | E("too many redirects! " .. check .. " " .. host .. " -> " .. URL, PU.scheme, "", host) | 243 | E(spcd .. spcd .. "too many redirects! " .. check .. " " .. host .. arw .. URL, PU.scheme, "", host) |
243 | return | 244 | return |
244 | end | 245 | end |
245 | if APT.options.retries.value <= retry then | 246 | if APT.options.retries.value <= retry then |
246 | E("too many retries! " .. check .. " " .. host .. " -> " .. URL, PU.scheme, "", host) | 247 | E(spcd .. spcd .. "too many retries! " .. check .. " " .. host .. arw .. URL, PU.scheme, "", host) |
248 | return | ||
249 | end | ||
250 | if "https" == PU.scheme and APT.options.roundRobin.value == host then | ||
251 | I(spcd .. "Not testing " .. APT.lnk(URL) .. " mirrors wont have the correct HTTPS certificate for the round robin.", host) | ||
247 | return | 252 | return |
253 | else | ||
254 | I(spcd .. check .. " " .. APT.lnk(URL), host) | ||
248 | end | 255 | end |
249 | D(PU.scheme .. " :// " .. check .. " " .. host .. " -> " .. URL) | ||
250 | if "https" == PU.scheme and APT.options.roundRobin.value == host then D("Not testing " .. PU.scheme .. " " .. host .. " -> " .. URL .. " mirrors shouldn't have the correct cert."); return end | ||
251 | 256 | ||
252 | --[[ Using curl command line - | 257 | --[[ Using curl command line - |
253 | -I - HEAD | 258 | -I - HEAD |
@@ -282,20 +287,13 @@ checkHEAD = function (host, URL, r, retry, sanity) | |||
282 | local msg = curlStatus[status] | 287 | local msg = curlStatus[status] |
283 | if nil == msg then msg = "UNKNOWN CURL STATUS CODE!" end | 288 | if nil == msg then msg = "UNKNOWN CURL STATUS CODE!" end |
284 | if (28 == status) or (7 == status) then | 289 | if (28 == status) or (7 == status) then |
285 | if sanity then | 290 | T(spcd .. spcd .. "TIMEOUT " .. timeouts + 1 .. ", retry " .. retry + 1 .. ' ' .. APT.lnk(URL), PU.scheme, sanity, host) |
286 | T(" TIMEOUT " .. timeouts + 1 .. ", retry " .. retry + 1, PU.scheme, "URLSanity", host) | ||
287 | else | ||
288 | T(" TIMEOUT " .. timeouts + 1 .. ", retry " .. retry + 1, PU.scheme, "", host) | ||
289 | end | ||
290 | timeouts = timeouts + 1 | 291 | timeouts = timeouts + 1 |
291 | else | 292 | else |
292 | if sanity then | 293 | E(spcd .. spcd .. "The curl command return an error code of " .. status .. " - " .. msg .. ' for '.. APT.lnk(URL), PU.scheme, sanity, host) |
293 | E(" The curl command return an error code of " .. status .. " - " .. msg, PU.scheme, "URLSanity", host) | ||
294 | else | ||
295 | E(" The curl command return an error code of " .. status .. " - " .. msg, PU.scheme, "", host) | ||
296 | end | ||
297 | end | 294 | end |
298 | checkHEAD(host, URL, r, retry + 1, sanity) | 295 | if 60 == status then return end -- Certificate is invalid, don't bother retrying. |
296 | checkHEAD(host, URL, r, retry + 1, '' ~= sanity) | ||
299 | return | 297 | return |
300 | end | 298 | end |
301 | local code = "???" | 299 | local code = "???" |
@@ -303,17 +301,13 @@ checkHEAD = function (host, URL, r, retry, sanity) | |||
303 | local location = nil | 301 | local location = nil |
304 | local tmot = 1 | 302 | local tmot = 1 |
305 | while not APT.checkFile('results/STATUS_' .. fname) do | 303 | while not APT.checkFile('results/STATUS_' .. fname) do |
306 | I('Waiting for results/STATUS_' .. fname .. ' file.') | 304 | D(spcd .. spcd .. 'Waiting for results/STATUS_' .. fname .. ' file.') |
307 | os.execute('sleep ' .. tmot) | 305 | os.execute('sleep ' .. tmot) |
308 | tmot = tmot * 2 | 306 | tmot = tmot * 2 |
309 | if 8 < tmot then | 307 | if 8 < tmot then |
310 | if sanity then | 308 | T(spcd .. spcd .. "TIMEOUT " .. timeouts + 1 .. ", retry " .. retry + 1 .. ' ' .. APT.lnk(URL), PU.scheme, sanity, host) |
311 | T(" TIMEOUT " .. timeouts + 1 .. ", retry " .. retry + 1, PU.scheme, "URLSanity", host) | ||
312 | else | ||
313 | T(" TIMEOUT " .. timeouts + 1 .. ", retry " .. retry + 1, PU.scheme, "", host) | ||
314 | end | ||
315 | timeouts = timeouts + 1 | 309 | timeouts = timeouts + 1 |
316 | checkHEAD(host, URL, r, retry + 1, sanity) | 310 | checkHEAD(host, URL, r, retry + 1, '' ~= sanity) |
317 | return | 311 | return |
318 | end | 312 | end |
319 | end | 313 | end |
@@ -323,10 +317,10 @@ checkHEAD = function (host, URL, r, retry, sanity) | |||
323 | if "#" == line:sub(1, 1) then | 317 | if "#" == line:sub(1, 1) then |
324 | code = line:sub(2, 4) | 318 | code = line:sub(2, 4) |
325 | if ("https" == PU.scheme) and ("0" ~= line:sub(6, 6)) then | 319 | if ("https" == PU.scheme) and ("0" ~= line:sub(6, 6)) then |
326 | if sanity then | 320 | if '' ~= sanity then |
327 | E(" The certificate is invalid.", PU.scheme, "URLSanity", host) | 321 | E(spcd .. spcd .. "The certificate is invalid.", PU.scheme, sanity, host) |
328 | else | 322 | else |
329 | E(" The certificate is invalid.", PU.scheme, "https", host) | 323 | E(spcd .. spcd .. "The certificate is invalid.", PU.scheme, "https", host) |
330 | end | 324 | end |
331 | end | 325 | end |
332 | elseif "http" == line:sub(1, 4):lower() then | 326 | elseif "http" == line:sub(1, 4):lower() then |
@@ -339,39 +333,35 @@ checkHEAD = function (host, URL, r, retry, sanity) | |||
339 | os.execute('rm -f results/STATUS_' .. fname .. ' 2>/dev/null') | 333 | os.execute('rm -f results/STATUS_' .. fname .. ' 2>/dev/null') |
340 | end | 334 | end |
341 | if ("4" == tostring(code):sub(1, 1)) or ("5" == tostring(code):sub(1, 1)) then | 335 | if ("4" == tostring(code):sub(1, 1)) or ("5" == tostring(code):sub(1, 1)) then |
342 | if sanity then | 336 | E(spcd .. spcd .. code .. " " .. cstr .. ". " .. check .. " " .. APT.lnk(URL), PU.scheme, sanity, host) |
343 | E(" " .. code .. " " .. cstr .. ". " .. check .. " " .. host .. " -> " .. URL, PU.scheme, "URLSanity", host) | ||
344 | else | ||
345 | E(" " .. code .. " " .. cstr .. ". " .. check .. " " .. host .. " -> " .. URL, PU.scheme, "", host) | ||
346 | end | ||
347 | else | 337 | else |
348 | if not APT.testing(PU.scheme, host) then | 338 | if not APT.testing(PU.scheme, host) then |
349 | W("Not supported, but works " .. PU.scheme .. " " .. host .. " -> " .. URL, PU.scheme, "", host) | 339 | W(spcd .. spcd .. "Not supported, but works " .. PU.scheme .. " " .. APT.lnk(URL), PU.scheme, "", host) |
350 | end | 340 | end |
351 | I(" " .. code .. " " .. cstr .. ". " .. check .. " " .. host .. " -> " .. URL) | 341 | I(spcd .. spcd .. code .. " " .. cstr .. ". " .. check .. " " .. APT.lnk(URL), host) |
352 | -- timeouts = timeouts - 1 -- Backoff the timeouts count if we managed to get through. | 342 | -- timeouts = timeouts - 1 -- Backoff the timeouts count if we managed to get through. |
353 | if (1 <= APT.options.bandwidth.value) and (nil ~= location) then | 343 | if (1 <= APT.options.bandwidth.value) and (nil ~= location) then |
354 | pu = url.parse(location, defaultURL) | 344 | pu = url.parse(location, defaultURL) |
355 | if ('http' == location:sub(1, 4)) and (pu.scheme ~= PU.scheme) then -- Sometimes a location sans scheme is returned, this is not a protocol change. | 345 | if ('http' == location:sub(1, 4)) and (pu.scheme ~= PU.scheme) then -- Sometimes a location sans scheme is returned, this is not a protocol change. |
356 | if APT.testing("Protocol") then | 346 | if APT.testing("Protocol") then |
357 | if APT.options.roundRobin.value == host then -- Coz HTTPS shouldn't happen via the round robin. | 347 | if APT.options.roundRobin.value == host then -- Coz HTTPS shouldn't happen via the round robin. |
358 | E(" protocol changed during redirect! " .. check .. " " .. host .. " -> " .. URL .. " -> " .. location, PU.scheme, "Protocol", host) | 348 | E(spcd .. spcd .. "Protocol changed during redirect! " .. check .. " " .. APT.lnk(URL) .. arw .. APT.lnk(location), PU.scheme, "Protocol", host) |
359 | end | 349 | end |
360 | W(" protocol changed during redirect! " .. check .. " " .. host .. " -> " .. URL .. " -> " .. location, PU.scheme, "Protocol", host) | 350 | W(spcd .. spcd .. "Protocol changed during redirect! " .. check .. " " .. APT.lnk(URL) .. arw .. APT.lnk(location), PU.scheme, "Protocol", host) |
361 | else | 351 | else |
362 | end | 352 | end |
363 | end | 353 | end |
364 | 354 | ||
365 | if location == URL then | 355 | if location == URL then |
366 | E(" redirect loop! " .. check .. " " .. host .. " -> \n" .. URL .. " -> " .. location, PU.scheme, "", host) | 356 | E(spcd .. spcd .. "Redirect loop! " .. check .. " " .. APT.lnk(URL) .. arw .. APT.lnk(location), PU.scheme, "", host) |
367 | elseif nil == pu.host then | 357 | elseif nil == pu.host then |
368 | I(" relative redirect. " .. check .. " " .. host .. " -> \n" .. URL .. " -> " .. location) | 358 | I(spcd .. spcd .. "Relative redirect. " .. check .. " " .. APT.lnk(URL) .. arw .. APT.lnk(location), host) |
369 | checkHEAD(host, PU.scheme .. "://" .. PU.host .. location, r + 1, retry, sanity) | 359 | checkHEAD(host, PU.scheme .. "://" .. PU.host .. location, r + 1, retry, '' ~= sanity) |
370 | elseif (PU.host == pu.host) or (host == pu.host) then | 360 | elseif (PU.host == pu.host) or (host == pu.host) then |
371 | I(" redirect to same host. " .. check .. " " .. host .. " -> \n" .. URL .. " -> " .. location) | 361 | I(spcd .. spcd .. "Redirect to same host. " .. check .. " " .. APT.lnk(URL) .. arw .. APT.lnk(location), host) |
372 | checkHEAD(pu.host, location, r + 1, retry, sanity) | 362 | checkHEAD(pu.host, location, r + 1, retry, '' ~= sanity) |
373 | else | 363 | else |
374 | I(" redirect to different host. " .. check .. " " .. host .. " -> \n" .. URL .. " -> " .. location) | 364 | I(spcd .. spcd .. "Redirect to different host. " .. check .. " " .. APT.lnk(URL) .. arw .. APT.lnk(location), host) |
375 | --[[ The hard part here is that we end up throwing ALL of the test files at the redirected location. | 365 | --[[ The hard part here is that we end up throwing ALL of the test files at the redirected location. |
376 | Not good for deb.debian.org, which we should only be throwing .debs at. | 366 | Not good for deb.debian.org, which we should only be throwing .debs at. |
377 | What we do is loop through the DNS entries, and only test the specific protocol & file being tested here. | 367 | What we do is loop through the DNS entries, and only test the specific protocol & file being tested here. |
@@ -384,10 +374,10 @@ checkHEAD = function (host, URL, r, retry, sanity) | |||
384 | if 'https' == pu.scheme then extraArgs = extraArgs .. ' --tests=-http' end | 374 | if 'https' == pu.scheme then extraArgs = extraArgs .. ' --tests=-http' end |
385 | if 'http' == pu.scheme then extraArgs = extraArgs .. ' --tests=-https' end | 375 | if 'http' == pu.scheme then extraArgs = extraArgs .. ' --tests=-https' end |
386 | local pth = path:match('^(.*/pool/).*$') | 376 | local pth = path:match('^(.*/pool/).*$') |
387 | if nil ~= pth then table.insert(APT.results[PU.scheme].redirects, pu.host .. "/" .. pth) else E('Odd redirect path ' .. path) end | 377 | if nil ~= pth then table.insert(APT.results[PU.scheme].redirects, pu.host .. "/" .. pth) else E(spcd .. spcd .. 'Odd redirect path ' .. path) end |
388 | I(" Now checking redirected host " .. u) | 378 | I(spcd .. spcd .. "Now checking redirected host " .. u .. ' for ' .. APT.lnk(URL) .. arw .. APT.lnk(location), host) |
389 | APT.exe(downloadLock .. "REDIR-" .. check .. ".log.txt" .. " ./apt-panopticon.lua " .. extraArgs .. ' ' .. pu.host .. "/" .. path .. " " .. file):Nice():log():fork() | 379 | APT.exe(downloadLock .. "REDIR-" .. check .. ".log.txt" .. " ./apt-panopticon.lua " .. extraArgs .. ' ' .. pu.host .. "/" .. path .. " " .. file):Nice():log():fork() |
390 | D('logging to ' .. APT.logName(pu.host, nil, file)[2]) | 380 | D(spcd .. 'logging to ' .. APT.logName(pu.host, nil, file)[2]) |
391 | end | 381 | end |
392 | end | 382 | end |
393 | end | 383 | end |
@@ -418,11 +408,10 @@ local checkFiles = function (host, ip, path, file) | |||
418 | if nil == path then path = "" end | 408 | if nil == path then path = "" end |
419 | if nil ~= file then | 409 | if nil ~= file then |
420 | if "redir" == ip then ip = host end | 410 | if "redir" == ip then ip = host end |
421 | I(" Checking IP for file " .. host .. " -> " .. ip .. " " .. path .. " " .. file) | ||
422 | if checkTimeouts(host, "http", ip .. path .. "/" .. file) then return end | 411 | if checkTimeouts(host, "http", ip .. path .. "/" .. file) then return end |
423 | if checkTimeouts(host, "https", ip .. path .. "/" .. file) then return end | 412 | if checkTimeouts(host, "https", ip .. path .. "/" .. file) then return end |
424 | else | 413 | else |
425 | I(" Checking IP " .. host .. " -> " .. ip .. " " .. path) | 414 | I(" HEAD testing files for " .. host .. arw .. ip .. " " .. path, host) |
426 | if 1 <= APT.options.bandwidth.value then | 415 | if 1 <= APT.options.bandwidth.value then |
427 | -- Do these first, coz they are likely to fork off a different server. | 416 | -- Do these first, coz they are likely to fork off a different server. |
428 | for i, s in pairs(referenceDebs) do | 417 | for i, s in pairs(referenceDebs) do |
@@ -467,10 +456,10 @@ checkHost = function (orig, host, path, ip, file) | |||
467 | end | 456 | end |
468 | else | 457 | else |
469 | if orig == host then | 458 | if orig == host then |
470 | D("checkHost " .. orig .. "" .. file) | 459 | I("Testing mirror " .. orig .. "" .. file) |
471 | APT.exe("./apt-panopticon.lua " .. sendArgs .. " -o " .. orig .. path .. " " .. file):Nice():log():fork() | 460 | APT.exe("./apt-panopticon.lua " .. sendArgs .. " -o " .. orig .. path .. " " .. file):Nice():log():fork() |
472 | D('logging to ' .. APT.logName(ph.host, nil, file)[2]) | 461 | D('logging to ' .. APT.logName(ph.host, nil, file)[2]) |
473 | else D("checkHost " .. orig .. " -> " .. host) end | 462 | else D("checkHost " .. orig .. arw .. host) end |
474 | end | 463 | end |
475 | end | 464 | end |
476 | 465 | ||
@@ -534,7 +523,7 @@ local downloads = function(host, URL, meta, release, list) | |||
534 | addDownload(host, URL, f, release, "/" .. l) | 523 | addDownload(host, URL, f, release, "/" .. l) |
535 | end | 524 | end |
536 | else | 525 | else |
537 | D('Downloading http://' .. host .. URL .. '/merged/' .. list) | 526 | I('Downloading ' .. APT.lnk('http://' .. host .. URL .. '/merged/' .. list)) |
538 | f:write('url "' .. 'http://' .. host .. URL .. '/merged/' .. list .. '"\n') | 527 | f:write('url "' .. 'http://' .. host .. URL .. '/merged/' .. list .. '"\n') |
539 | f:write('output "results/' .. host .. '/merged/' .. list .. '"\n') | 528 | f:write('output "results/' .. host .. '/merged/' .. list .. '"\n') |
540 | end | 529 | end |
@@ -582,8 +571,8 @@ local getMirrors = function () | |||
582 | local host = "" | 571 | local host = "" |
583 | local m = {} | 572 | local m = {} |
584 | local active = true | 573 | local active = true |
585 | local URL = "http://" .. APT.options.referenceSite.value .. "/mirror_list.txt" | 574 | local URL = 'http://' .. APT.options.referenceSite.value .. '/mirror_list.txt' |
586 | I("getting mirrors.") | 575 | I('Downloadin gand parsing http://' .. APT.options.referenceSite.value .. '/mirror_list.txt') |
587 | local p, c, h = http.request(URL) | 576 | local p, c, h = http.request(URL) |
588 | if nil == p then E(c .. " fetching " .. URL) else | 577 | if nil == p then E(c .. " fetching " .. URL) else |
589 | 578 | ||
@@ -683,12 +672,12 @@ local parseDebs = function(host) | |||
683 | end | 672 | end |
684 | if APT.testing("Updated") then | 673 | if APT.testing("Updated") then |
685 | if sz ~= fsz:sub(2, -2) then | 674 | if sz ~= fsz:sub(2, -2) then |
686 | E('Package size mismatch - results/' .. host .. "/merged/" .. p, 'http', 'Updated', host) | 675 | E('Package size mismatch for ' .. host .. "/merged/" .. p, 'http', 'Updated', host) |
687 | end | 676 | end |
688 | end | 677 | end |
689 | os.execute('rm -f results/' .. host .. "/merged/" .. p) | 678 | os.execute('rm -f results/' .. host .. "/merged/" .. p) |
690 | else | 679 | else |
691 | E('Failed to download - results/' .. host .. "/merged/" .. p, 'http', 'Updated', host) | 680 | E('Failed to download ' .. host .. "/merged/" .. p, 'http', 'Updated', host) |
692 | end | 681 | end |
693 | end | 682 | end |
694 | end | 683 | end |
@@ -803,7 +792,7 @@ local parseRelease = function(host) | |||
803 | if APT.testing("Integrity") then | 792 | if APT.testing("Integrity") then |
804 | local status = APT.exe( "gpgv --keyring /usr/share/keyrings/devuan-keyring.gpg results/" .. host .. "/merged/dists/" .. n .. '/' .. o .. | 793 | local status = APT.exe( "gpgv --keyring /usr/share/keyrings/devuan-keyring.gpg results/" .. host .. "/merged/dists/" .. n .. '/' .. o .. |
805 | " results/" .. host .. "/merged/dists/" .. n .. '/' .. o:sub(1, -5)):Nice():noErr():log():Do().status | 794 | " results/" .. host .. "/merged/dists/" .. n .. '/' .. o:sub(1, -5)):Nice():noErr():log():Do().status |
806 | if 0 ~= status then E("GPG check failed - " .. host .. "/merged/dists/" .. n .. '/' .. o, "http", "Integrity", host) end | 795 | if 0 ~= status then E("GPG check failed for " .. host .. "/merged/dists/" .. n .. '/' .. o, "http", "Integrity", host) end |
807 | -- TODO - should check the PGP sig of InRelease as well. | 796 | -- TODO - should check the PGP sig of InRelease as well. |
808 | end | 797 | end |
809 | os.execute('rm results/' .. host .. '/merged/dists/' .. n .. '/' .. o) | 798 | os.execute('rm results/' .. host .. '/merged/dists/' .. n .. '/' .. o) |
@@ -992,12 +981,11 @@ if 0 < #arg then | |||
992 | end | 981 | end |
993 | end | 982 | end |
994 | 983 | ||
995 | if APT.origin or APT.redir then APT.results["IPs"] = gatherIPs(pu.host) end | ||
996 | |||
997 | if not APT.logOpen(pu.host, arg[2], arg[3]) then return end | 984 | if not APT.logOpen(pu.host, arg[2], arg[3]) then return end |
998 | I("Starting tests for " .. arg[1] .. " with these tests - " .. table.concat(APT.options.tests.value, ", ")) | 985 | I("Starting tests for " .. arg[1] .. " with these tests - " .. table.concat(APT.options.tests.value, ", ")) |
999 | if nil ~= arg[2] then I(" Using IP " .. arg[2]); ip = arg[2] end | 986 | if APT.origin or APT.redir then APT.results["IPs"] = gatherIPs(pu.host) end |
1000 | if nil ~= arg[3] then I(" Using file " .. arg[3]); end | 987 | if nil ~= arg[2] then I(" Using IP " .. arg[2]); ip = arg[2] end |
988 | if nil ~= arg[3] then I(" Using file " .. arg[3]); end | ||
1001 | APT.mirrors = loadfile("results/mirrors.lua")() | 989 | APT.mirrors = loadfile("results/mirrors.lua")() |
1002 | APT.results = APT.padResults(APT.results) | 990 | APT.results = APT.padResults(APT.results) |
1003 | 991 | ||