summaryrefslogtreecommitdiffstats
path: root/openssl-model.lua
diff options
context:
space:
mode:
authornangel <nangel@iridum.private.net>2009-05-21 09:08:20 -0400
committernangel <nangel@iridum.private.net>2009-05-21 09:08:20 -0400
commit338fa0e9a214bb7abff2ef08f96054d0310f7eab (patch)
treecb692dbf468175c67db7008923446a3171ecdced /openssl-model.lua
parentf6229742f86e861dbdbe77a01ffc98744db43025 (diff)
downloadacf-openssl-338fa0e9a214bb7abff2ef08f96054d0310f7eab.tar.bz2
acf-openssl-338fa0e9a214bb7abff2ef08f96054d0310f7eab.tar.xz
Committer: nangel <nangel@tetrasec.net>
listcerts function now forks openssl only once. This saves time when number of certs is > 100.
Diffstat (limited to 'openssl-model.lua')
-rw-r--r--openssl-model.lua36
1 files changed, 28 insertions, 8 deletions
diff --git a/openssl-model.lua b/openssl-model.lua
index 3db9426..8bc09e9 100644
--- a/openssl-model.lua
+++ b/openssl-model.lua
@@ -515,25 +515,45 @@ listcerts = function(user)
user = user or "*"
local list={}
local files = posix.glob(certdir..user..".*\\.pfx") or {}
+ -- Do this in two steps - saves forking openssl for each cert, which
+ -- speeds things up noticably for > 100 certs
+ local crtlist = "cat <<-EOF | openssl\n"
+ local crttab = {}
for i,x in ipairs(files) do
local name = basename(x,".pfx")
- local a,b,c,d = string.match(name, "([^%.]*)%.([^%.]*)%.([^%.]*).([^%.]*)")
- local cmd = path .. "openssl x509 -in "..certdir..format.escapespecialcharacters(name)..".crt -noout -enddate"
- local f = io.popen(cmd)
- local enddate = f:read("*a")
+ local a,b,c,d = string.match(name,
+ "([^%.]*)%.([^%.]*)%.([^%.]*).([^%.]*)")
+ list[#list + 1] = {name=name, user=a, certtype=b,
+ commonName=unhashname(c), serial=d, enddate=enddate,
+ daysremaining=time}
+ crtlist = crtlist .. "x509 -in " ..
+ certdir..format.escapespecialcharacters(name) ..
+ ".crt -noout -enddate\n"
+ end
+ crtlist = crtlist .. "EOF\n"
+
+ local fh=io.popen(crtlist)
+
+ for i,x in ipairs(files) do
+ local enddate = fh:read("*l") or "notAfter=Jan 1 00:00:01 1970 GMT"
enddate = string.match(enddate, "notAfter=(.*)")
- f:close()
- local month, day, year = string.match(enddate, "(%a+)%s+(%d+)%s+%S+%s+(%d+)")
+ local month, day, year =
+ string.match(enddate, "(%a+)%s+(%d+)%s+%S+%s+(%d+)")
- local reversemonth = {Jan=1,Feb=2,Mar=3,Apr=4,May=5,Jun=6,Jul=7,Aug=8,Sep=9,Oct=10,Nov=11,Dec=12}
+ local reversemonth = {Jan=1,Feb=2,Mar=3,Apr=4,May=5,Jun=6,
+ Jul=7,Aug=8,Sep=9,Oct=10,Nov=11,Dec=12}
local time = os.time({year=year, month=reversemonth[month], day=day})
if os.time() > time then
time = 0
else
time = (time-os.time())/86400
end
- list[#list + 1] = {name=name, user=a, certtype=b, commonName=unhashname(c), serial=d, enddate=enddate, daysremaining=time}
+ list[i].enddate = enddate
+ list[i].daysremaining = time
end
+
+ fh:close()
+
return cfe({ type="list", value=list, label="List of approved certificates" })
end