Software /
code /
prosody
Comparison
plugins/mod_posix.lua @ 6888:39c5c49616ab
Merge 0.10->trunk
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 27 Sep 2015 00:37:18 +0200 |
parent | 6875:12d68f7b1be0 |
child | 7359:a5a080c12c96 |
child | 7731:a0ee83c4a82c |
comparison
equal
deleted
inserted
replaced
6871:e4b5885b7712 | 6888:39c5c49616ab |
---|---|
12 local pposix = assert(require "util.pposix"); | 12 local pposix = assert(require "util.pposix"); |
13 if pposix._VERSION ~= want_pposix_version then | 13 if pposix._VERSION ~= want_pposix_version then |
14 module:log("warn", "Unknown version (%s) of binary pposix module, expected %s. Perhaps you need to recompile?", tostring(pposix._VERSION), want_pposix_version); | 14 module:log("warn", "Unknown version (%s) of binary pposix module, expected %s. Perhaps you need to recompile?", tostring(pposix._VERSION), want_pposix_version); |
15 end | 15 end |
16 | 16 |
17 local signal = select(2, pcall(require, "util.signal")); | 17 local have_signal, signal = pcall(require, "util.signal"); |
18 if type(signal) == "string" then | 18 if not have_signal then |
19 module:log("warn", "Couldn't load signal library, won't respond to SIGTERM"); | 19 module:log("warn", "Couldn't load signal library, won't respond to SIGTERM"); |
20 end | 20 end |
21 | 21 |
22 local lfs = require "lfs"; | 22 local lfs = require "lfs"; |
23 local stat = lfs.attributes; | 23 local stat = lfs.attributes; |
29 local umask = module:get_option("umask") or "027"; | 29 local umask = module:get_option("umask") or "027"; |
30 pposix.umask(umask); | 30 pposix.umask(umask); |
31 | 31 |
32 -- Allow switching away from root, some people like strange ports. | 32 -- Allow switching away from root, some people like strange ports. |
33 module:hook("server-started", function () | 33 module:hook("server-started", function () |
34 local uid = module:get_option("setuid"); | 34 local uid = module:get_option("setuid"); |
35 local gid = module:get_option("setgid"); | 35 local gid = module:get_option("setgid"); |
36 if gid then | 36 if gid then |
37 local success, msg = pposix.setgid(gid); | 37 local success, msg = pposix.setgid(gid); |
38 if success then | 38 if success then |
39 module:log("debug", "Changed group to %s successfully.", gid); | 39 module:log("debug", "Changed group to %s successfully.", gid); |
40 else | 40 else |
41 module:log("error", "Failed to change group to %s. Error: %s", gid, msg); | 41 module:log("error", "Failed to change group to %s. Error: %s", gid, msg); |
42 prosody.shutdown("Failed to change group to %s", gid); | 42 prosody.shutdown("Failed to change group to %s", gid); |
43 end | |
44 end | 43 end |
45 if uid then | 44 end |
46 local success, msg = pposix.setuid(uid); | 45 if uid then |
47 if success then | 46 local success, msg = pposix.setuid(uid); |
48 module:log("debug", "Changed user to %s successfully.", uid); | 47 if success then |
49 else | 48 module:log("debug", "Changed user to %s successfully.", uid); |
50 module:log("error", "Failed to change user to %s. Error: %s", uid, msg); | 49 else |
51 prosody.shutdown("Failed to change user to %s", uid); | 50 module:log("error", "Failed to change user to %s. Error: %s", uid, msg); |
52 end | 51 prosody.shutdown("Failed to change user to %s", uid); |
53 end | 52 end |
54 end); | 53 end |
54 end); | |
55 | 55 |
56 -- Don't even think about it! | 56 -- Don't even think about it! |
57 if not prosody.start_time then -- server-starting | 57 if not prosody.start_time then -- server-starting |
58 local suid = module:get_option("setuid"); | 58 local suid = module:get_option("setuid"); |
59 if not suid or suid == 0 or suid == "root" then | 59 if not suid or suid == 0 or suid == "root" then |
160 end | 160 end |
161 | 161 |
162 module:hook("server-stopped", remove_pidfile); | 162 module:hook("server-stopped", remove_pidfile); |
163 | 163 |
164 -- Set signal handlers | 164 -- Set signal handlers |
165 if signal.signal then | 165 if have_signal then |
166 signal.signal("SIGTERM", function () | 166 signal.signal("SIGTERM", function () |
167 module:log("warn", "Received SIGTERM"); | 167 module:log("warn", "Received SIGTERM"); |
168 prosody.unlock_globals(); | 168 prosody.unlock_globals(); |
169 prosody.shutdown("Received SIGTERM"); | 169 prosody.shutdown("Received SIGTERM"); |
170 prosody.lock_globals(); | 170 prosody.lock_globals(); |