Hello community,
here is the log from the commit of package arpwatch
checked in at Mon Nov 17 16:38:21 CET 2008.
--------
--- arpwatch/arpwatch.changes 2007-07-26 16:52:55.000000000 +0200
+++ /mounts/work_src_done/STABLE/arpwatch/arpwatch.changes 2008-11-12 14:34:54.000000000 +0100
@@ -1,0 +2,14 @@
+Wed Nov 12 14:33:57 CET 2008 - draht@suse.de
+
+- arpwatch-2.1a11-emailaddr.dif for flexibility in sender and
+ recipient addresses on commandline.
+- arpwatch-2.1a11-drop-privs.dif to run arpwatch as different user
+- arpwatch-2.1a11-drop-privs-manpage.dif for the manpage
+
+-------------------------------------------------------------------
+Wed Nov 12 11:22:54 CET 2008 - draht@suse.de
+
+- start script tuned for multiple interface support and independent
+ databases. #149003
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
New:
----
arpwatch-2.1a11-drop-privs.dif
arpwatch-2.1a11-drop-privs-manpage.dif
arpwatch-2.1a11-emailaddr.dif
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ arpwatch.spec ++++++
--- /var/tmp/diff_new_pack.Rw8898/_old 2008-11-17 16:38:04.000000000 +0100
+++ /var/tmp/diff_new_pack.Rw8898/_new 2008-11-17 16:38:04.000000000 +0100
@@ -1,26 +1,34 @@
#
# spec file for package arpwatch (Version 2.1a15)
#
-# Copyright (c) 2007 SUSE LINUX Products GmbH, Nuernberg, Germany.
-# This file and all modifications and additions to the pristine
-# package are under the same license as the package itself.
+# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
+# All modifications and additions to the file contributed by third parties
+# remain the property of their copyright owners, unless otherwise agreed
+# upon. The license for this file, and modifications and additions to the
+# file, is the same license as for the pristine package itself (unless the
+# license for the pristine package is not an Open Source License, in which
+# case the license is the MIT License). An "Open Source License" is a
+# license that conforms to the Open Source Definition (Version 1.9)
+# published by the Open Source Initiative.
+
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
# norootforbuild
+
Name: arpwatch
BuildRequires: libpcap-devel postfix
-URL: http://www-nrg.ee.lbl.gov/nrg.html
+Url: http://www-nrg.ee.lbl.gov/nrg.html
License: BSD 3-Clause
Group: Productivity/Networking/Diagnostic
-Autoreqprov: on
+AutoReqProv: on
Requires: arpwatch-ethercodes
-Prereq: /usr/bin/touch %insserv_prereq %fillup_prereq
+PreReq: /usr/bin/touch %insserv_prereq %fillup_prereq
Summary: Arpwatch Keeps Track of Ethernet and IP Address Pairings
Version: 2.1a15
-Release: 18
+Release: 131
Source: %{name}-%{version}.tar.bz2
Source10: arpwatch.init
Source11: sysconfig.arpwatch
@@ -28,6 +36,9 @@
Patch1: arpwatch-no-source-zero.dif
Patch3: arpwatch-2.1a11-tokenring.diff
Patch4: arpwatch-2.1a11-hname-overflow.dif
+Patch5: arpwatch-2.1a11-drop-privs-manpage.dif
+Patch6: arpwatch-2.1a11-drop-privs.dif
+Patch7: arpwatch-2.1a11-emailaddr.dif
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%description
@@ -41,6 +52,7 @@
Craig Leres
%package ethercodes-build
+License: BSD 3-Clause
Group: Productivity/Networking/Diagnostic
Summary: Tool to create ethercodes.dat from IEEE.org meta data
@@ -61,6 +73,9 @@
%patch1 -p1 -E
%patch3 -p1 -E
%patch4 -p1 -E
+%patch5 -p1 -E
+%patch6 -p1 -E
+%patch7 -p1 -E
%build
%configure
@@ -119,85 +134,93 @@
%{_datadir}/arpwatch
%changelog
-* Thu Jul 26 2007 - prusnak@suse.cz
+* Wed Nov 12 2008 draht@suse.de
+- arpwatch-2.1a11-emailaddr.dif for flexibility in sender and
+ recipient addresses on commandline.
+- arpwatch-2.1a11-drop-privs.dif to run arpwatch as different user
+- arpwatch-2.1a11-drop-privs-manpage.dif for the manpage
+* Wed Nov 12 2008 draht@suse.de
+- start script tuned for multiple interface support and independent
+ databases. #149003
+* Thu Jul 26 2007 prusnak@suse.cz
- changed libpcap to libpcap-devel in BuildRequires
-* Mon May 14 2007 - lrupp@suse.de
+* Mon May 14 2007 lrupp@suse.de
- update to 2.1a15
+ let the database files belong to the package
+ build parallel
+ use rpm macros for configure and make
-* Wed Jan 25 2006 - mls@suse.de
+* Wed Jan 25 2006 mls@suse.de
- converted neededforbuild to BuildRequires
-* Mon Apr 18 2005 - meissner@suse.de
+* Mon Apr 18 2005 meissner@suse.de
- Use RPM_OPT_FLAGS.
-* Fri Nov 12 2004 - lmuelle@suse.de
+* Fri Nov 12 2004 lmuelle@suse.de
- Add %%insserv_prereq %%fillup_prereq to prereq.
- Add missing call to %%stop_on_removal (%%preun), %%restart_on_update, and
%%insserv_cleanup (%%postun).
-* Sat Nov 06 2004 - lmuelle@suse.de
+* Sat Nov 06 2004 lmuelle@suse.de
- Split off massagevendor script and required files as we only need them at
build time to create the ethercodes.dat file from the IEEE.org meta data.
-* Sat Nov 06 2004 - lmuelle@suse.de
+* Sat Nov 06 2004 lmuelle@suse.de
- Add files needed by massagevendor script, [#48005].
-* Fri Jun 25 2004 - lmuelle@suse.de
+* Fri Jun 25 2004 lmuelle@suse.de
- Update to version 2.1a13.
- Add sysconfig file to allow additional options in the init script.
- Compress source tar ball with bzip2.
- Move IEEE OUI and Company_id file to ethercodes sub package.
-* Thu Mar 25 2004 - mmj@suse.de
+* Thu Mar 25 2004 mmj@suse.de
- Add postfix to # neededforbuild
-* Mon Jan 12 2004 - adrian@suse.de
+* Mon Jan 12 2004 adrian@suse.de
- fix build as user
-* Mon Jan 12 2004 - adrian@suse.de
+* Mon Jan 12 2004 adrian@suse.de
- add %%defattr
-* Tue Jul 29 2003 - aj@suse.de
+* Tue Jul 29 2003 aj@suse.de
- Fix for chown changes.
-* Thu Jun 12 2003 - mmj@suse.de
+* Thu Jun 12 2003 mmj@suse.de
- Forgot to comment in a line
-* Thu Jun 12 2003 - mmj@suse.de
+* Thu Jun 12 2003 mmj@suse.de
- Use BuildRoot
-* Wed Feb 26 2003 - draht@suse.de
+* Wed Feb 26 2003 draht@suse.de
- added /usr/sbin/rcarpwatch symlink (#24163)
-* Wed Sep 18 2002 - draht@suse.de
+* Wed Sep 18 2002 draht@suse.de
- added fileutils to PreReq (#19782)
-* Tue Sep 17 2002 - ro@suse.de
+* Tue Sep 17 2002 ro@suse.de
- removed bogus self-provides
-* Thu Aug 22 2002 - draht@suse.de
+* Thu Aug 22 2002 draht@suse.de
- minor buffer overflow with dns query results, fixed by
arpwatch-2.1a11-hname-overflow.dif (#18149)
-* Mon Jul 08 2002 - draht@suse.de
+* Mon Jul 08 2002 draht@suse.de
- do not source /etc/rc.config any more.
-* Mon Mar 18 2002 - draht@suse.de
+* Mon Mar 18 2002 draht@suse.de
- minor correction to ethercodes.dat
-* Thu Mar 14 2002 - draht@suse.de
+* Thu Mar 14 2002 draht@suse.de
- added init script (bugzilla #12548)
- fix support for token ring interfaces. Thanks to Bjoern Jacke,
fixes bugzilla #14504.
- update of vendor table (ethercodes.dat)
-* Mon Oct 15 2001 - draht@suse.de
+* Mon Oct 15 2001 draht@suse.de
- upgrade to version 2.1a11
syslog(3), but do not send mail for packets from IP 0.0.0.0
-* Wed Aug 08 2001 - sgf@suse.de
+* Wed Aug 08 2001 sgf@suse.de
- removed libpcapn from neededforbuild and added libpcap
-* Thu Jan 11 2001 - draht@suse.de
+* Thu Jan 11 2001 draht@suse.de
- New version 2.1a10 fixes tmp file race (security).
-* Tue Aug 08 2000 - olh@suse.de
+* Tue Aug 08 2000 olh@suse.de
- add /usr/share/arpwatch to file list, ethercodes.dat was missing
-* Thu Jun 01 2000 - kukuk@suse.de
+* Thu Jun 01 2000 kukuk@suse.de
- Use doc macro
-* Fri Feb 18 2000 - dipa@suse.de
+* Fri Feb 18 2000 dipa@suse.de
- Changed path for manuals to /usr/share/man and /usr/lib/arpwatch
to /var/lib/arpwatch for arp.dat and /usr/share/arpwatch for
ethercodes.dat
-* Fri Sep 17 1999 - kettner@suse.de
+* Fri Sep 17 1999 kettner@suse.de
- Reinserted old # Commandline: line.
-* Mon Sep 13 1999 - bs@suse.de
+* Mon Sep 13 1999 bs@suse.de
- ran old prepare_spec on spec file to switch to new prepare_spec.
-* Thu Jul 22 1999 - msrex@suse.de
+* Thu Jul 22 1999 msrex@suse.de
- Fixed postinstall
-* Mon Jul 12 1999 - ro@suse.de
+* Mon Jul 12 1999 ro@suse.de
- libpcap is an extra package now
-* Fri Jun 11 1999 - msrex@suse.de
+* Fri Jun 11 1999 msrex@suse.de
- Spec file created from arpwatch-2.1a4.tar.gz by autospec
-* Fri Jun 11 1999 - msrex@suse.de
+* Fri Jun 11 1999 msrex@suse.de
- Spec file created from arpwatch-2.1a4.tar.gz by autospec
++++++ arpwatch-2.1a11-drop-privs.dif ++++++
diff -ruN ../arpwatch-2.1a15.orig/arpwatch.c ./arpwatch.c
--- ../arpwatch-2.1a15.orig/arpwatch.c 2008-11-12 15:16:19.000000000 +0100
+++ ./arpwatch.c 2008-11-12 16:31:50.000000000 +0100
@@ -64,6 +64,8 @@
#include
#include
#include
+#include
+#include
#include
@@ -152,6 +154,52 @@
#endif
__dead void usage(void) __attribute__((volatile));
+void dropprivileges(const char* user)
+{
+ struct passwd* pw;
+ pw = getpwnam( user );
+ if ( pw ) {
+ char *arpfiledir;
+ char *lastslash;
+
+ arpfiledir = malloc(strlen(arpfile)+1);
+ if(arpfiledir == NULL) {
+ syslog(LOG_ERR, "Fatal: malloc().");
+ exit(1);
+ }
+ strcpy(arpfiledir, arpfile);
+ lastslash = strrchr(arpfiledir, '/');
+ if(lastslash == NULL) {
+ syslog(LOG_ERR, "Fatal: cannot determine directory of %s", arpfile);
+ exit(1);
+ }
+ lastslash[0]='\0';
+
+
+ /* files arp.dat.eth0- and arp.dat.eth0.new that are created
+ as backup/lastversion and for temporary storage are
+ deleted before created again. */
+ if ( chown ( arpfile, pw->pw_uid, pw->pw_gid) != 0 ||
+ chown ( arpfiledir, pw->pw_uid, pw->pw_gid) != 0 ) {
+ syslog(LOG_ERR, "Fatal: could not chown %s and %s to %d,%d).",
+ arpfiledir,arpfile, pw->pw_uid, pw->pw_gid);
+ exit(1);
+ }
+ free(arpfiledir);
+ if ( initgroups(pw->pw_name, NULL) != 0 || setgid(pw->pw_gid) != 0 ||
+ setuid(pw->pw_uid) != 0 ) {
+ syslog(LOG_ERR, "Fatal: Couldn't change to user/group '%.32s' uid=%d gid=%d", user,
+ pw->pw_uid, pw->pw_gid);
+ exit(1);
+ }
+ }
+ else {
+ syslog(LOG_ERR, "No such user: '%.32s'", user);
+ exit(1);
+ }
+ syslog(LOG_DEBUG, "arpwatch running as uid=%d gid=%d", getuid(), getgid());
+}
+
int
main(int argc, char **argv)
{
@@ -164,6 +212,7 @@
register char *interface, *rfilename;
struct bpf_program code;
char errbuf[PCAP_ERRBUF_SIZE];
+ char* serveruser = NULL;
if (argv[0] == NULL)
prog = "arpwatch";
@@ -181,7 +230,7 @@
interface = NULL;
rfilename = NULL;
pd = NULL;
- while ((op = getopt(argc, argv, "df:i:n:Nr:")) != EOF)
+ while ((op = getopt(argc, argv, "df:i:n:Nr:u:")) != EOF)
switch (op) {
case 'd':
@@ -213,6 +262,16 @@
rfilename = optarg;
break;
+ case 'u':
+ if ( optarg ) {
+ serveruser = strdup(optarg);
+ }
+ else {
+ fprintf(stderr, "%s: Need username after -u\n", prog);
+ usage();
+ }
+ break;
+
default:
usage();
}
@@ -295,8 +354,11 @@
* Revert to non-privileged user after opening sockets
* (not needed on most systems).
*/
- setgid(getgid());
- setuid(getuid());
+ /*setgid(getgid());*/
+ /*setuid(getuid());*/
+ if ( serveruser ) {
+ dropprivileges( serveruser );
+ }
/* Must be ethernet or fddi or tokenring */
linktype = pcap_datalink(pd);
@@ -842,6 +904,6 @@
(void)fprintf(stderr, "Version %s\n", version);
(void)fprintf(stderr, "usage: %s [-dN] [-f datafile] [-i interface]"
- " [-n net[/width]] [-r file]\n", prog);
+ " [-n net[/width]] [-r file] [-u username]\n", prog);
exit(1);
}
++++++ arpwatch-2.1a11-drop-privs-manpage.dif ++++++
diff -ruN ../arpwatch-2.1a15.orig/arpwatch.8 ./arpwatch.8
--- ../arpwatch-2.1a15.orig/arpwatch.8 2008-11-12 12:15:54.000000000 +0100
+++ ./arpwatch.8 2008-11-12 12:19:16.000000000 +0100
@@ -36,13 +36,16 @@
.I interface
]
.br
-.ti +8
+.ti +9
[
.B -n
.IR net [/ width
]] [
.B -r
.I file
+] [
+.B -u
+.I username
]
.ad
.SH DESCRIPTION
@@ -94,10 +97,26 @@
.B arpwatch
does not fork.
.LP
+If
+.B -u
+flag is used,
+.B arpwatch
+drops root privileges and changes user ID to
+.I username
+and group ID to that of the primary group of
+.IR username .
+This is recommended for security reasons.
+.LP
Note that an empty
.I arp.dat
file must be created before the first time you run
-.BR arpwatch .
+.BR arpwatch .
+Also, the default directory (where arp.dat is stored) must be owned
+by
+.I username
+if
+.BR -u
+flag is used.
.LP
.SH "REPORT MESSAGES"
Here's a quick list of the report messages generated by
++++++ arpwatch-2.1a11-emailaddr.dif ++++++
diff -ruN ../arpwatch-2.1a15.orig/addresses.h.in ./addresses.h.in
--- ../arpwatch-2.1a15.orig/addresses.h.in 1996-06-05 07:40:29.000000000 +0200
+++ ./addresses.h.in 2008-11-12 14:26:23.000000000 +0100
@@ -1,2 +1,4 @@
#define WATCHER "root"
-#define WATCHEE "arpwatch (Arpwatch)"
+#define WATCHEE "root (Arpwatch)"
+extern char *watcher;
+extern char *watchee;
diff -ruN ../arpwatch-2.1a15.orig/arpsnmp.8 ./arpsnmp.8
--- ../arpwatch-2.1a15.orig/arpsnmp.8 2000-09-17 22:34:48.000000000 +0200
+++ ./arpsnmp.8 2008-11-12 14:26:23.000000000 +0100
@@ -30,6 +30,12 @@
] [
.B -f
.I datafile
+] [
+.B -e
+.I username
+] [
+.B -s
+.I username
]
.I file
[
@@ -60,6 +66,27 @@
file must be created before the first time you run
.BR arpsnmp .
.LP
+If the
+.B -e
+flag is used,
+.B arpsnmp
+sends e-mail messages to
+.I username
+rather than the default (root).
+If a single `-' character is given for the username,
+sending of e-mail is suppressed,
+but logging via syslog is still done as usual.
+(This can be useful during initial runs, to collect data
+without being flooded with messages about new stations.)
+.LP
+If the
+.B -s
+flag is used,
+.B arpsnmp
+sends e-mail messages with
+.I username
+as the return address, rather than the default (root).
+.LP
.SH "REPORT MESSAGES"
(See the
.BR arpwatch (1)
diff -ruN ../arpwatch-2.1a15.orig/arpsnmp.c ./arpsnmp.c
--- ../arpwatch-2.1a15.orig/arpsnmp.c 2004-01-22 23:25:17.000000000 +0100
+++ ./arpsnmp.c 2008-11-12 14:26:23.000000000 +0100
@@ -59,6 +59,7 @@
#include "file.h"
#include "machdep.h"
#include "util.h"
+#include "addresses.h"
/* Forwards */
int main(int, char **);
@@ -90,7 +91,7 @@
}
opterr = 0;
- while ((op = getopt(argc, argv, "df:")) != EOF)
+ while ((op = getopt(argc, argv, "df:e:s:")) != EOF)
switch (op) {
case 'd':
@@ -105,6 +106,24 @@
arpfile = optarg;
break;
+ case 'e':
+ if ( optarg ) {
+ watcher = strdup(optarg);
+ } else {
+ (void)fprintf(stderr, "%s: Need recipient username/e-mail address after -e\n", prog);
+ usage();
+ }
+ break;
+
+ case 's':
+ if ( optarg ) {
+ watchee = strdup(optarg);
+ } else {
+ (void)fprintf(stderr, "%s: Need sender username/e-mail address after -s\n", prog);
+ usage();
+ }
+ break;
+
default:
usage();
}
@@ -185,6 +204,6 @@
(void)fprintf(stderr, "Version %s\n", version);
(void)fprintf(stderr,
- "usage: %s [-d] [-f datafile] file [...]\n", prog);
+ "usage: %s [-d] [-f datafile] [-e username] [-s username] file [...]\n", prog);
exit(1);
}
diff -ruN ../arpwatch-2.1a15.orig/arpwatch.8 ./arpwatch.8
--- ../arpwatch-2.1a15.orig/arpwatch.8 2008-11-12 12:19:16.000000000 +0100
+++ ./arpwatch.8 2008-11-12 14:26:23.000000000 +0100
@@ -46,6 +46,12 @@
] [
.B -u
.I username
+] [
+.B -e
+.I username
+] [
+.B -s
+.I username
]
.ad
.SH DESCRIPTION
@@ -107,6 +113,27 @@
.IR username .
This is recommended for security reasons.
.LP
+If the
+.B -e
+flag is used,
+.B arpwatch
+sends e-mail messages to
+.I username
+rather than the default (root).
+If a single `-' character is given for the username,
+sending of e-mail is suppressed,
+but logging via syslog is still done as usual.
+(This can be useful during initial runs, to collect data
+without being flooded with messages about new stations.)
+.LP
+If the
+.B -s
+flag is used,
+.B arpwatch
+sends e-mail messages with
+.I username
+as the return address, rather than the default (root).
+.LP
Note that an empty
.I arp.dat
file must be created before the first time you run
diff -ruN ../arpwatch-2.1a15.orig/arpwatch.c ./arpwatch.c
--- ../arpwatch-2.1a15.orig/arpwatch.c 2008-11-12 14:21:27.000000000 +0100
+++ ./arpwatch.c 2008-11-12 14:26:23.000000000 +0100
@@ -83,6 +83,7 @@
#include "machdep.h"
#include "setsignal.h"
#include "util.h"
+#include "addresses.h"
/* Some systems don't define these */
#ifndef ETHERTYPE_REVARP
@@ -224,7 +225,7 @@
interface = NULL;
rfilename = NULL;
pd = NULL;
- while ((op = getopt(argc, argv, "df:i:n:Nr:u:")) != EOF)
+ while ((op = getopt(argc, argv, "df:i:n:Nr:u:e:s:")) != EOF)
switch (op) {
case 'd':
@@ -266,6 +267,26 @@
}
break;
+ case 'e':
+ if ( optarg ) {
+ watcher = strdup(optarg);
+ }
+ else {
+ fprintf(stderr, "%s: Need recipient username/e-mail address after -e\n", prog);
+ usage();
+ }
+ break;
+
+ case 's':
+ if ( optarg ) {
+ watchee = strdup(optarg);
+ }
+ else {
+ fprintf(stderr, "%s: Need sender username/e-mail address after -s\n", prog);
+ usage();
+ }
+ break;
+
default:
usage();
}
@@ -898,6 +919,7 @@
(void)fprintf(stderr, "Version %s\n", version);
(void)fprintf(stderr, "usage: %s [-dN] [-f datafile] [-i interface]"
- " [-n net[/width]] [-r file] [-u username]\n", prog);
+ " [-n net[/width]] [-r file] [-u username]"
+ " [-e username] [-s username]\n", prog);
exit(1);
}
diff -ruN ../arpwatch-2.1a15.orig/report.c ./report.c
--- ../arpwatch-2.1a15.orig/report.c 2008-11-12 12:15:54.000000000 +0100
+++ ./report.c 2008-11-12 14:26:23.000000000 +0100
@@ -70,6 +70,9 @@
#define PLURAL(n) ((n) == 1 || (n) == -1 ? "" : "s")
+char *watcher = WATCHER;
+char *watchee = WATCHEE;
+
static int cdepth; /* number of outstanding children */
static char *fmtdate(time_t);
@@ -240,8 +243,6 @@
register FILE *f;
char tempfile[64], cpu[64], os[64];
char *fmt = "%20s: %s\n";
- char *watcher = WATCHER;
- char *watchee = WATCHEE;
char *sendmail = PATH_SENDMAIL;
char *unknown = "<unknown>";
char buf[132];
@@ -258,6 +259,9 @@
}
f = stdout;
(void)putc('\n', f);
+ } else if (watcher == NULL || *watcher == NULL || *watcher == '-') {
+ dosyslog(LOG_NOTICE, title, a, e1, e2);
+ return;
} else {
/* Setup child reaper if we haven't already */
if (!init) {
++++++ arpwatch.init ++++++
--- /var/tmp/diff_new_pack.Rw8898/_old 2008-11-17 16:38:05.000000000 +0100
+++ /var/tmp/diff_new_pack.Rw8898/_new 2008-11-17 16:38:05.000000000 +0100
@@ -65,11 +65,24 @@
case "$1" in
start)
+ ARPWATCH_STARTED=0
echo -n "Starting arpwatch"
for interface in $ARPWATCH_INTERFACE; do
- ARPWATCH_ARGS="$ARPWATCH_ARGS -i $interface"
+ if /sbin/ifstatus $interface > /dev/null 2>&1; then
+ DATFILE=/var/lib/arpwatch/arp.dat.$interface
+ if [ ! -f "$DATFILE" ]; then
+ /bin/cp -a /var/lib/arpwatch/arp.dat $DATFILE
+ fi
+ TEMP_ARGS="$ARPWATCH_ARGS -i $interface -f $DATFILE"
+ $ARPWATCH $TEMP_ARGS
+ ARPWATCH_STARTED=$(( $ARPWATCH_STARTED + 1 ))
+ else
+ echo "${attn} interface ${warn}$interface ${attn} is not ready.${norm}"
+ fi
done
- startproc $ARPWATCH $ARPWATCH_ARGS
+ if [ "$ARPWATCH_STARTED" = 0 ]; then
+ startproc $ARPWATCH $ARPWATCH_ARGS
+ fi
rc_status -v
;;
stop)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org