debian/0000775000000000000000000000000012670157515007201 5ustar debian/dh_installoverrides0000664000000000000000000000262512655350005013165 0ustar #!/usr/bin/perl -w # # dh_installoverrides =head 1 NAME dh_installoverrides = install lintian/linda override files =cut use strict; use Debian::Debhelper::Dh_Lib; =head 1 SYNOPSIS B =head1 DESCRIPTION dh_installoverrides is a debhelper program that is responsible for installing lintian and linda overrides into package build directories. If a file named debian/package.lintian exists, it is installed into /usr/share/lintian/overrides/package. If a file named debian/package.linda exists, it is installed into /usr/share/linda/overrides/package. =cut init(); foreach my $package (@{$dh{DOPACKAGES}}) { my $tmp=tmpdir($package); my $file=$package; my $lintian_overrides=pkgfile($package,"lintian"); my $linda_overrides=pkgfile($package,"linda"); if($lintian_overrides ne '') { if(! -d "$tmp/usr/share/lintian/overrides") { doit("install", "-d", "$tmp/usr/share/lintian/overrides"); } doit("install","-p","-m644",$lintian_overrides, "$tmp/usr/share/lintian/overrides/$file"); } if($linda_overrides ne '') { if (! -d "$tmp/usr/share/linda/overrides") { doit("install", "-d", "$tmp/usr/share/linda/overrides"); } doit("install", "-p", "-m644", $linda_overrides, "$tmp/usr/share/linda/overrides/$file"); } } =head1 SEE ALSO L This program is a part of debhelper =head1 AUTHOR Rene Engelhard =cut debian/roundup.init0000775000000000000000000000432512655350005011561 0ustar #!/bin/sh -e # # roundup Startup script for the roundup http server. # # Version: $Id$ # ### BEGIN INIT INFO # Provides: roundup # Required-Start: $syslog $network $remote_fs # Required-Stop: $syslog $network $remote_fs # Should-Start: $local_fs # Should-Stop: $local_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start the stand-alone roundup HTTP server # Description: Start the stand-alone roundup HTTP server ### END INIT INFO DESC='Roundup HTTP-Server' BINFILE=roundup-server EXECUTABLE=/usr/bin/$BINFILE ### to be taken from /etc/roundup/roundup-server.ini: #PIDFILE=/var/run/roundup/server.pid #LOGFILE=/var/log/roundup/roundup.log CONFFILE=/etc/roundup/roundup-server.ini # short circuit this init script in case the user prefers runit: NOINIT=0 if test -f /etc/default/roundup; then . /etc/default/roundup fi USERUNIT=${USERUNIT:=0} if [ ${USERUNIT} -eq 1 ] && [ -d /var/service ]; then # make sure there is a runit link present: if [ ! -e /var/service/roundup ]; then ln -s /etc/roundup/service /var/service/roundup fi NOINIT=1 fi EXTRAOPTS="" if [ X${USER} != X ]; then OPTIONS="-- -u ${USER:=roundup} $EXTRAOPTS -C ${CONFFILE}" else OPTIONS="-- $EXTRAOPTS -C ${CONFFILE}" fi test -x $EXECUTABLE || exit 0 start_stop() { case "$1" in start) printf "Starting $DESC:" install -o root -g root -m 755 -d /var/run/roundup install -o root -g root -m 755 -d /var/run/roundup.log if [ ! -e $PIDFILE ]; then start-stop-daemon --start --oknodo --quiet \ --pidfile $PIDFILE \ --exec $EXECUTABLE $OPTIONS printf " $BINFILE" else echo "$PIDFILE exists - make sure that there is no other roundup" echo "instance running. Bailing out..." exit 1 fi printf ".\n" ;; stop) printf "Stopping $DESC:" start-stop-daemon --stop --oknodo --quiet \ --pidfile $PIDFILE rm -f $PIDFILE printf " $BINFILE" printf ".\n" ;; restart | force-reload) start_stop stop sleep 1 start_stop start ;; *) printf "Usage: $0 {start|stop|restart|force-reload}\n" >&2 exit 1 ;; esac } if [ ${NOINIT} -eq 1 ]; then roundup-ctl "$@" else start_stop "$@" fi exit 0 debian/roundup-server.ini0000664000000000000000000000067412655350005012701 0ustar # Server configuration file, see # /usr/share/doc/roundup/admin_guide.txt.gz for details [main] port = 8088 host = localhost user = roundup # Please don't disable the pid file: pidfile = /var/run/roundup/server.pid logfile = /var/log/roundup/roundup.log [trackers] # examples, install your own here, or otherwise roundup will not start: # tracker1 = /var/lib/roundup/trackers/notracker1 # tracker2 = /var/lib/roundup/trackers/notracker2 debian/roundup.postrm0000664000000000000000000000222412655350005012133 0ustar #!/bin/sh -e U=roundup check_and_delete_user() { if [ `getent passwd $U` ]; then userdel $U >/dev/null 2>&1 fi } check_and_delete_group() { if [ X"`getent group $U`" != X ]; then groupdel $U >/dev/null 2>&1 || true fi } case "$1" in purge) rm -f /etc/init.d/roundup /etc/init.d/roundup-dirs update-rc.d roundup remove >/dev/null update-rc.d roundup-dirs remove > /dev/null # handle a dpkg bug [ -d /etc/roundup ] && rmdir --ignore-fail-on-non-empty /etc/roundup >/dev/null 2>&1 [ -d /var/lib/roundup/trackers ] && rmdir --ignore-fail-on-non-empty /var/lib/roundup/trackers >/dev/null 2>&1 [ -d /var/lib/roundup ] && rmdir --ignore-fail-on-non-empty /var/lib/roundup >/dev/null 2>&1 rm -f /var/service/roundup > /dev/null 2>&1 rm -fr /etc/roundup/service > /dev/null 2>&1 rm -fr /var/run/roundup > /dev/null 2>&1 check_and_delete_user check_and_delete_group ;; remove|abort-install|disappear) # do nothing ;; upgrade) # do nothing ;; failed-upgrade) # do nothing ;; abort-upgrade) # do nothing ;; *) echo "$0: incorrect arguments: $*" >&2 exit 1 ;; esac debian/roundup.manpages0000664000000000000000000000011512655350005012377 0ustar debian/roundup-ctl.1 debian/roundup-gettext.1 debian/roundup-xmlrpc-server.1 debian/roundup.logrotate0000664000000000000000000000023612655350005012610 0ustar # Logrotate file for roundup /var/log/roundup/*.log { compress delaycompress weekly missingok rotate 5 notifempty } debian/README.source0000664000000000000000000000003612655350005011347 0ustar This package is using quilt. debian/NEWS.Debian0000664000000000000000000000206112655350005011050 0ustar roundup (1.4.11-1) unstable; urgency=high This version plugs a security hole wrt. to privilege escalation for registered users who can gain admin rights with earlier versions. If you operate a tracker, please be sure to amend your schema.py according to either of these commits, depending on your local settings: http://svn.roundup-tracker.org/viewvc/roundup/roundup/trunk/share/roundup/templates/classic/schema.py?r1=4239&r2=4412 http://svn.roundup-tracker.org/viewvc/roundup/roundup/trunk/share/roundup/templates/minimal/schema.py?r1=4239&r2=4412 Otherwise, you're still susceptible to the security bug. -- Toni Mueller Mon, 21 Dec 2009 19:32:50 +0100 roundup (1.4.2-1) unstable; urgency=low This version of roundup breaks your existing setup if you used the metakit backend. Therefore, you'll need to switch to a different backend before installing this package, otherwise your tracker data will become inaccessible. -- Toni Mueller Fri, 15 Feb 2008 23:52:50 +0100 debian/watch0000664000000000000000000000022012655350005010214 0ustar # watch control file for uscan version=3 http://cheeseshop.python.org/packages/source/r/roundup/ roundup-([\d+\.]+|\d+).tar.gz.* debian uupdate debian/roundup-xmlrpc-server.10000664000000000000000000000114612655350005013560 0ustar .TH ROUNDUP-CTL 1 "31 May 2004" .SH NAME roundup-xmlrpc-server \- roundup XML-RPC server .SH SYNOPSIS \fBroundup-xmlrpc-server\fP [\fIoptions\fP] .SH DESCRIPTION \fBroundup-xmlrpc-server\fP is another roundup server, talking XML-RPC instead of HTML. .SH OPTIONS .TP \-i \fIdirectory\fP Use the given directory as the tracker's home. .TP \-p \fIport\fP Use the given port number to listen on. .TP \-V Be verbose while importing. .SH "SEE ALSO" roundup-server(1) runsvctrl(8) runsvstat(8) svwaitdown(8) .SH AUTHOR The program was written by Stefan Seefeld. The man page was written by Toni Mueller debian/roundup_apache0000664000000000000000000000240512655350005012112 0ustar ################################################# # Roundup Issue tracker ################################################# # enable Python optimizations (like 'python -O') PythonOptimize On # let apache handle static files from 'html' directories AliasMatch ^/roundup/([^/]+)/@@file/(.*) /var/lib/roundup/trackers/$1/html/$2 # everything else is handled by roundup web UI AliasMatch ^/roundup/([^/]+)/(?!@@file/)(.*) /var/lib/roundup/trackers/$1/dummy.py/$2 # roundup requires a slash after tracker name - add it if missing RedirectMatch permanent ^/roundup/([^/]+)$ /roundup/$1/ # common settings for all roundup trackers Order allow,deny Allow from all AllowOverride None Options None AddHandler python-program .py PythonHandler roundup.cgi.apache # uncomment the following line to see tracebacks in the browser # (note that *some* tracebacks will be displayed anyway) #PythonDebug On # roundup tracker homes PythonOption TrackerHome /var/lib/roundup/trackers/support PythonOption TrackerLanguage en debian/service/0000775000000000000000000000000012655350005010631 5ustar debian/service/log/0000775000000000000000000000000012655350005011412 5ustar debian/service/log/run0000664000000000000000000000005412655350005012140 0ustar #!/bin/sh exec svlogd -t /var/log/roundup debian/service/run0000664000000000000000000000201412655350005011355 0ustar #!/bin/sh exec 2>&1 # Note that `notracker1` and 'notracker2' are just examples. Change # them to the installed tracker name(s). See roundup-server(1) for # more info if [ -f /etc/default/roundup ]; then . /etc/default/roundup fi # Take these values from /etc/default/roundup: # PORT, USER, TRACKERS, but override them all in case of having a CONFFILE # # TRACKERS must be set to a list of trackers in one string. Example: # TRACKERS=${TRACKERS:=notracker1=/var/lib/roundup/notracker1 notracker2=/var/lib/roundup/notracker2} # # If you can, use the server config file instead (except for the USER variable) CONFFILE=/etc/roundup/roundup-server.ini OPTS="-D" if [ X${PORT} != X ]; then OPTS="${OPTS} -p ${PORT}" fi if [ -f ${CONFFILE} ]; then OPTS="${OPTS} -C ${CONFFILE}" fi if [ X${USER} != X ]; then chown -R ${USER} /var/lib/roundup/trackers chown -R ${USER} /var/run/roundup chown -R ${USER} /var/log/roundup UOPT="chpst -u ${USER}" fi echo "starting roundup server" exec $UOPT roundup-server ${OPTS} ${TRACKERS} debian/roundup.links0000664000000000000000000000036012655350005011726 0ustar /var/run/roundup /etc/roundup/service/supervise /var/run/roundup.log /etc/roundup/service/log/supervise /var/log/roundup /etc/roundup/service/log/main /usr/share/javascript/jquery/jquery.js /usr/share/roundup/templates/devel/html/jquery.js debian/roundup.postinst0000664000000000000000000000177412655350005012503 0ustar #!/bin/sh set -e if [ -d /var/service ]; then if [ -e /etc/default/roundup ]; then . /etc/default/roundup fi if [ $USERUNIT -eq 0 ]; then touch /etc/roundup/service/down fi x=`dpkg-query -W -f '${Status}' runit 2>/dev/null` || true if [ "X$x" != X ]; then # runit is installed, now check the version: y=`dpkg-query -W -f '${Version}' runit` dpkg --compare-versions "$y" ge '1.8.0-2' if [ $? -eq 1 ]; then # have an old version of 'runit': if [ ! -e /var/service/roundup ]; then ln -s /etc/roundup/service /var/service/roundup fi else update-service --add /etc/roundup/service roundup fi fi fi if [ -x "/etc/init.d/roundup" ]; then update-rc.d roundup defaults >/dev/null update-rc.d roundup-dirs defaults 19 99 > /dev/null if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then invoke-rc.d roundup-dirs restart || exit $? invoke-rc.d roundup restart || exit $? else /etc/init.d/roundup-dirs restart || exit $? /etc/init.d/roundup restart || exit $? fi fi debian/compat0000664000000000000000000000000212655350005010367 0ustar 7 debian/roundup.dirs0000664000000000000000000000011312655350005011543 0ustar var/lib/roundup/trackers var/log/roundup etc/roundup usr/share/doc/roundup debian/rules0000775000000000000000000000140512655350005010251 0ustar #!/usr/bin/make -f # Uncomment this to turn on verbose mode. export DH_VERBOSE=1 export DH_OPTIONS=-v PACKAGE=roundup UPSTREAM_VERSION=1.4.20 DEB_SRCDIR=$(CURDIR) ROOT=$(DEB_SRCDIR)/debian/$(PACKAGE) DEB_BUILDDIR=debian/$(PACKAGE) DOC=$(DEB_SRCDIR)/debian/$(PACKAGE)/usr/share/doc/$(PACKAGE) %: dh --with python2 $@ # The runit files have executables: override_dh_install: dh_install chmod -R 0755 $(ROOT)/etc/roundup/service # We have 2 initscripts instead of one override_dh_installinit: dh_installinit # dh_installinit doesn't support renaming; use install: install -m 755 -o root -g bin debian/roundup-dirs.init $(ROOT)/etc/init.d/roundup-dirs # somehow dh --builddirectory doesn't work for the builddir itself. override_dh_clean: dh_clean rm -rf build debian/changelog0000664000000000000000000006060412670157515011061 0ustar roundup (1.4.20-1.1+deb8u1build0.14.04.1) trusty-security; urgency=medium * fake sync from Debian -- Seth Arnold Wed, 09 Mar 2016 18:43:25 -0800 roundup (1.4.20-1.1+deb8u1) jessie-security; urgency=high * Non-maintainer upload by the Security Team. * CVE-2014-6276: Disclosure of user hashed passwords -- Salvatore Bonaccorso Sat, 06 Feb 2016 11:46:39 +0100 roundup (1.4.20-1.1) unstable; urgency=low * Non-maintainer upload. * Remove conffiles only on purge. Fix "deletes conffiles during postrm remove (policy 10.7.3)" as roundup removed /etc/init.d/roundup, /etc/init.d/roundup-dirs and init script links also on remove, abort-install and disappear calls to postrm. (Closes: #689257) -- Salvatore Bonaccorso Wed, 10 Oct 2012 16:07:43 +0200 roundup (1.4.20-1) unstable; urgency=low * New upstream release. * New Maintainer: Kai Storbeck * Incorporated previous NMU by Gregor Herrmann and Daniel T Chen * patch history-user-escape: dropped - applied upstream (fixed in 1.4.20, issue2550684) * patch fix-email-representation: dropped - applied upstream (fixed in 1.4.19, issue2550691) (1.4.18-1 stated to fix issue2550540, but meant issue2550691) * patch debian-changes-1.4.18-1: dropped - correct a packaging mistake * patch 12_manpage_hyphen_minus.patch: created - correct a lintian warning about upstream manpages * patch 00_licensefiles: created - to correct a lintian warning about upstream license files * fix debian native manpages for the same lintian warnings * Upped standards-version to 2.9.3 * CDBS dropped in favour of debhelper and dh_python2 * Supply a symlink to libjs-jquery's jquery.js -- Kai Storbeck Thu, 14 Jun 2012 22:09:29 +0200 roundup (1.4.18-1.1) unstable; urgency=low [ gregor herrmann ] * Non-maintainer upload. [ Daniel T Chen ] * debian/roundup.postrm: Remove obsolete --quiet option passed to userdel and groupdel. (Closes: #640588) -- gregor herrmann Wed, 09 Nov 2011 19:36:27 +0100 roundup (1.4.18-1) unstable; urgency=medium * new upstream 1.4.18 (closes: #605882) * closes several security holes * replaced deluser and delgroup by userdel and groupdel, thanks to Holger Levsen (closes: #616637). * added debian/pyversions, but a little stricter than upstream * unified included jQuery libraries to be 1.4.2, but ignore the existing Debian package for the moment. * Fixes for upstream issues 2550540 and 2550684 -- Toni Mueller Tue, 14 Jun 2011 15:20:29 +0200 roundup (1.4.15-3) unstable; urgency=low * Fix typo (closes upstream issue 2550665) The typo prevents users from registering. -- Toni Mueller Tue, 17 Aug 2010 21:41:10 +0200 roundup (1.4.15-2) unstable; urgency=medium * fixing programming errors, upstream issue 2550661 * correcting packaging error which omitted several conffiles -- Toni Mueller Sun, 08 Aug 2010 17:52:11 +0200 roundup (1.4.15-1) unstable; urgency=low * New upstream * Switch to dpkg-source 3.0 (quilt) format * Appropriated patches which predate my maintainership of this package (sorry, I'm still fighting with the tools). Please send corrections my way. -- Toni Mueller Sat, 07 Aug 2010 16:47:00 +0200 roundup (1.4.13-3.1) unstable; urgency=medium * Non-maintainer upload. * Fix CVE-2010-2491 (Closes: #590769) -- Moritz Muehlenhoff Thu, 29 Jul 2010 21:52:01 -0400 roundup (1.4.13-3) unstable; urgency=low * adapt to new Xapian API, thanks to Olly Betts (closes: #579927) -- Toni Mueller Sun, 02 May 2010 17:36:05 +0200 roundup (1.4.13-2) unstable; urgency=low * unbreak upgrades * remove reference to Sqlite2 (closes: #577184) * adapt the README.Debian to the current state of affairs (closes: #577186) -- Toni Mueller Sat, 24 Apr 2010 22:54:28 +0200 roundup (1.4.13-1) unstable; urgency=low * new upstream -- Toni Mueller Sun, 04 Apr 2010 01:45:05 +0200 roundup (1.4.11-2) unstable; urgency=low * remove additional init.d script on uninstall -- Toni Mueller Fri, 15 Jan 2010 18:01:10 +0100 roundup (1.4.11-1) unstable; urgency=high * new upstream * fixes a security hole * amended README.Debian (closes: #284394) -- Toni Mueller Thu, 24 Dec 2009 15:27:20 +0100 roundup (1.4.10-2) unstable; urgency=low * fixed a typo -- Toni Mueller Wed, 02 Dec 2009 18:42:53 +0100 roundup (1.4.10-1) unstable; urgency=low * New upstream -- Toni Mueller Tue, 01 Dec 2009 10:31:23 +0100 roundup (1.4.9-0) unstable; urgency=high * New upstream, fixes several functional and security problems. For the full list of changes, including security fixes, most of which don't have a CVE number attached, please see upstream's CHANGES.txt file. Closes: #529832, #523516, #540629 * Added the old 'detectors' examples from earlier roundup versions (upstream issue #2550574) back in. -- Toni Mueller Mon, 10 Aug 2009 10:09:11 +0200 roundup (1.4.4-3) unstable; urgency=medium * fixing compatibility with PostgreSQL 8.3 (closes: #510342) * man page structural typo (closes: #509969) * fix roundup-demo argument parsing (closes: #509973) * create temporary directory (pidfile etc) (closes: #506004) -- Toni Mueller Mon, 19 Jan 2009 01:03:47 +0100 roundup (1.4.4-2) unstable; urgency=low * corrected a packaging error -> non-native package * updated to new standards version 3.8.0 * now suggests python-openssl * closing obsolete bugs (Closes: #450690) * closing obsolete bugs (Closes: #450690) * closing obsolete bugs (Closes: #450690) -- Toni Mueller Sun, 20 Jul 2008 19:24:51 +0200 roundup (1.4.4-1.1) unstable; urgency=high * Non-maintainer upload by the Security Team. * Fix privilege escalation leading to attackers being able to edit or view restricted properties via the "list", "display" and "set methods (10-CVE-2008-1475.dpatch; Closes: #484728). -- Nico Golde Sat, 07 Jun 2008 10:02:05 +0200 roundup (1.4.4-1) unstable; urgency=medium * new upstream * fixes security problem CVE-2008-1474 (Closes: #472643) * reworked postinst to conditionally use update-service (Closes: #466381) -- Toni Mueller Tue, 01 Apr 2008 15:49:45 +0200 roundup (1.4.1-1) unstable; urgency=low * new upstream (closes: #450690) * added more suggested packages (closes: #434957) * suppress bogus error message (closes: #434945) -- Toni Mueller Wed, 2 Jan 2008 22:42:57 +0100 roundup (1.3.3-3) unstable; urgency=low * fixed uid bug again (the fix in 1.3.3-2 was non-functional) * transion experimental -> unstable * checked included scripts (closes: #426484) -- Toni Mueller Wed, 23 May 2007 15:21:28 +0200 roundup (1.3.3-2) experimental; urgency=low * removed obsolete Python versioning declaration * pulled in fix for #414973 which was also present in this version * re-packaged source (closes: #414951) -- Toni Mueller Sun, 18 Mar 2007 18:07:39 +0100 roundup (1.3.3-1) experimental; urgency=low * new upstream (closes: #402711) -- Toni Mueller Sun, 4 Mar 2007 00:55:33 +0100 roundup (1.2.1-9) unstable; urgency=low * make packaging scripts more tolerant (closes: #414973) -- Toni Mueller Sun, 4 Mar 2007 23:06:50 +0100 roundup (1.2.1-8) unstable; urgency=low * fixed build dependencies -- Toni Mueller Sun, 4 Mar 2007 00:52:46 +0100 roundup (1.2.1-7) unstable; urgency=medium * fixed a serious packaging error -- Toni Mueller Sat, 3 Mar 2007 14:34:45 +0100 roundup (1.2.1-6) unstable; urgency=low * added user creation/deletion (closes: #406662) * init script reworked (closes: #402826) -- Toni Mueller Sat, 3 Mar 2007 12:17:08 +0100 roundup (1.2.1-5) unstable; urgency=medium * fixed configuration and service files (closes: #398226) * fixed missing tracker dirs * extract parts of the tracker config to /etc/default/roundup (idea by Izak Burger, thank you!) * adapted roundup.lintian to the new Python policy * added back missing man pages * updated roundp-ctl to reflect recent changes in runit * unified runit and init.d scripts wrt. configuration and logging * unified ports between init.d script and service run script (but the runit version is still not operable, thanks to roundup-server forking) * changed log file location * correct apache config example (closes: #400679) * added an option -D to prevent forking, currently mostly untested * corrected some packaging errors -- Toni Mueller Tue, 28 Nov 2006 15:25:31 +0100 roundup (1.2.1-4) unstable; urgency=low * install man pages in the correct locations (Closes: #392310) -- Toni Mueller Wed, 11 Oct 2006 13:19:16 +0200 roundup (1.2.1-3) unstable; urgency=low * fixed dependencies: no python2.2 anymore (Closes: #392075) -- Toni Mueller Tue, 10 Oct 2006 15:07:23 +0200 roundup (1.2.1-2) unstable; urgency=low * fixed overwriting doc/index.html -- Toni Mueller Sun, 8 Oct 2006 22:21:34 +0200 roundup (1.2.1-1) unstable; urgency=low * new upstream -- Toni Mueller Sat, 7 Oct 2006 19:04:25 +0200 roundup (1.1.2-5) unstable; urgency=low * removed cruft -- Toni Mueller Mon, 14 Aug 2006 22:16:39 +0200 roundup (1.1.2-4) unstable; urgency=low * Closes: #379997 * Closes: #375840 -- Toni Mueller Sun, 13 Aug 2006 12:04:24 +0200 roundup (1.1.2-3) unstable; urgency=low * switched to cdbs * support new Python policy using python-central -- Toni Mueller Sat, 15 Jul 2006 14:47:49 +0200 roundup (1.1.2-2) unstable; urgency=low * modified debian/rules (closes: #375840) -- Toni Mueller Sat, 15 Jul 2006 14:46:33 +0200 roundup (1.1.2-1) unstable; urgency=low * new upstream * updated to cgi-lib according to policy * removed illegal 'local' part from start script (Closes: #365054) * don't start if no trackers are defined * actually do add index.html to doc directory * updated to standards version 3.7.2 -- Toni Mueller Mon, 22 May 2006 23:57:32 +0200 roundup (1.1.1-0) unstable; urgency=low * new upstream * new download area: SF -> Python Cheeseshop -- Toni Mueller Sat, 4 Mar 2006 22:45:11 +0100 roundup (1.1.0-1) unstable; urgency=low * new upstream -- Toni Mueller Sun, 12 Feb 2006 20:13:00 +0100 roundup (0.8.4-6) unstable; urgency=low * corrected packaging error -- Toni Mueller Mon, 9 Jan 2006 22:05:33 +0100 roundup (0.8.4-5) unstable; urgency=low * Exim4 specific installation tips (Closes: #343283) * config.py -> config.ini (Closes: #345600) -- Toni Mueller Mon, 9 Jan 2006 13:04:41 +0100 roundup (0.8.4-3) unstable; urgency=low * clarified installation instructions * user error ignored (Closes: #324389) * New Maintainer (Closes: #324557) -- Toni Mueller Thu, 22 Dec 2005 23:06:55 +0100 roundup (0.8.4-2) unstable; urgency=low * Orphaning the package (see #324557) * Use new watch file format and qa.debian SF redirector -- Bastian Kleineidam Mon, 29 Aug 2005 11:44:29 +0200 roundup (0.8.4-1) unstable; urgency=low * New upstream release. -- Bastian Kleineidam Mon, 18 Jul 2005 10:06:39 +0200 roundup (0.8.3-2) unstable; urgency=low * Fixed german translation, thanks to Jens Seidel for the patch. (Closes: #313700) * bump up standards version to 3.6.2.1 -- Bastian Kleineidam Tue, 5 Jul 2005 22:26:33 +0200 roundup (0.8.3-1) unstable; urgency=low * New upstream release. * Remove references to old init.d directory in roundup-ctl. * Install upstream roundup.cgi file with the configuration split off into /etc/roundup/cgiconf.py -- Bastian Kleineidam Mon, 2 May 2005 11:32:34 +0200 roundup (0.8.2-1) unstable; urgency=low * New upstream release. * Upload to unstable (enough bugs fixed in this release). * Added mod_python installation doc in README.Debian -- Bastian Kleineidam Wed, 16 Feb 2005 10:58:01 +0100 roundup (0.7.11+0.8.0b2-1) experimental; urgency=low * New upstream release. -- Bastian Kleineidam Wed, 9 Feb 2005 15:07:00 +0100 roundup (0.7.11-3) unstable; urgency=low * Add detector examples (Closes: #294333) -- Bastian Kleineidam Wed, 9 Feb 2005 14:03:03 +0100 roundup (0.7.11-2) unstable; urgency=low * Updated metakit package name -- Bastian Kleineidam Tue, 1 Feb 2005 18:04:59 +0100 roundup (0.7.11-1) unstable; urgency=medium * New upstream release. Upstream says that this should be the last 0.7.x release, so pushing this into sarge is not a bad idea. Urgency medium. * patch 07_send_file_fix: dropped - applied upstream -- Bastian Kleineidam Fri, 7 Jan 2005 16:42:21 +0100 roundup (0.7.10-1) unstable; urgency=low * New upstream release. - the orig.tar.gz is repacked without the superfluous CVS file roundup/backends/.#rdbms_common.py.1.98.2.29 * patch 06_roundup_typo: dropped - applied upstream * patch 07_send_file_fix: new - catch NotModified exception when try to send files Thanks to Alexander Goldstein for the patch. (Closes: #286727) * patch 08_update_manpages: new - updated man pages for roundup-* commands -- Bastian Kleineidam Tue, 4 Jan 2005 11:30:05 +0100 roundup (0.7.9-4) unstable; urgency=low * README.Debian: added paragraph about long running Python processes, and moved backend paragraph into a separate list item. -- Bastian Kleineidam Mon, 6 Dec 2004 14:58:43 +0100 roundup (0.7.9-3) unstable; urgency=low * Typo-fix from Ben Finney (Closes: #283770) -- Bastian Kleineidam Wed, 1 Dec 2004 11:05:18 +0100 roundup (0.7.9-2) unstable; urgency=low * Added patches from Bernhard Reiter to fix some typos and documentation issues. Thanks! (Closes: #283315) -- Bastian Kleineidam Mon, 29 Nov 2004 01:42:56 +0100 roundup (0.7.9-1) unstable; urgency=low * New upstream release. * Updated man pages. -- Bastian Kleineidam Fri, 26 Nov 2004 11:14:50 +0100 roundup (0.7.8-1) unstable; urgency=low * New upstream release. -- Bastian Kleineidam Fri, 15 Oct 2004 01:28:57 +0200 roundup (0.7.7-1) unstable; urgency=low * New upstream release. -- Bastian Kleineidam Wed, 13 Oct 2004 10:15:13 +0200 roundup (0.7.6-2) unstable; urgency=low * fix debian/watch url -- Bastian Kleineidam Wed, 28 Jul 2004 16:18:59 +0200 roundup (0.7.6-1) unstable; urgency=low * New upstream release. * Remove duplicate upstream changelog CHANGES.txt.gz, leave only changelog.gz -- Bastian Kleineidam Wed, 21 Jul 2004 10:18:08 +0200 roundup (0.7.5-1) unstable; urgency=low * New upstream release. -- Bastian Kleineidam Thu, 24 Jun 2004 14:52:19 +0200 roundup (0.7.4-1) unstable; urgency=low * New upstream release. * remove patch 06_int_date_seconds applied upstream -- Bastian Kleineidam Thu, 10 Jun 2004 10:01:01 +0200 roundup (0.7.3-4) unstable; urgency=low * added upgrading documentation to debian/NEWS (Closes: #252629) * new patch 06_int_date_seconds to convert seconds from float to int before calling strftime(), thanks Brian McGroarty for noticing (Closes: #252839) -- Bastian Kleineidam Mon, 7 Jun 2004 21:38:24 +0200 roundup (0.7.3-3) unstable; urgency=low * added more example scripts (Closes: #251849), thanks Bernhard Reiter * add documentation how to setup a standalone web gateway with roundup-server and the runit package (Closes: #246533) * add runit to the suggested packages, and add all scripts and directories to run as a runit daemon including a new roundup-ctl control script -- Bastian Kleineidam Mon, 31 May 2004 18:58:18 +0200 roundup (0.7.3-2) unstable; urgency=low * fix paths of documentation files in README.Debian; thanks Marius Gedminas for spotting it (Closes: #251457) -- Bastian Kleineidam Fri, 28 May 2004 19:21:58 +0200 roundup (0.7.3-1) unstable; urgency=low * New upstream release. -- Bastian Kleineidam Fri, 28 May 2004 09:14:54 +0200 roundup (0.7.2-2) unstable; urgency=low * add lintian warnings override -- Bastian Kleineidam Sat, 22 May 2004 15:25:39 +0200 roundup (0.7.2-1) unstable; urgency=low * New upstream release. -- Bastian Kleineidam Fri, 21 May 2004 09:56:26 +0200 roundup (0.7.1-1) unstable; urgency=low * New upstream release. + removed 06_fix_manifest applied upstream + removed 07_fix_tracker_home applied upstream + removed 08_rfc822_crlf applied upstream -- Bastian Kleineidam Mon, 10 May 2004 09:58:31 +0200 roundup (0.7.0-1) unstable; urgency=low * New upstream release (Closes: #247664) * added 06_fix_manifest to remove stray .orig from source file list * added 07_fix_tracker_home to fix a var reference self.tracker_home * added 08_rfc822_crlf to define missing CRLF in included rfc822.py * adjusted and improved tracker install docs in README.Debian * Put all supported database interfaces into suggest list, add a note into the package description about those suggestions * added debian/roundup.doc-base for HTML documentation -- Bastian Kleineidam Thu, 6 May 2004 15:20:05 +0200 roundup (0.6.9-1) unstable; urgency=low * New upstream release. -- Bastian Kleineidam Sun, 18 Apr 2004 22:04:52 +0200 roundup (0.6.8-1) unstable; urgency=low * New upstream release. -- Bastian Kleineidam Thu, 1 Apr 2004 08:51:19 +0200 roundup (0.6.7-1) unstable; urgency=low * New upstream release. - displays more user-friendly error messages on false input data (Closes: #228287) -- Bastian Kleineidam Mon, 1 Mar 2004 09:34:30 +0100 roundup (0.6.6-1) unstable; urgency=low * New upstream release. -- Bastian Kleineidam Wed, 25 Feb 2004 01:15:37 +0100 roundup (0.6.5-1) unstable; urgency=low * New upstream release. -- Bastian Kleineidam Tue, 17 Feb 2004 20:47:22 +0100 roundup (0.6.4-2) unstable; urgency=low * suggest python database modules gdbm and sqlite -- Bastian Kleineidam Mon, 19 Jan 2004 14:48:38 +0100 roundup (0.6.4-1) unstable; urgency=low * New upstream release. - fixes dates showing "tomorrow" instead of "yesterday" (see also SF bug 853345) (Closes: #222857) -- Bastian Kleineidam Tue, 16 Dec 2003 22:27:52 +0100 roundup (0.6.3.1-1) unstable; urgency=low * New upstream release (CHANGES.txt claims to be version 0.6.4, but orig.tar.gz says it's 0.6.3.1) * removed 07_close_imp_filehandle applied upstream * removed 08_no_anonymous_edit applied upstream -- Bastian Kleineidam Fri, 14 Nov 2003 11:03:10 +0100 roundup (0.6.2-3) unstable; urgency=high * New patch (see SF bug #828901): - 08_no_anonymous_edit Do not allow the anonymous user to edit the username. Security consequences, thus urgency high (Closes: #217234) Thanks Thomas Arendsen Hein for the patch. -- Bastian Kleineidam Fri, 24 Oct 2003 16:18:04 +0200 roundup (0.6.2-2) unstable; urgency=low * Added the Zope frontend ZRoundup to examples, and refer to its installation docs in README.Debian (Closes: #214472) * added debian/watch file for uscan -- Bastian Kleineidam Tue, 7 Oct 2003 20:33:58 +0200 roundup (0.6.2-1) unstable; urgency=low * New upstream release. * removed patches applied upstream: - 06_roundup_server_homes - 08_fix_imp_path * updated patches: - 01_separate_config - 07_close_imp_filehandle -- Bastian Kleineidam Mon, 29 Sep 2003 10:51:12 +0200 roundup (0.6.1-2) unstable; urgency=low * patch 05_roundup_server_umask: set umask to 0077, not 0 * patch 06_roundup_server_homes: delete the example tracker home * patch 07_close_imp_filehandle: close filehandle after import module file * patch 08_fix_imp_path: set absolute path for importing, else the compiled .pyo file ends up in the current directory -- Bastian Kleineidam Thu, 4 Sep 2003 19:41:34 +0200 roundup (0.6.1-1) unstable; urgency=low * New upstream version. - web forms do not bail out on first invalid value (Closes: #193843) - for upgrading your roundup data from old versions (<< 0.6.0), see /usr/share/doc/roundup/upgrading.html * remove 02_multilink_sort included upstream * remove 03_python23_warning included upstream * removed debian/*.1 man pages, they are included upstream now, added 04_fix_man_path to put them in the correct place -- Bastian Kleineidam Tue, 26 Aug 2003 20:16:16 +0200 roundup (0.5.9-3) unstable; urgency=low * do not clobber the python path in roundup.cgi (Closes: #205620) urgency still low, as -2 is not in testing -- Bastian Kleineidam Fri, 15 Aug 2003 22:19:03 +0200 roundup (0.5.9-2) unstable; urgency=low * use and require Python 2.3 * call dh_python * new patch 02_python23_warning: fix FutureWarning with hex constant -- Bastian Kleineidam Mon, 11 Aug 2003 16:41:52 +0200 roundup (0.5.9-1) unstable; urgency=low * New upstream release. * Standards version 3.6.0, no changes needed -- Bastian Kleineidam Sun, 20 Jul 2003 00:23:49 +0200 roundup (0.5.8-3) unstable; urgency=low * do not compress roundup.cgi example * Suggest a local web server for a user-installation web gateway. Make a note that usage of roundup.cgi for user-installations needs write access for the www-data user in the tracker home (Closes: #199132) -- Bastian Kleineidam Tue, 1 Jul 2003 20:15:54 +0200 roundup (0.5.8-2) unstable; urgency=low * new patch 02_mulitlink_sort: sort multilinks with same size by content, backported from CVS HEAD (Closes: #198426) Thanks to Brian McGroarty for pointing this out. -- Bastian Kleineidam Tue, 24 Jun 2003 23:15:36 +0200 roundup (0.5.8-1) unstable; urgency=high * New upstream release. This is the fixed upstream tarball from http://osdn.dl.sourceforge.net/roundup/roundup-0.5.8-2.tar.gz * Urgency high as this fixes a cross-site-scripting security issue * use dpatch for applied patches 01_separate_config - put cgi config into separate file in /etc -- Bastian Kleineidam Thu, 19 Jun 2003 15:40:29 +0200 roundup (0.5.7debian-3) unstable; urgency=low * Standards version 3.5.10 (no changes) * Add python2.2-csv dependency (Closes: #196010) -- Bastian Kleineidam Wed, 4 Jun 2003 13:20:39 +0200 roundup (0.5.7debian-2) unstable; urgency=low * add missingok to logrotate config (Closes: #194838) -- Bastian Kleineidam Tue, 27 May 2003 12:29:51 +0200 roundup (0.5.7debian-1) unstable; urgency=low * set execute permissions on roundup.cgi (Closes: #193892) * split out roundup.cgi conf in /etc/roundup/cgiconf.py, adjust documentation for this (Closes: #193891) * oops, it was a native package. Adjusting the version. -- Bastian Kleineidam Mon, 19 May 2003 22:28:02 +0200 roundup (0.5.7-1) unstable; urgency=low * New upstream release. * add "but may be used by others" to man pages, it looks nicer :) * the DFSG-free copyright is now upstream, remove extra note from debian/copyright -- Bastian Kleineidam Sun, 11 May 2003 12:06:21 +0200 roundup (0.5.6-1) unstable; urgency=low * Initial Release (Closes: #68709). * The copyright is taken from CVS to make it DFSG free -- Bastian Kleineidam Thu, 16 Jan 2003 19:39:45 +0100 debian/roundup-ctl0000664000000000000000000000076712655350005011402 0ustar #!/bin/sh -e PATH=/sbin:/bin:/usr/sbin:/usr/bin NAME=roundup DESC="roundup server" if [ "x$1" = "x-d" ]; then shift SERVICE="$1" shift else SERVICE=/var/service/$NAME fi if [ -d "$SERVICE" ]; then case "$1" in start|stop|reload|force-reload|restart|status) sv -v "$1" ${NAME} ;; *) echo "Usage: roundup-ctl {start|stop|restart|reload|force-reload|status}" >&2 exit 3 ;; esac else echo "roundup-ctl: $SERVICE is not a directory" exit 1 fi exit 0 debian/roundup-dirs.init0000775000000000000000000000171712655350005012522 0ustar #!/bin/sh -e # # roundup-dirs Create runit dirs for the roundup http server. # # Version: $Id$ # ### BEGIN INIT INFO # Provides: roundup-dirs # Required-Start: $local_fs $remote_fs # Required-Stop: $remote_fs # Should-Start: # Should-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Create 'runit' dirs for the roundup HTTP server # Description: Start the stand-alone roundup HTTP server ### END INIT INFO DESC='Runit dirs for the Roundup HTTP-Server' BINFILE=roundup-server EXECUTABLE=/usr/bin/$BINFILE RUNIT=/usr/bin/runsv test -x $EXECUTABLE && test -x $RUNIT || exit 0 start_stop() { case "$1" in start) printf "$DESC:" install -o root -g root -m 755 -d /var/run/roundup install -o root -g root -m 755 -d /var/run/roundup.log ;; stop) ;; restart|force-reload) start_stop stop sleep 1 start_stop start ;; *) printf "Usage: $0 {start|stop|restart}\n" >&2 exit 1 ;; esac } exit 0 debian/roundup.examples0000664000000000000000000000005212655350005012422 0ustar scripts/ detectors/ debian/roundup_apache debian/roundup-ctl.10000664000000000000000000000242012655350005011525 0ustar .TH ROUNDUP-CTL 1 "31 May 2004" .SH NAME roundup-ctl \- roundup server control interface .SH SYNOPSIS \fBroundup-ctl\fP [\fIoptions\fP] \fIcommand\fP .SH DESCRIPTION \fBroundup-ctl\fP is a front end to the roundup server. It is designed to help the administrator control the functioning of the roundup server daemon. This script mimics most of the behaviour of a regular init script, but works as a front end to the runit package to control the roundup service. So, in order to use this, you need the runit package, too. Please note that using this script is mostly incompatible with having roundup controlled by runit directly in the form of automatic startup. The roundup-ctl script returns a 0 exit value on success, and >0 if an error occurs. For more details, view the comments in the script. .SH OPTIONS .TP \-d \fIdirectory\fP Use given directory as service directory. .SH COMMANDS The \fIcommand\fP can be any one or more of the following options: .TP \fBstart\fP If the roundup server is not runinng, start it. If the server stops, restart it. \fBstop\fP Stops the roundup server. \fBstatus\fP Print status of the roundup server. .SH "SEE ALSO" roundup-server(1) runsvctrl(8) runsvstat(8) svwaitdown(8) .SH AUTHOR Bastian Kleineidam , Toni Mueller debian/source/0000775000000000000000000000000012655350005010471 5ustar debian/source/format0000664000000000000000000000001412655350005011677 0ustar 3.0 (quilt) debian/source/lintian-overrides0000664000000000000000000000050012655350005014045 0ustar # This is intentional. Our postinst and postrm scripts manage both # /etc/init.d/roundup and /etc/init.d/roundup-dirs. No need for debhelper to # be too helpful. roundup source: maintainer-script-lacks-debhelper-token debian/roundup.postinst roundup source: maintainer-script-lacks-debhelper-token debian/roundup.postrm debian/README.Debian0000664000000000000000000002102712655350005011234 0ustar ================== roundup for Debian ================== For upgrading your roundup data and templates from older roundup versions, see /usr/share/doc/roundup/doc/upgrading.txt.gz. The following documentation is adjusted to the Debian roundup directory layout. More information on tracker installation can be found at /usr/share/doc/roundup/doc/installation.txt.gz. NOTE from your package maintainer: Installing as a CGI is not supported by the Debian package. If you really need that, you have to copy your files around manually. Please note that roundup's performance as a CGI sucks - better reverse-proxy to a stand-alone server, if you're after SSL and these options. Caution: If you want to run roundup under the control of runit, please link it into the service directory as 'roundup'. Otherwise, automatic upgrades might fail. The package makes some use of the jQuery library in the `devel' template. To get this functionality, you need to install the libjs-jquery package. 0. Backend selection ==================== Note that when selecting back ends one has to consider the desired performance. The `anydbm` module is the slowest and should only be used for small demo trackers. The best back ends with regard to performance, scaling up to several thousand issues in the tracker DB, are the big database packages PostgreSQL (installed with python-psycopg, backend `postgresql`) and MySQL (installed with python-mysqldb, backend `mysql`). The actual backend is selected by the contents of the file `db/backend_name`, assuming default paths and the setting of 'database = db' in `config.ini`'s '[main]' section. For PostgreSQL, the contents of this file would be `postgresql`. 1. System-wide tracker installation =================================== a) Installation ------------ The default system-wide tracker directory is /var/lib/roundup/trackers/. To install a new tracker `mytracker', issue as root: # roundup-admin install Enter tracker home: /var/lib/roundup/trackers/mytracker Templates: classic Select template [classic]: classic Back ends: anydbm, mysql, postgresql, metakit, sqlite Select backend [anydbm]: anydbm Then, edit /var/lib/roundup/trackers/mytracker/config.ini and adjust the values. IMPORTANT: Don't forget to initialise the tracker database with: # roundup-admin initialise IMPORTANT: Don't forget to chown the database directory (usually 'db' in the tracker's home) to the roundup user, as roundup will otherwise not be able to write to the database, and hence bail out: # chown -R roundup /var/lib/roundup/trackers/your-tracker-home b) I. Web gateway as standalone http server ---------------------------------------- Edit /var/lib/roundup/trackers/mytracker/config.ini and set TRACKER_WEB to "http://localhost:8088/mytracker/". Since the server won't run as root, you must use a different user, eg. "www-data" (the Debian standard web server's user id), or "roundup", the user that this package creates for use by the roundup server. There are two major ways to run roundup, one as a service under 'runit', the other as a standard daemon from an init.d script. The following examples are geared towards using the default user, roundup: # chown -R roundup:roundup /var/lib/roundup/trackers/mytracker Then run (as a first test): # su roundup -c 'roundup-server -p 8088 mytracker=/var/lib/roundup/trackers/mytracker' To use the roundup server together with `runit`, install the `runit` package and edit the file `/etc/roundup/service/run`. After that, add a symbolic link to enable the roundup server: # ln -s /etc/roundup/service /var/service/roundup The roundup server should start within 5 seconds, logging to `/var/log/roundup/current`. You can control the server with the `sv` command from the `runit` package, or the init script. An alternative way to daemonize the roundup-server is given using start-stop-daemon(8). See the example script located at `/usr/share/doc/roundup/examples/roundup.rc-debian`. You have the option of running the roundup server in standalone mode, or monitored under the `runit` package. To choose either option, you can edit the value of the `USERUNIT` variable in `/etc/default/roundup`. The default is to not use runit. The init script can still be used and will issue runit commands to the same effect as if running stand-alone. II. Web gateway as CGI script ----------------------------- Note that this solution is somewhat slower then the standalone http server since every request is starting up a Python instance. Add the tracker to TRACKER_HOMES variable in /etc/roundup/cgiconf.py: TRACKER_HOMES = { 'mytracker': '/var/lib/roundup/trackers/mytracker', } Or you can set an environment variable with Apache mod_env: SetEnv TRACKER_HOMES mytracker=/var/lib/roundup/trackers/mytracker IMPORTANT: under most web server configurations, cgi scripts are executed under a certain user. This user must have write access to the database directory and all files in it. All other tracker files must at least be readable by this user. For example apache runs roundup.cgi under user and group www-data, so you have to adjust the files like this: # chown -R www-data:www-data /var/lib/roundup/trackers/mytracker III. Web gateway with mod_python -------------------------------- Using mod_python is much faster than a CGI script which loads a Python interpreter for every request. First install the Debian package `libapache2-mod-python` and enable the mod_python module. Then adjust the example apache config file located under /usr/share/doc/roundup/examples/roundup_apache and copy it into "/etc/apache2/conf.d/roundup". After reloading apache the tracker instance will be accessible under the URL "http://localhost/roundup/mytracker/". c) Email gateway Define an email alias mytracker@localhost as a pipe to: |/usr/bin/roundup-mailgw /var/lib/roundup/trackers/mytracker If you are an Exim4 user, please refer to the upstream documentation file "installation.txt" and to the file /usr/share/doc/exim4/README.* files as well. 2. Private per-user tracker installation ======================================== a) Installation Each user can have their own trackers. Just replace the above pathnames with custom ones, for example /home/user/mytracker (in the following also referenced with $HOME/mytracker). b) I. Web gateway as standalone http server ---------------------------------------- Edit $HOME/mytracker/config.ini and set TRACKER_WEB to "http://localhost:8088/mytracker/". Then run (as a first test): $ roundup-server -p 8088 mytracker=/home/user/mytracker To install the roundup server properly, install the `runit` package and make a runsvdir directory: $ mkdir $HOME/service Then copy (with options -rL) the roundup service files into it: $ cp -rL /etc/roundup/service $HOME/service/roundup Edit the file `$HOME/service/roundup/run` to suit your needs. After that start the runit control program: $ runsvdir $HOME/service & The roundup server should start within 5 seconds, logging to `$HOME/service/roundup/log/main/current`. You can control the server with the `roundup-ctl` script, for example: $ roundup-ctl -d $HOME/service/roundup down To stop the runsvdir process cleanly send it a HUP signal with the kill(1) command. II. Web gateway as CGI script ----------------------------- You can also use the system-wide installed web server, but remember as above that the roundup.cgi script is executed as a certain user and group which must have write access to the database. Copy /usr/share/doc/roundup/examples/roundup.cgi to your local cgi directory (usually $HOME/public_html/cgi-lib/) and make sure it is executable. Add the tracker home: TRACKER_HOMES = { 'mytracker': '/home/user/mytracker', } c) Mail gateway With qmail, a user can set up a mail gateway with: $ chmod +t $HOME $ echo "|/usr/bin/roundup-mailgw $HOME/mytracker" > \ $HOME/.qmail-mytracker $ chmod -t $HOME 3. Long running roundup-server instances ======================================== Note that long running Python processes may deplete your system memory since the current [1]C Python implementation never free()s allocated memory. [1] http://evanjones.ca/python-memory.html For more information, including installing the Zope frontend (ZRoundup), read /usr/share/doc/roundup/doc/installation.txt.gz. debian/roundup.install0000664000000000000000000000016112655350005012253 0ustar debian/service /etc/roundup debian/roundup-ctl /usr/bin debian/roundup-server.ini debian/cgiconf.py /etc/roundup debian/copyright0000664000000000000000000001123512655350005011126 0ustar This package was debianized by Bastian Kleineidam on Thu, 16 Jan 2003 19:39:45 +0100. Homepage: http://roundup.sourceforge.net/ The current download page is on PYPI: http://pypi.python.org/pypi/roundup Upstream Author: Richard Jones Copyright: Roundup Licensing ----------------- Copyright (c) 2003-2009 Richard Jones (richard@mechanicalcat.net) Copyright (c) 2002 eKit.com Inc (http://www.ekit.com/) Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PageTemplates Licensing ----------------------- Portions of this code (roundup.cgi.PageTemplates, roundup.cgi.TAL and roundup.cgi.ZTUtils) have been copied from Zope. They have been modified in the following manner: - removal of unit tests, Zope-specific code and support files from PageTemplates: PageTemplateFile.py, ZPythonExpr.py, ZRPythonExpr.py, ZopePageTemplate.py, examples, help, tests, CHANGES.txt, HISTORY.txt, version.txt and www. From TAL: DummyEngine.py, HISTORY.txt, CHANGES.txt, benchmark, driver.py, markbench.py, ndiff.py, runtest.py, setpath.py, tests and timer.py. From ZTUtils: SimpleTree.py, Zope.py, CHANGES.txt and HISTORY.txt. - editing to remove dependencies on Zope modules (see files for change notes) The license for this code is the `Zope Public License (ZPL) Version 2.0`_, included below. Zope Public License (ZPL) Version 2.0 ------------------------------------- This software is Copyright (c) Zope Corporation (tm) and Contributors. All rights reserved. This license has been certified as open source. It has also been designated as GPL compatible by the Free Software Foundation (FSF). Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions in source code must retain the above copyright notice, this list of conditions, and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name Zope Corporation (tm) must not be used to endorse or promote products derived from this software without prior written permission from Zope Corporation. 4. The right to distribute this software or to use it for any purpose does not give you the right to use Servicemarks (sm) or Trademarks (tm) of Zope Corporation. Use of them is covered in a separate agreement (see http://www.zope.com/Marks). 5. If any files are modified, you must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. Disclaimer THIS SOFTWARE IS PROVIDED BY ZOPE CORPORATION ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ZOPE CORPORATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. This software consists of contributions made by Zope Corporation and many individuals on behalf of Zope Corporation. Specific attributions are listed in the accompanying credits file. debian/control0000664000000000000000000000163012655350005010574 0ustar Source: roundup Section: web Priority: optional Build-Depends-Indep: python (>= 2.6.6-3~), debhelper (>= 7.4) Maintainer: Kai Storbeck Uploaders: Toni Mueller Homepage: http://www.roundup-tracker.org/ Standards-Version: 3.9.3 X-Python-Version: >= 2.5 Package: roundup Architecture: all Depends: ${python:Depends}, ${misc:Depends} Suggests: python-gdbm, python-psycopg2, python-mysqldb, runit, libapache2-mod-python, python-tz, python-xapian, python-openssl, python-pyme Recommends: libjs-jquery Description: an issue-tracking system Simple-to-use and -install issue-tracking system with command-line, web and e-mail interfaces. It is based on the winning design from Ka-Ping Yee in the Software Carpentry "Track" design competition. . If you install one or more of the suggested database interface packages, you will be able to store tracker data in the corresponding database. debian/roundup.docs0000664000000000000000000000002112655350005011530 0ustar README.txt doc/* debian/patches/0000775000000000000000000000000012655350005010620 5ustar debian/patches/08_update_manpages.patch0000664000000000000000000001021112655350005015300 0ustar Author: Description: undocumented options now documented, and better wording --- a/share/man/man1/roundup-admin.1 +++ b/share/man/man1/roundup-admin.1 @@ -8,11 +8,19 @@ \fB-i\fP \fIinstance home\fP specify the issue tracker "home directory" to administer .TP -\fB-u\fP -the user[:password] to use for commands +\fB-u\fP \fIuser\fP[\fB:\fP\fIpassword\fP] +the user and password to use for commands .TP \fB-c\fP -when outputting lists of data, just comma-separate them +When outputting lists of data, comma-separate them. Same as +\fB-S ","\fP. +.TP +\fB-S\fP \fIstring\fP +When outputting lists of data, separate items with given string. +.TP +\fB-s\fP +When outputting lists of data, space-separate them. Same as +\fB-S " "\fP. .SH FURTHER HELP roundup-admin -h roundup-admin help -- this help --- a/share/man/man1/roundup-mailgw.1 +++ b/share/man/man1/roundup-mailgw.1 @@ -2,14 +2,17 @@ .SH NAME roundup-mailgw \- mail gateway for roundup .SH SYNOPSIS -\fBroundup-mailgw\fP \fI\fP [\fImethod\fP] +\fBroundup-mailgw\fP \fIinstance_home\fP [\fImethod\fP] .SH OPTIONS .TP +\fB-v\fP +Print version and exit. +.TP \fB-C\fP \fIhyperdb class\fP specify a tracker class - one of msg (the default), issue, file, user - to manipulate with -S options .TP -\fB-S\fP \fIproperty=value[;property=value] pairs\fP +\fB-S\fP \fIproperty\fP\fB=\fP\fIvalue\fP[\fB;\fP\fIproperty\fP\fB=\fP\fIvalue\fP] \fIpairs\fP specify the values to set on the class specified by -C using the same format as the Subject line property manipulations .SH DESCRIPTION @@ -46,17 +49,35 @@ In the third case, the gateway reads all messages from the POP server specified and submits each in turn to the roundup.mailgw module. The server is specified as: - \fIpop username:password@server\fP + \fBpop\fP \fIusername\fP\fB:\fP\fIpassword\fP\fB@\fP\fIserver\fP .br The username and password may be omitted: - \fIpop username@server\fP - \fIpop server\fP + \fBpop\fP \fIusername\fP\fB@\fP\fIserver\fP + \fBpop\fP \fIserver\fP .br -are both valid. +are both valid. The username and/or password will be prompted for if +not supplied on the command-line. \fBAPOP\fP +.br Same as POP, but using Authenticated POP: - \fIapop username:password@server\fP + \fBapop\fP \fIusername\fP\fB:\fP\fIpassword\fP\fB@\fP\fIserver\fP + +\fBIMAP\fP +.br +Connect to an IMAP server. This supports the same notation as that of +POP mail. + \fBimap\fP \fIusername\fP\fB:\fP\fIpassword\fP\fB@\fP\fIserver\fP +.br +It also allows you to specify a specific mailbox other than INBOX using +this format: + \fBimap\fP \fIusername\fP\fB:\fP\fIpassword\fP\fB@\fP\fIserver mailbox\fP + +\fBIMAPS\fP +.br +Connect to an IMAP server over ssl. +This supports the same notation as IMAP. + \fBimaps\fP \fIusername\fP\fB:\fP\fIpassword\fP\fB@\fP\fIserver\fP [\fImailbox\fP] .SH AUTHOR This manpage was written by Bastian Kleineidam for the Debian distribution of roundup. --- a/share/man/man1/roundup-server.1 +++ b/share/man/man1/roundup-server.1 @@ -9,10 +9,10 @@ Use options read from the configuration file (see below). .TP \fB-n\fP \fIhostname\fP -Sets the host name. +Sets the host name in the Roundup web server interface. .TP \fB-p\fP \fIport\fP -Sets the port to listen on. +Sets the port to listen on (default: 8080). .TP \fB-d\fP \fIfile\fP Daemonize, and write the server's PID to the nominated file. @@ -33,8 +33,25 @@ Sets a filename containing the PEM file to use for SSL. If left blank, a temporary self-signed certificate will be used. .TP +\fB-N\fP +Log client machine names instead of IP addresses (much slower). +.TP +\fB-u\fP \fIUID\fP +Runs the Roundup web server as this UID. +.TP +\fB-g\fP \fIGID\fP +Runs the Roundup web server as this GID. +.TP +\fB-d\fP \fIPIDfile\fP +Run the server in the background and write the server's PID +to the file indicated by PIDfile. The -l option \fBmust\fP be +specified if -d is used. +.TP +\fB-v\fP +Print version and exit. +.TP \fB-h\fP -print help +Print help and exit. .TP \fBname=\fP\fItracker home\fP Sets the tracker home(s) to use. The \fBname\fP variable is how the tracker is debian/patches/12_manpage_hyphen_minus.patch0000664000000000000000000000341612655350005016345 0ustar fix hyphens to minusses (and its lintian warning) --- a/share/man/man1/roundup-admin.1 +++ b/share/man/man1/roundup-admin.1 @@ -22,7 +22,7 @@ When outputting lists of data, space-separate them. Same as \fB-S " "\fP. .SH FURTHER HELP - roundup-admin -h + roundup-admin \-h roundup-admin help -- this help roundup-admin help -- command-specific help roundup-admin help all -- all available help --- a/share/man/man1/roundup-mailgw.1 +++ b/share/man/man1/roundup-mailgw.1 @@ -10,10 +10,10 @@ .TP \fB-C\fP \fIhyperdb class\fP specify a tracker class - one of msg (the default), issue, file, user - to -manipulate with -S options +manipulate with \-S options .TP \fB-S\fP \fIproperty\fP\fB=\fP\fIvalue\fP[\fB;\fP\fIproperty\fP\fB=\fP\fIvalue\fP] \fIpairs\fP -specify the values to set on the class specified by -C using the same +specify the values to set on the class specified by \-C using the same format as the Subject line property manipulations .SH DESCRIPTION The roundup mail gateway may be called in one of three ways: --- a/share/man/man1/roundup-server.1 +++ b/share/man/man1/roundup-server.1 @@ -18,7 +18,7 @@ Daemonize, and write the server's PID to the nominated file. .TP \fB-l\fP \fIfile\fP -Sets a filename to log to (instead of stdout). This is required if the -d +Sets a filename to log to (instead of stdout). This is required if the \-d option is used. .TP \fB-i\fP \fIfile\fP @@ -44,8 +44,8 @@ .TP \fB-d\fP \fIPIDfile\fP Run the server in the background and write the server's PID -to the file indicated by PIDfile. The -l option \fBmust\fP be -specified if -d is used. +to the file indicated by PIDfile. The \-l option \fBmust\fP be +specified if \-d is used. .TP \fB-v\fP Print version and exit. debian/patches/00_licensefiles.patch0000664000000000000000000001170212655350005014606 0ustar This patch removes the COPYING.txt and doc/license.txt from the upstream tarball to comply with debian policy. The original contents of COPYING.txt are in debian/copyright, since the license is non-standard. --- a/COPYING.txt +++ /dev/null @@ -1,106 +0,0 @@ -Roundup Licensing ------------------ - -Copyright (c) 2003-2009 Richard Jones (richard@mechanicalcat.net) -Copyright (c) 2002 eKit.com Inc (http://www.ekit.com/) -Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -PageTemplates Licensing ------------------------ - -Portions of this code (roundup.cgi.PageTemplates, roundup.cgi.TAL and -roundup.cgi.ZTUtils) have been copied from Zope. They have been modified in -the following manner: - -- removal of unit tests, Zope-specific code and support files from - PageTemplates: PageTemplateFile.py, ZPythonExpr.py, ZRPythonExpr.py, - ZopePageTemplate.py, examples, help, tests, CHANGES.txt, HISTORY.txt, - version.txt and www. From TAL: DummyEngine.py, HISTORY.txt, CHANGES.txt, - benchmark, driver.py, markbench.py, ndiff.py, runtest.py, setpath.py, - tests and timer.py. From ZTUtils: SimpleTree.py, Zope.py, CHANGES.txt and - HISTORY.txt. -- editing to remove dependencies on Zope modules (see files for change notes) - -The license for this code is the `Zope Public License (ZPL) Version 2.0`_, -included below. - - -Zope Public License (ZPL) Version 2.0 -------------------------------------- - -This software is Copyright (c) Zope Corporation (tm) and -Contributors. All rights reserved. - -This license has been certified as open source. It has also -been designated as GPL compatible by the Free Software -Foundation (FSF). - -Redistribution and use in source and binary forms, with or -without modification, are permitted provided that the -following conditions are met: - -1. Redistributions in source code must retain the above - copyright notice, this list of conditions, and the following - disclaimer. - -2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions, and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - -3. The name Zope Corporation (tm) must not be used to - endorse or promote products derived from this software - without prior written permission from Zope Corporation. - -4. The right to distribute this software or to use it for - any purpose does not give you the right to use Servicemarks - (sm) or Trademarks (tm) of Zope Corporation. Use of them is - covered in a separate agreement (see - http://www.zope.com/Marks). - -5. If any files are modified, you must cause the modified - files to carry prominent notices stating that you changed - the files and the date of any change. - -Disclaimer - - THIS SOFTWARE IS PROVIDED BY ZOPE CORPORATION ``AS IS'' - AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT - NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - NO EVENT SHALL ZOPE CORPORATION OR ITS CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - DAMAGE. - - -This software consists of contributions made by Zope -Corporation and many individuals on behalf of Zope -Corporation. Specific attributions are listed in the -accompanying credits file. - --- a/doc/license.txt +++ /dev/null @@ -1,8 +0,0 @@ -License -======= - -Roundup is Free Software under the following license (from the file -COPYING.txt in the software distribution): - - .. include:: ../COPYING.txt - :literal: debian/patches/11_add-old-detector-sampes.patch0000664000000000000000000000766112655350005016555 0ustar Author: Description: Added back the old detector examples script --- /dev/null +++ b/detectors/creator_resolution.py @@ -0,0 +1,43 @@ +# This detector was written by richard@mechanicalcat.net and it's been +# placed in the Public Domain. Copy and modify to your heart's content. + +#$Id: creator_resolution.py,v 1.2 2004-04-07 06:32:54 richard Exp $ + +from roundup.exceptions import Reject + +def creator_resolution(db, cl, nodeid, newvalues): + '''Catch attempts to set the status to "resolved" - if the assignedto + user isn't the creator, then set the status to "in-progress" (try + "confirm-done" first though, but "classic" Roundup doesn't have that + status) + ''' + if not newvalues.has_key('status'): + return + + # get the resolved state ID + resolved_id = db.status.lookup('resolved') + + if newvalues['status'] != resolved_id: + return + + # check the assignedto + assignedto = newvalues.get('assignedto', cl.get(nodeid, 'assignedto')) + creator = cl.get(nodeid, 'creator') + if assignedto == creator: + if db.getuid() != creator: + name = db.user.get(creator, 'username') + raise Reject, 'Only the creator (%s) may close this issue'%name + return + + # set the assignedto and status + newvalues['assignedto'] = creator + try: + status = db.status.lookup('confirm-done') + except KeyError: + status = db.status.lookup('in-progress') + newvalues['status'] = status + +def init(db): + db.issue.audit('set', creator_resolution) + +# vim: set filetype=python ts=4 sw=4 et si --- /dev/null +++ b/detectors/emailauditor.py @@ -0,0 +1,42 @@ + +def eml_to_mht(db, cl, nodeid, newvalues): + '''This auditor fires whenever a new file entity is created. + + If the file is of type message/rfc822, we tack onthe extension .eml. + + The reason for this is that Microsoft Internet Explorer will not open + things with a .eml attachment, as they deem it 'unsafe'. Worse yet, + they'll just give you an incomprehensible error message. For more + information, please see: + + http://support.microsoft.com/default.aspx?scid=kb;EN-US;825803 + + Their suggested work around is (excerpt): + + WORKAROUND + + To work around this behavior, rename the .EML file that the URL + links to so that it has a .MHT file name extension, and then update + the URL to reflect the change to the file name. To do this: + + 1. In Windows Explorer, locate and then select the .EML file that + the URL links. + 2. Right-click the .EML file, and then click Rename. + 3. Change the file name so that the .EML file uses a .MHT file name + extension, and then press ENTER. + 4. Updated the URL that links to the file to reflect the new file + name extension. + + So... we do that. :)''' + if newvalues.get('type', '').lower() == "message/rfc822": + if not newvalues.has_key('name'): + newvalues['name'] = 'email.mht' + return + name = newvalues['name'] + if name.endswith('.eml'): + name = name[:-4] + newvalues['name'] = name + '.mht' + +def init(db): + db.file.audit('create', eml_to_mht) + --- /dev/null +++ b/detectors/newissuecopy.py @@ -0,0 +1,22 @@ +# copied from nosyreaction + +from roundup import roundupdb + +def newissuecopy(db, cl, nodeid, oldvalues): + ''' Copy a message about new issues to a team address. + ''' + # so use all the messages in the create + change_note = cl.generateCreateNote(nodeid) + + # send a copy to the nosy list + for msgid in cl.get(nodeid, 'messages'): + try: + # note: last arg must be a list + cl.send_message(nodeid, msgid, change_note, ['team@team.host']) + except roundupdb.MessageSendError, message: + raise roundupdb.DetectorError, message + +def init(db): + db.issue.react('create', newissuecopy) + +# vim: set filetype=python ts=4 sw=4 et si debian/patches/CVE-2014-6276.patch0000664000000000000000000000532512655350005013251 0ustar Description: Disclosure of user hashed passwords (CVE-2014-6276) Security fix default user permissions . Default user permissions should not include all user attributes. We now limit this to the username, realname and some further attributes depending on the schema. Note that we no longer include the email addresses, depending on your installation you may want to further restrict this or add some attributes like ``address`` and ``alternate_addresses``. Origin: backport, http://hg.code.sf.net/p/roundup/code/rev/a403c29ffaf9 Forwarded: not-needed Author: Ralf Schlatterbeck Reviewed-by: Salvatore Bonaccorso Last-Update: 2016-02-06 Applied-Upstream: 1.5.1 --- a/share/roundup/templates/classic/schema.py +++ b/share/roundup/templates/classic/schema.py @@ -101,7 +101,10 @@ for cl in 'priority', 'status': # May users view other user information? Comment these lines out # if you don't want them to -db.security.addPermissionToRole('User', 'View', 'user') +p = db.security.addPermission(name='View', klass='user', + properties=('id', 'organisation', 'phone', 'realname', 'timezone', + 'username')) +db.security.addPermissionToRole('User', p) # Users should be able to edit their own details -- this permission is # limited to only the situation where the Viewed or Edited item is their own. --- a/share/roundup/templates/devel/schema.py +++ b/share/roundup/templates/devel/schema.py @@ -292,8 +292,13 @@ for cl in ('bug_type', 'task_type', 'sev # May users view other user information? Comment these lines out # if you don't want them to -db.security.addPermissionToRole('User', 'View', 'user') -db.security.addPermissionToRole('Developer', 'View', 'user') +p = db.security.addPermission(name='View', klass='user', + properties=('id', 'organisation', 'phone', 'realname', 'timezone', + 'vcs_name', 'username')) +db.security.addPermissionToRole('User', p) +db.security.addPermissionToRole('Developer', p) + +# Coordinator may also edit users, so they may see everything: db.security.addPermissionToRole('Coordinator', 'View', 'user') # Allow Coordinator to edit any user, including their roles. --- a/share/roundup/templates/minimal/schema.py +++ b/share/roundup/templates/minimal/schema.py @@ -30,7 +30,9 @@ db.security.addPermissionToRole('User', # May users view other user information? # Comment these lines out if you don't want them to -db.security.addPermissionToRole('User', 'View', 'user') +p = db.security.addPermission(name='View', klass='user', + properties=('id', 'username')) +db.security.addPermissionToRole('User', p) # Users should be able to edit their own details -- this permission is # limited to only the situation where the Viewed or Edited item is their own. debian/patches/series0000664000000000000000000000036712655350005012043 0ustar 00_licensefiles.patch 01_separate_configuration.patch 05_roundup_server_umask.patch 08_update_manpages.patch 09_german_translation.patch 11_add-old-detector-sampes.patch no-integrated-jquery.patch 12_manpage_hyphen_minus.patch CVE-2014-6276.patch debian/patches/09_german_translation.patch0000664000000000000000000000333312655350005016042 0ustar Author: Description: Updated translation --- a/locale/de.po +++ b/locale/de.po @@ -7,10 +7,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Roundup 1.4.6\n" +"Project-Id-Version: Roundup 1.4.15\n" "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n" "POT-Creation-Date: 2009-03-12 11:58+0200\n" -"PO-Revision-Date: 2009-03-12 18:05+0200\n" +"PO-Revision-Date: 2010-08-07 17:25+0200\n" "Last-Translator: Tobias Herp \n" "Language-Team: German Translators \n" "MIME-Version: 1.0\n" @@ -261,7 +261,7 @@ "Verwendung: help Thema\n" " Zeigt die Hilfe für ein Thema ein.\n" "\n" -" commands -- Befehle auflisten\n" +" commands -- Befehlsliste ausgeben\n" " -- Hilfe zu einem bestimmten Befehl\n" " initopts -- Optionen zur Initialisierung\n" " all -- sämtlichen Hilfetext anzeigen\n" @@ -385,7 +385,7 @@ #: ../roundup/admin.py:401 msgid "Select template [classic]: " -msgstr "Template auswählen [classic]:" +msgstr "Vorlagensatz auswählen [classic]:" #: ../roundup/admin.py:412 msgid "Select backend [anydbm]: " @@ -446,7 +446,7 @@ msgstr "" "Verwendung: genconfig \n" " Schreibt eine neue Tracker-Konfiguration (im \".ini\"-Format) mit \n" -" Standard-Werten in die Datei .\n" +" Standardwerten in die Datei .\n" " " #. password @@ -1900,7 +1900,7 @@ "\tcontains old-style template - ignored" msgstr "" "WARNUNG: Das Verzeichnis '%s'\n" -"\tenthält Templates im alten Format, die ignoriert werden." +"\tenthält Vorlagen im alten Format, die ignoriert werden." #: ../roundup/mailgw.py:201 #: ../roundup/mailgw.py:213 debian/patches/05_roundup_server_umask.patch0000664000000000000000000000050512655350005016427 0ustar Author: Description: Set a sane umask --- a/roundup/scripts/roundup_server.py +++ b/roundup/scripts/roundup_server.py @@ -819,6 +819,7 @@ os._exit(0) os.chdir("/") + os.umask(0077) # close off std(in|out|err), redirect to devnull so the file # descriptors can't be used again debian/patches/no-integrated-jquery.patch0000664000000000000000000036454312655350005015735 0ustar Packaging jquery with the roundup policy is against policy. --- a/share/roundup/templates/devel/html/jquery.js +++ /dev/null @@ -1,4376 +0,0 @@ -/*! - * jQuery JavaScript Library v1.3.2 - * http://jquery.com/ - * - * Copyright (c) 2009 John Resig - * Dual licensed under the MIT and GPL licenses. - * http://docs.jquery.com/License - * - * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) - * Revision: 6246 - */ -(function(){ - -var - // Will speed up references to window, and allows munging its name. - window = this, - // Will speed up references to undefined, and allows munging its name. - undefined, - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - // Map over the $ in case of overwrite - _$ = window.$, - - jQuery = window.jQuery = window.$ = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context ); - }, - - // A simple way to check for HTML strings or ID strings - // (both of which we optimize for) - quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/, - // Is it a simple selector - isSimple = /^.[^:#\[\.,]*$/; - -jQuery.fn = jQuery.prototype = { - init: function( selector, context ) { - // Make sure that a selection was provided - selector = selector || document; - - // Handle $(DOMElement) - if ( selector.nodeType ) { - this[0] = selector; - this.length = 1; - this.context = selector; - return this; - } - // Handle HTML strings - if ( typeof selector === "string" ) { - // Are we dealing with HTML string or an ID? - var match = quickExpr.exec( selector ); - - // Verify a match, and that no context was specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) - selector = jQuery.clean( [ match[1] ], context ); - - // HANDLE: $("#id") - else { - var elem = document.getElementById( match[3] ); - - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem && elem.id != match[3] ) - return jQuery().find( selector ); - - // Otherwise, we inject the element directly into the jQuery object - var ret = jQuery( elem || [] ); - ret.context = document; - ret.selector = selector; - return ret; - } - - // HANDLE: $(expr, [context]) - // (which is just equivalent to: $(content).find(expr) - } else - return jQuery( context ).find( selector ); - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) - return jQuery( document ).ready( selector ); - - // Make sure that old selector state is passed along - if ( selector.selector && selector.context ) { - this.selector = selector.selector; - this.context = selector.context; - } - - return this.setArray(jQuery.isArray( selector ) ? - selector : - jQuery.makeArray(selector)); - }, - - // Start with an empty selector - selector: "", - - // The current version of jQuery being used - jquery: "1.3.2", - - // The number of elements contained in the matched element set - size: function() { - return this.length; - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num === undefined ? - - // Return a 'clean' array - Array.prototype.slice.call( this ) : - - // Return just the object - this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems, name, selector ) { - // Build a new jQuery matched element set - var ret = jQuery( elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - ret.context = this.context; - - if ( name === "find" ) - ret.selector = this.selector + (this.selector ? " " : "") + selector; - else if ( name ) - ret.selector = this.selector + "." + name + "(" + selector + ")"; - - // Return the newly-formed element set - return ret; - }, - - // Force the current matched set of elements to become - // the specified array of elements (destroying the stack in the process) - // You should use pushStack() in order to do this, but maintain the stack - setArray: function( elems ) { - // Resetting the length to 0, then using the native Array push - // is a super-fast way to populate an object with array-like properties - this.length = 0; - Array.prototype.push.apply( this, elems ); - - return this; - }, - - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - // Locate the position of the desired element - return jQuery.inArray( - // If it receives a jQuery object, the first element is used - elem && elem.jquery ? elem[0] : elem - , this ); - }, - - attr: function( name, value, type ) { - var options = name; - - // Look for the case where we're accessing a style value - if ( typeof name === "string" ) - if ( value === undefined ) - return this[0] && jQuery[ type || "attr" ]( this[0], name ); - - else { - options = {}; - options[ name ] = value; - } - - // Check to see if we're setting style values - return this.each(function(i){ - // Set all the styles - for ( name in options ) - jQuery.attr( - type ? - this.style : - this, - name, jQuery.prop( this, options[ name ], type, i, name ) - ); - }); - }, - - css: function( key, value ) { - // ignore negative width and height values - if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 ) - value = undefined; - return this.attr( key, value, "curCSS" ); - }, - - text: function( text ) { - if ( typeof text !== "object" && text != null ) - return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); - - var ret = ""; - - jQuery.each( text || this, function(){ - jQuery.each( this.childNodes, function(){ - if ( this.nodeType != 8 ) - ret += this.nodeType != 1 ? - this.nodeValue : - jQuery.fn.text( [ this ] ); - }); - }); - - return ret; - }, - - wrapAll: function( html ) { - if ( this[0] ) { - // The elements to wrap the target around - var wrap = jQuery( html, this[0].ownerDocument ).clone(); - - if ( this[0].parentNode ) - wrap.insertBefore( this[0] ); - - wrap.map(function(){ - var elem = this; - - while ( elem.firstChild ) - elem = elem.firstChild; - - return elem; - }).append(this); - } - - return this; - }, - - wrapInner: function( html ) { - return this.each(function(){ - jQuery( this ).contents().wrapAll( html ); - }); - }, - - wrap: function( html ) { - return this.each(function(){ - jQuery( this ).wrapAll( html ); - }); - }, - - append: function() { - return this.domManip(arguments, true, function(elem){ - if (this.nodeType == 1) - this.appendChild( elem ); - }); - }, - - prepend: function() { - return this.domManip(arguments, true, function(elem){ - if (this.nodeType == 1) - this.insertBefore( elem, this.firstChild ); - }); - }, - - before: function() { - return this.domManip(arguments, false, function(elem){ - this.parentNode.insertBefore( elem, this ); - }); - }, - - after: function() { - return this.domManip(arguments, false, function(elem){ - this.parentNode.insertBefore( elem, this.nextSibling ); - }); - }, - - end: function() { - return this.prevObject || jQuery( [] ); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: [].push, - sort: [].sort, - splice: [].splice, - - find: function( selector ) { - if ( this.length === 1 ) { - var ret = this.pushStack( [], "find", selector ); - ret.length = 0; - jQuery.find( selector, this[0], ret ); - return ret; - } else { - return this.pushStack( jQuery.unique(jQuery.map(this, function(elem){ - return jQuery.find( selector, elem ); - })), "find", selector ); - } - }, - - clone: function( events ) { - // Do the clone - var ret = this.map(function(){ - if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) { - // IE copies events bound via attachEvent when - // using cloneNode. Calling detachEvent on the - // clone will also remove the events from the orignal - // In order to get around this, we use innerHTML. - // Unfortunately, this means some modifications to - // attributes in IE that are actually only stored - // as properties will not be copied (such as the - // the name attribute on an input). - var html = this.outerHTML; - if ( !html ) { - var div = this.ownerDocument.createElement("div"); - div.appendChild( this.cloneNode(true) ); - html = div.innerHTML; - } - - return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0]; - } else - return this.cloneNode(true); - }); - - // Copy the events from the original to the clone - if ( events === true ) { - var orig = this.find("*").andSelf(), i = 0; - - ret.find("*").andSelf().each(function(){ - if ( this.nodeName !== orig[i].nodeName ) - return; - - var events = jQuery.data( orig[i], "events" ); - - for ( var type in events ) { - for ( var handler in events[ type ] ) { - jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data ); - } - } - - i++; - }); - } - - // Return the cloned set - return ret; - }, - - filter: function( selector ) { - return this.pushStack( - jQuery.isFunction( selector ) && - jQuery.grep(this, function(elem, i){ - return selector.call( elem, i ); - }) || - - jQuery.multiFilter( selector, jQuery.grep(this, function(elem){ - return elem.nodeType === 1; - }) ), "filter", selector ); - }, - - closest: function( selector ) { - var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null, - closer = 0; - - return this.map(function(){ - var cur = this; - while ( cur && cur.ownerDocument ) { - if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) { - jQuery.data(cur, "closest", closer); - return cur; - } - cur = cur.parentNode; - closer++; - } - }); - }, - - not: function( selector ) { - if ( typeof selector === "string" ) - // test special case where just one selector is passed in - if ( isSimple.test( selector ) ) - return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector ); - else - selector = jQuery.multiFilter( selector, this ); - - var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType; - return this.filter(function() { - return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector; - }); - }, - - add: function( selector ) { - return this.pushStack( jQuery.unique( jQuery.merge( - this.get(), - typeof selector === "string" ? - jQuery( selector ) : - jQuery.makeArray( selector ) - ))); - }, - - is: function( selector ) { - return !!selector && jQuery.multiFilter( selector, this ).length > 0; - }, - - hasClass: function( selector ) { - return !!selector && this.is( "." + selector ); - }, - - val: function( value ) { - if ( value === undefined ) { - var elem = this[0]; - - if ( elem ) { - if( jQuery.nodeName( elem, 'option' ) ) - return (elem.attributes.value || {}).specified ? elem.value : elem.text; - - // We need to handle select boxes special - if ( jQuery.nodeName( elem, "select" ) ) { - var index = elem.selectedIndex, - values = [], - options = elem.options, - one = elem.type == "select-one"; - - // Nothing was selected - if ( index < 0 ) - return null; - - // Loop through all the selected options - for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { - var option = options[ i ]; - - if ( option.selected ) { - // Get the specifc value for the option - value = jQuery(option).val(); - - // We don't need an array for one selects - if ( one ) - return value; - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - } - - // Everything else, we just grab the value - return (elem.value || "").replace(/\r/g, ""); - - } - - return undefined; - } - - if ( typeof value === "number" ) - value += ''; - - return this.each(function(){ - if ( this.nodeType != 1 ) - return; - - if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) ) - this.checked = (jQuery.inArray(this.value, value) >= 0 || - jQuery.inArray(this.name, value) >= 0); - - else if ( jQuery.nodeName( this, "select" ) ) { - var values = jQuery.makeArray(value); - - jQuery( "option", this ).each(function(){ - this.selected = (jQuery.inArray( this.value, values ) >= 0 || - jQuery.inArray( this.text, values ) >= 0); - }); - - if ( !values.length ) - this.selectedIndex = -1; - - } else - this.value = value; - }); - }, - - html: function( value ) { - return value === undefined ? - (this[0] ? - this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") : - null) : - this.empty().append( value ); - }, - - replaceWith: function( value ) { - return this.after( value ).remove(); - }, - - eq: function( i ) { - return this.slice( i, +i + 1 ); - }, - - slice: function() { - return this.pushStack( Array.prototype.slice.apply( this, arguments ), - "slice", Array.prototype.slice.call(arguments).join(",") ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function(elem, i){ - return callback.call( elem, i, elem ); - })); - }, - - andSelf: function() { - return this.add( this.prevObject ); - }, - - domManip: function( args, table, callback ) { - if ( this[0] ) { - var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(), - scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ), - first = fragment.firstChild; - - if ( first ) - for ( var i = 0, l = this.length; i < l; i++ ) - callback.call( root(this[i], first), this.length > 1 || i > 0 ? - fragment.cloneNode(true) : fragment ); - - if ( scripts ) - jQuery.each( scripts, evalScript ); - } - - return this; - - function root( elem, cur ) { - return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ? - (elem.getElementsByTagName("tbody")[0] || - elem.appendChild(elem.ownerDocument.createElement("tbody"))) : - elem; - } - } -}; - -// Give the init function the jQuery prototype for later instantiation -jQuery.fn.init.prototype = jQuery.fn; - -function evalScript( i, elem ) { - if ( elem.src ) - jQuery.ajax({ - url: elem.src, - async: false, - dataType: "script" - }); - - else - jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); - - if ( elem.parentNode ) - elem.parentNode.removeChild( elem ); -} - -function now(){ - return +new Date; -} - -jQuery.extend = jQuery.fn.extend = function() { - // copy reference to target object - var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) - target = {}; - - // extend jQuery itself if only one argument is passed - if ( length == i ) { - target = this; - --i; - } - - for ( ; i < length; i++ ) - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) - // Extend the base object - for ( var name in options ) { - var src = target[ name ], copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) - continue; - - // Recurse if we're merging object values - if ( deep && copy && typeof copy === "object" && !copy.nodeType ) - target[ name ] = jQuery.extend( deep, - // Never move original objects, clone them - src || ( copy.length != null ? [ ] : { } ) - , copy ); - - // Don't bring in undefined values - else if ( copy !== undefined ) - target[ name ] = copy; - - } - - // Return the modified object - return target; -}; - -// exclude the following css properties to add px -var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, - // cache defaultView - defaultView = document.defaultView || {}, - toString = Object.prototype.toString; - -jQuery.extend({ - noConflict: function( deep ) { - window.$ = _$; - - if ( deep ) - window.jQuery = _jQuery; - - return jQuery; - }, - - // See test/unit/core.js for details concerning isFunction. - // Since version 1.3, DOM methods and functions like alert - // aren't supported. They return false on IE (#2968). - isFunction: function( obj ) { - return toString.call(obj) === "[object Function]"; - }, - - isArray: function( obj ) { - return toString.call(obj) === "[object Array]"; - }, - - // check if an element is in a (or is an) XML document - isXMLDoc: function( elem ) { - return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || - !!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument ); - }, - - // Evalulates a script in a global context - globalEval: function( data ) { - if ( data && /\S/.test(data) ) { - // Inspired by code by Andrea Giammarchi - // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html - var head = document.getElementsByTagName("head")[0] || document.documentElement, - script = document.createElement("script"); - - script.type = "text/javascript"; - if ( jQuery.support.scriptEval ) - script.appendChild( document.createTextNode( data ) ); - else - script.text = data; - - // Use insertBefore instead of appendChild to circumvent an IE6 bug. - // This arises when a base node is used (#2709). - head.insertBefore( script, head.firstChild ); - head.removeChild( script ); - } - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); - }, - - // args is for internal usage only - each: function( object, callback, args ) { - var name, i = 0, length = object.length; - - if ( args ) { - if ( length === undefined ) { - for ( name in object ) - if ( callback.apply( object[ name ], args ) === false ) - break; - } else - for ( ; i < length; ) - if ( callback.apply( object[ i++ ], args ) === false ) - break; - - // A special, fast, case for the most common use of each - } else { - if ( length === undefined ) { - for ( name in object ) - if ( callback.call( object[ name ], name, object[ name ] ) === false ) - break; - } else - for ( var value = object[0]; - i < length && callback.call( value, i, value ) !== false; value = object[++i] ){} - } - - return object; - }, - - prop: function( elem, value, type, i, name ) { - // Handle executable functions - if ( jQuery.isFunction( value ) ) - value = value.call( elem, i ); - - // Handle passing in a number to a CSS property - return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ? - value + "px" : - value; - }, - - className: { - // internal only, use addClass("class") - add: function( elem, classNames ) { - jQuery.each((classNames || "").split(/\s+/), function(i, className){ - if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) ) - elem.className += (elem.className ? " " : "") + className; - }); - }, - - // internal only, use removeClass("class") - remove: function( elem, classNames ) { - if (elem.nodeType == 1) - elem.className = classNames !== undefined ? - jQuery.grep(elem.className.split(/\s+/), function(className){ - return !jQuery.className.has( classNames, className ); - }).join(" ") : - ""; - }, - - // internal only, use hasClass("class") - has: function( elem, className ) { - return elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1; - } - }, - - // A method for quickly swapping in/out CSS properties to get correct calculations - swap: function( elem, options, callback ) { - var old = {}; - // Remember the old values, and insert the new ones - for ( var name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - callback.call( elem ); - - // Revert the old values - for ( var name in options ) - elem.style[ name ] = old[ name ]; - }, - - css: function( elem, name, force, extra ) { - if ( name == "width" || name == "height" ) { - var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ]; - - function getWH() { - val = name == "width" ? elem.offsetWidth : elem.offsetHeight; - - if ( extra === "border" ) - return; - - jQuery.each( which, function() { - if ( !extra ) - val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0; - if ( extra === "margin" ) - val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0; - else - val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0; - }); - } - - if ( elem.offsetWidth !== 0 ) - getWH(); - else - jQuery.swap( elem, props, getWH ); - - return Math.max(0, Math.round(val)); - } - - return jQuery.curCSS( elem, name, force ); - }, - - curCSS: function( elem, name, force ) { - var ret, style = elem.style; - - // We need to handle opacity special in IE - if ( name == "opacity" && !jQuery.support.opacity ) { - ret = jQuery.attr( style, "opacity" ); - - return ret == "" ? - "1" : - ret; - } - - // Make sure we're using the right name for getting the float value - if ( name.match( /float/i ) ) - name = styleFloat; - - if ( !force && style && style[ name ] ) - ret = style[ name ]; - - else if ( defaultView.getComputedStyle ) { - - // Only "float" is needed here - if ( name.match( /float/i ) ) - name = "float"; - - name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase(); - - var computedStyle = defaultView.getComputedStyle( elem, null ); - - if ( computedStyle ) - ret = computedStyle.getPropertyValue( name ); - - // We should always get a number back from opacity - if ( name == "opacity" && ret == "" ) - ret = "1"; - - } else if ( elem.currentStyle ) { - var camelCase = name.replace(/\-(\w)/g, function(all, letter){ - return letter.toUpperCase(); - }); - - ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ]; - - // From the awesome hack by Dean Edwards - // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 - - // If we're not dealing with a regular pixel number - // but a number that has a weird ending, we need to convert it to pixels - if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) { - // Remember the original values - var left = style.left, rsLeft = elem.runtimeStyle.left; - - // Put in the new values to get a computed value out - elem.runtimeStyle.left = elem.currentStyle.left; - style.left = ret || 0; - ret = style.pixelLeft + "px"; - - // Revert the changed values - style.left = left; - elem.runtimeStyle.left = rsLeft; - } - } - - return ret; - }, - - clean: function( elems, context, fragment ) { - context = context || document; - - // !context.createElement fails in IE with an error but returns typeof 'object' - if ( typeof context.createElement === "undefined" ) - context = context.ownerDocument || context[0] && context[0].ownerDocument || document; - - // If a single string is passed in and it's a single tag - // just do a createElement and skip the rest - if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) { - var match = /^<(\w+)\s*\/?>$/.exec(elems[0]); - if ( match ) - return [ context.createElement( match[1] ) ]; - } - - var ret = [], scripts = [], div = context.createElement("div"); - - jQuery.each(elems, function(i, elem){ - if ( typeof elem === "number" ) - elem += ''; - - if ( !elem ) - return; - - // Convert html string into DOM nodes - if ( typeof elem === "string" ) { - // Fix "XHTML"-style tags in all browsers - elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){ - return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? - all : - front + ">"; - }); - - // Trim whitespace, otherwise indexOf won't work as expected - var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase(); - - var wrap = - // option or optgroup - !tags.indexOf("", "" ] || - - !tags.indexOf("", "" ] || - - tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && - [ 1, "", "
" ] || - - !tags.indexOf("", "" ] || - - // matched above - (!tags.indexOf("", "" ] || - - !tags.indexOf("", "" ] || - - // IE can't serialize and