Files
Facilitor/APPL/FAC/fac_verify_sha.asp
Jos Groot Lipman 823a3382d6 FSN#35733 Diverse plekken PRSSYS-->FACTAB die nog strenger is
svn path=/Website/trunk/; revision=28471
2016-03-14 11:39:30 +00:00

166 lines
5.4 KiB
Plaintext

<%@language = "javascript" %>
<% /*
LET OP: Dit bestand moeilijk te beantwoorden vragen kan opwerpen
en is dan ook een 'undocumented' feature.
$Revision$
$Id$
File: appl/fac/fac_verify_sha.asp
Description: Verify Facilitor asp files
Parameters:
Context: Manual call to check asp file consistency
Werkt in combinatie met de geautomatiseerde mkRelease
die in de appl-folder een .sha file met checksums plaatst.
Note: FACTAB authorization is required
*/ %>
<!--#include file="../Shared/common.inc"-->
<%
var autfunction = "WEB_FACTAB";
var authparams = user.checkAutorisation(autfunction);
if (Server.ScriptTimeout<600) Server.ScriptTimeout=600;
var fso = new ActiveXObject("Scripting.FileSystemObject");
var oCrypto = new ActiveXObject("SLNKDWF.Crypto");
// zoek de nieuwste sha file in de appl folder. Als het goed is, is er maar
// eentje maar mensen oveschrijven nog wel eens een appl/ ipv vervangen
var maxrev = -1;
var shafile;
var startFolder = fso.GetFolder(Server.MapPath("../"))
var fc1 = new Enumerator(startFolder.Files);
for (; !fc1.atEnd(); fc1.moveNext())
{
var fil = fc1.item();
var filename = fil.Name;
if (filename.match(/svnrevision_r\d*\.sha\.inc/i))
{
var rev = parseInt(filename.substring(13), 10);
if (rev > maxrev)
{
maxrev = rev;
shafile = filename;
}
}
}
if (maxrev < 0)
{
shared.internal_error("No .sha file found in " + Server.MapPath("../"));
Response.End()
}
%>
<html>
<head>
<% FCLTHeader.Generate(); %>
<title>FACILITOR file checksum verifier</title>
</head>
<body id="listbody">
<%
var fsha = fso.OpenTextFile(Server.MapPath("../" + shafile));
var allsha = fsha.ReadAll().split("\n");
if (allsha.length == 1)
var allsha = allsha.split(/\x0A/); // Misschien alleen UNIX LF's?
fsha.Close();
var ff = fso.GetFile(Server.MapPath("../" + shafile));
Response.Write("<h1>Checking {0} files from appl/{1} ({2})</h1>".format(allsha.length, shafile, toDateTimeString(ff.DateLastModified)));
Response.Flush();
var allfiles = { };
// Some known safe files
allfiles["../appl/" + shafile] = 1;
allfiles["../scanudls.asp"] = 1;
allfiles["../sso_sgf.asp"] = 1;
allfiles["../json2.js"] = 1;
allfiles["../default.asp"] = 1;
%><table class='rstable'>
<thead><tr><th>File</th><th>Message</th><th>Comment</th></tr></thead>
<%
var cntbad = 0;
for (var i in allsha)
{
var regel = allsha[i];
var spl = regel.split(" ");
if (spl.length == 2)
{
var sha_should = spl[0];
var fname = spl[1].substring(1, spl[1].length); // was 'length-1' toen we CR+LF hadden?
fname = fname.replace(/\\/g,'/');
allfiles[fname.toLowerCase()] = 1;
try {
var sha_is = oCrypto.hex_sha1_file(Server.MapPath("../" + fname));
if (sha_should != sha_is)
{ // Revisienummer zoeken kan helaas niet. Leuk bedacht maar uit de minified bestanden is het verwijderd.
var ff = fso.GetFile(Server.MapPath("../" + fname));
rev = toDateTimeString(ff.DateLastModified);
Response.Write("<tr><td>" + fname.replace(/^\.\.\//,"/") + "</td><td>SHA mismatch</td><td>" + rev + "</td></tr>");
cntbad ++;
}
}
catch(e)
{
Response.Write("<tr><td>" + fname.replace(/^\.\.\//,"/") + "</td><td>Error reading</td><td>" + safe.html(e.description) + "</td></tr>");
cntbad++;
}
}
}
%></table><%
if (!cntbad)
Response.Write("<p>No modified files detected</p>");
Response.Write("<h1>Looking for unknown files</h1>");
var rootdir = Server.MapPath("../../") + "\\";
var cntunknown = 0;
function scanFolder(scanDir, lvl)
{
if (scanDir.match(/CUST\/$/i))
return;
if (scanDir.match(/TEMP\/$/i))
return;
if (scanDir.match(/SOAP\/$/i))
return;
// Response.Write("<br>------------- ["+scanDir + "] -------------")
startFolder = fso.GetFolder(rootdir + scanDir)
var fc1 = new Enumerator(startFolder.Files);
for (; !fc1.atEnd(); fc1.moveNext())
{
var fil = fc1.item();
var filename = fil.Name;
if (filename == "web.config") // die is niet erg
continue;
if (!(("../" + scanDir + filename).toLowerCase() in allfiles))
{
var sha1 = oCrypto.hex_sha1_file(rootdir + scanDir + filename);
var ff = fso.GetFile(rootdir + scanDir + filename);
rev = toDateTimeString(ff.DateLastModified);
Response.Write("<tr><td>" + (scanDir + filename) + "</td><td>" + rev + "</td><td>" + sha1 + "</td></tr>");
cntunknown++;
//Response.Write("<br>Unknown file: " + sha1 + " /" + scanDir + filename);
}
}
// En nu recursief alle subfolders.
var fc1 = new Enumerator(startFolder.SubFolders);
for (; !fc1.atEnd(); fc1.moveNext())
{
fil = fc1.item();
scanFolder(scanDir + fil.Name + "/", lvl+1);
}
}
%><table class='rstable'>
<thead><tr><th>File</th><th>Message</th><th>SHA</th></tr></thead>
<%
scanFolder("", 0)
%></table><%
if (!cntunknown)
Response.Write("<p>No unkwown files detected</p>");
%>
</body>
</html>