Opened 11 years ago

Closed 11 years ago

#673 closed defect (fixed)

mondoarchive doesn't handle files with quote

Reported by: Bruno Cornec Owned by: Bruno Cornec
Priority: normal Milestone: 3.0.4
Component: mondo Version: 3.0.3
Severity: normal Keywords:
Cc:

Description

I am using Mondo Rescue 3.0.2-1 on Ubuntu 12.04.2 LTS at home, in order to backup my own home computer. I am running mondoarchive through a wrapper started with cron, thanks to which I am running full or differential backups, depending on the week day, I am saving some previous backups as history, though managing the disk space in order to avoid a filesystem full.

Looking closely to my cron logs (received by email), I noticed, every day, the following error, which obviously was not critical :

/usr/sbin/mondoarchive -Oi -D -d /backup_power4/201307 -p power4-differential-20130217 -E
'/stor_ext|/backup_power4|/Movies_home|/stor_ext2|/backup_rubedo|/dev/sr0' -N -s 20g -L -V
sh: 1: Syntax error: Unterminated quoted string
Initializing...

so eventually I ran an accurate diagnostic : I started my wrapper though strace :

strace -s 400 -f -ff -o backup_strace ./backup_power4_mondoarchive

and found something interesting : I actually have a long directory name, generated by Firefox as I was saving some web page :

rtmp:_ retrieval with rtmpdump and tcpdump « Pxnh's Blog_files

at some point, mondoarchive tries some grep -Fv operation :

execve("/bin/sh", ["sh", "-c", "grep -Fv '/home/robert/rtmp:_retrieval with rtmpdump and tcpdump \302\253 Pxnh\\'s Blog_files'
/backup_power4/mondo.tmp.9Wl2n9/tmpfs/skeleton.txt >
/backup_power4/mondo.tmp.9Wl2n9/tmpfs/skeleton.txt.new 2> /dev/null"],
[/* 22 vars */]) = 0
brk(0)

this process ends with

write(2, "Syntax error: Unterminated quoted string", 40) = 40

well, if I try this grep from the command-line, it is clearly unfinished :

root@power4:~/tmp# grep -FV '/home/robert/rtmp:_ retrieval with
rtmpdump and tcpdump \302\253 Pxnh\\'s Blog_files' skeleton.txt

actually the right syntax is :

grep -Fv '/home/robert/rtmp:_ retrieval with rtmpdump and tcpdump
\302\253 Pxnh'\''s Blog_files' skeleton.txt

root@power4:~/tmp# grep -Fv '/home/robert/rtmp:_ retrieval with
rtmpdump and tcpdump \302\253 Pxnh'\''s Blog_files' skeleton.txt |head
/
/lib
/lib/libnfsidmap
/lib/oss-compat
/lib/security
/lib/udev
/lib/udev/rules.d
/lib/udev/devices
/lib/udev/keymaps
/lib/apparmor

You may have a little bug here ?

launcher script:

#!/bin/bash
set -x

# RG - 24 déc 2008
# révisé le 10  février 2013
# inspiré du script homologue au Leg

# principe :
# je m'assure que je peux stocker 250 GB + 20 GB de marge (au hasard)
cd /backup_power4

cur_home_size=`df -B 1 /backup_power4|awk '/\/dev\/sda2/ {print $4}'`

while [[ $cur_home_size -lt $(( 290000000000 )) ]]
do
   lastdir=`ls -1 -d 20* | head -1`
   /bin/rm -fr $lastdir
   cur_home_size=`df -B 1 /backup_power4|awk '/\/dev\/sda2/ {print $4}'`
done

[ -d /backup_power4/`date +'%Y%U'` ] || mkdir /backup_power4/`date +'%Y%U'`
if [ "`date +%a`" = "Mon" ]
then
   # performing a full backup
   #mondoarchive -Oi -d /backup_power4/`date +'%Y%U'` -p "power4-full-`date +'%Y%m%d'`" -E
"/stor_ext|/backup_power4|/Movies_home|/stor_ext2|/backup_rubedo|/dev/sr0" -N -s 20g -L -g -V
   /usr/sbin/mondoarchive -Oi -d /backup_power4/`date +'%Y%U'` -p "power4-full-`date +'%Y%m%d'`" -E
'/stor_ext|/backup_power4|/Movies_home|/stor_ext2|/backup_rubedo|/dev/sr0' -N -s 20g -L  -V
else
   # performing a differential backup
   #mondoarchive -Oi -D -d /backup_power4/`date +'%Y%U'` -p "power4-differential-`date +'%Y%m%d'`" -E
"/stor_ext|/backup_power4|/Movies_home|/stor_ext2|/backup_rubedo|/dev/sr0" -N -s 20g -L -g -V
   /usr/sbin/mondoarchive -Oi -D -d /backup_power4/`date +'%Y%U'` -p "power4-differential-`date +'%Y%m%d'`" -E
'/stor_ext|/backup_power4|/Movies_home|/stor_ext2|/backup_rubedo|/dev/sr0' -N -s 20g -L  -V
fi
cp /var/cache/mindi/mondorescue.iso /backup_power4/`date +'%Y%U'`

strace reslt!

rt_sigaction(SIGINT, {0x434800, [INT], SA_RESTORER|SA_RESTART, 0x7f06f9d484a0}, NULL, 8) = 0
rt_sigaction(SIGQUIT, {SIG_DFL, [], SA_RESTORER, 0x7f06f9d484a0}, NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
execve("/bin/sh", ["sh", "-c", "grep -Fv '/home/robert/rtmp:_ retrieval with rtmpdump and tcpdump \302\253 Pxnh\\'s Blog_files'
/backup_power4/mondo.tmp.iLmTen/tmpfs/skeleton.txt > /backup_power4/mondo.tmp.iLmTen/tmpfs/skeleton.txt.new 2> /dev/null"], [/* 22 vars */]) =
0
brk(0)                                  = 0x24aa000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fcc749d5000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=159105, ...}) = 0
mmap(NULL, 159105, PROT_READ, MAP_PRIVATE, 4, 0) = 0x7fcc749ae000
close(4)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 4
read(4,
"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\30\2\0\0\0\0\0@\0\0\0\0\0\0\0\370\231\33\0\0\0\0\0\0\0\0\0@\0008\0\n\0@\0#\0\"\0\6\0\0\0\5\
0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0000\2\0\0\0\0\0\0000\2\0\0\0\0\0\0\10\0\0\0\0\0\0\0\3\0\0\0\4\0\0\0\320C\30\0\0\0\0\0\320C\30
\0\0\0\0\0\320C\30\0\0\0\0\0\34\0\0\0\0\0\0\0\34\0\0\0\0\0\0\0\20\0\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
\34@\33\0\0\0\0\0\34@\33\0\0\0\0\0\0\0
\0\0\0\0\0\1\0\0\0\6\0\0\0\0G\33\0\0\0\0\0\0G;\0\0\0\0\0\0G;\0\0\0\0\0`Q\0\0\0\0\0\0\330\235\0\0\0\0\0\0\0\0
\0\0\0\0\0\2\0\0\0\6\0\0\0@{\33\0\0\0\0\0@{;\0\0\0\0\0@{;\0\0\0\0\0\340\1\0\0\0\0\0\0\340\1\0\0\0\0\0\0\10\0\0\0\0\0\0\0\4\0\0\0\4\0\0\0p\2\0\0
\0\0\0\0p\2\0\0\0\0\0\0p\2\0\0\0\0\0\0D\0\0\0\0\0\0\0D\0\0\0\0\0\0\0\4\0\0\0\0\0\0\0"..., 832) = 832
fstat(4, {st_mode=S_IFREG|0755, st_size=1811128, ...}) = 0
mmap(NULL, 3925208, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 0x7fcc743f6000
mprotect(0x7fcc745ab000, 2093056, PROT_NONE) = 0
mmap(0x7fcc747aa000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 4, 0x1b4000) = 0x7fcc747aa000
mmap(0x7fcc747b0000, 17624, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fcc747b0000
close(4)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fcc749ad000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fcc749ac000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fcc749ab000
arch_prctl(ARCH_SET_FS, 0x7fcc749ac700) = 0
mprotect(0x7fcc747aa000, 16384, PROT_READ) = 0
mprotect(0x619000, 4096, PROT_READ)     = 0
mprotect(0x7fcc749d7000, 4096, PROT_READ) = 0
munmap(0x7fcc749ae000, 159105)          = 0
getpid()                                = 3648
rt_sigaction(SIGCHLD, {0x40f100, ~[RTMIN RT_1], SA_RESTORER, 0x7fcc7442c4a0}, NULL, 8) = 0
geteuid()                               = 0
brk(0)                                  = 0x24aa000
brk(0x24cb000)                          = 0x24cb000
getppid()                               = 32558
stat("/backup_power4", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat(".", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0
getcwd("/tmp", 4096)                    = 5
rt_sigaction(SIGINT, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGINT, {0x40f100, ~[RTMIN RT_1], SA_RESTORER, 0x7fcc7442c4a0}, NULL, 8) = 0
rt_sigaction(SIGQUIT, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGQUIT, {SIG_DFL, ~[RTMIN RT_1], SA_RESTORER, 0x7fcc7442c4a0}, NULL, 8) = 0
rt_sigaction(SIGTERM, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGTERM, {SIG_DFL, ~[RTMIN RT_1], SA_RESTORER, 0x7fcc7442c4a0}, NULL, 8) = 0
write(2, "sh: 1: ", 7)                  = 7
write(2, "Syntax error: Unterminated quoted string", 40) = 40
write(2, "\n", 1)                       = 1
exit_group(2)                           = ?

Change History (2)

comment:1 by Bruno Cornec, 11 years ago

Also in link with #670, as the solution here should also be applied there.

comment:2 by Bruno Cornec, 11 years ago

Resolution: fixed
Status: newclosed

Should be fixed in rev [3171]

Note: See TracTickets for help on using tickets.