X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=prosodyctl;h=8f79046f9fd08b9a5576b696d6f7cfabe98a7665;hb=552354e1a097dc9959ab7b9e803c5eb70fd23d52;hp=81a1bd16f7f6f673d59f9becdc7a02be9df70246;hpb=ba596f33614438d0f42713ca39423bdc88eb224d;p=prosody.git diff --git a/prosodyctl b/prosodyctl index 81a1bd16..8f79046f 100755 --- a/prosodyctl +++ b/prosodyctl @@ -32,7 +32,6 @@ end -- Required to be able to find packages installed with luarocks pcall(require, "luarocks.require") - config = require "core.configmanager" do @@ -66,19 +65,28 @@ require "util.datamanager".set_data_path(data_path); -- Switch away from root and into the prosody user -- local switched_user, current_uid; + +local want_pposix_version = "0.3.1"; local ok, pposix = pcall(require, "util.pposix"); + if ok and pposix then + if pposix._VERSION ~= want_pposix_version then print(string.format("Unknown version (%s) of binary pposix module, expected %s", tostring(pposix._VERSION), want_pposix_version)); return; end current_uid = pposix.getuid(); if current_uid == 0 then -- We haz root! local desired_user = config.get("*", "core", "prosody_user") or "prosody"; - local ok, err = pposix.setuid(desired_user); + local desired_group = config.get("*", "core", "prosody_group") or desired_user; + local ok, err = pposix.setgid(desired_group); if ok then - -- Yay! - switched_user = true; - else + ok, err = pposix.setuid(desired_user); + if ok then + -- Yay! + switched_user = true; + end + end + if not switched_user then -- Boo! - print("Warning: Couldn't switch to Prosody user '"..tostring(desired_user).."': "..tostring(err)); + print("Warning: Couldn't switch to Prosody user/group '"..tostring(desired_user).."'/'"..tostring(desired_group).."': "..tostring(err)); end end else @@ -93,15 +101,20 @@ local error_messages = setmetatable({ ["no-password"] = "No password was supplied"; ["no-such-user"] = "The given user does not exist on the server"; ["unable-to-save-data"] = "Unable to store, perhaps you don't have permission?"; - ["no-pidfile"] = "There is no pidfile option in the configuration file, see http://prosody.im/doc/prosodyctl#pidfile for help"; + ["no-pidfile"] = "There is no 'pidfile' option in the configuration file, see http://prosody.im/doc/prosodyctl#pidfile for help"; ["no-such-method"] = "This module has no commands"; ["not-running"] = "Prosody is not running"; }, { __index = function (t,k) return "Error: "..(tostring(k):gsub("%-", " "):gsub("^.", string.upper)); end }); +local events = require "util.events".new(); + hosts = {}; +prosody = { hosts = hosts, events = events }; -require "core.hostmanager" -require "core.eventmanager".fire_event("server-starting"); +for hostname, config in pairs(config.getconfig()) do + hosts[hostname] = { events = events }; +end + require "core.modulemanager" require "util.prosodyctl" @@ -449,6 +462,28 @@ function commands.unregister(arg) return 1; end +function commands.addplugin(arg) + local url = arg[1]; + if url:match("^http://") then + local http = require "socket.http"; + show_message("Fetching..."); + local code, err = http.request(url); + if not code then + show_message("Failed: "..err); + return 1; + end + if url:match("%.lua$") then + local ok, err = datamanager.store(url:match("/mod_([^/]+)$"), "*", "plugins", {code}); + if not ok then + show_message("Failed to save to data store: "..err); + return 1; + end + end + show_message("Saved. Don't forget to load the module using the config file or admin console!"); + else + show_message("Sorry, I don't understand how to fetch plugins from there."); + end +end ---------------------