Комментирование в conf.d EJABBERD_NODE git-svn-id: http://svn.calculate.ru/overlay@729 c91db197-33c1-4113-bf15-f8a5c547ca64atratsevskiy
parent
5b71007d23
commit
498391fbd1
@ -1,13 +1,16 @@
|
|||||||
AUX 2.0.0-missing-declaration.patch 411 RMD160 f314900dd00fd23c9043cb5a60982448c39d2fa9 SHA1 687066247c9ad74c4e9ec869a9f4f0d9e80bae6d SHA256 1c32a57f4f187d55b28b240820875fcd3e731f6d91cd9429d14c318222f07e7b
|
AUX 2.0.0-missing-declaration.patch 411 RMD160 f314900dd00fd23c9043cb5a60982448c39d2fa9 SHA1 687066247c9ad74c4e9ec869a9f4f0d9e80bae6d SHA256 1c32a57f4f187d55b28b240820875fcd3e731f6d91cd9429d14c318222f07e7b
|
||||||
AUX ejabberd 355 RMD160 bf400cf3a84169a79797db9228ad102d93c9147b SHA1 83bae90f0e211f6e59c96dd6ce419a4c0bcdd3d9 SHA256 1f2254ce2835a986eb75adaf5602d1cb74ced989c2360331822a2c5e11c9837b
|
AUX ejabberd 355 RMD160 bf400cf3a84169a79797db9228ad102d93c9147b SHA1 83bae90f0e211f6e59c96dd6ce419a4c0bcdd3d9 SHA256 1f2254ce2835a986eb75adaf5602d1cb74ced989c2360331822a2c5e11c9837b
|
||||||
|
AUX ejabberd-2.0.2-r1.confd 841 RMD160 5e01a2b13e88f9f799386304f66d25ff1146a9cf SHA1 420fba1888c8a5fcaef47f59b9518a4a9ce36b6f SHA256 12719cadf9d20b8d36bc299c41f6e1a15ccd545048859e9e878706308d691dde
|
||||||
AUX ejabberd-2.0.2.confd 840 RMD160 5227a3fbb0d0c8bffd8a5537003f965f1fb73582 SHA1 d3a51fa0923a571d30f3f0840834c651726ad206 SHA256 d6b0c44a450c4191e450b8e3ab281dc2e3bc668a97ddd1652d2e6c555675a2c6
|
AUX ejabberd-2.0.2.confd 840 RMD160 5227a3fbb0d0c8bffd8a5537003f965f1fb73582 SHA1 d3a51fa0923a571d30f3f0840834c651726ad206 SHA256 d6b0c44a450c4191e450b8e3ab281dc2e3bc668a97ddd1652d2e6c555675a2c6
|
||||||
AUX ejabberd-2.0.2.initd 1134 RMD160 b5d3a5a50069be713511ebd37f9eab07dab33371 SHA1 0cd2c3bd44c1923014c1cdd84edfb56ddb11bdc2 SHA256 8b2c50bc80b5b0700195c79a4eaa6f68549fd63310b584c2e86d951c116e14de
|
AUX ejabberd-2.0.2.initd 1134 RMD160 b5d3a5a50069be713511ebd37f9eab07dab33371 SHA1 0cd2c3bd44c1923014c1cdd84edfb56ddb11bdc2 SHA256 8b2c50bc80b5b0700195c79a4eaa6f68549fd63310b584c2e86d951c116e14de
|
||||||
AUX ejabberd-wrapper-2.0.2.template 1273 RMD160 7ec1a86be5df671cb2ce54705de482ca1a172974 SHA1 ec412773c7913d8cfa59e6dcd330242268e60959 SHA256 96dcdca694fbe26b1098007d9e33361812a0ed532894e417155c0ac973bcdf6f
|
AUX ejabberd-wrapper-2.0.2.template 1273 RMD160 7ec1a86be5df671cb2ce54705de482ca1a172974 SHA1 ec412773c7913d8cfa59e6dcd330242268e60959 SHA256 96dcdca694fbe26b1098007d9e33361812a0ed532894e417155c0ac973bcdf6f
|
||||||
AUX ejabberdctl 199 RMD160 1f4be5dcd018f0936baaeb41e2fd1c4a6a59bc62 SHA1 347200e8dd5790282cedb6a70c71fd4a6db9a0f5 SHA256 b88de8e8e5e8730ac7fe04b49ae3cf131c49a4e1ba451b35f1305d1c24a2dda0
|
AUX ejabberdctl 199 RMD160 1f4be5dcd018f0936baaeb41e2fd1c4a6a59bc62 SHA1 347200e8dd5790282cedb6a70c71fd4a6db9a0f5 SHA256 b88de8e8e5e8730ac7fe04b49ae3cf131c49a4e1ba451b35f1305d1c24a2dda0
|
||||||
AUX inetrc 36 RMD160 4b79020864689ede547969610fde18fe490f5810 SHA1 1e0bae0f7251e2ae3b62ba9d3e5cc86bb5dd271e SHA256 0f383befc4c46134d88ce14d3bd06c404ef6575391f4ac0b5e8c28ba383b28fc
|
AUX inetrc 36 RMD160 4b79020864689ede547969610fde18fe490f5810 SHA1 1e0bae0f7251e2ae3b62ba9d3e5cc86bb5dd271e SHA256 0f383befc4c46134d88ce14d3bd06c404ef6575391f4ac0b5e8c28ba383b28fc
|
||||||
|
AUX mod_logxml.patch 8508 RMD160 e263ebed1a07d44381de6063dc4e99543aa1d016 SHA1 947ecb6d39efb9e2384642622055d453ea357831 SHA256 feca3ed4963d8fcfd970d9a86e78b2e52b573dd0488e0a7d1d054dde3df3df7d
|
||||||
AUX mod_shared_roster_ldap.patch 15881 RMD160 cafc8975c30e0893bd16336a86e29b3eaffcb07a SHA1 b50d5123653994ec6174ada696be4cb3cdbb82b1 SHA256 83b36953ed9bee717c95c1edacc22231dfa607dbb9bee995ea90ed242a3add8e
|
AUX mod_shared_roster_ldap.patch 15881 RMD160 cafc8975c30e0893bd16336a86e29b3eaffcb07a SHA1 b50d5123653994ec6174ada696be4cb3cdbb82b1 SHA256 83b36953ed9bee717c95c1edacc22231dfa607dbb9bee995ea90ed242a3add8e
|
||||||
AUX self-cert-v2.sh 1017 RMD160 3beb0f05e8cc3041abd2f689d31d410bc7d5088d SHA1 1f07299b2e49541dcbf5c2b81b26280bbf0b6aeb SHA256 34b2c9cb36c424ffd1117bd20b67d0f4a05168b0bc6237e287c2dcabd0e27972
|
AUX self-cert-v2.sh 1017 RMD160 3beb0f05e8cc3041abd2f689d31d410bc7d5088d SHA1 1f07299b2e49541dcbf5c2b81b26280bbf0b6aeb SHA256 34b2c9cb36c424ffd1117bd20b67d0f4a05168b0bc6237e287c2dcabd0e27972
|
||||||
AUX self-cert.sh 491 RMD160 89bb577975eef172fa3c6e07b08d323162d1278b SHA1 61a4c8b79141ec1bc846e8ede6fa19a07210c619 SHA256 6a0c53a8573411c18ed6f5dd79ce4807b72fb10bc5eb3a3a7f4641c57e4ddceb
|
AUX self-cert.sh 491 RMD160 89bb577975eef172fa3c6e07b08d323162d1278b SHA1 61a4c8b79141ec1bc846e8ede6fa19a07210c619 SHA256 6a0c53a8573411c18ed6f5dd79ce4807b72fb10bc5eb3a3a7f4641c57e4ddceb
|
||||||
AUX ssl.cnf 1042 RMD160 47d2542942fb21f4be1e827d47eb4e0468e73910 SHA1 7347bae5a195ad158881fe5313f55ee41e85cb81 SHA256 ed066f7720fd9f4c2d57ffb2ebcbc4b2810d2b7ca22b67ec8c1dc1227baaa635
|
AUX ssl.cnf 1042 RMD160 47d2542942fb21f4be1e827d47eb4e0468e73910 SHA1 7347bae5a195ad158881fe5313f55ee41e85cb81 SHA256 ed066f7720fd9f4c2d57ffb2ebcbc4b2810d2b7ca22b67ec8c1dc1227baaa635
|
||||||
DIST ejabberd-2.0.2.tar.gz 1040817 RMD160 b24c1c2d6ce8c56fd26f28a98b89d99890dbad72 SHA1 7c82082b941277fe18aac25ca9b2016f25dc8472 SHA256 23136f2d215e82836d84322011914e1c9a846ab056b80cd26ff3e70b300b345a
|
DIST ejabberd-2.0.2.tar.gz 1040817 RMD160 b24c1c2d6ce8c56fd26f28a98b89d99890dbad72 SHA1 7c82082b941277fe18aac25ca9b2016f25dc8472 SHA256 23136f2d215e82836d84322011914e1c9a846ab056b80cd26ff3e70b300b345a
|
||||||
|
EBUILD calculate-ejabberd-2.0.2-r1.ebuild 5066 RMD160 f20ff9f3888f2d27f911b2c5dd4916092a2532fc SHA1 f42447b2eaf54e422ed1f1cd97d382ddfa6aa399 SHA256 16f2ee205b92eaa767668f632a25d18b85142e912431ff28a14bd058041a899c
|
||||||
EBUILD calculate-ejabberd-2.0.2.ebuild 4955 RMD160 392007636ef070def316e5d62c5d02c05ef21b51 SHA1 6382ac2f5b11cf10ac1e5a18928726ca140aa2c8 SHA256 6f6e10f69f66bf2859fc54f794f015809af35079245bbde1000b944ccd369e2c
|
EBUILD calculate-ejabberd-2.0.2.ebuild 4955 RMD160 392007636ef070def316e5d62c5d02c05ef21b51 SHA1 6382ac2f5b11cf10ac1e5a18928726ca140aa2c8 SHA256 6f6e10f69f66bf2859fc54f794f015809af35079245bbde1000b944ccd369e2c
|
||||||
|
@ -0,0 +1,164 @@
|
|||||||
|
# Copyright 1999-2008 Gentoo Foundation
|
||||||
|
# Distributed under the terms of the GNU General Public License v2
|
||||||
|
# $Header: /var/cvsroot/gentoo-x86/net-im/ejabberd/ejabberd-2.0.2.ebuild,v 1.2 2008/09/10 14:05:35 mr_bones_ Exp $
|
||||||
|
|
||||||
|
inherit eutils multilib
|
||||||
|
|
||||||
|
JABBER_ETC="/etc/jabber"
|
||||||
|
JABBER_RUN="/var/run/jabber"
|
||||||
|
JABBER_SPOOL="/var/spool/jabber"
|
||||||
|
JABBER_LOG="/var/log/jabber"
|
||||||
|
|
||||||
|
JABBER_NAME="ejabberd"
|
||||||
|
MY_PV=${PV}
|
||||||
|
MY_PR=${PR}
|
||||||
|
MY_P=${JABBER_NAME}-${MY_PV}
|
||||||
|
MY_PF=${JABBER_NAME}-${MY_PV}-${MY_PR}
|
||||||
|
|
||||||
|
DESCRIPTION="The Erlang Jabber Daemon"
|
||||||
|
HOMEPAGE="http://www.ejabberd.im/"
|
||||||
|
SRC_URI="http://www.process-one.net/downloads/ejabberd/${PV}/${MY_P}.tar.gz"
|
||||||
|
LICENSE="GPL-2"
|
||||||
|
SLOT="0"
|
||||||
|
KEYWORDS="~amd64 ~ppc ~x86"
|
||||||
|
IUSE="debug mod_irc mod_muc mod_pubsub ldap odbc pam ssl web zlib"
|
||||||
|
|
||||||
|
DEPEND=">=net-im/jabber-base-0.01
|
||||||
|
>=dev-libs/expat-1.95
|
||||||
|
>=dev-lang/erlang-11.2.5
|
||||||
|
odbc? ( dev-db/unixODBC )
|
||||||
|
ldap? ( =net-nds/openldap-2* )
|
||||||
|
ssl? ( >=dev-libs/openssl-0.9.8e )
|
||||||
|
zlib? ( sys-libs/zlib )"
|
||||||
|
|
||||||
|
PROVIDE="virtual/jabber-server"
|
||||||
|
|
||||||
|
S=${WORKDIR}/${MY_P}/src
|
||||||
|
|
||||||
|
src_unpack() {
|
||||||
|
unpack ${A}
|
||||||
|
cd "${S}"
|
||||||
|
|
||||||
|
# Bug #171427
|
||||||
|
epatch "${FILESDIR}/2.0.0-missing-declaration.patch"
|
||||||
|
# mod_shared_roster_ldap.patch
|
||||||
|
epatch "${FILESDIR}/mod_shared_roster_ldap.patch"
|
||||||
|
# mod_logxml.patch
|
||||||
|
epatch "${FILESDIR}/mod_logxml.patch"
|
||||||
|
|
||||||
|
# get rid of the prefix
|
||||||
|
sed -i -e "s/\\@prefix\\@//" "${S}/Makefile.in" \
|
||||||
|
|| die "cannot sed Makefile.in"
|
||||||
|
# we want ejabberdctl in /usr/sbin not /sbin !!!
|
||||||
|
sed -i -e "s/\\/sbin/\\/usr\\/sbin/" "${S}/Makefile.in" \
|
||||||
|
|| die "cannot sed Makefile.in"
|
||||||
|
}
|
||||||
|
|
||||||
|
src_compile() {
|
||||||
|
econf --prefix=/ \
|
||||||
|
$(use_enable mod_irc) \
|
||||||
|
$(use_enable ldap eldap) \
|
||||||
|
$(use_enable mod_muc) \
|
||||||
|
$(use_enable mod_pubsub) \
|
||||||
|
$(use_enable ssl tls) \
|
||||||
|
$(use_enable web) \
|
||||||
|
$(use_enable odbc) \
|
||||||
|
$(use_enable zlib ejabberd_zlib) \
|
||||||
|
$(use_enable pam) \
|
||||||
|
|| die "econf failed"
|
||||||
|
|
||||||
|
if useq debug; then
|
||||||
|
emake ejabberd_debug=true || die "compiling ejabberd core failed"
|
||||||
|
else
|
||||||
|
emake || die "compiling ejabberd core failed"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
src_install() {
|
||||||
|
make \
|
||||||
|
DESTDIR="${D}" \
|
||||||
|
EJABBERDDIR="${D}/usr/$(get_libdir)/erlang/lib/${P}" \
|
||||||
|
ETCDIR="${D}${JABBER_ETC}" \
|
||||||
|
LOGDIR="${D}${JABBER_LOG}" \
|
||||||
|
install || die "install failed"
|
||||||
|
|
||||||
|
# remove the default ejabberdctl as we use our own
|
||||||
|
rm "${D}/sbin/ejabberdctl"
|
||||||
|
|
||||||
|
insinto ${JABBER_ETC}
|
||||||
|
|
||||||
|
chown -R jabber:jabber "${D}${JABBER_ETC}"
|
||||||
|
chown -R jabber:jabber "${D}${JABBER_LOG}"
|
||||||
|
chown -R jabber:jabber "${D}/usr/$(get_libdir)/erlang/lib/${P}"
|
||||||
|
|
||||||
|
if useq ssl ; then
|
||||||
|
doins "${FILESDIR}/ssl.cnf"
|
||||||
|
newins "${FILESDIR}/self-cert-v2.sh" self-cert.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Pam helper module permissions
|
||||||
|
# http://www.process-one.net/docs/ejabberd/guide_en.html
|
||||||
|
if useq pam; then
|
||||||
|
chown root:jabber "${D}"/usr/lib/erlang/lib/${P}/priv/bin/epam
|
||||||
|
chmod 4750 "${D}"/usr/lib/erlang/lib/${P}/priv/bin/epam
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "${WORKDIR}/${MY_P}-beta1/doc"
|
||||||
|
dodoc "release_notes_${MY_PV}.txt"
|
||||||
|
dohtml *.{html,png}
|
||||||
|
|
||||||
|
# set up /usr/sbin/ejabberd wrapper
|
||||||
|
cat "${FILESDIR}/ejabberd-wrapper-${MY_PV}.template" \
|
||||||
|
| sed -e "s/\@libdir\@/$(get_libdir)/g" -e "s/\@version\@/${PV}/g" \
|
||||||
|
> "${T}/ejabberd"
|
||||||
|
exeinto /usr/sbin
|
||||||
|
doexe "${T}/ejabberd"
|
||||||
|
|
||||||
|
# set up /usr/sbin/ejabberdctl wrapper
|
||||||
|
cat "${FILESDIR}/ejabberdctl-wrapper-${MY_PV}.template" \
|
||||||
|
| sed -e "s/\@libdir\@/$(get_libdir)/g" -e "s/\@version\@/${PV}/g" \
|
||||||
|
> "${T}/ejabberdctl"
|
||||||
|
doexe "${T}/ejabberdctl"
|
||||||
|
|
||||||
|
dodir /var/lib/ejabberd
|
||||||
|
newinitd "${FILESDIR}/${MY_P}.initd" ${JABBER_NAME}
|
||||||
|
newconfd "${FILESDIR}/${MY_PF}.confd" ${JABBER_NAME}
|
||||||
|
|
||||||
|
# fix up the ssl cert paths in /etc/jabber/ejabberd.cfg to use the cert
|
||||||
|
# that would be generated by /etc/jabber/self-cert.sh
|
||||||
|
sed -i -e "s/\/path\/to\/ssl.pem/\/etc\/jabber\/ssl.pem/g" \
|
||||||
|
"${D}${JABBER_ETC}/ejabberd.cfg" || die "Cannot sed ejabberd.cfg"
|
||||||
|
|
||||||
|
# if mod_irc is not enabled, comment out the mod_irc in the default
|
||||||
|
# ejabberd.cfg
|
||||||
|
if ! use mod_irc; then
|
||||||
|
sed -i -e "s/{mod_irc,/%{mod_irc,/" \
|
||||||
|
"${D}${JABBER_ETC}/ejabberd.cfg" || die "Cannot sed ejabberd.cfg"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
pkg_postinst() {
|
||||||
|
elog "For configuration instructions, please see"
|
||||||
|
elog "/usr/share/doc/${PF}/html/guide.html, or the online version at"
|
||||||
|
elog "http://www.process-one.net/en/projects/ejabberd/docs/guide_en.html"
|
||||||
|
if useq ssl ; then
|
||||||
|
if [ ! -e /etc/jabber/ssl.pem ]; then
|
||||||
|
elog "Please edit ${JABBER_ETC}/ssl.cnf and run ${JABBER_ETC}/self-cert.sh"
|
||||||
|
elog "Ejabberd may refuse to start without an SSL certificate"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if ! useq web ; then
|
||||||
|
elog "The web USE flag is off, this has disabled the web admin interface."
|
||||||
|
fi
|
||||||
|
elog "===================================================================="
|
||||||
|
elog 'Quick Start Guide:'
|
||||||
|
elog '1) Add output of `hostname -s` to /etc/jabber/ejabberd.cfg line 89'
|
||||||
|
elog ' {hosts, ["localhost", "thehost"]}.'
|
||||||
|
elog '2) Add an admin user to /etc/jabber/ejabberd.cfg line 324'
|
||||||
|
elog ' {acl, admin, {user, "theadmin", "thehost"}}.'
|
||||||
|
elog '3) Start the server'
|
||||||
|
elog ' # /etc/init.d/ejabberd start'
|
||||||
|
elog '4) Register the admin user'
|
||||||
|
elog ' # /usr/sbin/ejabberdctl register theadmin thehost thepassword'
|
||||||
|
elog '5) Log in with your favourite jabber client or using the web admin'
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
# Copyright 1999-2008 Gentoo Foundation
|
||||||
|
# Distributed under the terms of the GNU General Public License v2
|
||||||
|
# $Header: /var/cvsroot/gentoo-x86/net-im/ejabberd/files/ejabberd-2.0.2.confd,v 1.1 2008/08/03 16:19:05 caleb Exp $
|
||||||
|
|
||||||
|
# Name of your ejabberd node. Used by ejabberdctl to determine which
|
||||||
|
# node to communicate with.
|
||||||
|
#EJABBERD_NODE="ejabberd@`hostname -s`"
|
||||||
|
|
||||||
|
# Max number of open network connections. Default is 1024. Increasing
|
||||||
|
# this will slightly increase memory usage.
|
||||||
|
#ERL_MAX_PORTS=1024
|
||||||
|
|
||||||
|
# Return memory to the system after using it, instead of keeping it
|
||||||
|
# allocated for future use. Decreases the memory required by ejabberd,
|
||||||
|
# but makes it run slower. Default is unset, set to any value to
|
||||||
|
# activate.
|
||||||
|
#ERL_FULLSWEEP_AFTER=0
|
||||||
|
|
||||||
|
# set to 1, "true" or "yes" if you have a symmetric-multi-processor
|
||||||
|
# default is non smp
|
||||||
|
#HAVE_SMP=0
|
||||||
|
|
||||||
|
|
@ -0,0 +1,265 @@
|
|||||||
|
diff -uNr ejabberd-2.0.2-beta1.ORIG/src/mod_logxml.erl ejabberd-2.0.2-beta1/src/mod_logxml.erl
|
||||||
|
--- mod_logxml.erl
|
||||||
|
+++ mod_logxml.erl
|
||||||
|
@@ -0,0 +1,261 @@
|
||||||
|
+%%%----------------------------------------------------------------------
|
||||||
|
+%%% File : mod_logxml.erl
|
||||||
|
+%%% Author : Badlop
|
||||||
|
+%%% Purpose : Log XMPP packets to XML file
|
||||||
|
+%%% Created :
|
||||||
|
+%%% Id :
|
||||||
|
+%%%----------------------------------------------------------------------
|
||||||
|
+
|
||||||
|
+-module(mod_logxml).
|
||||||
|
+-author('badlop@ono.com').
|
||||||
|
+
|
||||||
|
+-behaviour(gen_mod).
|
||||||
|
+
|
||||||
|
+-export([start/2, init/7, stop/1,
|
||||||
|
+ send_packet/3, receive_packet/4]).
|
||||||
|
+
|
||||||
|
+-include("ejabberd.hrl").
|
||||||
|
+-include("jlib.hrl").
|
||||||
|
+
|
||||||
|
+-define(PROCNAME, ejabberd_mod_logxml).
|
||||||
|
+
|
||||||
|
+%% -------------------
|
||||||
|
+%% Module control
|
||||||
|
+%% -------------------
|
||||||
|
+
|
||||||
|
+start(Host, Opts) ->
|
||||||
|
+ Logdir = gen_mod:get_opt(logdir, Opts, "/tmp/jabberlogs/"),
|
||||||
|
+
|
||||||
|
+ Rd = gen_mod:get_opt(rotate_days, Opts, 1),
|
||||||
|
+ Rf = case gen_mod:get_opt(rotate_megs, Opts, 10) of
|
||||||
|
+ no -> no;
|
||||||
|
+ Rf1 -> Rf1*1024*1024
|
||||||
|
+ end,
|
||||||
|
+ Rp = case gen_mod:get_opt(rotate_kpackets, Opts, 10) of
|
||||||
|
+ no -> no;
|
||||||
|
+ Rp1 -> Rp1*1000
|
||||||
|
+ end,
|
||||||
|
+ RotateO = {Rd, Rf, Rp},
|
||||||
|
+ CheckRKP = gen_mod:get_opt(check_rotate_kpackets, Opts, 1),
|
||||||
|
+
|
||||||
|
+ Timezone = gen_mod:get_opt(timezone, Opts, local),
|
||||||
|
+
|
||||||
|
+ Orientation = gen_mod:get_opt(orientation, Opts, [send, recv]),
|
||||||
|
+ Stanza = gen_mod:get_opt(stanza, Opts, [iq, message, presence, other]),
|
||||||
|
+ Direction = gen_mod:get_opt(direction, Opts, [internal, vhosts, external]),
|
||||||
|
+ FilterO = {
|
||||||
|
+ {orientation, Orientation},
|
||||||
|
+ {stanza, Stanza},
|
||||||
|
+ {direction, Direction}},
|
||||||
|
+ ShowIP = gen_mod:get_opt(show_ip, Opts, false),
|
||||||
|
+
|
||||||
|
+ ejabberd_hooks:add(user_send_packet, Host, ?MODULE, send_packet, 90),
|
||||||
|
+ ejabberd_hooks:add(user_receive_packet, Host, ?MODULE, receive_packet, 90),
|
||||||
|
+ register(gen_mod:get_module_proc(Host, ?PROCNAME),
|
||||||
|
+ spawn(?MODULE, init, [Host, Logdir, RotateO, CheckRKP,
|
||||||
|
+ Timezone, ShowIP, FilterO])).
|
||||||
|
+
|
||||||
|
+stop(Host) ->
|
||||||
|
+ ejabberd_hooks:delete(user_send_packet, Host, ?MODULE, send_packet, 90),
|
||||||
|
+ ejabberd_hooks:delete(user_receive_packet, Host, ?MODULE, receive_packet, 90),
|
||||||
|
+ Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
|
||||||
|
+ Proc ! stop,
|
||||||
|
+ {wait, Proc}.
|
||||||
|
+
|
||||||
|
+init(Host, Logdir, RotateO, CheckRKP, Timezone, ShowIP, FilterO) ->
|
||||||
|
+ {IoDevice, Filename, Gregorian_day} = open_file(Logdir, Host, Timezone),
|
||||||
|
+ loop(Host, IoDevice, Filename, Logdir, CheckRKP, RotateO, 0, Gregorian_day,
|
||||||
|
+ Timezone, ShowIP, FilterO).
|
||||||
|
+
|
||||||
|
+%% -------------------
|
||||||
|
+%% Main
|
||||||
|
+%% -------------------
|
||||||
|
+
|
||||||
|
+manage_rotate(Host, IoDevice, Filename, Logdir, RotateO, PacketC,
|
||||||
|
+ Gregorian_day_log, Timezone) ->
|
||||||
|
+ {RO_days, RO_size, RO_packets} = RotateO,
|
||||||
|
+
|
||||||
|
+ Rotate1 = case RO_packets of
|
||||||
|
+ no -> false;
|
||||||
|
+ PacketC -> true;
|
||||||
|
+ _ -> false
|
||||||
|
+ end,
|
||||||
|
+
|
||||||
|
+ Filesize = filelib:file_size(Filename),
|
||||||
|
+ Rotate2 = if
|
||||||
|
+ RO_size == no -> false;
|
||||||
|
+ Filesize >= RO_size -> true;
|
||||||
|
+ true -> false
|
||||||
|
+ end,
|
||||||
|
+
|
||||||
|
+ Gregorian_day_today = get_gregorian_day(),
|
||||||
|
+ Rotate3 = if
|
||||||
|
+ RO_days == no -> false;
|
||||||
|
+ (Gregorian_day_today - Gregorian_day_log) >= RO_days ->
|
||||||
|
+ true;
|
||||||
|
+ true -> false
|
||||||
|
+ end,
|
||||||
|
+
|
||||||
|
+ case lists:any(fun(E) -> E end, [Rotate1, Rotate2, Rotate3]) of
|
||||||
|
+ true ->
|
||||||
|
+ {IoDevice2, Filename2, Gregorian_day2} =
|
||||||
|
+ rotate_log(IoDevice, Logdir, Host, Timezone),
|
||||||
|
+ {IoDevice2, Filename2, Gregorian_day2, 0};
|
||||||
|
+ false ->
|
||||||
|
+ {IoDevice, Filename, Gregorian_day_log, PacketC+1}
|
||||||
|
+ end.
|
||||||
|
+
|
||||||
|
+filter(FilterO, E) ->
|
||||||
|
+ {{orientation, OrientationO},{stanza, StanzaO},{direction, DirectionO}} =
|
||||||
|
+ FilterO,
|
||||||
|
+ {Orientation, From, To, Packet} = E,
|
||||||
|
+
|
||||||
|
+ {xmlelement, Stanza_str, _Attrs, _Els} = Packet,
|
||||||
|
+ Stanza = list_to_atom(Stanza_str),
|
||||||
|
+
|
||||||
|
+ Hosts_all = ejabberd_config:get_global_option(hosts),
|
||||||
|
+ {Host_local, Host_remote} = case Orientation of
|
||||||
|
+ send -> {From#jid.lserver, To#jid.lserver};
|
||||||
|
+ recv -> {To#jid.lserver, From#jid.lserver}
|
||||||
|
+ end,
|
||||||
|
+ Direction = case Host_remote of
|
||||||
|
+ Host_local -> internal;
|
||||||
|
+ _ ->
|
||||||
|
+ case lists:member(Host_remote, Hosts_all) of
|
||||||
|
+ true -> vhosts;
|
||||||
|
+ false -> external
|
||||||
|
+ end
|
||||||
|
+ end,
|
||||||
|
+
|
||||||
|
+ {lists:all(fun(O) -> O end,
|
||||||
|
+ [lists:member(Orientation, OrientationO),
|
||||||
|
+ lists:member(Stanza, StanzaO),
|
||||||
|
+ lists:member(Direction, DirectionO)]),
|
||||||
|
+ {Orientation, Stanza, Direction}}.
|
||||||
|
+
|
||||||
|
+loop(Host, IoDevice, Filename, Logdir, CheckRKP, RotateO, PacketC,
|
||||||
|
+ Gregorian_day, Timezone, ShowIP, FilterO) ->
|
||||||
|
+ receive
|
||||||
|
+ {addlog, E} ->
|
||||||
|
+ {IoDevice3, Filename3, Gregorian_day3, PacketC3} =
|
||||||
|
+ case filter(FilterO, E) of
|
||||||
|
+ {true, OSD} ->
|
||||||
|
+ Div = PacketC/CheckRKP,
|
||||||
|
+ {IoDevice2, Filename2, Gregorian_day2, PacketC2} =
|
||||||
|
+ case Div==round(Div) of
|
||||||
|
+ true ->
|
||||||
|
+ manage_rotate(Host, IoDevice, Filename,
|
||||||
|
+ Logdir, RotateO, PacketC,
|
||||||
|
+ Gregorian_day, Timezone);
|
||||||
|
+ false ->
|
||||||
|
+ {IoDevice, Filename, Gregorian_day,
|
||||||
|
+ PacketC+1}
|
||||||
|
+ end,
|
||||||
|
+ add_log(IoDevice2, Timezone, ShowIP, E, OSD),
|
||||||
|
+ {IoDevice2, Filename2, Gregorian_day2, PacketC2};
|
||||||
|
+ _ ->
|
||||||
|
+ {IoDevice, Filename, Gregorian_day, PacketC}
|
||||||
|
+ end,
|
||||||
|
+ loop(Host, IoDevice3, Filename3, Logdir, CheckRKP, RotateO,
|
||||||
|
+ PacketC3, Gregorian_day3, Timezone, ShowIP, FilterO);
|
||||||
|
+ stop ->
|
||||||
|
+ close_file(IoDevice),
|
||||||
|
+ ok;
|
||||||
|
+ _ ->
|
||||||
|
+ loop(Host, IoDevice, Filename, Logdir, CheckRKP, RotateO, PacketC,
|
||||||
|
+ Gregorian_day, Timezone, ShowIP, FilterO)
|
||||||
|
+ end.
|
||||||
|
+
|
||||||
|
+send_packet(FromJID, ToJID, P) ->
|
||||||
|
+ Host = FromJID#jid.lserver,
|
||||||
|
+ Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
|
||||||
|
+ Proc ! {addlog, {send, FromJID, ToJID, P}}.
|
||||||
|
+
|
||||||
|
+receive_packet(_JID, From, To, P) ->
|
||||||
|
+ Host = To#jid.lserver,
|
||||||
|
+ Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
|
||||||
|
+ Proc ! {addlog, {recv, From, To, P}}.
|
||||||
|
+
|
||||||
|
+add_log(Io, Timezone, ShowIP, {Orientation, From, To, Packet}, _OSD) ->
|
||||||
|
+ %%{Orientation, Stanza, Direction} = OSD,
|
||||||
|
+ LocalJID = case Orientation of
|
||||||
|
+ send -> From;
|
||||||
|
+ recv -> To
|
||||||
|
+ end,
|
||||||
|
+ LocalIPS = case ShowIP of
|
||||||
|
+ true ->
|
||||||
|
+ {UserIP, _Port} = ejabberd_sm:get_user_ip(
|
||||||
|
+ LocalJID#jid.user,
|
||||||
|
+ LocalJID#jid.server,
|
||||||
|
+ LocalJID#jid.resource),
|
||||||
|
+ io_lib:format("lip=\"~s\" ", [inet_parse:ntoa(UserIP)]);
|
||||||
|
+ false -> ""
|
||||||
|
+ end,
|
||||||
|
+ TimestampISO = get_now_iso(Timezone),
|
||||||
|
+ io:fwrite(Io, "<packet or=\"~p\" ljid=\"~s\" ~sts=\"~s\">~s</packet>~n",
|
||||||
|
+ [Orientation, jlib:jid_to_string(LocalJID), LocalIPS,
|
||||||
|
+ TimestampISO, xml:element_to_string(Packet)]).
|
||||||
|
+
|
||||||
|
+%% -------------------
|
||||||
|
+%% File
|
||||||
|
+%% -------------------
|
||||||
|
+
|
||||||
|
+open_file(Logdir, Host, Timezone) ->
|
||||||
|
+ TimeStamp = get_now_iso(Timezone),
|
||||||
|
+ Year = string:substr(TimeStamp, 1, 4),
|
||||||
|
+ Month = string:substr(TimeStamp, 5, 2),
|
||||||
|
+ Day = string:substr(TimeStamp, 7, 2),
|
||||||
|
+ Hour = string:substr(TimeStamp, 10, 2),
|
||||||
|
+ Min = string:substr(TimeStamp, 13, 2),
|
||||||
|
+ Sec = string:substr(TimeStamp, 16, 2),
|
||||||
|
+ S = "-",
|
||||||
|
+ Logname = lists:flatten([Host,S,Year,S,Month,S,Day,S,Hour,S,Min,S,Sec,
|
||||||
|
+ ".xml"]),
|
||||||
|
+ Filename = filename:join([Logdir, Logname]),
|
||||||
|
+
|
||||||
|
+ Gregorian_day = get_gregorian_day(),
|
||||||
|
+
|
||||||
|
+ %% Open file, create if it does not exist, create parent dirs if needed
|
||||||
|
+ case file:read_file_info(Filename) of
|
||||||
|
+ {ok, _} ->
|
||||||
|
+ {ok, IoDevice} = file:open(Filename, [append]);
|
||||||
|
+ {error, enoent} ->
|
||||||
|
+ make_dir_rec(Logdir),
|
||||||
|
+ {ok, IoDevice} = file:open(Filename, [append]),
|
||||||
|
+ io:fwrite(IoDevice, "~s~n", ["<?xml version=\"1.0\"?>"]),
|
||||||
|
+ io:fwrite(IoDevice, "~s~n", ["<?xml-stylesheet href=\"xmpp.xsl\" type=\"text/xsl\"?>"]),
|
||||||
|
+ io:fwrite(IoDevice, "~s~n", ["<log>"])
|
||||||
|
+ end,
|
||||||
|
+ {IoDevice, Filename, Gregorian_day}.
|
||||||
|
+
|
||||||
|
+close_file(IoDevice) ->
|
||||||
|
+ io:fwrite(IoDevice, "~s~n", ["</log>"]),
|
||||||
|
+ file:close(IoDevice).
|
||||||
|
+
|
||||||
|
+rotate_log(IoDevice, Logdir, Host, Timezone) ->
|
||||||
|
+ close_file(IoDevice),
|
||||||
|
+ open_file(Logdir, Host, Timezone).
|
||||||
|
+
|
||||||
|
+make_dir_rec(Dir) ->
|
||||||
|
+ case file:read_file_info(Dir) of
|
||||||
|
+ {ok, _} ->
|
||||||
|
+ ok;
|
||||||
|
+ {error, enoent} ->
|
||||||
|
+ DirS = filename:split(Dir),
|
||||||
|
+ DirR = lists:sublist(DirS, length(DirS)-1),
|
||||||
|
+ make_dir_rec(filename:join(DirR)),
|
||||||
|
+ file:make_dir(Dir)
|
||||||
|
+ end.
|
||||||
|
+
|
||||||
|
+%% -------------------
|
||||||
|
+%% Utils
|
||||||
|
+%% -------------------
|
||||||
|
+
|
||||||
|
+get_gregorian_day() -> calendar:date_to_gregorian_days(date()).
|
||||||
|
+
|
||||||
|
+get_now_iso(Timezone) ->
|
||||||
|
+ TimeStamp = case Timezone of
|
||||||
|
+ local -> calendar:now_to_local_time(now());
|
||||||
|
+ universal -> calendar:now_to_universal_time(now())
|
||||||
|
+ end,
|
||||||
|
+ jlib:timestamp_to_iso(TimeStamp).
|
Loading…
Reference in new issue