plugins/mod_version.lua
author Kim Alvefur <zash@zash.se>
Sat, 06 Apr 2024 14:31:28 +0200
changeset 13478 05c1098084cd
parent 12981 74b9e05af71e
child 13480 b9267ce1b183
permissions -rw-r--r--
mod_version: Handle access denied from uname() Discovered while experimenting with a stricter SystemCallFilter setting See man:systemd.exec(5)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1523
841d61be198f Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents: 1312
diff changeset
     1
-- Prosody IM
2923
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 1646
diff changeset
     2
-- Copyright (C) 2008-2010 Matthew Wild
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 1646
diff changeset
     3
-- Copyright (C) 2008-2010 Waqas Hussain
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 4793
diff changeset
     4
--
758
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 704
diff changeset
     5
-- This project is MIT/X11 licensed. Please see the
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 704
diff changeset
     6
-- COPYING file in the source package for more information.
519
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 517
diff changeset
     7
--
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 517
diff changeset
     8
12981
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 9439
diff changeset
     9
local st = require "prosody.util.stanza";
188
0d9f03009b8a mod_version is here
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    10
1646
21bcc7b8b4d8 mod_version: Rewritten to use new API. Added reply caching, and fixed some issues.
Waqas Hussain <waqas20@gmail.com>
parents: 1645
diff changeset
    11
module:add_feature("jabber:iq:version");
421
63be85693710 Modules now sending disco replies
Waqas Hussain <waqas20@gmail.com>
parents: 314
diff changeset
    12
3421
d3852a4d37e2 mod_version: Leave out the os element if hide_os_type is set
Kim Alvefur <zash@zash.se>
parents: 3420
diff changeset
    13
local query = st.stanza("query", {xmlns = "jabber:iq:version"})
9436
13b8d47119ad mod_version: Use text_tag
Kim Alvefur <zash@zash.se>
parents: 9232
diff changeset
    14
	:text_tag("name", "Prosody")
13b8d47119ad mod_version: Use text_tag
Kim Alvefur <zash@zash.se>
parents: 9232
diff changeset
    15
	:text_tag("version", prosody.version);
3421
d3852a4d37e2 mod_version: Leave out the os element if hide_os_type is set
Kim Alvefur <zash@zash.se>
parents: 3420
diff changeset
    16
7980
01d6298de991 plugins/various: Use type-specific config API
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
    17
if not module:get_option_boolean("hide_os_type") then
9439
a950f9fa9137 mod_version: Reduce scope of variable
Kim Alvefur <zash@zash.se>
parents: 9438
diff changeset
    18
	local platform;
803
5a64649f4b94 mod_version: Operating system detection. Disable with hide_os_type = true in config
Matthew Wild <mwild1@gmail.com>
parents: 760
diff changeset
    19
	if os.getenv("WINDIR") then
9438
33301038d3e4 mod_version: Rename confusingly named variable
Kim Alvefur <zash@zash.se>
parents: 9437
diff changeset
    20
		platform = "Windows";
803
5a64649f4b94 mod_version: Operating system detection. Disable with hide_os_type = true in config
Matthew Wild <mwild1@gmail.com>
parents: 760
diff changeset
    21
	else
7980
01d6298de991 plugins/various: Use type-specific config API
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
    22
		local os_version_command = module:get_option_string("os_version_command");
12981
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 9439
diff changeset
    23
		local ok, pposix = pcall(require, "prosody.util.pposix");
3483
443139c396c5 mod_version: Use pposix.uname() if available and os_version_command not set
Matthew Wild <mwild1@gmail.com>
parents: 3421
diff changeset
    24
		if not os_version_command and (ok and pposix and pposix.uname) then
13478
05c1098084cd mod_version: Handle access denied from uname()
Kim Alvefur <zash@zash.se>
parents: 12981
diff changeset
    25
			local ok, uname = pposix.uname();
05c1098084cd mod_version: Handle access denied from uname()
Kim Alvefur <zash@zash.se>
parents: 12981
diff changeset
    26
			if not ok then
05c1098084cd mod_version: Handle access denied from uname()
Kim Alvefur <zash@zash.se>
parents: 12981
diff changeset
    27
				module:log("debug", "Could not retrieve OS name: %s", uname);
05c1098084cd mod_version: Handle access denied from uname()
Kim Alvefur <zash@zash.se>
parents: 12981
diff changeset
    28
			else
05c1098084cd mod_version: Handle access denied from uname()
Kim Alvefur <zash@zash.se>
parents: 12981
diff changeset
    29
				platform = uname.sysname;
05c1098084cd mod_version: Handle access denied from uname()
Kim Alvefur <zash@zash.se>
parents: 12981
diff changeset
    30
			end
3483
443139c396c5 mod_version: Use pposix.uname() if available and os_version_command not set
Matthew Wild <mwild1@gmail.com>
parents: 3421
diff changeset
    31
		end
9438
33301038d3e4 mod_version: Rename confusingly named variable
Kim Alvefur <zash@zash.se>
parents: 9437
diff changeset
    32
		if not platform then
3483
443139c396c5 mod_version: Use pposix.uname() if available and os_version_command not set
Matthew Wild <mwild1@gmail.com>
parents: 3421
diff changeset
    33
			local uname = io.popen(os_version_command or "uname");
443139c396c5 mod_version: Use pposix.uname() if available and os_version_command not set
Matthew Wild <mwild1@gmail.com>
parents: 3421
diff changeset
    34
			if uname then
9438
33301038d3e4 mod_version: Rename confusingly named variable
Kim Alvefur <zash@zash.se>
parents: 9437
diff changeset
    35
				platform = uname:read("*a");
3483
443139c396c5 mod_version: Use pposix.uname() if available and os_version_command not set
Matthew Wild <mwild1@gmail.com>
parents: 3421
diff changeset
    36
			end
443139c396c5 mod_version: Use pposix.uname() if available and os_version_command not set
Matthew Wild <mwild1@gmail.com>
parents: 3421
diff changeset
    37
			uname:close();
803
5a64649f4b94 mod_version: Operating system detection. Disable with hide_os_type = true in config
Matthew Wild <mwild1@gmail.com>
parents: 760
diff changeset
    38
		end
5a64649f4b94 mod_version: Operating system detection. Disable with hide_os_type = true in config
Matthew Wild <mwild1@gmail.com>
parents: 760
diff changeset
    39
	end
9438
33301038d3e4 mod_version: Rename confusingly named variable
Kim Alvefur <zash@zash.se>
parents: 9437
diff changeset
    40
	if platform then
33301038d3e4 mod_version: Rename confusingly named variable
Kim Alvefur <zash@zash.se>
parents: 9437
diff changeset
    41
		platform = platform:match("^%s*(.-)%s*$") or platform;
33301038d3e4 mod_version: Rename confusingly named variable
Kim Alvefur <zash@zash.se>
parents: 9437
diff changeset
    42
		query:text_tag("os", platform);
3483
443139c396c5 mod_version: Use pposix.uname() if available and os_version_command not set
Matthew Wild <mwild1@gmail.com>
parents: 3421
diff changeset
    43
	end
803
5a64649f4b94 mod_version: Operating system detection. Disable with hide_os_type = true in config
Matthew Wild <mwild1@gmail.com>
parents: 760
diff changeset
    44
end
5a64649f4b94 mod_version: Operating system detection. Disable with hide_os_type = true in config
Matthew Wild <mwild1@gmail.com>
parents: 760
diff changeset
    45
9230
c0e058633d9a mod_version: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 7980
diff changeset
    46
module:hook("iq-get/host/jabber:iq:version:query", function(event)
9437
b502766a10d7 mod_version: Make 'origin' variable local for consistency
Kim Alvefur <zash@zash.se>
parents: 9436
diff changeset
    47
	local origin, stanza = event.origin, event.stanza;
b502766a10d7 mod_version: Make 'origin' variable local for consistency
Kim Alvefur <zash@zash.se>
parents: 9436
diff changeset
    48
	origin.send(st.reply(stanza):add_child(query));
9232
1338b84c0566 mod_version: Remove redundant
Kim Alvefur <zash@zash.se>
parents: 9230
diff changeset
    49
	return true;
704
ef8d0d339172 mod_version: Removed and rearranged some code
Waqas Hussain <waqas20@gmail.com>
parents: 615
diff changeset
    50
end);