1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
#!/usr/bin/env lua
-- cfgdump.lua prosody.cfg.lua [[host] option]
if not pcall(require, "prosody.loader") then
pcall(require, "loader");
end
local s_format, print = string.format, print;
local printf = function(fmt, ...) return print(s_format(fmt, ...)); end
local it = require "prosody.util.iterators";
local function sort_anything(a, b)
local typeof_a, typeof_b = type(a), type(b);
if typeof_a ~= typeof_b then return typeof_a < typeof_b end
return a < b -- should work for everything in a config file
end
local serialization = require "prosody.util.serialization";
local serialize = serialization.new and serialization.new({
unquoted = true, table_iterator = function(t) return it.sorted_pairs(t, sort_anything); end,
}) or serialization.serialize;
local configmanager = require"prosody.core.configmanager";
local startup = require "prosody.util.startup";
startup.set_function_metatable();
local config_filename, onlyhost, onlyoption = ...;
local ok, _, err = configmanager.load(config_filename or "./prosody.cfg.lua", "lua");
assert(ok, err);
if onlyhost then
if not onlyoption then
onlyhost, onlyoption = "*", onlyhost;
end
if onlyhost ~= "*" then
local component_module = configmanager.get(onlyhost, "component_module");
if component_module == "component" then
printf("Component %q", onlyhost);
elseif component_module then
printf("Component %q %q", onlyhost, component_module);
else
printf("VirtualHost %q", onlyhost);
end
end
printf("%s = %s", onlyoption or "?", serialize(configmanager.get(onlyhost, onlyoption)));
return;
end
local config = configmanager.getconfig();
for host, hostcfg in it.sorted_pairs(config) do
local fixed = {};
for option, value in it.sorted_pairs(hostcfg) do
fixed[option] = value;
if option:match("ports?$") or option:match("interfaces?$") then
if option:match("s$") then
if type(value) ~= "table" then
fixed[option] = { value };
end
else
if type(value) == "table" and #value > 1 then
fixed[option] = nil;
fixed[option.."s"] = value;
end
end
end
end
config[host] = fixed;
end
local globals = config["*"]; config["*"] = nil;
local function printsection(section)
local out, n = {}, 1;
for k,v in it.sorted_pairs(section) do
out[n], n = s_format("%s = %s", k, serialize(v)), n + 1;
end
table.sort(out);
print(table.concat(out, "\n"));
end
print("-------------- Prosody Exported Configuration File -------------");
print();
print("------------------------ Global section ------------------------");
print();
printsection(globals);
print();
local has_components = nil;
print("------------------------ Virtual hosts -------------------------");
for host, hostcfg in it.sorted_pairs(config) do
setmetatable(hostcfg, nil);
hostcfg.defined = nil;
if hostcfg.component_module == nil then
print();
printf("VirtualHost %q", host);
printsection(hostcfg);
else
has_components = true
end
end
print();
if has_components then
print("------------------------- Components ---------------------------");
for host, hostcfg in it.sorted_pairs(config) do
local component_module = hostcfg.component_module;
hostcfg.component_module = nil;
if component_module then
print();
if component_module == "component" then
printf("Component %q", host);
else
printf("Component %q %q", host, component_module);
hostcfg.component_module = nil;
hostcfg.load_global_modules = nil;
end
printsection(hostcfg);
end
end
end
print()
print("------------------------- End of File --------------------------");
|