Mon, 17 May 2010 11:49:24 +0100
mod_bosh: Always give requests a destroy handler, so that the management of each session's request array and the inactive_sessions logic can happen in one place. Simplifies everything and concludes this series of BOSH fixes.
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 | |
1579
95698f021c5d
pposix, mod_posix: Bump pposix version number
Matthew Wild <mwild1@gmail.com>
parents:
1522
diff
changeset
|
10 | local want_pposix_version = "0.3.1"; |
587 | 11 | |
12 | local pposix = assert(require "util.pposix"); | |
735 | 13 | if pposix._VERSION ~= want_pposix_version then module:log("warn", "Unknown version (%s) of binary pposix module, expected %s", tostring(pposix._VERSION), want_pposix_version); end |
587 | 14 | |
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
|
15 | 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
|
16 | 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
|
17 | 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
|
18 | 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
|
19 | |
587 | 20 | local logger_set = require "util.logger".setwriter; |
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 | |
587 | 27 | module.host = "*"; -- we're a global module |
28 | ||
1680
f3d241915429
Add setuid and setgid support.
Tobias Markmann <tm@ayena.de>
parents:
1579
diff
changeset
|
29 | -- Allow switching away from root, some people like strange ports. |
f3d241915429
Add setuid and setgid support.
Tobias Markmann <tm@ayena.de>
parents:
1579
diff
changeset
|
30 | module:add_event_hook("server-started", function () |
1712 | 31 | local uid = module:get_option("setuid"); |
32 | local gid = module:get_option("setgid"); | |
1680
f3d241915429
Add setuid and setgid support.
Tobias Markmann <tm@ayena.de>
parents:
1579
diff
changeset
|
33 | if gid then |
1682
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
34 | local success, msg = pposix.setgid(gid); |
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
35 | if success then |
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
36 | module:log("debug", "Changed group to "..gid.." successfully."); |
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
37 | else |
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
38 | module:log("error", "Failed to change group to "..gid..". Error: "..msg); |
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
39 | prosody.shutdown("Failed to change group to "..gid); |
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
40 | end |
1680
f3d241915429
Add setuid and setgid support.
Tobias Markmann <tm@ayena.de>
parents:
1579
diff
changeset
|
41 | end |
f3d241915429
Add setuid and setgid support.
Tobias Markmann <tm@ayena.de>
parents:
1579
diff
changeset
|
42 | if uid then |
1682
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
43 | local success, msg = pposix.setuid(uid); |
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
44 | if success then |
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
45 | module:log("debug", "Changed user to "..uid.." successfully."); |
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
46 | else |
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
47 | module:log("error", "Failed to change user to "..uid..". Error: "..msg); |
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
48 | prosody.shutdown("Failed to change user to "..uid); |
883cf1f516a0
Shutdown prosody if changing user or group fails.
Tobias Markmann <tm@ayena.de>
parents:
1681
diff
changeset
|
49 | end |
1680
f3d241915429
Add setuid and setgid support.
Tobias Markmann <tm@ayena.de>
parents:
1579
diff
changeset
|
50 | end |
f3d241915429
Add setuid and setgid support.
Tobias Markmann <tm@ayena.de>
parents:
1579
diff
changeset
|
51 | end); |
f3d241915429
Add setuid and setgid support.
Tobias Markmann <tm@ayena.de>
parents:
1579
diff
changeset
|
52 | |
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
|
53 | -- Don't even think about it! |
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
|
54 | module:add_event_hook("server-starting", function () |
1712 | 55 | local suid = module:get_option("setuid"); |
1681
e76e2fb26fca
Make mod_posix not complain about root user, if setuid is set to something different as root.
Tobias Markmann <tm@ayena.de>
parents:
1680
diff
changeset
|
56 | if not suid or suid == 0 or suid == "root" then |
1712 | 57 | if pposix.getuid() == 0 and not module:get_option("run_as_root") then |
1681
e76e2fb26fca
Make mod_posix not complain about root user, if setuid is set to something different as root.
Tobias Markmann <tm@ayena.de>
parents:
1680
diff
changeset
|
58 | module:log("error", "Danger, Will Robinson! Prosody doesn't need to be run as root, so don't do it!"); |
e76e2fb26fca
Make mod_posix not complain about root user, if setuid is set to something different as root.
Tobias Markmann <tm@ayena.de>
parents:
1680
diff
changeset
|
59 | module:log("error", "For more information on running Prosody as root, see http://prosody.im/doc/root"); |
e76e2fb26fca
Make mod_posix not complain about root user, if setuid is set to something different as root.
Tobias Markmann <tm@ayena.de>
parents:
1680
diff
changeset
|
60 | prosody.shutdown("Refusing to run as root"); |
e76e2fb26fca
Make mod_posix not complain about root user, if setuid is set to something different as root.
Tobias Markmann <tm@ayena.de>
parents:
1680
diff
changeset
|
61 | 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
|
62 | end |
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
|
63 | end); |
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 | |
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
|
65 | 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
|
66 | local pidfile_handle; |
1032
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
67 | |
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
68 | 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
|
69 | 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
|
70 | 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
|
71 | 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
|
72 | pidfile, pidfile_handle = nil, nil; |
1032
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
73 | end |
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
74 | end |
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
75 | |
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
|
76 | 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
|
77 | if pidfile_handle then |
1032
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
78 | remove_pidfile(); |
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
79 | 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
|
80 | 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
|
81 | if pidfile then |
3026
dec4527a7499
mod_posix: Fixed a global access.
Waqas Hussain <waqas20@gmail.com>
parents:
2923
diff
changeset
|
82 | 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
|
83 | 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
|
84 | 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
|
85 | 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
|
86 | 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
|
87 | 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
|
88 | 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
|
89 | 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
|
90 | 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
|
91 | 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
|
92 | 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
|
93 | 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
|
94 | else |
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:write(tostring(pposix.getpid())); |
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 | pidfile_handle:flush(); |
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 | 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
|
98 | 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
|
99 | 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
|
100 | 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
|
101 | |
1033
4a9f0d482028
mod_posix: Integrate with loggingmanager, register syslog sink, remove redundant logging code
Matthew Wild <mwild1@gmail.com>
parents:
1032
diff
changeset
|
102 | local syslog_opened |
4a9f0d482028
mod_posix: Integrate with loggingmanager, register syslog sink, remove redundant logging code
Matthew Wild <mwild1@gmail.com>
parents:
1032
diff
changeset
|
103 | 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
|
104 | if not syslog_opened then |
4a9f0d482028
mod_posix: Integrate with loggingmanager, register syslog sink, remove redundant logging code
Matthew Wild <mwild1@gmail.com>
parents:
1032
diff
changeset
|
105 | pposix.syslog_open("prosody"); |
4a9f0d482028
mod_posix: Integrate with loggingmanager, register syslog sink, remove redundant logging code
Matthew Wild <mwild1@gmail.com>
parents:
1032
diff
changeset
|
106 | 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
|
107 | end |
1033
4a9f0d482028
mod_posix: Integrate with loggingmanager, register syslog sink, remove redundant logging code
Matthew Wild <mwild1@gmail.com>
parents:
1032
diff
changeset
|
108 | 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
|
109 | return function (name, level, message, ...) |
4a9f0d482028
mod_posix: Integrate with loggingmanager, register syslog sink, remove redundant logging code
Matthew Wild <mwild1@gmail.com>
parents:
1032
diff
changeset
|
110 | if ... then |
4a9f0d482028
mod_posix: Integrate with loggingmanager, register syslog sink, remove redundant logging code
Matthew Wild <mwild1@gmail.com>
parents:
1032
diff
changeset
|
111 | syslog(level, format(message, ...)); |
4a9f0d482028
mod_posix: Integrate with loggingmanager, register syslog sink, remove redundant logging code
Matthew Wild <mwild1@gmail.com>
parents:
1032
diff
changeset
|
112 | else |
4a9f0d482028
mod_posix: Integrate with loggingmanager, register syslog sink, remove redundant logging code
Matthew Wild <mwild1@gmail.com>
parents:
1032
diff
changeset
|
113 | syslog(level, message); |
4a9f0d482028
mod_posix: Integrate with loggingmanager, register syslog sink, remove redundant logging code
Matthew Wild <mwild1@gmail.com>
parents:
1032
diff
changeset
|
114 | end |
4a9f0d482028
mod_posix: Integrate with loggingmanager, register syslog sink, remove redundant logging code
Matthew Wild <mwild1@gmail.com>
parents:
1032
diff
changeset
|
115 | 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
|
116 | end |
1033
4a9f0d482028
mod_posix: Integrate with loggingmanager, register syslog sink, remove redundant logging code
Matthew Wild <mwild1@gmail.com>
parents:
1032
diff
changeset
|
117 | 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
|
118 | |
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
|
119 | 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
|
120 | 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
|
121 | 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
|
122 | 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
|
123 | 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
|
124 | 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
|
125 | 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
|
126 | 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
|
127 | 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
|
128 | |
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
|
129 | if daemonize then |
587 | 130 | local function daemonize_server() |
131 | local ok, ret = pposix.daemonize(); | |
132 | 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
|
133 | module:log("error", "Failed to daemonize: %s", ret); |
587 | 134 | elseif ret and ret > 0 then |
135 | os.exit(0); | |
136 | 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
|
137 | 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
|
138 | write_pidfile(); |
587 | 139 | end |
140 | end | |
141 | module:add_event_hook("server-starting", daemonize_server); | |
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
|
142 | else |
1032
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
143 | -- 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
|
144 | write_pidfile(); |
587 | 145 | 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
|
146 | |
1032
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
147 | module:add_event_hook("server-stopped", remove_pidfile); |
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
148 | |
1118
239d4362a040
mod_posix: Reload the config and reopen log files on SIGHUP
Matthew Wild <mwild1@gmail.com>
parents:
1092
diff
changeset
|
149 | -- 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
|
150 | 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
|
151 | 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
|
152 | module:log("warn", "Received SIGTERM"); |
1238
f4c08caca3e7
mod_posix: Use global prosody object
Matthew Wild <mwild1@gmail.com>
parents:
1119
diff
changeset
|
153 | prosody.unlock_globals(); |
f4c08caca3e7
mod_posix: Use global prosody object
Matthew Wild <mwild1@gmail.com>
parents:
1119
diff
changeset
|
154 | prosody.shutdown("Received SIGTERM"); |
f4c08caca3e7
mod_posix: Use global prosody object
Matthew Wild <mwild1@gmail.com>
parents:
1119
diff
changeset
|
155 | 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
|
156 | end); |
1118
239d4362a040
mod_posix: Reload the config and reopen log files on SIGHUP
Matthew Wild <mwild1@gmail.com>
parents:
1092
diff
changeset
|
157 | |
239d4362a040
mod_posix: Reload the config and reopen log files on SIGHUP
Matthew Wild <mwild1@gmail.com>
parents:
1092
diff
changeset
|
158 | 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
|
159 | module:log("info", "Received SIGHUP"); |
1238
f4c08caca3e7
mod_posix: Use global prosody object
Matthew Wild <mwild1@gmail.com>
parents:
1119
diff
changeset
|
160 | prosody.reload_config(); |
f4c08caca3e7
mod_posix: Use global prosody object
Matthew Wild <mwild1@gmail.com>
parents:
1119
diff
changeset
|
161 | 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
|
162 | 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
|
163 | end |