daemon/tls_ephemeral_credentials.c \
daemon/main.c
-kresd_DIST := daemon/lua/kres.lua daemon/lua/kres-gen.lua daemon/lua/trust_anchors.lua
+kresd_DIST := daemon/lua/kres.lua daemon/lua/kres-gen.lua \
+ daemon/lua/trust_anchors.lua daemon/lua/zonefile.lua
# Embedded resources
%.inc: %.lua
daemon/lua/trust_anchors.lua: daemon/lua/trust_anchors.lua.in
@$(call quiet,SED,$<) -e "s|@ETCDIR@|$(ETCDIR)|g" $< > $@
+LIBZSCANNER_COMMENTS := \
+ $(shell pkg-config libzscanner --atleast-version=2.4.2 && echo true || echo false)
+daemon/lua/zonefile.lua: daemon/lua/zonefile.lua.in
+ @$(call quiet,SED,$<) -e "s|@LIBZSCANNER_COMMENTS@|$(LIBZSCANNER_COMMENTS)|g" $< > $@
+
daemon/lua/kres-gen.lua: | $(libkres)
@echo "WARNING: regenerating $@"
daemon/lua/kres-gen.sh > $@
end))
end
local rdata = hex_encode(rr.rdata)
- return string.format('%s %d IN TYPE%d \\# %d %s',
+ res = string.format('%s %d IN TYPE%d \\# %d %s',
dname2str(rr.owner), rr.ttl, rr.type, #rr.rdata, rdata)
+ if rr.comment then res = res .. ';' .. rr.comment end
+ return res
end
-- Module API
end,
current_rr = function(zs)
assert(ffi.istype(zs, zs_scanner_t))
- return {owner = ffi.string(zs.r_owner, zs.r_owner_length),
- ttl = tonumber(zs.r_ttl),
- class = tonumber(zs.r_class),
- type = tonumber(zs.r_type),
- rdata = ffi.string(zs.r_data, zs.r_data_length)}
+ return {
+ owner = ffi.string(zs.r_owner, zs.r_owner_length),
+ ttl = tonumber(zs.r_ttl),
+ class = tonumber(zs.r_class),
+ type = tonumber(zs.r_type),
+ rdata = ffi.string(zs.r_data, zs.r_data_length),
+ comment = zs:current_comment(),
+ }
end,
strerr = function(zs)
assert(ffi.istype(zs, zs_scanner_t))
return ffi.string(libzscanner.zs_strerror(zs.error.code))
end,
+ current_comment = function(zs)
+ if not @LIBZSCANNER_COMMENTS@ then return nil end -- support in libzscanner
+ if zs.buffer_length > 0 then
+ return ffi.string(zs.buffer, zs.buffer_length - 1)
+ else
+ return nil
+ end
+ end
},
})
-- Module API
local rrparser = {
new = zs_scanner_t,
+
+ -- Parse a file into a list of RRs
file = function (path)
local zs = zs_scanner_t()
local ok, err = zs:open(path)
end
return results
end,
+
+ -- Parse a string into a list of RRs.
+ string = function (input)
+ local zs = zs_scanner_t()
+ local results = {}
+ local ok = zs:parse(input .. '\n') -- avoid problems with strings without newlines
+ -- TODO: it's OK since libzscanner-2.4.2
+ while ok do
+ table.insert(results, zs:current_rr())
+ ok = zs:parse()
+ end
+ return results
+ end,
+
state = zs_state,
}
return rrparser