Changeset

475:fe861de7a4fc

Forced merge.
author Tobias Markmann <tm@ayena.de>
date Sat, 29 Nov 2008 11:24:59 +0100
parents 474:666e22848890 (current diff) 463:a2452d3bd828 (diff)
children 476:4744735a0a5e
files main.lua pull_from_master.sh util-src/Makefile util/sasl.lua
diffstat 10 files changed, 408 insertions(+), 122 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile	Sat Nov 29 11:24:59 2008 +0100
@@ -0,0 +1,21 @@
+
+include config.unix
+
+BIN = $(DESTDIR)$(PREFIX)/bin
+CONFIG = $(DESTDIR)$(SYSCONFDIR)
+MODULES = $(DESTDIR)$(PREFIX)/lib/prosody/modules
+
+SOURCEDIR = $(DESTDIR)$(PREFIX)/lib/prosody
+
+all:
+	$(MAKE) all -C util-src
+
+install: prosody
+	install -d $(BIN) $(CONFIG) $(MODULES)
+	install ./prosody $(BIN)
+	install -m644 plugins/* $(MODULES)
+	install -m644 prosody.cfg.lua $(CONFIG)
+	$(MAKE) install -C util-src
+
+clean:
+	$(MAKE) clean -C util-src
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/configure	Sat Nov 29 11:24:59 2008 +0100
@@ -0,0 +1,243 @@
+#!/bin/sh
+
+# Defaults
+
+PREFIX=/usr/local
+SYSCONFDIR="$PREFIX/etc/prosody"
+LUA_SUFFIX=""
+LUA_DIR="/usr"
+LUA_BINDIR="/usr/bin"
+LUA_INCDIR="/usr/include"
+LUA_LIBDIR="/usr/lib"
+IDN_LIB=idn
+OPENSSL_LIB=ssl
+
+# Help
+
+show_help() {
+cat <<EOF
+Configure Prosody prior to building.
+
+--help                      This help.
+--prefix=DIR                Prefix where Prosody should be installed.
+                            Default is $PREFIX
+--sysconfdir=DIR            Location where the config file should be installed.
+                            Default is \$PREFIX/etc/prosody
+--lua-suffix=SUFFIX         Versioning suffix to use in Lua filenames.
+                            Default is "$LUA_SUFFIX" (lua$LUA_SUFFIX...)
+--with-lua=PREFIX           Use Lua from given prefix.
+                            Default is $LUA_DIR
+--with-lua-include=DIR      You can also specify Lua's includes dir.
+                            Default is \$LUA_DIR/include
+--with-lua-lib=DIR          You can also specify Lua's libraries dir.
+                            Default is \$LUA_DIR/lib
+--with-idn=LIB              The name of the IDN library to link with.
+                            Default is $IDN_LIB
+--with-ssl=LIB              The name of the SSL to link with.
+                            Default is $OPENSSL_LIB
+--require-config              Will cause Prosody to refuse to run when
+                            it fails to find a configuration file
+EOF
+}
+
+
+while [ "$1" ]
+do
+   value="`echo $1 | sed 's/.*=\(.*\)/\1/'`"
+   if echo "$value" | grep -q "~"
+   then
+      echo
+      echo '*WARNING*: the "~" sign is not expanded in flags.'
+      echo 'If you mean the home directory, use $HOME instead.'
+      echo
+   fi
+   case "$1" in
+   --help)
+      show_help
+      exit 0
+      ;;
+   --prefix=*)
+      PREFIX="$value"
+      PREFIX_SET=yes
+      ;;
+   --require-config)
+      REQUIRE_CONFIG=yes
+      ;;
+   --lua-suffix=*)
+      LUA_SUFFIX="$value"
+      LUA_SUFFIX_SET=yes
+      ;;
+   --with-lua=*)
+      LUA_DIR="$value"
+      LUA_DIR_SET=yes
+      ;;
+   --with-lua-include=*)
+      LUA_INCDIR="$value"
+      LUA_INCDIR_SET=yes
+      ;;
+   --with-lua-lib=*)
+      LUA_LIBDIR="$value" LUA_LIBDIR_SET=yes
+      ;;      
+   --with-idn=*)
+      IDN_LIB="$value"
+      ;;      
+   --with-ssl=*)
+      OPENSSL_LIB="$value"
+      ;;      
+   *)
+      echo "Error: Unknown flag: $1"
+      exit 1
+      ;;
+   esac
+   shift
+done
+
+if [ "$PREFIX_SET" = "yes" -a ! "$SYSCONFDIR_SET" = "yes" ]
+then
+   if [ "$PREFIX" = "/usr" ]
+   then SYSCONFDIR=/etc/prosody
+   else SYSCONFDIR=$PREFIX/etc/prosody
+   fi
+fi
+
+find_program() {
+   path="$PATH"
+   item="`echo "$path" | sed 's/\([^:]*\):.*/\1/'`"
+   path="`echo "$path" | sed -n 's/[^:]*::*\(.*\)/\1/p'`"
+   found="no"
+   while [ "$item" ]
+   do
+      if [ -e "$item/$1" ]
+      then
+         found="yes"
+         break
+      fi
+      item="`echo "$path" | sed 's/\([^:]*\):.*/\1/'`"
+      path="`echo "$path" | sed -n 's/[^:]*::*\(.*\)/\1/p'`"
+   done
+   if [ "$found" = "yes" ]
+   then
+      echo "$item"
+   else
+      echo ""
+   fi
+}
+
+if [ "$LUA_SUFFIX_SET" != "yes" ]
+then
+   for suffix in "" "5.1" "51" ""
+   do
+      LUA_SUFFIX="$suffix"
+      if [ "$LUA_DIR_SET" = "yes" ]
+      then
+         if [ -e "$LUA_DIR/bin/lua$suffix" ]
+         then
+            find_lua="$LUA_DIR"
+         fi
+      else
+         find_lua=`find_program lua$suffix`
+      fi
+      if [ "$find_lua" ]
+      then
+         echo "Lua interpreter found: $find_lua/lua$suffix..."
+         break
+      fi
+   done
+fi
+
+if ! [ "$LUA_DIR_SET" = "yes" ]
+then
+   echo -n "Looking for Lua... "
+   if [ ! "$find_lua" ]
+   then
+      find_lua=`find_program lua$LUA_SUFFIX`
+      echo "lua$LUA_SUFFIX found in \$PATH: $find_lua"
+   fi
+   if [ "$find_lua" ]
+   then
+      LUA_DIR=`dirname $find_lua`
+      LUA_BINDIR="$find_lua"
+   else
+      echo "lua$LUA_SUFFIX not found in \$PATH."
+      echo "You may want to use the flags --with-lua and/or --lua-suffix. See --help."
+      exit 1
+   fi
+fi
+
+if ! [ "$LUA_INCDIR_SET" = "yes" ]
+then
+   LUA_INCDIR="$LUA_DIR/include"
+fi
+
+if ! [ "$LUA_LIBDIR_SET" = "yes" ]
+then
+   LUA_LIBDIR="$LUA_DIR/lib"
+fi
+
+if [ "$LUA_DIR_SET" = "yes" ]
+then
+   LUA_BINDIR="$LUA_DIR/bin"
+fi
+
+echo -n "Checking Lua includes... "
+lua_h="$LUA_INCDIR/lua.h"
+if [ -e "$lua_h" ]
+then
+   echo "lua.h found in $lua_h"
+else
+   echo "lua.h not found (looked in $lua_h)"
+   echo "You may want to use the flag --with-lua-include. See --help."
+   exit 1
+fi
+
+find_helper() {
+   explanation="$1"
+   shift
+   tried="$*"
+   while [ "$1" ]
+   do
+      found=`find_program "$1"`
+      if [ "$found" ]
+      then
+         echo "$1 found at $found"
+         HELPER=$1
+         return
+      fi
+      shift
+   done
+   echo "Could not find a $explanation. Tried: $tried."
+   echo "Make sure one of them is installed and available in your PATH."
+   exit 1
+}
+
+# Write config
+
+echo "Writing configuration..."
+echo
+
+cat <<EOF > config.unix
+# This file was automatically generated by the configure script.
+# Run "./configure --help" for details.
+
+PREFIX=$PREFIX
+SYSCONFDIR=$SYSCONFDIR
+LUA_SUFFIX=$LUA_SUFFIX
+LUA_DIR=$LUA_DIR
+LUA_INCDIR=$LUA_INCDIR
+LUA_LIBDIR=$LUA_LIBDIR
+LUA_BINDIR=$LUA_BINDIR
+REQUIRE_CONFIG=$REQUIRE_CONFIG
+IDN_LIB=$IDN_LIB
+OPENSSL_LIB=$OPENSSL_LIB
+
+EOF
+
+echo "Installation prefix: $PREFIX"
+echo "Prosody configuration directory: $SYSCONFDIR"
+echo "Using Lua from: $LUA_DIR"
+
+make clean > /dev/null 2> /dev/null
+
+echo
+echo "Done. You can now run 'make' to build."
+echo
--- a/main.lua	Fri Nov 28 19:24:08 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,101 +0,0 @@
-pcall(require, "luarocks.require")
-
-config = require "core.configmanager"
-log = require "util.logger".init("general");
-
-do
-	-- TODO: Check for other formats when we add support for them
-	-- Use lfs? Make a new conf/ dir?
-	local ok, err = config.load("lxmppd.cfg.lua");
-	if not ok then
-		log("error", "Couldn't load config file: %s", err);
-		log("info", "Falling back to old config file format...")
-		ok, err = pcall(dofile, "lxmppd.cfg");
-		if not ok then
-			log("error", "Old config format loading failed too: %s", err);
-		else
-			for _, host in ipairs(_G.config.hosts) do
-				config.set(host, "core", "defined", true);
-			end
-			
-			config.set("*", "core", "modules_enabled", _G.config.modules);
-			config.set("*", "core", "ssl", _G.config.ssl_ctx);
-		end
-	end
-end
-
-local server = require "net.server"
-
-require "util.dependencies"
-
--- Maps connections to sessions --
-sessions = {};
-hosts = {};
-
-local defined_hosts = config.getconfig();
-
-for host, host_config in pairs(defined_hosts) do
-	if host ~= "*" and (host_config.core.enabled == nil or host_config.core.enabled) then
-		hosts[host] = {type = "local", connected = true, sessions = {}, host = host, s2sout = {} };
-	end
-end
-
--- Load and initialise core modules --
-
-require "util.import"
-require "core.xmlhandlers"
-require "core.rostermanager"
-require "core.offlinemessage"
-require "core.modulemanager"
-require "core.usermanager"
-require "core.sessionmanager"
-require "core.stanza_router"
-
---[[
-pcall(require, "remdebug.engine");
-if remdebug then remdebug.engine.start() end
-]]
-
-local start = require "net.connlisteners".start;
-require "util.stanza"
-require "util.jid"
-
-------------------------------------------------------------------------
-
--- Initialise modules
-
-for host in pairs(hosts) do
-	if host ~= "*" then
-		local modules_enabled = config.get(host, "core", "modules_enabled");
-		if modules_enabled then
-			for _, module in pairs(modules_enabled) do
-				modulemanager.load(host, module);
-			end
-		end
-	end
-end
-
--- setup error handling
-setmetatable(_G, { __index = function (t, k) print("WARNING: ATTEMPT TO READ A NIL GLOBAL!!!", k); error("Attempt to read a non-existent global. Naughty boy.", 2); end, __newindex = function (t, k, v) print("ATTEMPT TO SET A GLOBAL!!!!", tostring(k).." = "..tostring(v)); error("Attempt to set a global. Naughty boy.", 2); end }) --]][][[]][];
-
-local protected_handler = function (conn, data, err) local success, ret = pcall(handler, conn, data, err); if not success then print("ERROR on "..tostring(conn)..": "..ret); conn:close(); end end;
-local protected_disconnect = function (conn, err) local success, ret = pcall(disconnect, conn, err); if not success then print("ERROR on "..tostring(conn).." disconnect: "..ret); conn:close(); end end;
-
-
-local global_ssl_ctx = config.get("*", "core", "ssl");
-if global_ssl_ctx then
-	local default_ssl_ctx = { mode = "server", protocol = "sslv23", capath = "/etc/ssl/certs", verify = "none"; };
-	setmetatable(global_ssl_ctx, { __index = default_ssl_ctx });
-end
-
--- start listening on sockets
-start("xmppclient", { ssl = global_ssl_ctx })
-start("xmppserver", { ssl = global_ssl_ctx })
-
-if config.get("*", "core", "console_enabled") then
-	start("console")
-end
-
-modulemanager.fire_event("server-started");
-
-server.loop();
--- a/net/dns.lua	Fri Nov 28 19:24:08 2008 +0100
+++ b/net/dns.lua	Sat Nov 29 11:24:59 2008 +0100
@@ -691,7 +691,8 @@
           if not next (self.active) then  return nil  end
         else
           -- print ('retry', o.server, o.delay)
-          self.socket[o.server]:send (o.packet)
+          local _a = self.socket[o.server];
+          if _a then _a:send (o.packet) end
           o.retry = self.time + self.delays[o.delay]
           end  end  end  end
 
--- a/plugins/mod_console.lua	Fri Nov 28 19:24:08 2008 +0100
+++ b/plugins/mod_console.lua	Sat Nov 29 11:24:59 2008 +0100
@@ -124,7 +124,7 @@
 
 def_env.server = {};
 function def_env.server:reload()
-	dofile "main.lua"
+	dofile "prosody"
 	return true, "Server reloaded";
 end
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/prosody	Sat Nov 29 11:24:59 2008 +0100
@@ -0,0 +1,118 @@
+#!/usr/bin/env lua
+
+-- Config here --
+
+
+
+-- -- -- -- -- --
+
+if CFG_SOURCEDIR then
+	package.path = CFG_SOURCEDIR.."/?.lua;"..package.path
+	package.cpath = CFG_SOURCEDIR.."/?.lua;"..package.cpath
+end
+
+-- Required to be able to find packages installed with luarocks
+pcall(require, "luarocks.require")
+
+
+config = require "core.configmanager"
+log = require "util.logger".init("general");
+
+do
+	-- TODO: Check for other formats when we add support for them
+	-- Use lfs? Make a new conf/ dir?
+	local ok, err = config.load("lxmppd.cfg.lua");
+	if not ok then
+		log("error", "Couldn't load config file: %s", err);
+		log("info", "Falling back to old config file format...")
+		ok, err = pcall(dofile, "lxmppd.cfg");
+		if not ok then
+			log("error", "Old config format loading failed too: %s", err);
+		else
+			for _, host in ipairs(_G.config.hosts) do
+				config.set(host, "core", "defined", true);
+			end
+			
+			config.set("*", "core", "modules_enabled", _G.config.modules);
+			config.set("*", "core", "ssl", _G.config.ssl_ctx);
+		end
+	end
+end
+
+require "util.datamanager".set_data_path(config.get("*", "core", "data_path") or "data");
+
+local server = require "net.server"
+
+require "util.dependencies"
+
+-- Maps connections to sessions --
+sessions = {};
+hosts = {};
+
+local defined_hosts = config.getconfig();
+
+for host, host_config in pairs(defined_hosts) do
+	if host ~= "*" and (host_config.core.enabled == nil or host_config.core.enabled) then
+		hosts[host] = {type = "local", connected = true, sessions = {}, host = host, s2sout = {} };
+	end
+end
+
+-- Load and initialise core modules --
+
+require "util.import"
+require "core.xmlhandlers"
+require "core.rostermanager"
+require "core.offlinemessage"
+require "core.modulemanager"
+require "core.usermanager"
+require "core.sessionmanager"
+require "core.stanza_router"
+
+--[[
+pcall(require, "remdebug.engine");
+if remdebug then remdebug.engine.start() end
+]]
+
+local start = require "net.connlisteners".start;
+require "util.stanza"
+require "util.jid"
+
+------------------------------------------------------------------------
+
+-- Initialise modules
+
+for host in pairs(hosts) do
+	if host ~= "*" then
+		local modules_enabled = config.get(host, "core", "modules_enabled");
+		if modules_enabled then
+			for _, module in pairs(modules_enabled) do
+				modulemanager.load(host, module);
+			end
+		end
+	end
+end
+
+-- setup error handling
+setmetatable(_G, { __index = function (t, k) print("WARNING: ATTEMPT TO READ A NIL GLOBAL!!!", k); error("Attempt to read a non-existent global. Naughty boy.", 2); end, __newindex = function (t, k, v) print("ATTEMPT TO SET A GLOBAL!!!!", tostring(k).." = "..tostring(v)); error("Attempt to set a global. Naughty boy.", 2); end }) --]][][[]][];
+
+local protected_handler = function (conn, data, err) local success, ret = pcall(handler, conn, data, err); if not success then print("ERROR on "..tostring(conn)..": "..ret); conn:close(); end end;
+local protected_disconnect = function (conn, err) local success, ret = pcall(disconnect, conn, err); if not success then print("ERROR on "..tostring(conn).." disconnect: "..ret); conn:close(); end end;
+
+
+local global_ssl_ctx = config.get("*", "core", "ssl");
+if global_ssl_ctx then
+	local default_ssl_ctx = { mode = "server", protocol = "sslv23", capath = "/etc/ssl/certs", verify = "none"; };
+	setmetatable(global_ssl_ctx, { __index = default_ssl_ctx });
+end
+
+-- start listening on sockets
+start("xmppclient", { ssl = global_ssl_ctx })
+start("xmppserver", { ssl = global_ssl_ctx })
+
+if config.get("*", "core", "console_enabled") then
+	start("console")
+end
+
+modulemanager.fire_event("server-started");
+
+server.loop();
--- a/pull_from_master.sh	Fri Nov 28 19:24:08 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-#!/bin/sh
-which hg >/dev/null || echo "You must have Mercurial (the hg command)"
-hg pull http://heavy-horse.co.uk:4000/
--- a/util-src/Makefile	Fri Nov 28 19:24:08 2008 +0100
+++ b/util-src/Makefile	Sat Nov 29 11:24:59 2008 +0100
@@ -1,13 +1,15 @@
+
+include ../config.unix
+
+LUA_SUFFIX?=5.1
+LUA_INCDIR?=/usr/include/lua$(LUA_SUFFIX)
+LUA_LIB?=lua$(LUA_SUFFIX)
+IDN_LIB?=idn
+OPENSSL_LIB?=ssl
 
 
-LUA_INCLUDE=/usr/include/lua51
-LUA_LIB=lua5.1
-
-IDN_LIB=idn
-OPENSSL_LIB=ssl
 
 all: encodings.so hashes.so
-	
 
 install: encodings.so hashes.so
 	strip *.so
@@ -15,11 +17,12 @@
 	
 
 clean:
-	rm *.so
+	rm -f *.so
+	rm -f ../util/*.so
 
 encodings.so: encodings.c
-	gcc -shared encodings.c -I$(LUA_INCLUDE) -l$(LUA_LIB) -l$(IDN_LIB) -o encodings.so
+	gcc -shared encodings.c -I$(LUA_INCDIR) -l$(LUA_LIB) -l$(IDN_LIB) -o encodings.so
 
 hashes.so: hashes.c
-	gcc -shared hashes.c -I$(LUA_INCLUDE) -l$(LUA_LIB) -l$(OPENSSL_LIB) -o hashes.so
+	gcc -shared hashes.c -I$(LUA_INCDIR) -l$(LUA_LIB) -l$(OPENSSL_LIB) -o hashes.so
 	
--- a/util/datamanager.lua	Fri Nov 28 19:24:08 2008 +0100
+++ b/util/datamanager.lua	Sat Nov 29 11:24:59 2008 +0100
@@ -3,7 +3,7 @@
 local pairs, ipairs = pairs, ipairs;
 local char = string.char;
 local loadfile, setfenv, pcall = loadfile, setfenv, pcall;
-local log = log;
+local log = require "util.logger".init("datamanager");
 local io_open = io.open;
 local os_remove = os.remove;
 local tostring, tonumber = tostring, tonumber;
@@ -17,14 +17,14 @@
 	end
 end
 
+local data_path = "data";
+
 module "datamanager"
 
 
 ---- utils -----
 local encode, decode;
 
-local log = function (type, msg) return log(type, "datamanager", msg); end
-
 do 
 	local urlcodes = setmetatable({}, { __index = function (t, k) t[k] = char(tonumber("0x"..k)); return t[k]; end });
 
@@ -70,14 +70,18 @@
 
 ------- API -------------
 
+function set_data_path(path)
+	data_path = path;
+end
+
 function getpath(username, host, datastore, ext)
 	ext = ext or "dat";
 	if username then
-		return format("data/%s/%s/%s.%s", encode(host), datastore, encode(username), ext);
+		return format("%s/%s/%s/%s.%s", data_path, encode(host), datastore, encode(username), ext);
 	elseif host then
-		return format("data/%s/%s.%s", encode(host), datastore, ext);
+		return format("%s/%s/%s.%s", data_path, encode(host), datastore, ext);
 	else
-		return format("data/%s.%s", datastore, ext);
+		return format("%s/%s.%s", data_path, datastore, ext);
 	end
 end
 
--- a/util/sasl.lua	Fri Nov 28 19:24:08 2008 +0100
+++ b/util/sasl.lua	Sat Nov 29 11:24:59 2008 +0100
@@ -67,7 +67,7 @@
 	
 	local function parse(data)
 		message = {}
-		for k, v in gmatch(data, [[([%w%-]+)="?([%w%-%/%.%+=]+)"?,?]]) do
+		for k, v in gmatch(data, [[([%w%-]+)="?([^",]*)"?,?]]) do -- FIXME The hacky regex makes me shudder
 			message[k] = v
 		end
 		return message