+require "core.loggingmanager"
+
+if not require "util.dependencies".check_dependencies() then
+ os.exit(1);
+end
+
+prosody = { hosts = {}, events = events, platform = "posix" };
+
+local data_path = config.get("*", "core", "data_path") or CFG_DATADIR or "data";
+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.3";
+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 desired_group = config.get("*", "core", "prosody_group") or desired_user;
+ local ok, err = pposix.setgid(desired_group);
+ if ok then
+ 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/group '"..tostring(desired_user).."'/'"..tostring(desired_group).."': "..tostring(err));
+ end
+ end
+
+ -- Set our umask to protect data files
+ pposix.umask(config.get("*", "core", "umask") or "027");
+else
+ print("Error: Unable to load pposix module. Check that Prosody is installed correctly.")
+ print("For more help send the below error to us through http://prosody.im/discuss");
+ print(tostring(pposix))
+end
+