Hello community, here is the log from the commit of package duply for openSUSE:Factory checked in at 2012-10-07 18:57:32 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/duply (Old) and /work/SRC/openSUSE:Factory/.duply.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "duply", Maintainer is "" Changes: -------- --- /work/SRC/openSUSE:Factory/duply/duply.changes 2011-11-22 17:47:24.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.duply.new/duply.changes 2012-10-07 18:57:33.000000000 +0200 @@ -1,0 +2,17 @@ +Sat Oct 6 15:10:06 UTC 2012 - [email protected] + +- Update to version 1.5.7: + + Bugfix 3531450: Cannot use space in target URL (file:///) + anymore. +- Updates from 1.5.6: + + Commands purge, purge-full have no default value anymore for + security reasons; instead max value can be given via cmd line + or must be set in profile; else an error is shown. + + Minor man page modifications +- Updates from 1.5.5.5: + + Bugfix 3479605: SEL context confused profile folder's + permission check. + + Colon ':' in url passphrase got ignored, added python driven + url_decoding for user & pass to better process special chars. + +------------------------------------------------------------------- Old: ---- duply_1.5.5.4.tgz New: ---- duply_1.5.7.tgz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ duply.spec ++++++ --- /var/tmp/diff_new_pack.TsKk1K/_old 2012-10-07 18:57:34.000000000 +0200 +++ /var/tmp/diff_new_pack.TsKk1K/_new 2012-10-07 18:57:34.000000000 +0200 @@ -1,7 +1,7 @@ # # spec file for package duply # -# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. # Copyright (c) 2011 Malcolm J Lewis <[email protected]> # # All modifications and additions to the file contributed by third parties @@ -17,15 +17,14 @@ # - Name: duply -Version: 1.5.5.4 -Release: 1 -License: GPL-2.0 +Version: 1.5.7 +Release: 0 Summary: A frontend for the mighty duplicity magic -Url: http://duply.net/ +License: GPL-2.0 Group: Productivity/Archiving/Compression -Source0: http://surfnet.dl.sourceforge.net/project/ftplicity/duply%20%28simple%20duplicity%29/1.5.x/duply_1.5.5.4.tgz +Url: http://duply.net/ +Source0: http://surfnet.dl.sourceforge.net/project/ftplicity/duply%20%28simple%20duplicity%29/1.5.x/duply_1.5.7.tgz Requires: duplicity BuildArch: noarch BuildRoot: %{_tmppath}/%{name}-%{version}-build ++++++ duply_1.5.5.4.tgz -> duply_1.5.7.tgz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/duply_1.5.5.4/INSTALL.txt new/duply_1.5.7/INSTALL.txt --- old/duply_1.5.5.4/INSTALL.txt 2011-10-16 15:15:07.000000000 +0200 +++ new/duply_1.5.7/INSTALL.txt 2012-06-10 13:33:52.000000000 +0200 @@ -4,7 +4,7 @@ Most distributions have readymade packages available. I suggest _not_ to use these, because they generally lack behind duplicity development. If you encounter errors using the distro's duplicity please doublecheck if the -version is outdated on http://duplicity.org. +version is outdated on http://duplicity.nongnu.org. If so please try using the latest stable from the website before filing bug reports or complaining in the mailing list. If you install duplicity from the website's tarball check chapter @@ -34,11 +34,38 @@ tar xvf duplicity-0.6.07.tar.gz cd duplicity-0.6.07/ # install into PREFIX -PREFIX=~/_apps/duplicity-0.6.07 ; python setup.py install --prefix=$PREFIX --install-lib=$PREFIX +PREFIX=~/_apps/duplicity-0.6.07 +python setup.py install --prefix="$PREFIX" --install-lib="$PREFIX" +# OBSOLETE: since 0.6.17 the next step is not required anymore # patch executable to find libs in PREFIX -PREFIX=~/_apps/duplicity-0.6.07; cat $PREFIX/bin/duplicity | awk '1;/import getpass, gzip, os, sys, time, types/{print "sys.path.insert(1,sys.path[0] + \47/../\47)"}' > $PREFIX/bin/duplicity_mod && chmod 755 $PREFIX/bin/duplicity_mod && mv $PREFIX/bin/duplicity_mod $PREFIX/bin/duplicity +cat $PREFIX/bin/duplicity | \ +awk '1;/import getpass, gzip, os, sys, time, types/{print "sys.path.insert(1,sys.path[0] + \47/../\47)"}' > \ +$PREFIX/bin/duplicity_mod && chmod 755 $PREFIX/bin/duplicity_mod && \ +mv $PREFIX/bin/duplicity_mod $PREFIX/bin/duplicity If this works flawlessly than you will find the duplicity executable under $PREFIX/bin/duplicity -To change the systemwide used duplicity symlink this to somewhere in your path. +To change the systemwide used duplicity don't symlink it! It won't find it's +script file structure it depends on then. Rather hack short wrapper like + +/usr/local/bin/duply +--> +#!/bin/bash +DUPLY=/path/to/duply.sh +#DUPLY=~user/release/duply_1.5.2.3/duply +PATH=~user/path/to/duplicity-0.6.18/bin:$PATH +"$DUPLY" "$@" +<-- + +This way you can easily juggle with versions and stay up to date but have duply +in the path. +Alternatively you can of course simply add it to the systemwide PATH variable or +use only a duplicity wrapper like + +/usr/local/bin/duplicity +--> +#!/bin/bash +PATH=~user/path/to/duplicity-0.6.18/bin:$PATH +duplicity "$@" +<-- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/duply_1.5.5.4/duply new/duply_1.5.7/duply --- old/duply_1.5.5.4/duply 2011-10-16 15:15:07.000000000 +0200 +++ new/duply_1.5.7/duply 2012-06-10 13:33:52.000000000 +0200 @@ -9,7 +9,7 @@ # changed from ftplicity to duply. # # See http://duply.net or http://ftplicity.sourceforge.net/ for more info. # # (c) 2006 Christiane Ruetten, Heise Zeitschriften Verlag, Germany # -# (c) 2008-2011 Edgar Soldin (changes since version 1.3) # +# (c) 2008-2012 Edgar Soldin (changes since version 1.3) # ############################################################################### # LICENSE: # # This program is licensed under GPLv2. # @@ -38,10 +38,24 @@ # - import/export profile from/to .tgz function !!! # # CHANGELOG: +# 1.5.7 (10.06.2012) +# - bugfix 3531450: Cannot use space in target URL (file:///) anymore +# +# 1.5.6 (24.5.2012) +# - commands purge, purge-full have no default value anymore for security +# reasons; instead max value can be given via cmd line or must be set +# in profile; else an error is shown. +# - minor man page modifications +# # versioning scheme will be simplified to [major].[minor].[patch] version -# with the next minor version raise +# with the next version raise +# +# 1.5.5.5 (4.2.2012) +# - bugfix 3479605: SEL context confused profile folder's permission check +# - colon ':' in url passphrase got ignored, added python driven url_decoding +# for user & pass to better process special chars # -# 1.5.5.4 (16.10.2010) +# 1.5.5.4 (16.10.2011) # - bugfix 3421268: SFTP passwords from conf ignored and always prompted for # - add support for separate sign passphrase (needs duplicity 0.6.14+) # @@ -279,7 +293,7 @@ ME_LONG="$0" ME="$(basename $0)" ME_NAME="${ME%%.*}" -ME_VERSION="1.5.5.4" +ME_VERSION="1.5.7" ME_WEBSITE="http://duply.net" # default config values @@ -392,14 +406,14 @@ All conf parameters can also be defined in the environment instead. PROFILE: - Indicated by a profile name (<profile>), which is resolved + Indicated by a path or a profile name (<profile>), which is resolved to '~/.${ME_NAME}/<profile>' (~ expands to environment variable \$HOME). - Superuser root can place profiles under '/etc/${ME_NAME}' if the - folder is manually created before running $ME. - Hint: - If '/etc/${ME_NAME}' is created later, already existing profiles in the - user dir have to be moved manually or will cease to work. + Superuser root can place profiles under '/etc/${ME_NAME}'. Simply create + the folder manually before running $ME as superuser. + Note: + Already existing profiles in root's profile folder will cease to work + unless there are moved to the new location manually. example 1: $ME humbug backup @@ -426,25 +440,26 @@ list all files in backup (as it was at <age>, default: now) status prints backup sets and chains currently in repository verify list files changed since latest backup - purge [--force] - shows outdated backup archives (older than \$MAX_AGE) - [actually delete these files] - purge-full [--force] - shows outdated backups (more than \$MAX_FULL_BACKUPS, - the number of 'recent' full backups and associated - incrementals to keep) [actually delete these files] - cleanup [--force] - shows broken backup archives (e.g. after unfinished run) - [actually delete these files] restore <target_path> [<age>] - restore the backup to <target_path> [as it was at <age>] + restore the complete backup to <target_path> [as it was at <age>] fetch <src_path> <target_path> [<age>] - restore single file/folder from backup [as it was at <age>] + fetch single file/folder from backup [as it was at <age>] + purge [<max_age>] [--force] + list outdated backup files (older than \$MAX_AGE) + [use --force to actually delete these files] + purge-full [<max_full_backups>] [--force] + list outdated backup files (\$MAX_FULL_BACKUPS being the number of + full backups and associated incrementals to keep, counting in + reverse chronological order) + [use --force to actually delete these files] + cleanup [--force] + list broken backup chain files archives (e.g. after unfinished run) + [use --force to actually delete these files] changelog print changelog / todo list - txt2man feature for package admins, create a manpage based on the usage - output. download txt2man from http://mvertes.free.fr/, put it - in the path and run '$ME txt2man' to create a man page. + txt2man feature for package maintainers - create a manpage based on the + usage output. download txt2man from http://mvertes.free.fr/, put + it in the PATH and run '$ME txt2man' to create a man page. OPTIONS: --force passed to duplicity (see commands: purge, purge-full, cleanup) @@ -590,12 +605,10 @@ # Time frame for old backups to keep, Used for the "purge" command. # see duplicity man page, chapter TIME_FORMATS) -# defaults to 1M, if not set #MAX_AGE=1M # Number of full backups to keep. Used for the "purge-full" command. # See duplicity man page, action "remove-all-but-n-full". -# defaults to 1, if not set #MAX_FULL_BACKUPS=1 # activates duplicity --full-if-older-than option (since duplicity v0.4.4.RC3) @@ -917,10 +930,11 @@ if [ "$param" == "--" ] ; then PARAMSNOW=1 else + # wrap in quotes to protect from spaces [ ! $PARAMSNOW ] && \ - DUPL_CMD="$DUPL_CMD $param" \ + DUPL_CMD="$DUPL_CMD $(qw $param)" \ || \ - DUPL_CMD_PARAMS="$DUPL_CMD_PARAMS $param" + DUPL_CMD_PARAMS="$DUPL_CMD_PARAMS $(qw $param)" fi done @@ -939,7 +953,7 @@ function secureconf { # secure the configuration dir #PERMS=$(ls -la $(dirname $CONFDIR) | grep -e " $(basename $CONFDIR)\$" | awk '{print $1}') local PERMS="$(ls -la "$CONFDIR/." | awk 'NR==2{print $1}')" - if [ "$PERMS" != 'drwx------' ] ; then + if [ "${PERMS/#drwx------*/OK}" != 'OK' ] ; then chmod u+rwX,go= "$CONFDIR"; local ERR=$? warning "The profile's folder '$CONFDIR' @@ -1006,9 +1020,14 @@ } function url_encode { - # utilize python, silently do nothing on error - because no python no duplicity - OUT=$(python -c "import urllib; print urllib.quote('$1')" 2>/dev/null ); ERR=$? - [ "$ERR" -eq 0 ] && echo $OUT || echo $1 + # utilize python, silently do nothing on error - because no python no duplicity + OUT=$(python -c "import urllib; print urllib.${2}quote('$1')" 2>/dev/null ); ERR=$? + [ "$ERR" -eq 0 ] && echo $OUT || echo $1 +} + +function url_decode { + # reuse function above with a simple string param hack + url_encode "$1" "un" } function toupper { @@ -1311,11 +1330,16 @@ # split TARGET in handy variables TARGET_SPLIT_URL=$(echo $TARGET | awk '{ \ target=$0; match(target,/^([^\/:]+):\/\//); \ - prot=substr(target,RSTART,RLENGTH);rest=substr(target,RSTART+RLENGTH); \ + prot=substr(target,RSTART,RLENGTH);\ + rest=substr(target,RSTART+RLENGTH); \ if (credsavail=match(rest,/^[^@]*@/)){\ creds=substr(rest,RSTART,RLENGTH-1);\ credcount=split(creds,cred,":");\ rest=substr(rest,RLENGTH+1);\ + # split creds with regexp\ + match(creds,/^([^:]+)/);\ + user=substr(creds,RSTART,RLENGTH);\ + pass=substr(creds,RSTART+1+RLENGTH);\ };\ # filter quotes or escape them\ gsub(/[\047\042]/,"",prot);\ @@ -1324,16 +1348,15 @@ print "TARGET_URL_PROT=\047"prot"\047\n"\ "TARGET_URL_HOSTPATH=\047"rest"\047\n"\ "TARGET_URL_CREDS=\047"creds"\047\n";\ - if(credsavail){\ - gsub(/[\047]/,"\047\\\047\047",cred[1]);\ - print "TARGET_URL_USER=\047"cred[1]"\047\n"}\ - if(credcount>1){\ - gsub(/[\047]/,"\047\\\047\047",cred[2]);\ - print "TARGET_URL_PASS=\047"cred[2]"\047\n"}\ + if(user){\ + gsub(/[\047]/,"\047\\\047\047",user);\ + print "TARGET_URL_USER=\047"user"\047\n"}\ + if(pass){\ + gsub(/[\047]/,"\047\\\047\047",pass);\ + print "TARGET_URL_PASS=$(url_decode \047"pass"\047)\n"}\ }') eval ${TARGET_SPLIT_URL} - # check if backend specific software is in path [ -n "$(echo ${TARGET_URL_PROT} | grep -i -e '^ftp://$')" ] && \ [ -z "$(which ncftp 2>/dev/null)" ] && error_path "Protocol 'ftp' needs ncftp. Installed und available in path?" @@ -1725,7 +1748,8 @@ BACKEND_URL="${TARGET_URL_PROT}${BACKEND_CREDS}${TARGET_URL_HOSTPATH}" ;; esac -# protect eval from special chars in url (e.g. open ')' in password, spaces in path) +# protect eval from special chars in url (e.g. open ')' in password, +# spaces in path, quotes) happens above in duplify() via quotewrap() SOURCE="$SOURCE" BACKEND_URL="$BACKEND_URL" EXCLUDE="$EXCLUDE" @@ -1758,7 +1782,7 @@ else script=$POST fi - # script execution in a subshell, protect us from failures/overwrites + # script execution in a subshell, protect us from failures/var overwrites ( run_script "$script" ) ;; bkp) @@ -1786,11 +1810,17 @@ duplify cleanup -- "${dupl_opts[@]}" "$BACKEND_URL" ;; purge) - duplify remove-older-than "${MAX_AGE:-1M}" \ + MAX_AGE=${ftpl_pars[0]:-$MAX_AGE} + [ -z "$MAX_AGE" ] && error " Missing parameter <max_age>. Can be set in profile or as command line parameter." + + duplify remove-older-than "${MAX_AGE}" \ -- "${dupl_opts[@]}" "$BACKEND_URL" ;; purge-full) - duplify remove-all-but-n-full "${MAX_FULL_BACKUPS:-1}" \ + MAX_FULL_BACKUPS=${ftpl_pars[0]:-$MAX_FULL_BACKUPS} + [ -z "$MAX_FULL_BACKUPS" ] && error " Missing parameter <max_full_backups>. Can be set in profile or as command line parameter." + + duplify remove-all-but-n-full "${MAX_FULL_BACKUPS}" \ -- "${dupl_opts[@]}" "$BACKEND_URL" ;; restore) @@ -1805,7 +1835,7 @@ fetch) IN_PATH="${ftpl_pars[0]}"; OUT_PATH="${ftpl_pars[1]}"; TIME="${ftpl_pars[2]:-now}"; - ( [ -z "$IN_PATH" ] || [ -z "$OUT_PATH" ] ) && error " Missing parameter src_path or target_path for fetch. + ( [ -z "$IN_PATH" ] || [ -z "$OUT_PATH" ] ) && error " Missing parameter <src_path> or <target_path> for fetch. Hint: Syntax is -> $ME <profile> fetch <src_path> <target_path> [<age>]" -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
