aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile21
-rwxr-xr-xconfigure243
-rw-r--r--net/dns.lua3
-rw-r--r--plugins/mod_console.lua2
-rwxr-xr-x[-rw-r--r--]prosody (renamed from main.lua)17
-rwxr-xr-xpull_from_master.sh3
-rw-r--r--util-src/Makefile19
-rw-r--r--util/datamanager.lua16
-rw-r--r--util/sasl.lua2
9 files changed, 306 insertions, 20 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..00826f54
--- /dev/null
+++ b/Makefile
@@ -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
diff --git a/configure b/configure
new file mode 100755
index 00000000..758e70df
--- /dev/null
+++ b/configure
@@ -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
diff --git a/net/dns.lua b/net/dns.lua
index 7364161e..ea1d5d96 100644
--- a/net/dns.lua
+++ b/net/dns.lua
@@ -691,7 +691,8 @@ function resolver:pulse () -- - - - - - - - - - - - - - - - - - - - - pulse
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
diff --git a/plugins/mod_console.lua b/plugins/mod_console.lua
index b1dc263c..76272f03 100644
--- a/plugins/mod_console.lua
+++ b/plugins/mod_console.lua
@@ -124,7 +124,7 @@ end
def_env.server = {};
function def_env.server:reload()
- dofile "main.lua"
+ dofile "prosody"
return true, "Server reloaded";
end
diff --git a/main.lua b/prosody
index 3ea97ca4..6f13decd 100644..100755
--- a/main.lua
+++ b/prosody
@@ -1,5 +1,20 @@
+#!/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");
@@ -24,6 +39,8 @@ do
end
end
+require "util.datamanager".set_data_path(config.get("*", "core", "data_path") or "data");
+
local server = require "net.server"
require "util.dependencies"
diff --git a/pull_from_master.sh b/pull_from_master.sh
deleted file mode 100755
index 3c909b76..00000000
--- a/pull_from_master.sh
+++ /dev/null
@@ -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/
diff --git a/util-src/Makefile b/util-src/Makefile
index 035ec286..90e80aea 100644
--- a/util-src/Makefile
+++ b/util-src/Makefile
@@ -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 @@ install: encodings.so hashes.so
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
diff --git a/util/datamanager.lua b/util/datamanager.lua
index 80b35733..99eef9f3 100644
--- a/util/datamanager.lua
+++ b/util/datamanager.lua
@@ -3,7 +3,7 @@ local setmetatable, type = setmetatable, type;
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 @@ local indent = function(f, i)
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 @@ end
------- 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
diff --git a/util/sasl.lua b/util/sasl.lua
index f10fb934..f5ef04b8 100644
--- a/util/sasl.lua
+++ b/util/sasl.lua
@@ -67,7 +67,7 @@ local function new_digest_md5(realm, password_handler)
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