- from PLD
authorMarcin Krol <hawk@tld-linux.org>
Tue, 7 Jul 2015 16:02:38 +0000 (16:02 +0000)
committerMarcin Krol <hawk@tld-linux.org>
Tue, 7 Jul 2015 16:02:38 +0000 (16:02 +0000)
db-setup.sqlite [new file with mode: 0644]
jabberd-binary_path.patch [new file with mode: 0644]
jabberd-daemonize.patch [new file with mode: 0644]
jabberd-default_config.patch [new file with mode: 0644]
jabberd-delay_jobs.patch [new file with mode: 0644]
jabberd-perlscript.patch [new file with mode: 0644]
jabberd-reconnect.patch [new file with mode: 0644]
jabberd.init [new file with mode: 0644]
jabberd.spec [new file with mode: 0644]
jabberd.sysconfig [new file with mode: 0644]
patch-flash-v2 [new file with mode: 0644]

diff --git a/db-setup.sqlite b/db-setup.sqlite
new file mode 100644 (file)
index 0000000..1a3e229
--- /dev/null
@@ -0,0 +1,172 @@
+--
+-- This is the required schema for sqlite.
+--
+--     sqlite3 jabberd2.db <  db-setup.sqlite
+--
+-- Please create database at /var/lib/jabberd/
+--
+
+--
+-- c2s authentication/registration table
+--
+CREATE TABLE 'authreg' (
+    'username' TEXT,
+    'realm' TEXT,
+    'password' TEXT,
+    'token' VARCHAR(10),
+    'sequence' INTEGER,
+    'hash' VARCHAR(40) );
+
+--
+-- Session manager tables 
+--
+
+--
+-- Active (seen) users
+-- Used by: core
+--
+CREATE TABLE 'active' (
+    'collection-owner' TEXT NOT NULL,
+    'object-sequence' INTEGER PRIMARY KEY,
+    'time' INT );
+
+--
+-- Logout times
+-- Used by: mod_iq_last
+--
+CREATE TABLE 'logout' (
+    'collection-owner' TEXT NOT NULL,
+    'object-sequence' INTEGER PRIMARY KEY,
+    'time' INT );
+
+--
+-- Roster items
+-- Used by: mod_roster
+--
+CREATE TABLE 'roster-items' (
+    'collection-owner' TEXT NOT NULL,
+    'object-sequence' INTEGER PRIMARY KEY,
+    'jid' TEXT,
+    'name' TEXT,
+    'to' BOOL,
+    'from' BOOL,
+    'ask' INTEGER );
+
+--
+-- Roster groups
+-- Used by: mod_roster
+--
+CREATE TABLE 'roster-groups' (
+    'collection-owner' TEXT NOT NULL,
+    'object-sequence' INTEGER PRIMARY KEY,
+    'jid' TEXT,
+    'group' TEXT );
+
+--
+-- vCard (user profile information)
+-- Used by: mod_iq_vcard
+--
+CREATE TABLE 'vcard' (
+    'collection-owner' TEXT NOT NULL,
+    'object-sequence' INTEGER PRIMARY KEY,
+    'fn' TEXT,
+    'nickname' TEXT,
+    'url' TEXT,
+    'tel' TEXT,
+    'email' TEXT,
+    'title' TEXT,
+    'role' TEXT,
+    'bday' TEXT,
+    'desc' TEXT,
+    'n-given' TEXT,
+    'n-family' TEXT,
+    'adr-street' TEXT,
+    'adr-extadd' TEXT,
+    'adr-locality' TEXT,
+    'adr-region' TEXT,
+    'adr-pcode' TEXT,
+    'adr-country' TEXT,
+    'org-orgname' TEXT,
+    'org-orgunit' TEXT );
+
+--
+-- Offline message queue
+-- Used by: mod_offline
+--
+CREATE TABLE 'queue' (
+    'collection-owner' TEXT NOT NULL,
+    'object-sequence' INTEGER PRIMARY KEY,
+    'xml' TEXT );
+
+--
+-- Private XML storage
+-- Used by: mod_iq_private
+--
+CREATE TABLE 'private' (
+    'collection-owner' TEXT NOT NULL,
+    'object-sequence' INTEGER PRIMARY KEY,
+    'ns' TEXT,
+    'xml' TEXT );
+
+--
+-- Message Of The Day (MOTD) messages (announcements)
+-- Used by: mod_announce
+--
+CREATE TABLE 'motd-message' (
+    'collection-owner' TEXT NOT NULL,
+    'object-sequence' INTEGER PRIMARY KEY,
+    'xml' TEXT );
+
+--
+-- Times of last MOTD message for each user
+-- Used by: mod_announce
+--
+CREATE TABLE 'motd-times' (
+    'collection-owner' TEXT NOT NULL,
+    'object-sequence' INTEGER PRIMARY KEY,
+    'time' INTEGER );
+
+--
+-- User-published discovery items
+-- Used by: mod_disco_publish
+--
+CREATE TABLE 'disco-items' (
+    'collection-owner' TEXT NOT NULL,
+    'object-sequence' INTEGER PRIMARY KEY,
+    'jid' TEXT,
+    'name' TEXT,
+    'node' TEXT );
+
+--
+-- Default privacy list
+-- Used by: mod_privacy
+--
+CREATE TABLE 'privacy-default' (
+    'collection-owner' TEXT NOT NULL,
+    'object-sequence' INTEGER PRIMARY KEY,
+    'default' TEXT );
+
+--
+-- Privacy lists
+-- Used by: mod_privacy
+--
+CREATE TABLE 'privacy-items' (
+    'collection-owner' TEXT NOT NULL,
+    'object-sequence' INTEGER PRIMARY KEY,
+    'list' TEXT,
+    'type' TEXT,
+    'value' TEXT,
+    'deny' BOOL,
+    'order' INTEGER,
+    'block' INTEGER );
+
+--
+-- Vacation settings
+-- Used by: mod_vacation
+--
+CREATE TABLE 'vacation-settings' (
+    'collection-owner' TEXT NOT NULL,
+    'object-sequence' INTEGER PRIMARY KEY,
+    'start' INTEGER,
+    'end' INTEGER,
+    'message' TEXT );
diff --git a/jabberd-binary_path.patch b/jabberd-binary_path.patch
new file mode 100644 (file)
index 0000000..185de1f
--- /dev/null
@@ -0,0 +1,11 @@
+diff -ur jabberd-2.2.17.orig/tools/Makefile.am jabberd-2.2.17/tools/Makefile.am
+--- jabberd-2.2.17.orig/tools/Makefile.am      2012-05-04 18:17:10.000000000 +0000
++++ jabberd-2.2.17/tools/Makefile.am   2013-07-23 17:39:51.154241563 +0000
+@@ -8,6 +8,7 @@
+ edit = sed \
+       -e 's,@sysconfdir\@,$(sysconfdir),g' \
++      -e 's,@libdir\@,$(libdir)/jabberd,g' \
+       -e 's,@VERSION\@,$(VERSION),g' \
+       -e 's,@bindir\@,$(bindir),g' \
+       -e 's,@libexecdir\@,$(libexecdir),g'
diff --git a/jabberd-daemonize.patch b/jabberd-daemonize.patch
new file mode 100644 (file)
index 0000000..e123254
--- /dev/null
@@ -0,0 +1,37 @@
+diff -ur jabberd-2.2.17.orig/tools/jabberd.in jabberd-2.2.17/tools/jabberd.in
+--- jabberd-2.2.17.orig/tools/jabberd.in       2013-07-23 16:51:33.000000000 +0000
++++ jabberd-2.2.17/tools/jabberd.in    2013-07-23 16:52:28.974241647 +0000
+@@ -14,6 +14,7 @@
+ use IO::Select;
+ use POSIX;
+ use POSIX qw(setsid);
++use Proc::Daemon;
+ #-----------------------------------------------------------------------------
+@@ -47,7 +48,24 @@
+     &usage() if (!defined($opts{c}) || ($opts{c} eq ""));
+ }
+-$debug = 1 if exists($opts{D});
++if (exists($opts{D})) {
++       $debug = 1
++}
++else {
++       Proc::Daemon::Init;
++       open(PID,">/var/run/jabberd.pid");
++       print PID "$$\n";
++       close(PID);
++}
++
++if ($< == 0) {
++        my ($uid, $gid) = (getpwnam("jabber"))[2,3];
++        $)="$gid $gid" or die "Cannot set EGID and groups";
++        $(=$gid or die "Cannot set GID";;
++        $>=$uid or die "Cannot set EUID";
++        $<=$> or die "Cannot set UID";;
++}
++
+ $daemon = 1 if exists($opts{b});
+ #-----------------------------------------------------------------------------
diff --git a/jabberd-default_config.patch b/jabberd-default_config.patch
new file mode 100644 (file)
index 0000000..5196d3b
--- /dev/null
@@ -0,0 +1,222 @@
+diff -ur jabberd-2.2.17.orig/etc/c2s.xml.dist.in jabberd-2.2.17/etc/c2s.xml.dist.in
+--- jabberd-2.2.17.orig/etc/c2s.xml.dist.in    2012-05-22 20:27:51.000000000 +0000
++++ jabberd-2.2.17/etc/c2s.xml.dist.in 2013-07-23 17:06:14.939179197 +0000
+@@ -5,7 +5,7 @@
+   <!-- The process ID file. Comment this out if you don't need to know
+        the process ID from outside the process (eg for control scripts) -->
+-  <pidfile>@localstatedir@/@package@/pid/c2s.pid</pidfile>
++  <pidfile>@localstatedir@/run/jabber/c2s.pid</pidfile>
+   <!-- Router connection configuration -->
+   <router>
+@@ -60,12 +60,12 @@
+     <!-- If logging to file, this is the filename of the logfile -->
+     <!--
+-    <file>@localstatedir@/@package@/log/c2s.log</file>
++    <file>@localstatedir@/log/jabberd/c2s.log</file>
+     -->
+     <!-- Filename of the debug logfile -->
+     <!--
+-    <debug>@localstatedir@/@package@/log/debug-${id}.log</debug>
++    <debug>@localstatedir@/log/jabberd/debug-${id}.log</debug>
+     -->
+   </log>
+@@ -334,7 +334,7 @@
+   <stats>
+     <!-- file containing count of packets that went through -->
+     <!--
+-    <packet>@localstatedir@/@package@/stats/c2s.packets</packet>
++    <packet>@localstatedir@/lib/jabberd/stats/c2s.packets</packet>
+     -->
+   </stats>
+@@ -370,7 +370,7 @@
+     <path>@pkglibdir@</path>
+     <!-- Backend module to use -->
+-    <module>sqlite</module>
++    <module>db</module>
+     <!-- Available authentication mechanisms -->
+     <mechanisms>
+@@ -421,7 +421,7 @@
+     <!-- SQLite driver configuration -->
+     <sqlite>
+       <!-- Database name -->
+-      <dbname>@localstatedir@/@package@/db/sqlite.db</dbname>
++      <dbname>@localstatedir@/lib/jabberd/sqlite.db</dbname>
+       <!-- Transacation support. If this is commented out, transactions
+            will be disabled. This might make database accesses faster,
+@@ -502,7 +502,7 @@
+     <!-- Berkeley DB module configuration -->
+     <db>
+       <!-- Directory to store database files under -->
+-      <path>@localstatedir@/@package@/db</path>
++      <path>@localstatedir@/lib/jabberd/db</path>
+       <!-- Synchronize the database to disk after each write. If you
+            disable this, database accesses may be faster, but data may
+diff -ur jabberd-2.2.17.orig/etc/jabberd.cfg.dist.in jabberd-2.2.17/etc/jabberd.cfg.dist.in
+--- jabberd-2.2.17.orig/etc/jabberd.cfg.dist.in        2012-05-04 16:24:36.000000000 +0000
++++ jabberd-2.2.17/etc/jabberd.cfg.dist.in     2013-07-23 16:58:45.510179289 +0000
+@@ -14,5 +14,9 @@
+ @jabberd_router_bin@      @sysconfdir@/router.xml
+ @jabberd_sm_bin@          @sysconfdir@/sm.xml
+-@jabberd_s2s_bin@         @sysconfdir@/s2s.xml
+ @jabberd_c2s_bin@         @sysconfdir@/c2s.xml
++
++# After sm and c2s are configured to use a fully qualified domain name
++# and proper SRV records are set in DNS uncoment this to enable communication
++# with other Jabber servers
++#@jabberd_s2s_bin@         @sysconfdir@/s2s.xml
+diff -ur jabberd-2.2.17.orig/etc/router.xml.dist.in jabberd-2.2.17/etc/router.xml.dist.in
+--- jabberd-2.2.17.orig/etc/router.xml.dist.in 2012-05-04 16:24:36.000000000 +0000
++++ jabberd-2.2.17/etc/router.xml.dist.in      2013-07-23 17:00:56.309179075 +0000
+@@ -5,7 +5,7 @@
+   <!-- The process ID file. Comment this out if you don't need to know
+        the process ID from outside the process (eg for control scripts) -->
+-  <pidfile>@localstatedir@/@package@/pid/router.pid</pidfile>
++  <pidfile>@localstatedir@/run/jabber/router.pid</pidfile>
+   <!-- Log configuration - type is "syslog", "file" or "stdout" -->
+   <log type='syslog'>
+@@ -18,19 +18,19 @@
+     <!-- If logging to file, this is the filename of the logfile -->
+     <!--
+-    <file>@localstatedir@/@package@/log/router.log</file>
++    <file>@localstatedir@/log/jabberd/router.log</file>
+     -->
+     <!-- Filename of the debug logfile -->
+     <!--
+-    <debug>@localstatedir@/@package@/log/debug-${id}.log</debug>
++    <debug>@localstatedir@/log/jabberd/debug-${id}.log</debug>
+     -->
+   </log>
+   <!-- Local network configuration -->
+   <local>
+-    <!-- IP address to bind to (default: 0.0.0.0) -->
+-    <ip>0.0.0.0</ip>
++    <!-- IP address to bind to (default: 127.0.0.1) -->
++    <ip>127.0.0.1</ip>
+     <!-- Port to bind to (default: 5347) -->
+     <port>5347</port>
+@@ -164,6 +164,9 @@
+     <!--
+     <alias name='conference.domain.com' target='muclinker'/>
+     -->
++    <alias name='jud.localhost' target='jud-linker'/>
++    <alias name='muc.localhost' target='muc-linker'/>
++    <alias name='icq.localhost' target='icq-linker'/>
+   </aliases>
+   <!-- Access control information -->
+diff -ur jabberd-2.2.17.orig/etc/s2s.xml.dist.in jabberd-2.2.17/etc/s2s.xml.dist.in
+--- jabberd-2.2.17.orig/etc/s2s.xml.dist.in    2012-08-06 18:18:46.000000000 +0000
++++ jabberd-2.2.17/etc/s2s.xml.dist.in 2013-07-23 17:04:54.683054085 +0000
+@@ -5,7 +5,7 @@
+   <!-- The process ID file. Comment this out if you don't need to know
+        the process ID from outside the process (eg for control scripts) -->
+-  <pidfile>@localstatedir@/@package@/pid/s2s.pid</pidfile>
++  <pidfile>@localstatedir@/run/jabber/s2s.pid</pidfile>
+   <!-- Router connection configuration -->
+   <router>
+@@ -70,12 +70,12 @@
+     <!-- if logging to file, this is the filename of the logfile -->
+     <!--
+-    <file>@localstatedir@/@package@/log/s2s.log</file>
++    <file>@localstatedir@/log/jabberd/s2s.log</file>
+     -->
+     <!-- Filename of the debug logfile -->
+     <!--
+-    <debug>@localstatedir@/@package@/log/debug-${id}.log</debug>
++    <debug>@localstatedir@/log/jabberd/debug-${id}.log</debug>
+     -->
+   </log>
+@@ -240,7 +240,7 @@
+   <stats>
+     <!-- file containing count of packets that went through -->
+     <!--
+-    <packet>@localstatedir@/@package@/stats/s2s.packets</packet>
++    <packet>@localstatedir@/lib/jabberd/stats/s2s.packets</packet>
+     -->
+   </stats>
+diff -ur jabberd-2.2.17.orig/etc/sm.xml.dist.in jabberd-2.2.17/etc/sm.xml.dist.in
+--- jabberd-2.2.17.orig/etc/sm.xml.dist.in     2012-05-04 16:24:36.000000000 +0000
++++ jabberd-2.2.17/etc/sm.xml.dist.in  2013-07-23 17:33:43.782116230 +0000
+@@ -5,7 +5,7 @@
+   <!-- The process ID file. Comment this out if you don't need to know
+        the process ID from outside the process (eg for control scripts) -->
+-  <pidfile>@localstatedir@/@package@/pid/sm.pid</pidfile>
++  <pidfile>@localstatedir@/run/jabber/sm.pid</pidfile>
+   <!-- Router connection configuration -->
+   <router>
+@@ -60,12 +60,12 @@
+     <!-- If logging to file, this is the filename of the logfile -->
+     <!--
+-    <file>@localstatedir@/@package@/log/sm.log</file>
++    <file>@localstatedir@/log/jabberd/sm.log</file>
+     -->
+     <!-- Filename of the debug logfile -->
+     <!--
+-    <debug>@localstatedir@/@package@/log/debug-${id}.log</debug>
++    <debug>@localstatedir@/log/jabberd/debug-${id}.log</debug>
+     -->
+   </log>
+@@ -90,7 +90,7 @@
+     <path>@pkglibdir@</path>
+     <!-- By default, we use the SQLite driver for all storage -->
+-    <driver>sqlite</driver>
++    <driver>db</driver>
+     <!-- Its also possible to explicitly list alternate drivers for
+          specific data types. -->
+@@ -133,7 +133,7 @@
+     <!-- SQLite driver configuration -->
+     <sqlite>
+       <!-- Database name -->
+-      <dbname>@localstatedir@/@package@/db/sqlite.db</dbname>
++      <dbname>@localstatedir@/lib/jabberd/sqlite.db</dbname>
+       <!-- Transacation support. If this is commented out, transactions
+            will be disabled. This might make database accesses faster,
+@@ -199,7 +199,7 @@
+          implementation does not implement the 'count' callback). -->
+     <db>
+       <!-- Directory to store database files under -->
+-      <path>@localstatedir@/@package@/db</path>
++      <path>@localstatedir@/lib/jabberd/db</path>
+       <!-- Synchronize the database to disk after each write. If you
+            disable this, database accesses may be faster, but data may
+@@ -595,6 +595,8 @@
+     </serverinfo>
+     -->
++    <browse/>
++
+   </discovery>
+   <!-- User options -->
diff --git a/jabberd-delay_jobs.patch b/jabberd-delay_jobs.patch
new file mode 100644 (file)
index 0000000..135819c
--- /dev/null
@@ -0,0 +1,11 @@
+diff -ur jabberd-2.2.17.orig/tools/jabberd.in jabberd-2.2.17/tools/jabberd.in
+--- jabberd-2.2.17.orig/tools/jabberd.in       2013-07-23 16:52:28.000000000 +0000
++++ jabberd-2.2.17/tools/jabberd.in    2013-07-23 17:39:02.619178938 +0000
+@@ -148,6 +148,7 @@
+ foreach my $job (@programs)
+ {
+     &LaunchJob($job->[0],$job->[1],$job->[2]);
++    sleep(1);
+ }
+ unless (!$daemon || $debug)
diff --git a/jabberd-perlscript.patch b/jabberd-perlscript.patch
new file mode 100644 (file)
index 0000000..fee589d
--- /dev/null
@@ -0,0 +1,14 @@
+diff -ur jabberd-2.2.17.orig/tools/jabberd.in jabberd-2.2.17/tools/jabberd.in
+--- jabberd-2.2.17.orig/tools/jabberd.in       2012-02-12 21:38:25.000000000 +0000
++++ jabberd-2.2.17/tools/jabberd.in    2013-07-23 16:51:33.574241731 +0000
+@@ -1,9 +1,4 @@
+-#!/bin/sh
+-#-*-Perl-*-
+-
+-exec perl -w -x $0 "$@"
+-
+-#!perl
++#!/usr/bin/perl
+ ##############################################################################
+ #
diff --git a/jabberd-reconnect.patch b/jabberd-reconnect.patch
new file mode 100644 (file)
index 0000000..622fbea
--- /dev/null
@@ -0,0 +1,32 @@
+diff -ur jabberd-2.2.17.orig/storage/authreg_mysql.c jabberd-2.2.17/storage/authreg_mysql.c
+--- jabberd-2.2.17.orig/storage/authreg_mysql.c        2011-10-22 19:56:00.000000000 +0000
++++ jabberd-2.2.17/storage/authreg_mysql.c     2013-07-23 17:41:21.229180366 +0000
+@@ -557,8 +557,10 @@
+     mysql_query(conn, "SET NAMES 'utf8'");
+-    /* Set reconnect flag to 1 (set to 0 by default from mysql 5 on) */
+-    conn->reconnect = 1;
++    {
++      my_bool reconnect = 1;
++      mysql_options(conn, MYSQL_OPT_RECONNECT, (char *)&reconnect);
++    }
+     ar->user_exists = _ar_mysql_user_exists;
+     if (MPC_PLAIN == mysqlcontext->password_type) {
+diff -ur jabberd-2.2.17.orig/storage/storage_mysql.c jabberd-2.2.17/storage/storage_mysql.c
+--- jabberd-2.2.17.orig/storage/storage_mysql.c        2011-10-30 18:46:36.000000000 +0000
++++ jabberd-2.2.17/storage/storage_mysql.c     2013-07-23 17:41:21.229180366 +0000
+@@ -610,8 +610,10 @@
+         return st_FAILED;
+     }
+-    /* Set reconnect flag to 1 (set to 0 by default from mysql 5 on) */
+-    conn->reconnect = 1;
++    {
++      my_bool reconnect = 1;
++      mysql_options(conn, MYSQL_OPT_RECONNECT, (char *)&reconnect);
++    }
+     data = (drvdata_t) calloc(1, sizeof(struct drvdata_st));
diff --git a/jabberd.init b/jabberd.init
new file mode 100644 (file)
index 0000000..9697e98
--- /dev/null
@@ -0,0 +1,76 @@
+#!/bin/sh
+#
+# jabberd      Jabber/XMPP server
+#
+# chkconfig:   345 99 01
+#
+# description: Modern open source Jabber server, implementing\
+#              latest XMPP protocol.
+#
+
+
+# Source function library
+. /etc/rc.d/init.d/functions
+
+# Get service config - may override defaults
+[ -f /etc/sysconfig/jabberd ] && . /etc/sysconfig/jabberd
+
+# See how we were called.
+case "$1" in
+  start)
+       # Check if the service is already running?
+       if [ ! -f /var/lock/subsys/jabberd ]; then
+               msg_starting jabberd
+               daemon /usr/sbin/jabberd
+               RETVAL=$?
+               if [ $RETVAL -eq 0 ]; then
+                       touch /var/lock/subsys/jabberd
+               fi
+       else
+               msg_already_running jabberd
+               exit 1
+       fi
+        ;;
+  stop)
+        # Stop daemons.
+       if [ -f /var/lock/subsys/jabberd ]; then
+               msg_stopping jabberd
+               killproc jabberd
+               RETVAL=$?
+               rm -f /var/lock/subsys/jabberd
+       else
+               msg_not_running jabberd
+               exit 1
+       fi
+        ;;
+  restart)
+        $0 stop
+       run_cmd "Jabberd (5 sec. timeout)" sleep 5
+       $0 start
+        ;;
+  reload)
+       if [ -f /var/lock/subsys/jabberd ]; then
+               msg_reloading jabberd
+               killproc jabberd -HUP
+               RETVAL=$?
+       else
+               msg_not_running jabberd
+               RETVAL=1
+       fi
+       ;;
+  force-reload)
+       $0 stop && $0 start
+       ;;
+  status)
+       status jabberd
+       RETVAL=$?
+        ;;
+  *)
+       msg_usage "$0 {start|stop|status|restart|reload|force-reload}"
+        exit 1
+esac
+
+exit $RETVAL
+
+# This must be last line !
+# vi:syntax=sh:tw=78:ts=8:sw=4
diff --git a/jabberd.spec b/jabberd.spec
new file mode 100644 (file)
index 0000000..478e659
--- /dev/null
@@ -0,0 +1,166 @@
+#
+# Conditional build
+%bcond_without db      # don't build db storage and authreg backends
+%bcond_without ldap    # don't build ldap authreg backend
+%bcond_without mysql   # don't build MySQL storage and authreg backends
+%bcond_without pgsql   # don't build PostgreSQL storage and authreg backends
+%bcond_without sqlite  # don't build SQLite v3 storage backend
+# allows limiting the number of offline messages stored per user (mysql storage)
+# and allows offline storage (queuing) of subscription requests and/or messages
+# to be disabled
+%bcond_with    bxmpp   # - patches c2s to allow connections from Flash clients which don't use proper XMPP
+
+%define                skip_post_check_so      mod_.*.so.0.0.0 libstorage.so.0.0.0
+
+%include       /usr/lib/rpm/macros.perl
+Summary:       Jabber/XMPP server
+Summary(pl.UTF-8):     Serwer Jabber/XMPP
+Name:          jabberd
+Version:       2.2.17
+Release:       1
+License:       GPL
+Group:         Applications/Communications
+Source0:       https://github.com/downloads/jabberd2/jabberd2/%{name}-%{version}.tar.xz
+# Source0-md5: 8b7d654deaa6566e58ab6630112f9b10
+Source1:       %{name}.init
+Source2:       %{name}.sysconfig
+Source3:       db-setup.sqlite
+Patch0:                %{name}-perlscript.patch
+Patch1:                %{name}-daemonize.patch
+Patch2:                %{name}-default_config.patch
+Patch4:                %{name}-delay_jobs.patch
+Patch5:                %{name}-binary_path.patch
+Patch6:                %{name}-reconnect.patch
+#bcond bxmpp
+Patch22:       http://www.marquard.net/jabber/patches/patch-flash-v2
+URL:           http://jabberd.jabberstudio.org/
+BuildRequires: autoconf
+BuildRequires: automake
+%{?with_db:BuildRequires:      db-devel >= 4.1.24}
+BuildRequires: expat-devel
+BuildRequires: gettext-tools
+BuildRequires: gsasl-devel >= 0.2.28
+BuildRequires: libidn-devel >= 0.3.0
+BuildRequires: libstdc++-devel
+BuildRequires: libtool
+%{?with_mysql:BuildRequires:   mysql-devel}
+%{?with_ldap:BuildRequires:    openldap-devel}
+BuildRequires: openssl-devel >= 0.9.6d
+BuildRequires: pam-devel
+%{?with_pgsql:BuildRequires:   postgresql-devel}
+BuildRequires: rpm-perlprov >= 3.0.3-16
+BuildRequires: rpmbuild(macros) >= 1.268
+%{?with_sqlite:BuildRequires:  sqlite3-devel}
+BuildRequires: udns-devel
+Requires(post):        sed >= 4.0
+Requires(post):        textutils
+Requires(post,preun):  /sbin/chkconfig
+Requires:      jabber-common
+Requires:      rc-scripts
+Obsoletes:     jabber
+BuildRoot:     %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
+
+%description
+Modern open source Jabber server, implementing latest XMPP protocol.
+
+%description -l pl.UTF-8
+Nowoczesny, wolnodostępny serwer Jabbera implementujący najnowszy
+protokół XMPP.
+
+%prep
+%setup -q
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+
+%if %{with bxmpp}
+%patch22 -p0
+%endif
+
+install %{SOURCE3} tools/
+
+%build
+#http://j2.openaether.org/bugzilla/show_bug.cgi?id=17
+%{__libtoolize}
+%{__aclocal}
+%{__autoconf}
+%{__autoheader}
+%{__automake}
+%configure \
+       --bindir="%{_libdir}/%{name}" \
+       --sysconfdir="%{_sysconfdir}/jabber" \
+       %{?with_db:--enable-db} \
+       %{?with_mysql:--enable-mysql} \
+       %{?with_pgsql:--enable-pgsql} \
+       --enable-fs \
+       --enable-anon \
+       --enable-pipe \
+       --enable-pam \
+       %{?with_ldap:--enable-ldap} \
+       %{?with_sqlite:--enable-sqlite} \
+       %{?debug:--enable-debug}
+
+%{__make}
+
+%install
+rm -rf $RPM_BUILD_ROOT
+install -d $RPM_BUILD_ROOT{%{_sbindir},/var/lib/%{name}/{db,stats},/etc/{sysconfig,rc.d/init.d}}
+
+%{__make} install \
+       DESTDIR=$RPM_BUILD_ROOT
+
+mv $RPM_BUILD_ROOT%{_libdir}/jabberd/jabberd $RPM_BUILD_ROOT%{_sbindir}
+%{__rm} $RPM_BUILD_ROOT%{_sysconfdir}/jabber{,/templates}/*.dist 
+
+# drop Upstart configuration files
+%{__rm} -f $RPM_BUILD_ROOT%{_sysconfdir}/jabber/*.conf 
+%{__rm} -f $RPM_BUILD_ROOT%{_prefix}/etc/init/*.conf
+
+install %{SOURCE1} $RPM_BUILD_ROOT/etc/rc.d/init.d/%{name}
+install %{SOURCE2} $RPM_BUILD_ROOT/etc/sysconfig/%{name}
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%post
+if [ -f %{_sysconfdir}/jabber/secret ] ; then
+       SECRET=`cat %{_sysconfdir}/jabber/secret`
+       if [ -n "$SECRET" ] ; then
+               echo "Updating component authentication secret in Jabberd config files..."
+               %{__sed} -i -e "s/>secret</>$SECRET</" %{_sysconfdir}/jabber/*.xml
+       fi
+fi
+
+/sbin/chkconfig --add jabberd
+%service jabberd restart "Jabber server"
+
+%if %{with avatars}
+echo "This j2 package has new functionality, please read AVATARS file."
+%endif
+
+%preun
+if [ "$1" = "0" ]; then
+       %service jabberd stop
+       /sbin/chkconfig --del jabberd
+fi
+
+%files
+%defattr(644,root,root,755)
+%doc AUTHORS ChangeLog NEWS README TODO
+%doc tools/{db-setup.mysql,db-setup.pgsql,%{?with_sqlite:db-setup.sqlite,}pipe-auth.pl}
+%attr(640,root,jabber) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/jabber/*.cfg
+%attr(640,root,jabber) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/jabber/*.xml
+%dir %{_sysconfdir}/jabber/templates
+%attr(640,root,jabber) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/jabber/templates/*.xml
+%attr(755,root,root) %{_sbindir}/*
+%dir %{_libdir}/jabberd
+%attr(755,root,root) %{_libdir}/%{name}/*
+%dir %attr(770,root,jabber) /var/lib/%{name}
+%dir %attr(770,root,jabber) /var/lib/%{name}/db
+%dir %attr(770,root,jabber) /var/lib/%{name}/stats
+%attr(754,root,root) /etc/rc.d/init.d/%{name}
+%attr(640,root,root) %config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/%{name}
+%{_mandir}/man*/*
diff --git a/jabberd.sysconfig b/jabberd.sysconfig
new file mode 100644 (file)
index 0000000..23b1e25
--- /dev/null
@@ -0,0 +1,3 @@
+# Nice level for jabberd
+SERVICE_RUN_NICE_LEVEL="+0"
+
diff --git a/patch-flash-v2 b/patch-flash-v2
new file mode 100644 (file)
index 0000000..f752da7
--- /dev/null
@@ -0,0 +1,173 @@
+diff -u /usr/local/src/jabberd-2.0s6/c2s/c2s.c c2s/c2s.c
+--- /usr/local/src/jabberd-2.0s6/c2s/c2s.c     Thu Dec 23 19:42:29 2004
++++ c2s/c2s.c  Thu Dec 23 19:41:20 2004
+@@ -20,6 +20,65 @@
+ #include "c2s.h"
++/*
++ * M.Bootsma, LogicaCMG Hoofddorp, Netherlands
++ * October 2004
++ *
++ * Added a patch for flash:stream support
++ *
++ * Flash is not 100% compatible with the XML stream standard:
++ * 1. it terminates every XML message with a '\0'
++ * 2. it terminates the stream header with a /
++ *    (this would close the stream)
++ * 3. it starts the stream with a flash:stream header instead of
++ *    a stream:stream header.
++ *
++ * The patch checks the first message of a starting session stream
++ * for any '\0'. If found it flags the session as a Flash session
++ * and replases the complete header with a Jabber compatible
++ * header.
++ * After that every incoming message is filtered and '\0' is 
++ * replaced with ' '.
++ * For every outgoing message, a '\0' is appended and the response
++ * of the header is replaced for a flash friendly version
++ *
++ * The whole flash patch can be switched off by undefining CP2005_FLASH_PATCH
++ * in config.h(.in)
++ */
++
++#ifdef CP2005_FLASH_PATCH
++
++#define FLASH_BUFFER_SIZE 256
++
++static const char caStreamHeader [] = "<?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:client' to='%s' >";
++static const char caFlashHeader []  = "<?xml version='1.0'?><flash:stream xmlns:flash='http://www.jabber.com/streams/flash' xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:client' from='%s' id='%s' />";
++
++static void ExtractValue(char *pMessage, char *pVariable, char *pValue) { 
++    int iLen; 
++    char *p;
++    char *pEnd;
++
++    /*
++     * extract the value of an attribute from a XML message
++     * eg: <.... id='1234567890' ....> returns 1234567890
++     */
++
++    p = strstr(pMessage, pVariable);
++    if (p != NULL) {
++        p += (strlen(pVariable) + 1);
++        /* find end of value, search for closing ' or " */
++        pEnd = strchr(p, p [-1]);
++        iLen = pEnd - p;
++        if (iLen < FLASH_BUFFER_SIZE) {
++            memcpy(pValue, p, iLen);
++            pValue[iLen] = '\0';
++            log_debug(ZONE, "++++ Extracted Var %s: [%s]\n", pVariable, pValue);
++        }
++    }
++}
++#endif
++
++
+ static int _c2s_client_sx_callback(sx_t s, sx_event_t e, void *data, void *arg) {
+     sess_t sess = (sess_t) arg;
+     sx_buf_t buf = (sx_buf_t) data;
+@@ -28,6 +93,12 @@
+     nad_t nad;
+     char root[9];
++#ifdef CP2005_FLASH_PATCH
++    char *p, *pEnd;
++    char caHost[FLASH_BUFFER_SIZE];
++    char caID[FLASH_BUFFER_SIZE];
++#endif
++
+     switch(e) {
+         case event_WANT_READ:
+             log_debug(ZONE, "want read");
+@@ -94,14 +165,74 @@
+                 return -1;
+             }
+-            log_debug(ZONE, "read %d bytes", len);
+-
+             buf->len = len;
++#ifdef CP2005_FLASH_PATCH
++            /* check for 0 bytes in the first packet
++             * if found it must be a flash client
++             * remove any 0 in the data and
++             * the / that ends the <?xml... header
++             */
++
++            pEnd = &buf->data[len];
++
++            if (sess->s->state == state_NONE) {
++                /* stream is new, look for 0 bytes */
++                p = memchr(buf->data, '\0', buf->len);
++                if ((p != NULL) && (p < pEnd)) {
++                    log_debug(ZONE, "++++ Flash Stream detected\n%.*s", buf->len, buf->data);
++                    sess->flash_client = 1;
++
++                    /* extract destination host */
++                    ExtractValue(buf->data, "to=", caHost);
++
++                    /* create normal stream:stream header, resize data buffer first */
++                    _sx_buffer_alloc_margin(buf, 0, sizeof(caStreamHeader) + strlen(caHost) + 8);
++                    sprintf(buf->data, caStreamHeader, caHost);
++                    buf->len = strlen(buf->data);
++
++                    log_debug(ZONE, "++++ Converted to\n%.*s", buf->len, buf->data);
++                }
++            }
++
++            /* Check all other messages in the stream to remove \0's etc */
++            if (sess->flash_client) 
++                /* remove 0's from flash packets */
++                for (p = buf->data; p < pEnd; p++)
++                    if (*p == '\0')
++                        *p = ' ';
++#endif
++            log_debug(ZONE, "read %d bytes", len);
++
+             return len;
+         case event_WRITE:
+             log_debug(ZONE, "writing to %d", sess->fd);
++
++#ifdef CP2005_FLASH_PATCH
++            if (sess->flash_client) {
++                /* look for the header <? xml ...*/
++                if (strncmp(buf->data, "<?xml ", 6) == 0) {
++                    /* replace normal stream header with flash friendly header */
++                    log_debug(ZONE, "++++ Found <?xml..., \n%.*s", buf->len, buf->data);
++
++                    /* extract id from id="123456567778765" or id='45454545454' */
++                    ExtractValue(buf->data, "from=", caHost);
++                    ExtractValue(buf->data, "id=", caID);
++
++                    /* create flash:stream header, realloc buffer first */
++                    _sx_buffer_alloc_margin(buf, 0, sizeof(caFlashHeader) + strlen(caHost) + strlen(caID) + 8);
++                    sprintf(buf->data, caFlashHeader, caHost, caID);
++                    buf->len = strlen(buf->data);
++
++                    log_debug(ZONE, "++++ Converted to %s", buf->data);
++                }
++
++                /* add a 0 to flash packets */
++                buf->data[buf->len] = '\0';
++                buf->len++;
++            }
++#endif
+             len = send(sess->fd, buf->data, buf->len, 0);
+             if(len >= 0) {
+diff -u /usr/local/src/jabberd-2.0s6/c2s/c2s.h c2s/c2s.h
+--- /usr/local/src/jabberd-2.0s6/c2s/c2s.h     Tue Dec  7 18:38:05 2004
++++ c2s/c2s.h  Thu Dec 23 19:23:47 2004
+@@ -62,6 +62,10 @@
+     int                 bound;
+     int                 active;
++#ifdef CP2005_FLASH_PATCH
++    int                 flash_client;
++#endif
++
+     nad_t               result;
+     int                 sasl_authd;     /* 1 = they did a sasl auth */