Comparison

util/startup.lua @ 10599:4f655918fef1

Merge 0.11->trunk
author Matthew Wild <mwild1@gmail.com>
date Sun, 19 Jan 2020 15:34:28 +0000
parent 10532:19ec384eb782
parent 10597:25a3c8134b0a
child 10601:d8b51833926b
comparison
equal deleted inserted replaced
10595:17bab303daf5 10599:4f655918fef1
11 11
12 local dependencies = require "util.dependencies"; 12 local dependencies = require "util.dependencies";
13 13
14 local original_logging_config; 14 local original_logging_config;
15 15
16 local short_params = { D = "daemonize", F = "no-daemonize" };
17 local value_params = { config = true };
18
19 function startup.parse_args()
20 local parsed_opts = {};
21
22 if #arg > 0 and arg[1] ~= "--config" then
23 while true do
24 local raw_param = arg[1];
25 if not raw_param then
26 break;
27 end
28
29 local prefix = raw_param:match("^%-%-?");
30 if not prefix then
31 break;
32 elseif prefix == "--" and raw_param == "--" then
33 table.remove(arg, 1);
34 break;
35 end
36 local param = table.remove(arg, 1):sub(#prefix+1);
37 if #param == 1 then
38 param = short_params[param];
39 end
40
41 if not param then
42 print("Unknown command-line option: "..tostring(param));
43 print("Perhaps you meant to use prosodyctl instead?");
44 os.exit(1);
45 end
46
47 local param_k, param_v;
48 if value_params[param] then
49 param_k, param_v = param, table.remove(arg, 1);
50 if not param_v then
51 print("Expected a value to follow command-line option: "..raw_param);
52 os.exit(1);
53 end
54 else
55 param_k, param_v = param:match("^([^=]+)=(.+)$");
56 if not param_k then
57 if param:match("^no%-") then
58 param_k, param_v = param:sub(4), false;
59 else
60 param_k, param_v = param, true;
61 end
62 end
63 end
64 parsed_opts[param_k] = param_v;
65 end
66 end
67 prosody.opts = parsed_opts;
68 end
69
16 function startup.read_config() 70 function startup.read_config()
17 local filenames = {}; 71 local filenames = {};
18 72
19 local filename; 73 local filename;
20 if arg[1] == "--config" and arg[2] then 74 if prosody.opts.config then
21 table.insert(filenames, arg[2]); 75 table.insert(filenames, prosody.opts.config);
22 if CFG_CONFIGDIR then 76 if CFG_CONFIGDIR then
23 table.insert(filenames, CFG_CONFIGDIR.."/"..arg[2]); 77 table.insert(filenames, CFG_CONFIGDIR.."/"..prosody.opts.config);
24 end 78 end
25 table.remove(arg, 1); table.remove(arg, 1);
26 elseif os.getenv("PROSODY_CONFIG") then -- Passed by prosodyctl 79 elseif os.getenv("PROSODY_CONFIG") then -- Passed by prosodyctl
27 table.insert(filenames, os.getenv("PROSODY_CONFIG")); 80 table.insert(filenames, os.getenv("PROSODY_CONFIG"));
28 else 81 else
29 table.insert(filenames, (CFG_CONFIGDIR or ".").."/prosody.cfg.lua"); 82 table.insert(filenames, (CFG_CONFIGDIR or ".").."/prosody.cfg.lua");
30 end 83 end
424 print(string.format("Unknown version (%s) of binary pposix module, expected %s", 477 print(string.format("Unknown version (%s) of binary pposix module, expected %s",
425 tostring(pposix._VERSION), want_pposix_version)); 478 tostring(pposix._VERSION), want_pposix_version));
426 os.exit(1); 479 os.exit(1);
427 end 480 end
428 prosody.current_uid = pposix.getuid(); 481 prosody.current_uid = pposix.getuid();
429 local arg_root = arg[1] == "--root"; 482 local arg_root = prosody.opts.root;
430 if arg_root then table.remove(arg, 1); end
431 if prosody.current_uid == 0 and config.get("*", "run_as_root") ~= true and not arg_root then 483 if prosody.current_uid == 0 and config.get("*", "run_as_root") ~= true and not arg_root then
432 -- We haz root! 484 -- We haz root!
433 local desired_user = config.get("*", "prosody_user") or "prosody"; 485 local desired_user = config.get("*", "prosody_user") or "prosody";
434 local desired_group = config.get("*", "prosody_group") or desired_user; 486 local desired_group = config.get("*", "prosody_group") or desired_user;
435 local ok, err = pposix.setgid(desired_group); 487 local ok, err = pposix.setgid(desired_group);
534 end 586 end
535 end 587 end
536 588
537 -- prosodyctl only 589 -- prosodyctl only
538 function startup.prosodyctl() 590 function startup.prosodyctl()
591 startup.parse_args();
539 startup.init_global_state(); 592 startup.init_global_state();
540 startup.read_config(); 593 startup.read_config();
541 startup.force_console_logging(); 594 startup.force_console_logging();
542 startup.init_logging(); 595 startup.init_logging();
543 startup.setup_plugindir(); 596 startup.setup_plugindir();
555 end 608 end
556 609
557 function startup.prosody() 610 function startup.prosody()
558 -- These actions are in a strict order, as many depend on 611 -- These actions are in a strict order, as many depend on
559 -- previous steps to have already been performed 612 -- previous steps to have already been performed
613 startup.parse_args();
560 startup.init_global_state(); 614 startup.init_global_state();
561 startup.read_config(); 615 startup.read_config();
562 startup.init_logging(); 616 startup.init_logging();
563 startup.sanity_check(); 617 startup.sanity_check();
564 startup.sandbox_require(); 618 startup.sandbox_require();