From: Steven Barth Date: Sun, 7 Jun 2009 10:15:12 +0000 (+0000) Subject: nixio: Add support for DER certificates, PX5G fix Certmaster X-Git-Tag: 0.9.0~256 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=0ebce1d6088a3a503ab038fd5ab81357ccabe625;p=oweals%2Fluci.git nixio: Add support for DER certificates, PX5G fix Certmaster --- diff --git a/libs/nixio/root/etc/nixio/.nixio_stamp b/libs/nixio/root/etc/nixio/.nixio_stamp new file mode 100644 index 000000000..e69de29bb diff --git a/libs/nixio/src/tls-context.c b/libs/nixio/src/tls-context.c index e55de05cc..235a72382 100644 --- a/libs/nixio/src/tls-context.c +++ b/libs/nixio/src/tls-context.c @@ -113,7 +113,22 @@ static int nixio_tls_ctx_create(lua_State *L) { static int nixio_tls_ctx_set_cert(lua_State *L) { SSL_CTX *ctx = nixio__checktlsctx(L); const char *cert = luaL_checkstring(L, 2); - return nixio__tls_pstatus(L, SSL_CTX_use_certificate_chain_file(ctx, cert)); + const char *type = luaL_optstring(L, 3, "chain"); + int ktype; + + if (!strcmp(type, "chain")) { + return nixio__tls_pstatus(L, + SSL_CTX_use_certificate_chain_file(ctx, cert)); + } else if (!strcmp(type, "pem")) { + ktype = SSL_FILETYPE_PEM; + } else if (!strcmp(type, "asn1")) { + ktype = SSL_FILETYPE_ASN1; + } else { + return luaL_argerror(L, 3, "supported values: chain, pem, asn1"); + } + + return nixio__tls_pstatus(L, + SSL_CTX_use_certificate_file(ctx, cert, ktype)); } static int nixio_tls_ctx_set_key(lua_State *L) { diff --git a/libs/px5g/lua/px5g/util.lua b/libs/px5g/lua/px5g/util.lua index e94fb6507..0f07c81b8 100644 --- a/libs/px5g/lua/px5g/util.lua +++ b/libs/px5g/lua/px5g/util.lua @@ -29,7 +29,7 @@ function der2pem(data, type) local b64 = nixio.bin.b64encode(data) local outdata = {preamble[type]} - for i = 1, 64, #b64 + 63 do + for i = 1, #b64, 64 do outdata[#outdata + 1] = b64:sub(i, i + 63) end outdata[#outdata + 1] = postamble[type] @@ -37,3 +37,8 @@ function der2pem(data, type) return table.concat(outdata, "\n") end + +function pem2der(data) + local b64 = data:gsub({["\n"] = "", ["%-%-%-%-%-.-%-%-%-%-%-"] = ""}) + return nixio.bin.b64decode(b64) +end \ No newline at end of file diff --git a/libs/px5g/root/usr/sbin/px5g-genkeys b/libs/px5g/root/usr/sbin/px5g-genkeys index 29906577f..87a66bfe2 100755 --- a/libs/px5g/root/usr/sbin/px5g-genkeys +++ b/libs/px5g/root/usr/sbin/px5g-genkeys @@ -6,6 +6,7 @@ local px5g = require "px5g" local nixio = require "nixio" local fs = require "nixio.fs" local os = require "os" +nixio.umask(77) if not fs.access(certfile) then local key = px5g.genkey(2048) diff --git a/libs/px5g/src/px5g.c b/libs/px5g/src/px5g.c index 20ae7957f..feecd0127 100644 --- a/libs/px5g/src/px5g.c +++ b/libs/px5g/src/px5g.c @@ -85,21 +85,22 @@ static int px5g_rsa_create_selfsigned(lua_State *L) { strftime(tstr, sizeof(tstr), "%F %H:%M:%S", gmtime(&to)), 4, "Invalid Time"); + size_t join = 1; lua_pushliteral(L, ""); for (int i = 0; i < (sizeof(xfields) / sizeof(*xfields)); i++) { lua_pushstring(L, xfields[i]); lua_rawget(L, 2); if (lua_isstring(L, -1)) { const char *val = lua_tostring(L, -1); - luaL_argcheck(L, !strchr(val, '\''), 2, "Invalid Value"); - lua_pushfstring(L, "%s%s='%s';", - lua_tostring(L, -2), xfields[i], val); - lua_remove(L, -2); + luaL_argcheck(L, !strchr(val, ';'), 2, "Invalid Value"); + lua_pushfstring(L, "%s=%s;", xfields[i], val); lua_remove(L, -2); + join++; } else { lua_pop(L, 1); } } + lua_concat(L, join); x509_raw cert; x509write_init_raw(&cert);