Changeset

10607:a845c877d997 0.11

Merge
author Kim Alvefur <zash@zash.se>
date Mon, 20 Jan 2020 19:51:49 +0100
parents 10605:f7dd32974f15 (diff) 10606:aa8d133f2ee7 (current diff)
children 10608:87003b937672
files .hgtags
diffstat 4 files changed, 69 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Mon Jan 06 18:02:16 2020 +0100
+++ b/.hgtags	Mon Jan 20 19:51:49 2020 +0100
@@ -71,4 +71,4 @@
 4f8b6c09e5f328e3d3d4233dc78fa4fd0535171c 0.11.2
 dd7e924c74ef27b7f92eb872d2db50aaa229b234 0.11.3
 10d6d0d91f4ec47a6eb446792fee1d4b79a914d7 0.11.4
-10d6d0d91f4ec47a6eb446792fee1d4b79a914d7 0.11.4
+dbd60f47316492bc367802914dc8fa47f4b3edac 0.11.5
--- a/plugins/mod_posix.lua	Mon Jan 06 18:02:16 2020 +0100
+++ b/plugins/mod_posix.lua	Mon Jan 20 19:51:49 2020 +0100
@@ -126,7 +126,12 @@
 end
 require "core.loggingmanager".register_sink_type("syslog", syslog_sink_maker);
 
-local daemonize = module:get_option("daemonize", prosody.installed);
+local daemonize = prosody.opts.daemonize;
+
+if daemonize == nil then
+	-- Fall back to config file if not specified on command-line
+	daemonize = module:get_option("daemonize", prosody.installed);
+end
 
 local function remove_log_sinks()
 	local lm = require "core.loggingmanager";
--- a/prosody	Mon Jan 06 18:02:16 2020 +0100
+++ b/prosody	Mon Jan 20 19:51:49 2020 +0100
@@ -43,11 +43,7 @@
 	end
 end
 
-if #arg > 0 and arg[1] ~= "--config" then
-	print("Unknown command-line option: "..tostring(arg[1]));
-	print("Perhaps you meant to use prosodyctl instead?");
-	return 1;
-end
+
 
 local startup = require "util.startup";
 local async = require "util.async";
--- a/util/startup.lua	Mon Jan 06 18:02:16 2020 +0100
+++ b/util/startup.lua	Mon Jan 20 19:51:49 2020 +0100
@@ -12,16 +12,70 @@
 
 local original_logging_config;
 
+local short_params = { D = "daemonize", F = "no-daemonize" };
+local value_params = { config = true };
+
+function startup.parse_args()
+	local parsed_opts = {};
+	prosody.opts = parsed_opts;
+
+	if #arg == 0 then
+		return;
+	end
+	while true do
+		local raw_param = arg[1];
+		if not raw_param then
+			break;
+		end
+
+		local prefix = raw_param:match("^%-%-?");
+		if not prefix then
+			break;
+		elseif prefix == "--" and raw_param == "--" then
+			table.remove(arg, 1);
+			break;
+		end
+		local param = table.remove(arg, 1):sub(#prefix+1);
+		if #param == 1 then
+			param = short_params[param];
+		end
+
+		if not param then
+			print("Unknown command-line option: "..tostring(param));
+			print("Perhaps you meant to use prosodyctl instead?");
+			os.exit(1);
+		end
+
+		local param_k, param_v;
+		if value_params[param] then
+			param_k, param_v = param, table.remove(arg, 1);
+			if not param_v then
+				print("Expected a value to follow command-line option: "..raw_param);
+				os.exit(1);
+			end
+		else
+			param_k, param_v = param:match("^([^=]+)=(.+)$");
+			if not param_k then
+				if param:match("^no%-") then
+					param_k, param_v = param:sub(4), false;
+				else
+					param_k, param_v = param, true;
+				end
+			end
+		end
+		parsed_opts[param_k] = param_v;
+	end
+end
+
 function startup.read_config()
 	local filenames = {};
 
 	local filename;
-	if arg[1] == "--config" and arg[2] then
-		table.insert(filenames, arg[2]);
+	if prosody.opts.config then
+		table.insert(filenames, prosody.opts.config);
 		if CFG_CONFIGDIR then
-			table.insert(filenames, CFG_CONFIGDIR.."/"..arg[2]);
+			table.insert(filenames, CFG_CONFIGDIR.."/"..prosody.opts.config);
 		end
-		table.remove(arg, 1); table.remove(arg, 1);
 	elseif os.getenv("PROSODY_CONFIG") then -- Passed by prosodyctl
 			table.insert(filenames, os.getenv("PROSODY_CONFIG"));
 	else
@@ -405,8 +459,7 @@
 			os.exit(1);
 		end
 		prosody.current_uid = pposix.getuid();
-		local arg_root = arg[1] == "--root";
-		if arg_root then table.remove(arg, 1); end
+		local arg_root = prosody.opts.root;
 		if prosody.current_uid == 0 and config.get("*", "run_as_root") ~= true and not arg_root then
 			-- We haz root!
 			local desired_user = config.get("*", "prosody_user") or "prosody";
@@ -515,6 +568,7 @@
 
 -- prosodyctl only
 function startup.prosodyctl()
+	startup.parse_args();
 	startup.init_global_state();
 	startup.read_config();
 	startup.force_console_logging();
@@ -535,6 +589,7 @@
 function startup.prosody()
 	-- These actions are in a strict order, as many depend on
 	-- previous steps to have already been performed
+	startup.parse_args();
 	startup.init_global_state();
 	startup.read_config();
 	startup.init_logging();