diff options
| author | onefang | 2019-12-24 15:08:02 +1000 |
|---|---|---|
| committer | onefang | 2019-12-24 15:08:02 +1000 |
| commit | c742660a5d5245e4bae7fa6cb7b022590aad1658 (patch) | |
| tree | 4ad75b5194968944f6d2dca516b0546ef63ae56d | |
| parent | Minor tweaks to the redirection log messages. (diff) | |
| download | apt-panopticon-c742660a5d5245e4bae7fa6cb7b022590aad1658.zip apt-panopticon-c742660a5d5245e4bae7fa6cb7b022590aad1658.tar.gz apt-panopticon-c742660a5d5245e4bae7fa6cb7b022590aad1658.tar.bz2 apt-panopticon-c742660a5d5245e4bae7fa6cb7b022590aad1658.tar.xz | |
Better handling of redirects to different hosts.
| -rw-r--r-- | apt-panopticommon.lua | 4 | ||||
| -rwxr-xr-x | apt-panopticon.lua | 64 |
2 files changed, 38 insertions, 30 deletions
diff --git a/apt-panopticommon.lua b/apt-panopticommon.lua index eab901e..accfcd5 100644 --- a/apt-panopticommon.lua +++ b/apt-panopticommon.lua | |||
| @@ -21,6 +21,7 @@ APT.notExist = | |||
| 21 | 21 | ||
| 22 | APT.verbosity = -1 | 22 | APT.verbosity = -1 |
| 23 | APT.origin = false | 23 | APT.origin = false |
| 24 | APT.redir = false | ||
| 24 | APT.keep = false | 25 | APT.keep = false |
| 25 | 26 | ||
| 26 | APT.options = | 27 | APT.options = |
| @@ -122,6 +123,9 @@ APT.parseArgs = function(args) | |||
| 122 | elseif "-o" == a then | 123 | elseif "-o" == a then |
| 123 | APT.origin = true | 124 | APT.origin = true |
| 124 | -- Not adding to sendArgs. | 125 | -- Not adding to sendArgs. |
| 126 | elseif "-r" == a then | ||
| 127 | APT.redir = true | ||
| 128 | sendArgs = sendArgs .. a .. " " | ||
| 125 | elseif "--" == a:sub(1, 2) then | 129 | elseif "--" == a:sub(1, 2) then |
| 126 | local s, e = a:find("=") | 130 | local s, e = a:find("=") |
| 127 | if nil == s then e = -1 end | 131 | if nil == s then e = -1 end |
diff --git a/apt-panopticon.lua b/apt-panopticon.lua index 6668da2..81fd281 100755 --- a/apt-panopticon.lua +++ b/apt-panopticon.lua | |||
| @@ -162,6 +162,8 @@ local url = require 'socket.url' | |||
| 162 | local ip = "" | 162 | local ip = "" |
| 163 | local cor = nil | 163 | local cor = nil |
| 164 | 164 | ||
| 165 | local downloadLock = "flock -n results/curl-" | ||
| 166 | |||
| 165 | 167 | ||
| 166 | local repoExists = function (r) | 168 | local repoExists = function (r) |
| 167 | r = r:match("([%a-]*)") | 169 | r = r:match("([%a-]*)") |
| @@ -220,6 +222,7 @@ checkHEAD = function (host, URL, r, retry, sanity) | |||
| 220 | local check = "Checking file" | 222 | local check = "Checking file" |
| 221 | local PU = url.parse(URL, defaultURL) | 223 | local PU = url.parse(URL, defaultURL) |
| 222 | local pu = url.parse(PU.scheme .. "://" .. host, defaultURL) | 224 | 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 | ||
| 223 | if 0 < r then | 226 | if 0 < r then |
| 224 | check = "Redirecting to" | 227 | check = "Redirecting to" |
| 225 | end | 228 | end |
| @@ -341,7 +344,9 @@ checkHEAD = function (host, URL, r, retry, sanity) | |||
| 341 | E(" " .. code .. " " .. cstr .. ". " .. check .. " " .. host .. " -> " .. URL, PU.scheme, "", host) | 344 | E(" " .. code .. " " .. cstr .. ". " .. check .. " " .. host .. " -> " .. URL, PU.scheme, "", host) |
| 342 | end | 345 | end |
| 343 | else | 346 | else |
| 344 | if not APT.testing(PU.scheme, host) then W("Not supported, but works " .. PU.scheme .. " " .. host .. " -> " .. URL, PU.scheme, "", host) end | 347 | if not APT.testing(PU.scheme, host) then |
| 348 | W("Not supported, but works " .. PU.scheme .. " " .. host .. " -> " .. URL, PU.scheme, "", host) | ||
| 349 | end | ||
| 345 | I(" " .. code .. " " .. cstr .. ". " .. check .. " " .. host .. " -> " .. URL) | 350 | I(" " .. code .. " " .. cstr .. ". " .. check .. " " .. host .. " -> " .. URL) |
| 346 | -- timeouts = timeouts - 1 -- Backoff the timeouts count if we managed to get through. | 351 | -- timeouts = timeouts - 1 -- Backoff the timeouts count if we managed to get through. |
| 347 | if nil ~= location then | 352 | if nil ~= location then |
| @@ -363,22 +368,16 @@ checkHEAD = function (host, URL, r, retry, sanity) | |||
| 363 | --[[ The hard part here is that we end up throwing ALL of the test files at the redirected location. | 368 | --[[ The hard part here is that we end up throwing ALL of the test files at the redirected location. |
| 364 | Not good for deb.debian.org, which we should only be throwing .debs at. | 369 | Not good for deb.debian.org, which we should only be throwing .debs at. |
| 365 | What we do is loop through the DNS entries, and only test the specific protocol & file being tested here. | 370 | What we do is loop through the DNS entries, and only test the specific protocol & file being tested here. |
| 366 | |||
| 367 | This is what I came up with for checking if we are already testing a specific URL. | ||
| 368 | Still duplicates a tiny bit, but much less than the previous find based method. | ||
| 369 | TODO - maybe we can switch to using flock like we do with the other curl calls? | ||
| 370 | ]] | 371 | ]] |
| 371 | C('Commented out code being called in checkHEAD() for redirects that should no longer happen!') | 372 | local u = pu.host .. "://" .. pu.path |
| 372 | --[[ | 373 | local file = pu.path:match(".*/([%w%.%+%-_]*)$") -- Get the filename. |
| 373 | local file = pu.host .. "://" .. pu.path | 374 | local path = pu.path:sub(2, -1 -(#file)) |
| 374 | local f = io.popen(string.format('if [ ! -f results/%s.check ] ; then touch results/%s.check; echo -n "check"; fi', file:gsub("/", "_"), file:gsub("/", "_") )):read("*a") | 375 | local check = u:gsub("/", "_") |
| 375 | if (nil == f) or ("check" == f) then | 376 | local extraArgs = sendArgs .. ' -o -r ' |
| 376 | I(" Now checking redirected host " .. file) | 377 | if 'https' == pu.scheme then extraArgs = ' --tests=-http' end |
| 377 | checkHost(pu.host, pu.host, nil, "redir", pu.path) | 378 | if 'http' == pu.scheme then extraArgs = ' --tests=-https' end |
| 378 | else | 379 | I(" Now checking redirected host " .. u) |
| 379 | D(" Already checking " .. file) | 380 | APT.fork("ionice -c3 nice -n 19 " .. downloadLock .. "REDIR-" .. check .. ".log" .. " ./apt-panopticon.lua " .. extraArgs .. pu.host .. "/" .. path .. " " .. file) |
| 380 | end | ||
| 381 | ]] | ||
| 382 | end | 381 | end |
| 383 | end | 382 | end |
| 384 | end | 383 | end |
| @@ -483,7 +482,6 @@ local postDownload = function(host, r, k) | |||
| 483 | end | 482 | end |
| 484 | end | 483 | end |
| 485 | 484 | ||
| 486 | local downloadLock = "flock -n results/curl-" | ||
| 487 | local download = "curl" .. | 485 | local download = "curl" .. |
| 488 | " --connect-timeout " .. APT.options.timeout.value .. | 486 | " --connect-timeout " .. APT.options.timeout.value .. |
| 489 | " --create-dirs -f -L" .. | 487 | " --create-dirs -f -L" .. |
| @@ -904,13 +902,18 @@ if 0 < #arg then | |||
| 904 | end | 902 | end |
| 905 | local pu = url.parse("http://" .. arg[1]) | 903 | local pu = url.parse("http://" .. arg[1]) |
| 906 | 904 | ||
| 905 | if APT.redir and (nil == arg[3])then | ||
| 906 | arg[3] = arg[2] | ||
| 907 | arg[2] = nil | ||
| 908 | end | ||
| 909 | |||
| 907 | if APT.testing("Integrity") or APT.testing("Updated") then | 910 | if APT.testing("Integrity") or APT.testing("Updated") then |
| 908 | if APT.origin and APT.options.referenceSite.value == pu.host then | 911 | if APT.origin and APT.options.referenceSite.value == pu.host then |
| 909 | -- if not APT.keep then os.execute("rm -fr results/" .. pu.host .. " 2>/dev/null") end | 912 | -- if not APT.keep then os.execute("rm -fr results/" .. pu.host .. " 2>/dev/null") end |
| 910 | end | 913 | end |
| 911 | end | 914 | end |
| 912 | 915 | ||
| 913 | if APT.origin then APT.results["IPs"] = gatherIPs(pu.host) end | 916 | if APT.origin or APT.redir then APT.results["IPs"] = gatherIPs(pu.host) end |
| 914 | 917 | ||
| 915 | if nil ~= arg[2] then | 918 | if nil ~= arg[2] then |
| 916 | APT.logFile, e = io.open("results/LOG_" .. pu.host .. "_" .. arg[2] .. ".html", "a+") | 919 | APT.logFile, e = io.open("results/LOG_" .. pu.host .. "_" .. arg[2] .. ".html", "a+") |
| @@ -924,8 +927,7 @@ if 0 < #arg then | |||
| 924 | if nil ~= arg[3] then I(" Using file " .. arg[3]); end | 927 | if nil ~= arg[3] then I(" Using file " .. arg[3]); end |
| 925 | APT.results = APT.padResults(APT.results) | 928 | APT.results = APT.padResults(APT.results) |
| 926 | 929 | ||
| 927 | if APT.origin then | 930 | if APT.origin or APT.redir then |
| 928 | |||
| 929 | local file = arg[3] | 931 | local file = arg[3] |
| 930 | if nil == file then file = '' end | 932 | if nil == file then file = '' end |
| 931 | local path = pu.path | 933 | local path = pu.path |
| @@ -949,17 +951,20 @@ if 0 < #arg then | |||
| 949 | end | 951 | end |
| 950 | end | 952 | end |
| 951 | 953 | ||
| 952 | if APT.testing("Integrity") or APT.testing("Updated") then | 954 | if not APT.redir then |
| 953 | if APT.origin and (APT.options.roundRobin.value ~= pu.host) then | 955 | if APT.testing("Integrity") or APT.testing("Updated") then |
| 954 | I("Starting file downloads for " .. pu.host) | 956 | if APT.origin and (APT.options.roundRobin.value ~= pu.host) then |
| 955 | D('*>* About to create coroutine.') | 957 | I("Starting file downloads for " .. pu.host) |
| 956 | cor = coroutine.create(doDownloads) | 958 | D('*>* About to create coroutine.') |
| 957 | local ok, message = coroutine.resume(cor, pu.host, pu.path, parseStart(pu.host)) | 959 | cor = coroutine.create(doDownloads) |
| 958 | if not ok then cor = nil; print(message) end | 960 | local ok, message = coroutine.resume(cor, pu.host, pu.path, parseStart(pu.host)) |
| 961 | if not ok then cor = nil; print(message) end | ||
| 962 | end | ||
| 959 | end | 963 | end |
| 964 | checkFiles(pu.host, pu.host, pu.path); | ||
| 965 | else | ||
| 966 | checkFiles(pu.host, pu.host, pu.path:sub(1, -1), file); | ||
| 960 | end | 967 | end |
| 961 | |||
| 962 | checkFiles(pu.host, pu.host, pu.path); | ||
| 963 | else | 968 | else |
| 964 | checkHost(pu.host, pu.host, pu.path, arg[2], arg[3]) | 969 | checkHost(pu.host, pu.host, pu.path, arg[2], arg[3]) |
| 965 | end | 970 | end |
| @@ -1004,7 +1009,6 @@ else | |||
| 1004 | if nil ~= odt then os.execute(' rm -f results_old; ln -s results_' .. odt .. ' results_old 2>/dev/null') end | 1009 | if nil ~= odt then os.execute(' rm -f results_old; ln -s results_' .. odt .. ' results_old 2>/dev/null') end |
| 1005 | if nil ~= dt then os.execute('mkdir -p results_' .. dt .. '; rm -f results; ln -s results_' .. dt .. ' results 2>/dev/null') end | 1010 | if nil ~= dt then os.execute('mkdir -p results_' .. dt .. '; rm -f results; ln -s results_' .. dt .. ' results 2>/dev/null') end |
| 1006 | os.execute('if [ -f results/stamp ]; then mv results/stamp results/stamp.old; else touch results/stamp.old -t 199901010000; fi; touch results/stamp') | 1011 | os.execute('if [ -f results/stamp ]; then mv results/stamp results/stamp.old; else touch results/stamp.old -t 199901010000; fi; touch results/stamp') |
| 1007 | os.execute("rm -f results/*.check 2>/dev/null") | ||
| 1008 | if not APT.keep then | 1012 | if not APT.keep then |
| 1009 | os.execute("rm -f results/*.log 2>/dev/null") | 1013 | os.execute("rm -f results/*.log 2>/dev/null") |
| 1010 | os.execute("rm -f results/*.html 2>/dev/null") | 1014 | os.execute("rm -f results/*.html 2>/dev/null") |
