Software /
code /
prosody
Comparison
prosodyctl @ 8101:3e25d96571d1
Merge 0.10->trunk
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 20 Apr 2017 00:41:49 +0200 |
parent | 8068:5abb6bc45edd |
parent | 8100:1773559b03a8 |
child | 8103:a0b498ec0b22 |
comparison
equal
deleted
inserted
replaced
8091:acecf1413233 | 8101:3e25d96571d1 |
---|---|
134 | 134 |
135 -- Switch away from root and into the prosody user -- | 135 -- Switch away from root and into the prosody user -- |
136 local switched_user, current_uid; | 136 local switched_user, current_uid; |
137 | 137 |
138 local want_pposix_version = "0.4.0"; | 138 local want_pposix_version = "0.4.0"; |
139 local ok, pposix = pcall(require, "util.pposix"); | 139 local have_pposix, pposix = pcall(require, "util.pposix"); |
140 | 140 |
141 if ok and pposix then | 141 if have_pposix and pposix then |
142 if pposix._VERSION ~= want_pposix_version then print(string.format("Unknown version (%s) of binary pposix module, expected %s", tostring(pposix._VERSION), want_pposix_version)); return; end | 142 if pposix._VERSION ~= want_pposix_version then print(string.format("Unknown version (%s) of binary pposix module, expected %s", tostring(pposix._VERSION), want_pposix_version)); return; end |
143 current_uid = pposix.getuid(); | 143 current_uid = pposix.getuid(); |
144 if current_uid == 0 then | 144 local arg_root = arg[1] == "--root"; |
145 if arg_root then table.remove(arg, 1); end | |
146 if current_uid == 0 and config.get("*", "run_as_root") ~= true and not arg_root then | |
145 -- We haz root! | 147 -- We haz root! |
146 local desired_user = config.get("*", "prosody_user") or "prosody"; | 148 local desired_user = config.get("*", "prosody_user") or "prosody"; |
147 local desired_group = config.get("*", "prosody_group") or desired_user; | 149 local desired_group = config.get("*", "prosody_group") or desired_user; |
148 local ok, err = pposix.setgid(desired_group); | 150 local ok, err = pposix.setgid(desired_group); |
149 if ok then | 151 if ok then |
693 return true; | 695 return true; |
694 end | 696 end |
695 end | 697 end |
696 end | 698 end |
697 | 699 |
700 local cert_basedir = CFG_DATADIR or "./certs"; | |
701 if have_pposix and pposix.getuid() == 0 then | |
702 -- FIXME should be enough to check if this directory is writable | |
703 local cert_dir = config.get("*", "certificates") or "certs"; | |
704 cert_basedir = config.resolve_relative_path(config.paths.certs, cert_dir); | |
705 end | |
706 | |
698 function cert_commands.config(arg) | 707 function cert_commands.config(arg) |
699 if #arg >= 1 and arg[1] ~= "--help" then | 708 if #arg >= 1 and arg[1] ~= "--help" then |
700 local conf_filename = (CFG_DATADIR or "./certs") .. "/" .. arg[1] .. ".cnf"; | 709 local conf_filename = cert_basedir .. "/" .. arg[1] .. ".cnf"; |
701 if use_existing(conf_filename) then | 710 if use_existing(conf_filename) then |
702 return nil, conf_filename; | 711 return nil, conf_filename; |
703 end | 712 end |
704 local distinguished_name; | 713 local distinguished_name; |
705 if arg[#arg]:find("^/") then | 714 if arg[#arg]:find("^/") then |
756 end | 765 end |
757 end | 766 end |
758 | 767 |
759 function cert_commands.key(arg) | 768 function cert_commands.key(arg) |
760 if #arg >= 1 and arg[1] ~= "--help" then | 769 if #arg >= 1 and arg[1] ~= "--help" then |
761 local key_filename = (CFG_DATADIR or "./certs") .. "/" .. arg[1] .. ".key"; | 770 local key_filename = cert_basedir .. "/" .. arg[1] .. ".key"; |
762 if use_existing(key_filename) then | 771 if use_existing(key_filename) then |
763 return nil, key_filename; | 772 return nil, key_filename; |
764 end | 773 end |
765 os.remove(key_filename); -- This file, if it exists is unlikely to have write permissions | 774 os.remove(key_filename); -- This file, if it exists is unlikely to have write permissions |
766 local key_size = tonumber(arg[2] or show_prompt("Choose key size (2048):") or 2048); | 775 local key_size = tonumber(arg[2] or show_prompt("Choose key size (2048):") or 2048); |
778 end | 787 end |
779 end | 788 end |
780 | 789 |
781 function cert_commands.request(arg) | 790 function cert_commands.request(arg) |
782 if #arg >= 1 and arg[1] ~= "--help" then | 791 if #arg >= 1 and arg[1] ~= "--help" then |
783 local req_filename = (CFG_DATADIR or "./certs") .. "/" .. arg[1] .. ".req"; | 792 local req_filename = cert_basedir .. "/" .. arg[1] .. ".req"; |
784 if use_existing(req_filename) then | 793 if use_existing(req_filename) then |
785 return nil, req_filename; | 794 return nil, req_filename; |
786 end | 795 end |
787 local _, key_filename = cert_commands.key({arg[1]}); | 796 local _, key_filename = cert_commands.key({arg[1]}); |
788 local _, conf_filename = cert_commands.config(arg); | 797 local _, conf_filename = cert_commands.config(arg); |
796 end | 805 end |
797 end | 806 end |
798 | 807 |
799 function cert_commands.generate(arg) | 808 function cert_commands.generate(arg) |
800 if #arg >= 1 and arg[1] ~= "--help" then | 809 if #arg >= 1 and arg[1] ~= "--help" then |
801 local cert_filename = (CFG_DATADIR or "./certs") .. "/" .. arg[1] .. ".crt"; | 810 local cert_filename = cert_basedir .. "/" .. arg[1] .. ".crt"; |
802 if use_existing(cert_filename) then | 811 if use_existing(cert_filename) then |
803 return nil, cert_filename; | 812 return nil, cert_filename; |
804 end | 813 end |
805 local _, key_filename = cert_commands.key({arg[1]}); | 814 local _, key_filename = cert_commands.key({arg[1]}); |
806 local _, conf_filename = cert_commands.config(arg); | 815 local _, conf_filename = cert_commands.config(arg); |