Software / code / prosody
Annotate
plugins/mod_posix.lua @ 5507:3a876f02934a
net.server.http: Add a comment
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Mon, 22 Apr 2013 12:25:00 +0100 |
| parent | 5452:edf3db386a19 |
| child | 5776:bd0ff8ae98a8 |
| child | 6357:ccae56e34956 |
| rev | line source |
|---|---|
|
1522
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1238
diff
changeset
|
1 -- Prosody IM |
|
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2795
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
|
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2795
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
|
1522
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1238
diff
changeset
|
4 -- |
|
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1238
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
|
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1238
diff
changeset
|
6 -- COPYING file in the source package for more information. |
|
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1238
diff
changeset
|
7 -- |
|
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1238
diff
changeset
|
8 |
|
728
fa45dfb27ee5
mod_posix: Check version of pposix
Matthew Wild <mwild1@gmail.com>
parents:
723
diff
changeset
|
9 |
|
5451
941ad88db8f3
mod_posix, util.pposix: Bump version for API change
Matthew Wild <mwild1@gmail.com>
parents:
5450
diff
changeset
|
10 local want_pposix_version = "0.3.6"; |
| 587 | 11 |
| 12 local pposix = assert(require "util.pposix"); | |
|
5452
edf3db386a19
mod_posix: Improve error message for a pposix version mismatch
Matthew Wild <mwild1@gmail.com>
parents:
5451
diff
changeset
|
13 if pposix._VERSION ~= want_pposix_version then |
|
edf3db386a19
mod_posix: Improve error message for a pposix version mismatch
Matthew Wild <mwild1@gmail.com>
parents:
5451
diff
changeset
|
14 module:log("warn", "Unknown version (%s) of binary pposix module, expected %s. Perhaps you need to recompile?", tostring(pposix._VERSION), want_pposix_version); |
|
edf3db386a19
mod_posix: Improve error message for a pposix version mismatch
Matthew Wild <mwild1@gmail.com>
parents:
5451
diff
changeset
|
15 end |
| 587 | 16 |
|
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
17 local signal = select(2, pcall(require, "util.signal")); |
|
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
18 if type(signal) == "string" then |
|
1062
f9a1ac50782b
mod_posix: Fix calls to log() (replace with module:log) and make some global accesses explicit
Matthew Wild <mwild1@gmail.com>
parents:
1061
diff
changeset
|
19 module:log("warn", "Couldn't load signal library, won't respond to SIGTERM"); |
|
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
20 end |
|
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
21 |
|
2793
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
22 local lfs = require "lfs"; |
|
2795
d6fcd13c07e7
mod_posix: Adjust file open mode depending on whether file exists (take that fopen designers!!!)
Matthew Wild <mwild1@gmail.com>
parents:
2793
diff
changeset
|
23 local stat = lfs.attributes; |
|
2793
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
24 |
|
1238
f4c08caca3e7
mod_posix: Use global prosody object
Matthew Wild <mwild1@gmail.com>
parents:
1119
diff
changeset
|
25 local prosody = _G.prosody; |
|
f4c08caca3e7
mod_posix: Use global prosody object
Matthew Wild <mwild1@gmail.com>
parents:
1119
diff
changeset
|
26 |
|
4623
403b56b78018
mod_posix, mod_bosh, mod_admin_telnet: Use module:set_global()
Kim Alvefur <zash@zash.se>
parents:
3555
diff
changeset
|
27 module:set_global(); -- we're a global module |
| 587 | 28 |
|
2440
11e3d16a128f
mod_posix: Set umask to 'umask' from the config, or 027
Matthew Wild <mwild1@gmail.com>
parents:
2438
diff
changeset
|
29 local umask = module:get_option("umask") or "027"; |
|
11e3d16a128f
mod_posix: Set umask to 'umask' from the config, or 027
Matthew Wild <mwild1@gmail.com>
parents:
2438
diff
changeset
|
30 pposix.umask(umask); |
|
11e3d16a128f
mod_posix: Set umask to 'umask' from the config, or 027
Matthew Wild <mwild1@gmail.com>
parents:
2438
diff
changeset
|
31 |
|
1680
f3d241915429
Add setuid and setgid support.
Tobias Markmann <tm@ayena.de>
parents:
1579
diff
changeset
|
32 -- Allow switching away from root, some people like strange ports. |
|
3537
7bbb19804d82
mod_posix: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3481
diff
changeset
|
33 module:hook("server-started", function () |
| 1712 | 34 local uid = module:get_option("setuid"); |
| 35 local gid = module:get_option("setgid"); | |
|
1680
f3d241915429
Add setuid and setgid support.
Tobias Markmann <tm@ayena.de>
parents:
1579
diff
changeset
|
36 if gid then |
|
1682
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
37 local success, msg = pposix.setgid(gid); |
|
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
38 if success then |
|
4993
5243b74a4cbb
Hopefully inert commit to clean up logging across a number of modules, removing all cases of concatenation when building log messages
Matthew Wild <mwild1@gmail.com>
parents:
4797
diff
changeset
|
39 module:log("debug", "Changed group to %s successfully.", gid); |
|
1682
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
40 else |
|
4993
5243b74a4cbb
Hopefully inert commit to clean up logging across a number of modules, removing all cases of concatenation when building log messages
Matthew Wild <mwild1@gmail.com>
parents:
4797
diff
changeset
|
41 module:log("error", "Failed to change group to %s. Error: %s", gid, msg); |
|
5243b74a4cbb
Hopefully inert commit to clean up logging across a number of modules, removing all cases of concatenation when building log messages
Matthew Wild <mwild1@gmail.com>
parents:
4797
diff
changeset
|
42 prosody.shutdown("Failed to change group to %s", gid); |
|
1682
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
43 end |
|
1680
f3d241915429
Add setuid and setgid support.
Tobias Markmann <tm@ayena.de>
parents:
1579
diff
changeset
|
44 end |
|
f3d241915429
Add setuid and setgid support.
Tobias Markmann <tm@ayena.de>
parents:
1579
diff
changeset
|
45 if uid then |
|
1682
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
46 local success, msg = pposix.setuid(uid); |
|
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
47 if success then |
|
4993
5243b74a4cbb
Hopefully inert commit to clean up logging across a number of modules, removing all cases of concatenation when building log messages
Matthew Wild <mwild1@gmail.com>
parents:
4797
diff
changeset
|
48 module:log("debug", "Changed user to %s successfully.", uid); |
|
1682
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
49 else |
|
4993
5243b74a4cbb
Hopefully inert commit to clean up logging across a number of modules, removing all cases of concatenation when building log messages
Matthew Wild <mwild1@gmail.com>
parents:
4797
diff
changeset
|
50 module:log("error", "Failed to change user to %s. Error: %s", uid, msg); |
|
5243b74a4cbb
Hopefully inert commit to clean up logging across a number of modules, removing all cases of concatenation when building log messages
Matthew Wild <mwild1@gmail.com>
parents:
4797
diff
changeset
|
51 prosody.shutdown("Failed to change user to %s", uid); |
|
1682
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
52 end |
|
1680
f3d241915429
Add setuid and setgid support.
Tobias Markmann <tm@ayena.de>
parents:
1579
diff
changeset
|
53 end |
|
f3d241915429
Add setuid and setgid support.
Tobias Markmann <tm@ayena.de>
parents:
1579
diff
changeset
|
54 end); |
|
f3d241915429
Add setuid and setgid support.
Tobias Markmann <tm@ayena.de>
parents:
1579
diff
changeset
|
55 |
|
1092
b547967d87fc
mod_posix: Don't let the server run as root without the magic run_as_root in config
Matthew Wild <mwild1@gmail.com>
parents:
1062
diff
changeset
|
56 -- Don't even think about it! |
|
3022
948d511f479c
mod_posix: Don't add a server-starting event handler while the server-starting event is being fired.
Waqas Hussain <waqas20@gmail.com>
parents:
2925
diff
changeset
|
57 if not prosody.start_time then -- server-starting |
|
948d511f479c
mod_posix: Don't add a server-starting event handler while the server-starting event is being fired.
Waqas Hussain <waqas20@gmail.com>
parents:
2925
diff
changeset
|
58 local suid = module:get_option("setuid"); |
|
948d511f479c
mod_posix: Don't add a server-starting event handler while the server-starting event is being fired.
Waqas Hussain <waqas20@gmail.com>
parents:
2925
diff
changeset
|
59 if not suid or suid == 0 or suid == "root" then |
|
948d511f479c
mod_posix: Don't add a server-starting event handler while the server-starting event is being fired.
Waqas Hussain <waqas20@gmail.com>
parents:
2925
diff
changeset
|
60 if pposix.getuid() == 0 and not module:get_option("run_as_root") then |
|
948d511f479c
mod_posix: Don't add a server-starting event handler while the server-starting event is being fired.
Waqas Hussain <waqas20@gmail.com>
parents:
2925
diff
changeset
|
61 module:log("error", "Danger, Will Robinson! Prosody doesn't need to be run as root, so don't do it!"); |
|
948d511f479c
mod_posix: Don't add a server-starting event handler while the server-starting event is being fired.
Waqas Hussain <waqas20@gmail.com>
parents:
2925
diff
changeset
|
62 module:log("error", "For more information on running Prosody as root, see http://prosody.im/doc/root"); |
|
948d511f479c
mod_posix: Don't add a server-starting event handler while the server-starting event is being fired.
Waqas Hussain <waqas20@gmail.com>
parents:
2925
diff
changeset
|
63 prosody.shutdown("Refusing to run as root"); |
|
1092
b547967d87fc
mod_posix: Don't let the server run as root without the magic run_as_root in config
Matthew Wild <mwild1@gmail.com>
parents:
1062
diff
changeset
|
64 end |
|
3022
948d511f479c
mod_posix: Don't add a server-starting event handler while the server-starting event is being fired.
Waqas Hussain <waqas20@gmail.com>
parents:
2925
diff
changeset
|
65 end |
|
948d511f479c
mod_posix: Don't add a server-starting event handler while the server-starting event is being fired.
Waqas Hussain <waqas20@gmail.com>
parents:
2925
diff
changeset
|
66 end |
|
1092
b547967d87fc
mod_posix: Don't let the server run as root without the magic run_as_root in config
Matthew Wild <mwild1@gmail.com>
parents:
1062
diff
changeset
|
67 |
|
2793
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
68 local pidfile; |
|
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
69 local pidfile_handle; |
|
1032
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
70 |
|
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
71 local function remove_pidfile() |
|
2793
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
72 if pidfile_handle then |
|
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
73 pidfile_handle:close(); |
|
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
74 os.remove(pidfile); |
|
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
75 pidfile, pidfile_handle = nil, nil; |
|
1032
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
76 end |
|
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
77 end |
|
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
78 |
|
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
79 local function write_pidfile() |
|
2793
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
80 if pidfile_handle then |
|
1032
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
81 remove_pidfile(); |
|
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
82 end |
|
2793
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
83 pidfile = module:get_option("pidfile"); |
|
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
84 if pidfile then |
|
3026
dec4527a7499
mod_posix: Fixed a global access.
Waqas Hussain <waqas20@gmail.com>
parents:
2923
diff
changeset
|
85 local err; |
|
2795
d6fcd13c07e7
mod_posix: Adjust file open mode depending on whether file exists (take that fopen designers!!!)
Matthew Wild <mwild1@gmail.com>
parents:
2793
diff
changeset
|
86 local mode = stat(pidfile) and "r+" or "w+"; |
|
d6fcd13c07e7
mod_posix: Adjust file open mode depending on whether file exists (take that fopen designers!!!)
Matthew Wild <mwild1@gmail.com>
parents:
2793
diff
changeset
|
87 pidfile_handle, err = io.open(pidfile, mode); |
|
2793
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
88 if not pidfile_handle then |
|
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
89 module:log("error", "Couldn't write pidfile at %s; %s", pidfile, err); |
|
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
90 prosody.shutdown("Couldn't write pidfile"); |
|
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
91 else |
|
2793
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
92 if not lfs.lock(pidfile_handle, "w") then -- Exclusive lock |
|
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
93 local other_pid = pidfile_handle:read("*a"); |
|
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
94 module:log("error", "Another Prosody instance seems to be running with PID %s, quitting", other_pid); |
|
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
95 pidfile_handle = nil; |
|
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
96 prosody.shutdown("Prosody already running"); |
|
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
97 else |
|
3341
a8a3e662fea7
mod_posix: Some (perhaps temporary) changes to re-lock the pidfile after truncating, to avoid breaking prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
3340
diff
changeset
|
98 pidfile_handle:close(); |
|
3340
0769cc5f34b6
mod_posix: Truncate the pidfile before writing to ensure that we never overwrite with a PID shorter than the previous, and end with an invalid PID in the file.
Brian Cully <bjc@junctionnetworks.com>
parents:
3029
diff
changeset
|
99 pidfile_handle, err = io.open(pidfile, "w+"); |
|
0769cc5f34b6
mod_posix: Truncate the pidfile before writing to ensure that we never overwrite with a PID shorter than the previous, and end with an invalid PID in the file.
Brian Cully <bjc@junctionnetworks.com>
parents:
3029
diff
changeset
|
100 if not pidfile_handle then |
|
0769cc5f34b6
mod_posix: Truncate the pidfile before writing to ensure that we never overwrite with a PID shorter than the previous, and end with an invalid PID in the file.
Brian Cully <bjc@junctionnetworks.com>
parents:
3029
diff
changeset
|
101 module:log("error", "Couldn't write pidfile at %s; %s", pidfile, err); |
|
0769cc5f34b6
mod_posix: Truncate the pidfile before writing to ensure that we never overwrite with a PID shorter than the previous, and end with an invalid PID in the file.
Brian Cully <bjc@junctionnetworks.com>
parents:
3029
diff
changeset
|
102 prosody.shutdown("Couldn't write pidfile"); |
|
3341
a8a3e662fea7
mod_posix: Some (perhaps temporary) changes to re-lock the pidfile after truncating, to avoid breaking prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
3340
diff
changeset
|
103 else |
|
a8a3e662fea7
mod_posix: Some (perhaps temporary) changes to re-lock the pidfile after truncating, to avoid breaking prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
3340
diff
changeset
|
104 if lfs.lock(pidfile_handle, "w") then |
|
a8a3e662fea7
mod_posix: Some (perhaps temporary) changes to re-lock the pidfile after truncating, to avoid breaking prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
3340
diff
changeset
|
105 pidfile_handle:write(tostring(pposix.getpid())); |
|
a8a3e662fea7
mod_posix: Some (perhaps temporary) changes to re-lock the pidfile after truncating, to avoid breaking prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
3340
diff
changeset
|
106 pidfile_handle:flush(); |
|
a8a3e662fea7
mod_posix: Some (perhaps temporary) changes to re-lock the pidfile after truncating, to avoid breaking prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
3340
diff
changeset
|
107 end |
|
3340
0769cc5f34b6
mod_posix: Truncate the pidfile before writing to ensure that we never overwrite with a PID shorter than the previous, and end with an invalid PID in the file.
Brian Cully <bjc@junctionnetworks.com>
parents:
3029
diff
changeset
|
108 end |
|
2793
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
109 end |
|
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
110 end |
|
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
111 end |
|
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
112 end |
|
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
113 |
|
3540
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3537
diff
changeset
|
114 local syslog_opened; |
|
1033
4a9f0d482028
mod_posix: Integrate with loggingmanager, register syslog sink, remove redundant logging code
Matthew Wild <mwild1@gmail.com>
parents:
1032
diff
changeset
|
115 function syslog_sink_maker(config) |
|
4a9f0d482028
mod_posix: Integrate with loggingmanager, register syslog sink, remove redundant logging code
Matthew Wild <mwild1@gmail.com>
parents:
1032
diff
changeset
|
116 if not syslog_opened then |
|
4794
25ce7720555f
mod_posix: Support syslog_facility config option
Matthew Wild <mwild1@gmail.com>
parents:
3555
diff
changeset
|
117 pposix.syslog_open("prosody", module:get_option_string("syslog_facility")); |
|
1033
4a9f0d482028
mod_posix: Integrate with loggingmanager, register syslog sink, remove redundant logging code
Matthew Wild <mwild1@gmail.com>
parents:
1032
diff
changeset
|
118 syslog_opened = true; |
|
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
119 end |
|
1033
4a9f0d482028
mod_posix: Integrate with loggingmanager, register syslog sink, remove redundant logging code
Matthew Wild <mwild1@gmail.com>
parents:
1032
diff
changeset
|
120 local syslog, format = pposix.syslog_log, string.format; |
|
4a9f0d482028
mod_posix: Integrate with loggingmanager, register syslog sink, remove redundant logging code
Matthew Wild <mwild1@gmail.com>
parents:
1032
diff
changeset
|
121 return function (name, level, message, ...) |
|
3540
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3537
diff
changeset
|
122 if ... then |
|
5450
cc83b1a50fde
mod_posix: Pass logger name to syslog, so that sources now get logged
Matthew Wild <mwild1@gmail.com>
parents:
5177
diff
changeset
|
123 syslog(level, name, format(message, ...)); |
|
3540
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3537
diff
changeset
|
124 else |
|
5450
cc83b1a50fde
mod_posix: Pass logger name to syslog, so that sources now get logged
Matthew Wild <mwild1@gmail.com>
parents:
5177
diff
changeset
|
125 syslog(level, name, message); |
|
3540
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3537
diff
changeset
|
126 end |
|
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3537
diff
changeset
|
127 end; |
|
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
128 end |
|
1033
4a9f0d482028
mod_posix: Integrate with loggingmanager, register syslog sink, remove redundant logging code
Matthew Wild <mwild1@gmail.com>
parents:
1032
diff
changeset
|
129 require "core.loggingmanager".register_sink_type("syslog", syslog_sink_maker); |
|
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
130 |
|
2073
72784ce0c0e0
mod_posix: Switch config option to 'daemonize', fall back to 'no_daemonize' if not set, default behaviour remains the same... daemonize if mod_posix is loaded
Matthew Wild <mwild1@gmail.com>
parents:
1712
diff
changeset
|
131 local daemonize = module:get_option("daemonize"); |
|
72784ce0c0e0
mod_posix: Switch config option to 'daemonize', fall back to 'no_daemonize' if not set, default behaviour remains the same... daemonize if mod_posix is loaded
Matthew Wild <mwild1@gmail.com>
parents:
1712
diff
changeset
|
132 if daemonize == nil then |
|
2074
c59c8f3ec645
mod_posix: Log warning when no_daemonize is used, and instruct on how to update config
Matthew Wild <mwild1@gmail.com>
parents:
2073
diff
changeset
|
133 local no_daemonize = module:get_option("no_daemonize"); --COMPAT w/ 0.5 |
|
c59c8f3ec645
mod_posix: Log warning when no_daemonize is used, and instruct on how to update config
Matthew Wild <mwild1@gmail.com>
parents:
2073
diff
changeset
|
134 daemonize = not no_daemonize; |
|
c59c8f3ec645
mod_posix: Log warning when no_daemonize is used, and instruct on how to update config
Matthew Wild <mwild1@gmail.com>
parents:
2073
diff
changeset
|
135 if no_daemonize ~= nil then |
|
c59c8f3ec645
mod_posix: Log warning when no_daemonize is used, and instruct on how to update config
Matthew Wild <mwild1@gmail.com>
parents:
2073
diff
changeset
|
136 module:log("warn", "The 'no_daemonize' option is now replaced by 'daemonize'"); |
|
c59c8f3ec645
mod_posix: Log warning when no_daemonize is used, and instruct on how to update config
Matthew Wild <mwild1@gmail.com>
parents:
2073
diff
changeset
|
137 module:log("warn", "Update your config from 'no_daemonize = %s' to 'daemonize = %s'", tostring(no_daemonize), tostring(daemonize)); |
|
c59c8f3ec645
mod_posix: Log warning when no_daemonize is used, and instruct on how to update config
Matthew Wild <mwild1@gmail.com>
parents:
2073
diff
changeset
|
138 end |
|
2073
72784ce0c0e0
mod_posix: Switch config option to 'daemonize', fall back to 'no_daemonize' if not set, default behaviour remains the same... daemonize if mod_posix is loaded
Matthew Wild <mwild1@gmail.com>
parents:
1712
diff
changeset
|
139 end |
|
72784ce0c0e0
mod_posix: Switch config option to 'daemonize', fall back to 'no_daemonize' if not set, default behaviour remains the same... daemonize if mod_posix is loaded
Matthew Wild <mwild1@gmail.com>
parents:
1712
diff
changeset
|
140 |
|
5175
fabaed7418a6
mod_posix: Remove console and stdout logging sinks before daemonizing
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
141 local function remove_log_sinks() |
|
fabaed7418a6
mod_posix: Remove console and stdout logging sinks before daemonizing
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
142 local lm = require "core.loggingmanager"; |
|
fabaed7418a6
mod_posix: Remove console and stdout logging sinks before daemonizing
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
143 lm.register_sink_type("console", nil); |
|
fabaed7418a6
mod_posix: Remove console and stdout logging sinks before daemonizing
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
144 lm.register_sink_type("stdout", nil); |
|
fabaed7418a6
mod_posix: Remove console and stdout logging sinks before daemonizing
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
145 lm.reload_logging(); |
|
fabaed7418a6
mod_posix: Remove console and stdout logging sinks before daemonizing
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
146 end |
|
fabaed7418a6
mod_posix: Remove console and stdout logging sinks before daemonizing
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
147 |
|
2073
72784ce0c0e0
mod_posix: Switch config option to 'daemonize', fall back to 'no_daemonize' if not set, default behaviour remains the same... daemonize if mod_posix is loaded
Matthew Wild <mwild1@gmail.com>
parents:
1712
diff
changeset
|
148 if daemonize then |
| 587 | 149 local function daemonize_server() |
|
5177
add9ad38208e
mod_posix: Log a message explaining that we are detaching from the console
Kim Alvefur <zash@zash.se>
parents:
5175
diff
changeset
|
150 module:log("info", "Prosody is about to detach from the console, disabling further console output"); |
|
5175
fabaed7418a6
mod_posix: Remove console and stdout logging sinks before daemonizing
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
151 remove_log_sinks(); |
| 587 | 152 local ok, ret = pposix.daemonize(); |
| 153 if not ok then | |
|
1062
f9a1ac50782b
mod_posix: Fix calls to log() (replace with module:log) and make some global accesses explicit
Matthew Wild <mwild1@gmail.com>
parents:
1061
diff
changeset
|
154 module:log("error", "Failed to daemonize: %s", ret); |
| 587 | 155 elseif ret and ret > 0 then |
| 156 os.exit(0); | |
| 157 else | |
|
1062
f9a1ac50782b
mod_posix: Fix calls to log() (replace with module:log) and make some global accesses explicit
Matthew Wild <mwild1@gmail.com>
parents:
1061
diff
changeset
|
158 module:log("info", "Successfully daemonized to PID %d", pposix.getpid()); |
|
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
159 write_pidfile(); |
| 587 | 160 end |
| 161 end | |
|
3022
948d511f479c
mod_posix: Don't add a server-starting event handler while the server-starting event is being fired.
Waqas Hussain <waqas20@gmail.com>
parents:
2925
diff
changeset
|
162 if not prosody.start_time then -- server-starting |
|
948d511f479c
mod_posix: Don't add a server-starting event handler while the server-starting event is being fired.
Waqas Hussain <waqas20@gmail.com>
parents:
2925
diff
changeset
|
163 daemonize_server(); |
|
948d511f479c
mod_posix: Don't add a server-starting event handler while the server-starting event is being fired.
Waqas Hussain <waqas20@gmail.com>
parents:
2925
diff
changeset
|
164 end |
|
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
165 else |
|
1032
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
166 -- Not going to daemonize, so write the pid of this process |
|
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
167 write_pidfile(); |
| 587 | 168 end |
|
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
169 |
|
3537
7bbb19804d82
mod_posix: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3481
diff
changeset
|
170 module:hook("server-stopped", remove_pidfile); |
|
1032
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
171 |
|
1118
239d4362a040
mod_posix: Reload the config and reopen log files on SIGHUP
Matthew Wild <mwild1@gmail.com>
parents:
1092
diff
changeset
|
172 -- Set signal handlers |
|
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
173 if signal.signal then |
|
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
174 signal.signal("SIGTERM", function () |
|
1118
239d4362a040
mod_posix: Reload the config and reopen log files on SIGHUP
Matthew Wild <mwild1@gmail.com>
parents:
1092
diff
changeset
|
175 module:log("warn", "Received SIGTERM"); |
|
1238
f4c08caca3e7
mod_posix: Use global prosody object
Matthew Wild <mwild1@gmail.com>
parents:
1119
diff
changeset
|
176 prosody.unlock_globals(); |
|
f4c08caca3e7
mod_posix: Use global prosody object
Matthew Wild <mwild1@gmail.com>
parents:
1119
diff
changeset
|
177 prosody.shutdown("Received SIGTERM"); |
|
f4c08caca3e7
mod_posix: Use global prosody object
Matthew Wild <mwild1@gmail.com>
parents:
1119
diff
changeset
|
178 prosody.lock_globals(); |
|
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
179 end); |
|
1118
239d4362a040
mod_posix: Reload the config and reopen log files on SIGHUP
Matthew Wild <mwild1@gmail.com>
parents:
1092
diff
changeset
|
180 |
|
239d4362a040
mod_posix: Reload the config and reopen log files on SIGHUP
Matthew Wild <mwild1@gmail.com>
parents:
1092
diff
changeset
|
181 signal.signal("SIGHUP", function () |
|
239d4362a040
mod_posix: Reload the config and reopen log files on SIGHUP
Matthew Wild <mwild1@gmail.com>
parents:
1092
diff
changeset
|
182 module:log("info", "Received SIGHUP"); |
|
1238
f4c08caca3e7
mod_posix: Use global prosody object
Matthew Wild <mwild1@gmail.com>
parents:
1119
diff
changeset
|
183 prosody.reload_config(); |
|
f4c08caca3e7
mod_posix: Use global prosody object
Matthew Wild <mwild1@gmail.com>
parents:
1119
diff
changeset
|
184 prosody.reopen_logfiles(); |
|
1118
239d4362a040
mod_posix: Reload the config and reopen log files on SIGHUP
Matthew Wild <mwild1@gmail.com>
parents:
1092
diff
changeset
|
185 end); |
| 2332 | 186 |
| 187 signal.signal("SIGINT", function () | |
| 188 module:log("info", "Received SIGINT"); | |
| 189 prosody.unlock_globals(); | |
| 190 prosody.shutdown("Received SIGINT"); | |
| 191 prosody.lock_globals(); | |
| 192 end); | |
|
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
193 end |