Annotate

plugins/mod_posix.lua @ 12089:76b4e3f12b53 0.11 0.11.11

mod_pep: Wipe pubsub service on user deletion Data is already wiped from storage, but this ensures everything is properly unsubscribed, possibly with notifications etc. Clears recipient cache as well, since it is no longer relevant.
author Kim Alvefur <zash@zash.se>
date Thu, 04 Nov 2021 01:00:06 +0100
parent 10598:5cf481bee678
child 10599:4f655918fef1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5452
diff changeset
4 --
1522
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
8012
e898c8fda986 util.pposix: Remove fallocate
Kim Alvefur <zash@zash.se>
parents: 8010
diff changeset
10 local want_pposix_version = "0.4.0";
587
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
8166
bbedf564b9f9 mod_posix: Split long line [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8116
diff changeset
14 module:log("warn", "Unknown version (%s) of binary pposix module, expected %s."
bbedf564b9f9 mod_posix: Split long line [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8116
diff changeset
15 .. "Perhaps you need to recompile?", tostring(pposix._VERSION), want_pposix_version);
5452
edf3db386a19 mod_posix: Improve error message for a pposix version mismatch
Matthew Wild <mwild1@gmail.com>
parents: 5451
diff changeset
16 end
587
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17
6875
12d68f7b1be0 mod_posix: Detect failure to load util.signal by first pcall return value not by type of the second
Kim Alvefur <zash@zash.se>
parents: 6874
diff changeset
18 local have_signal, signal = pcall(require, "util.signal");
12d68f7b1be0 mod_posix: Detect failure to load util.signal by first pcall return value not by type of the second
Kim Alvefur <zash@zash.se>
parents: 6874
diff changeset
19 if not have_signal 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
20 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
21 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
22
8228
cda9db4b881d loggingmanager, mod_posix: Import util.format correctly (fixes #985)
Kim Alvefur <zash@zash.se>
parents: 8226
diff changeset
23 local format = require "util.format".format;
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 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
25 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
26
1238
f4c08caca3e7 mod_posix: Use global prosody object
Matthew Wild <mwild1@gmail.com>
parents: 1119
diff changeset
27 local prosody = _G.prosody;
f4c08caca3e7 mod_posix: Use global prosody object
Matthew Wild <mwild1@gmail.com>
parents: 1119
diff changeset
28
4623
403b56b78018 mod_posix, mod_bosh, mod_admin_telnet: Use module:set_global()
Kim Alvefur <zash@zash.se>
parents: 3555
diff changeset
29 module:set_global(); -- we're a global module
587
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30
7731
a0ee83c4a82c mod_posix: Use type-specific config API
Kim Alvefur <zash@zash.se>
parents: 6875
diff changeset
31 local umask = module:get_option_string("umask", "027");
2440
11e3d16a128f mod_posix: Set umask to 'umask' from the config, or 027
Matthew Wild <mwild1@gmail.com>
parents: 2438
diff changeset
32 pposix.umask(umask);
11e3d16a128f mod_posix: Set umask to 'umask' from the config, or 027
Matthew Wild <mwild1@gmail.com>
parents: 2438
diff changeset
33
1680
f3d241915429 Add setuid and setgid support.
Tobias Markmann <tm@ayena.de>
parents: 1579
diff changeset
34 -- 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
35 module:hook("server-started", function ()
6874
e011f289ec77 mod_posix: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 6367
diff changeset
36 local uid = module:get_option("setuid");
e011f289ec77 mod_posix: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 6367
diff changeset
37 local gid = module:get_option("setgid");
e011f289ec77 mod_posix: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 6367
diff changeset
38 if gid then
e011f289ec77 mod_posix: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 6367
diff changeset
39 local success, msg = pposix.setgid(gid);
e011f289ec77 mod_posix: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 6367
diff changeset
40 if success then
e011f289ec77 mod_posix: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 6367
diff changeset
41 module:log("debug", "Changed group to %s successfully.", gid);
e011f289ec77 mod_posix: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 6367
diff changeset
42 else
e011f289ec77 mod_posix: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 6367
diff changeset
43 module:log("error", "Failed to change group to %s. Error: %s", gid, msg);
e011f289ec77 mod_posix: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 6367
diff changeset
44 prosody.shutdown("Failed to change group to %s", gid);
1680
f3d241915429 Add setuid and setgid support.
Tobias Markmann <tm@ayena.de>
parents: 1579
diff changeset
45 end
6874
e011f289ec77 mod_posix: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 6367
diff changeset
46 end
e011f289ec77 mod_posix: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 6367
diff changeset
47 if uid then
e011f289ec77 mod_posix: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 6367
diff changeset
48 local success, msg = pposix.setuid(uid);
e011f289ec77 mod_posix: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 6367
diff changeset
49 if success then
e011f289ec77 mod_posix: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 6367
diff changeset
50 module:log("debug", "Changed user to %s successfully.", uid);
e011f289ec77 mod_posix: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 6367
diff changeset
51 else
e011f289ec77 mod_posix: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 6367
diff changeset
52 module:log("error", "Failed to change user to %s. Error: %s", uid, msg);
e011f289ec77 mod_posix: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 6367
diff changeset
53 prosody.shutdown("Failed to change user to %s", uid);
1680
f3d241915429 Add setuid and setgid support.
Tobias Markmann <tm@ayena.de>
parents: 1579
diff changeset
54 end
6874
e011f289ec77 mod_posix: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 6367
diff changeset
55 end
e011f289ec77 mod_posix: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 6367
diff changeset
56 end);
1680
f3d241915429 Add setuid and setgid support.
Tobias Markmann <tm@ayena.de>
parents: 1579
diff changeset
57
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
58 -- 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
59 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
60 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
61 if not suid or suid == 0 or suid == "root" then
8116
76ac8b617402 mod_posix: Use typed config API
Kim Alvefur <zash@zash.se>
parents: 8012
diff changeset
62 if pposix.getuid() == 0 and not module:get_option_boolean("run_as_root") then
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
63 module:log("error", "Danger, Will Robinson! Prosody doesn't need to be run as root, so don't do it!");
7359
a5a080c12c96 Update every link to the documentation to use HTTPS
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 6875
diff changeset
64 module:log("error", "For more information on running Prosody as root, see https://prosody.im/doc/root");
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 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
66 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
67 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
68 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
69
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
70 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
71 local pidfile_handle;
1032
409f22d0430f mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents: 991
diff changeset
72
409f22d0430f mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents: 991
diff changeset
73 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
74 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
75 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
76 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
77 pidfile, pidfile_handle = nil, nil;
1032
409f22d0430f mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents: 991
diff changeset
78 end
409f22d0430f mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents: 991
diff changeset
79 end
409f22d0430f mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents: 991
diff changeset
80
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 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
82 if pidfile_handle then
1032
409f22d0430f mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents: 991
diff changeset
83 remove_pidfile();
409f22d0430f mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents: 991
diff changeset
84 end
7992
51396e0836cf mod_posix: Use path variant of config API for pidfile option
Kim Alvefur <zash@zash.se>
parents: 7731
diff changeset
85 pidfile = module:get_option_path("pidfile", nil, "data");
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
86 if pidfile then
3026
dec4527a7499 mod_posix: Fixed a global access.
Waqas Hussain <waqas20@gmail.com>
parents: 2923
diff changeset
87 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
88 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
89 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
90 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
91 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
92 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
93 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
94 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
95 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
96 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
97 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
98 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
99 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
100 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
101 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
102 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
103 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
104 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
105 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
106 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
107 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
108 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
109 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
110 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
111 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
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 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
114 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
115
3540
bc139431830b Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents: 3537
diff changeset
116 local syslog_opened;
8167
39188851811c mod_posix: Ignore currently unused argument [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8166
diff changeset
117 function syslog_sink_maker(config) -- luacheck: ignore 212/config
1033
4a9f0d482028 mod_posix: Integrate with loggingmanager, register syslog sink, remove redundant logging code
Matthew Wild <mwild1@gmail.com>
parents: 1032
diff changeset
118 if not syslog_opened then
4794
25ce7720555f mod_posix: Support syslog_facility config option
Matthew Wild <mwild1@gmail.com>
parents: 3555
diff changeset
119 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
120 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
121 end
8226
3463d82276de loggingmanager, mod_posix: Replace the old inconsistent log formatting with the new util.format
Waqas Hussain <waqas20@gmail.com>
parents: 8167
diff changeset
122 local syslog = pposix.syslog_log;
1033
4a9f0d482028 mod_posix: Integrate with loggingmanager, register syslog sink, remove redundant logging code
Matthew Wild <mwild1@gmail.com>
parents: 1032
diff changeset
123 return function (name, level, message, ...)
8226
3463d82276de loggingmanager, mod_posix: Replace the old inconsistent log formatting with the new util.format
Waqas Hussain <waqas20@gmail.com>
parents: 8167
diff changeset
124 syslog(level, name, format(message, ...));
3540
bc139431830b Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents: 3537
diff changeset
125 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
126 end
1033
4a9f0d482028 mod_posix: Integrate with loggingmanager, register syslog sink, remove redundant logging code
Matthew Wild <mwild1@gmail.com>
parents: 1032
diff changeset
127 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
128
10598
5cf481bee678 mod_posix: Support for command-line flags to override 'daemonize' config option
Matthew Wild <mwild1@gmail.com>
parents: 9763
diff changeset
129 local daemonize = prosody.opts.daemonize;
5cf481bee678 mod_posix: Support for command-line flags to override 'daemonize' config option
Matthew Wild <mwild1@gmail.com>
parents: 9763
diff changeset
130
5cf481bee678 mod_posix: Support for command-line flags to override 'daemonize' config option
Matthew Wild <mwild1@gmail.com>
parents: 9763
diff changeset
131 if daemonize == nil then
5cf481bee678 mod_posix: Support for command-line flags to override 'daemonize' config option
Matthew Wild <mwild1@gmail.com>
parents: 9763
diff changeset
132 -- Fall back to config file if not specified on command-line
5cf481bee678 mod_posix: Support for command-line flags to override 'daemonize' config option
Matthew Wild <mwild1@gmail.com>
parents: 9763
diff changeset
133 daemonize = module:get_option("daemonize", prosody.installed);
5cf481bee678 mod_posix: Support for command-line flags to override 'daemonize' config option
Matthew Wild <mwild1@gmail.com>
parents: 9763
diff changeset
134 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
135
5175
fabaed7418a6 mod_posix: Remove console and stdout logging sinks before daemonizing
Kim Alvefur <zash@zash.se>
parents: 4993
diff changeset
136 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
137 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
138 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
139 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
140 lm.reload_logging();
fabaed7418a6 mod_posix: Remove console and stdout logging sinks before daemonizing
Kim Alvefur <zash@zash.se>
parents: 4993
diff changeset
141 end
fabaed7418a6 mod_posix: Remove console and stdout logging sinks before daemonizing
Kim Alvefur <zash@zash.se>
parents: 4993
diff changeset
142
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
143 if daemonize then
587
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
144 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
145 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
146 remove_log_sinks();
587
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
147 local ok, ret = pposix.daemonize();
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
148 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
149 module:log("error", "Failed to daemonize: %s", ret);
587
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
150 elseif ret and ret > 0 then
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
151 os.exit(0);
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
152 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
153 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
154 write_pidfile();
587
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
155 end
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
156 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
157 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
158 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
159 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
160 else
1032
409f22d0430f mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents: 991
diff changeset
161 -- 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
162 write_pidfile();
587
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
163 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
164
3537
7bbb19804d82 mod_posix: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents: 3481
diff changeset
165 module:hook("server-stopped", remove_pidfile);
1032
409f22d0430f mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents: 991
diff changeset
166
1118
239d4362a040 mod_posix: Reload the config and reopen log files on SIGHUP
Matthew Wild <mwild1@gmail.com>
parents: 1092
diff changeset
167 -- Set signal handlers
6875
12d68f7b1be0 mod_posix: Detect failure to load util.signal by first pcall return value not by type of the second
Kim Alvefur <zash@zash.se>
parents: 6874
diff changeset
168 if have_signal then
8663
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8235
diff changeset
169 module:add_timer(0, function ()
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8235
diff changeset
170 signal.signal("SIGTERM", function ()
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8235
diff changeset
171 module:log("warn", "Received SIGTERM");
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8235
diff changeset
172 prosody.unlock_globals();
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8235
diff changeset
173 prosody.shutdown("Received SIGTERM");
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8235
diff changeset
174 prosody.lock_globals();
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8235
diff changeset
175 end);
1118
239d4362a040 mod_posix: Reload the config and reopen log files on SIGHUP
Matthew Wild <mwild1@gmail.com>
parents: 1092
diff changeset
176
8663
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8235
diff changeset
177 signal.signal("SIGHUP", function ()
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8235
diff changeset
178 module:log("info", "Received SIGHUP");
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8235
diff changeset
179 prosody.reload_config();
9763
982529dd0bed mod_posix: Don't reload logging twice
Kim Alvefur <zash@zash.se>
parents: 8663
diff changeset
180 -- this also reloads logging
8663
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8235
diff changeset
181 end);
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5452
diff changeset
182
8663
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8235
diff changeset
183 signal.signal("SIGINT", function ()
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8235
diff changeset
184 module:log("info", "Received SIGINT");
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8235
diff changeset
185 prosody.unlock_globals();
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8235
diff changeset
186 prosody.shutdown("Received SIGINT");
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8235
diff changeset
187 prosody.lock_globals();
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8235
diff changeset
188 end);
2332
7772dde4010b mod_posix: Catch SIGINT
Matthew Wild <mwild1@gmail.com>
parents: 2074
diff changeset
189 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
190 end