@ -7,7 +7,7 @@ PROGRAM="osync" # Rsync based two way sync engine with fault tolerance
AUTHOR = "(C) 2013-2019 by Orsiris de Jong"
AUTHOR = "(C) 2013-2019 by Orsiris de Jong"
CONTACT = "http://www.netpower.fr/osync - ozy@netpower.fr"
CONTACT = "http://www.netpower.fr/osync - ozy@netpower.fr"
PROGRAM_VERSION = 1.3.0-prerc1
PROGRAM_VERSION = 1.3.0-prerc1
PROGRAM_BUILD = 201912240 5
PROGRAM_BUILD = 201912240 6
IS_STABLE = false
IS_STABLE = false
CONFIG_FILE_REVISION_REQUIRED = 1.3.0
CONFIG_FILE_REVISION_REQUIRED = 1.3.0
@ -43,7 +43,7 @@ CONFIG_FILE_REVISION_REQUIRED=1.3.0
# CleanUp no #__WITH_PARANOIA_DEBUG
# CleanUp no #__WITH_PARANOIA_DEBUG
_OFUNCTIONS_VERSION = 2.3.0-RC3
_OFUNCTIONS_VERSION = 2.3.0-RC3
_OFUNCTIONS_BUILD = 201912 06 01
_OFUNCTIONS_BUILD = 201912 25 01
_OFUNCTIONS_BOOTSTRAP = true
_OFUNCTIONS_BOOTSTRAP = true
if ! type " $BASH " > /dev/null; then
if ! type " $BASH " > /dev/null; then
@ -2399,6 +2399,25 @@ function WildcardFileExists () {
fi
fi
}
}
# Some MacOS versions might loose file ownsership when using mv from /tmp dir (see #175)
# This is a "mv" function wrapper that helps out with macOS
function FileMove ( ) {
local source = " ${ 1 } "
local dest = " ${ 2 } "
# If file is symlink or OS is not Mac, just make a standard mv
if [ -L " $source " ] || [ " $LOCAL_OS " != "MacOSX" ] ; then
mv -f " $source " " $dest "
return $?
elif [ -w " $source " ] ; then
[ -f " $dest " ] && rm -f " $dest "
cp -p " $source " " $dest " && rm -f " $source "
return $?
else
return -1
fi
}
# If using "include" statements, make sure the script does not get executed unless it's loaded by bootstrap.sh which will replace includes with actual code
# If using "include" statements, make sure the script does not get executed unless it's loaded by bootstrap.sh which will replace includes with actual code
_OFUNCTIONS_BOOTSTRAP = true
_OFUNCTIONS_BOOTSTRAP = true
[ " $_OFUNCTIONS_BOOTSTRAP " != true ] && echo " Please use bootstrap.sh to load this dev version of $( basename $0 ) " && exit 1
[ " $_OFUNCTIONS_BOOTSTRAP " != true ] && echo " Please use bootstrap.sh to load this dev version of $( basename $0 ) " && exit 1
@ -3538,11 +3557,8 @@ function treeList {
retval = $?
retval = $?
if [ -f " $RUN_DIR / $PROGRAM . ${ FUNCNAME [0] } . $replicaType . $SCRIPT_PID . $TSTAMP " ] ; then
if [ -f " $RUN_DIR / $PROGRAM . ${ FUNCNAME [0] } . $replicaType . $SCRIPT_PID . $TSTAMP " ] ; then
# mv fails on MacOS when $RUN_DIR =/tmp because of some shady apple BS
# Cannot use standard mv function because of some Apple BS... see #175
# see https://apple.stackexchange.com/questions/275521/how-does-group-wheel-get-on-my-files and #175
FileMove " $RUN_DIR / $PROGRAM . ${ FUNCNAME [0] } . $replicaType . $SCRIPT_PID . $TSTAMP " " $treeFilename "
#mv -f "$RUN_DIR/$PROGRAM.${FUNCNAME[0]}.$replicaType.$SCRIPT_PID.$TSTAMP" "$treeFilename"
[ -f " $treeFileName " ] && rm -f " $treeFileName "
cp -p " $RUN_DIR / $PROGRAM . ${ FUNCNAME [0] } . $replicaType . $SCRIPT_PID . $TSTAMP " " $treeFilename " && rm -f " $RUN_DIR / $PROGRAM . ${ FUNCNAME [0] } . $replicaType . $SCRIPT_PID . $TSTAMP "
if [ $? -ne 0 ] ; then
if [ $? -ne 0 ] ; then
Logger " Cannot move treeList files \" $RUN_DIR / $PROGRAM . ${ FUNCNAME [0] } . $replicaType . $SCRIPT_PID . $TSTAMP \" => \" $treeFilename \" " . "ERROR"
Logger " Cannot move treeList files \" $RUN_DIR / $PROGRAM . ${ FUNCNAME [0] } . $replicaType . $SCRIPT_PID . $TSTAMP \" => \" $treeFilename \" " . "ERROR"
return $retval
return $retval
@ -3622,9 +3638,7 @@ function deleteList {
# Make sure deletion list does not contain duplicates from faledDeleteListFile
# Make sure deletion list does not contain duplicates from faledDeleteListFile
uniq " ${ INITIATOR [ $__replicaDir ] } ${ INITIATOR [ $__stateDir ] } / $replicaType ${ INITIATOR [ $__deletedListFile ] } " > " $RUN_DIR / $PROGRAM . ${ FUNCNAME [0] } . $replicaType . $SCRIPT_PID . $TSTAMP "
uniq " ${ INITIATOR [ $__replicaDir ] } ${ INITIATOR [ $__stateDir ] } / $replicaType ${ INITIATOR [ $__deletedListFile ] } " > " $RUN_DIR / $PROGRAM . ${ FUNCNAME [0] } . $replicaType . $SCRIPT_PID . $TSTAMP "
if [ -f " $RUN_DIR / $PROGRAM . ${ FUNCNAME [0] } . $replicaType . $SCRIPT_PID . $TSTAMP " ] ; then
if [ -f " $RUN_DIR / $PROGRAM . ${ FUNCNAME [0] } . $replicaType . $SCRIPT_PID . $TSTAMP " ] ; then
#mv "$RUN_DIR/$PROGRAM.${FUNCNAME[0]}.$replicaType.$SCRIPT_PID.$TSTAMP" "${INITIATOR[$__replicaDir]}${INITIATOR[$__stateDir]}/$replicaType${INITIATOR[$__deletedListFile]}"
FileMove " $RUN_DIR / $PROGRAM . ${ FUNCNAME [0] } . $replicaType . $SCRIPT_PID . $TSTAMP " " ${ INITIATOR [ $__replicaDir ] } ${ INITIATOR [ $__stateDir ] } / $replicaType ${ INITIATOR [ $__deletedListFile ] } "
[ -f " ${ INITIATOR [ $__replicaDir ] } ${ INITIATOR [ $__stateDir ] } / $replicaType ${ INITIATOR [ $__deletedListFile ] } " ] && rm -f " ${ INITIATOR [ $__replicaDir ] } ${ INITIATOR [ $__stateDir ] } / $replicaType ${ INITIATOR [ $__deletedListFile ] } "
cp -p " $RUN_DIR / $PROGRAM . ${ FUNCNAME [0] } . $replicaType . $SCRIPT_PID . $TSTAMP " " ${ INITIATOR [ $__replicaDir ] } ${ INITIATOR [ $__stateDir ] } / $replicaType ${ INITIATOR [ $__deletedListFile ] } " && rm -f " $RUN_DIR / $PROGRAM . ${ FUNCNAME [0] } . $replicaType . $SCRIPT_PID . $TSTAMP "
if [ $? -ne 0 ] ; then
if [ $? -ne 0 ] ; then
Logger " Cannot move \" $RUN_DIR / $PROGRAM . ${ FUNCNAME [0] } . $replicaType . $SCRIPT_PID . $TSTAMP \" => \" ${ INITIATOR [ $__replicaDir ] } ${ INITIATOR [ $__stateDir ] } / $replicaType ${ INITIATOR [ $__deletedListFile ] } \" " "ERROR"
Logger " Cannot move \" $RUN_DIR / $PROGRAM . ${ FUNCNAME [0] } . $replicaType . $SCRIPT_PID . $TSTAMP \" => \" ${ INITIATOR [ $__replicaDir ] } ${ INITIATOR [ $__stateDir ] } / $replicaType ${ INITIATOR [ $__deletedListFile ] } \" " "ERROR"
fi
fi
@ -4313,34 +4327,11 @@ function _deleteLocal {
if [ " $parentdir " != "." ] ; then
if [ " $parentdir " != "." ] ; then
mkdir -p " $replicaDir $deletionDir / $parentdir "
mkdir -p " $replicaDir $deletionDir / $parentdir "
Logger " Moving deleted file [ $replicaDir $files ] to [ $replicaDir $deletionDir / $parentdir ] on $replicaType . " "VERBOSE"
Logger " Moving deleted file [ $replicaDir $files ] to [ $replicaDir $deletionDir / $parentdir ] on $replicaType . " "VERBOSE"
# Apple BS mv does not keep ownership, simulating move when subject is not a symlink
FileMove " $replicaDir $files " " $replicaDir $deletionDir / $parentdir "
if [ -L " $replicaDir $files " ] ; then
retval = $?
mv -f " $replicaDir $files " " $replicaDir $deletionDir / $parentdir "
retval = $?
elif [ -w " $replicaDir $files " ] ; then
[ -f " $replicaDir $deletionDir / $parentdir / $files " ] && rm -f " $replicaDir $deletionDir / $parentdir / $files "
cp -p " $replicaDir $files " " $replicaDir $deletionDir / $parentdir " && rm -f " $replicaDir $files "
retval = $?
else
Logger " File [ $replicaDir $files ] is not writable. " "ERROR"
retval = -1
fi
else
else
Logger " Moving deleted file [ $replicaDir $files ] to [ $replicaDir $deletionDir ] on $replicaType . " "VERBOSE"
FileMove " $replicaDir $files " " $replicaDir $deletionDir "
# Apple BS mv does not keep ownership, simulating move
retval = $?
if [ -L " $replicaDir $files " ] ; then
mv -f " $replicaDir $files " " $replicaDir $deletionDir "
retval = $?
elif [ -w " $replicaDir $files " ] ; then
[ -f " $replicaDir $deletionDir / $files " ] && rm -f " $replicaDir $deletionDir / $files "
cp -p " $replicaDir $files " " $replicaDir $deletionDir / " && rm -f " $replicaDir $files "
retval = $?
else
Logger " File [ $replicaDir $files ] is not writable. " "ERROR"
retval = -1
fi
fi
fi
if [ $retval -ne 0 ] ; then
if [ $retval -ne 0 ] ; then
Logger " Cannot move [ $replicaDir $files ] to deletion directory [ $replicaDir $deletionDir ] on $replicaType . " "ERROR" $retval
Logger " Cannot move [ $replicaDir $files ] to deletion directory [ $replicaDir $deletionDir ] on $replicaType . " "ERROR" $retval
@ -4587,6 +4578,22 @@ function CleanUp {
fi
fi
}
}
function FileMove ( ) {
local source = " ${ 1 } "
local dest = " ${ 2 } "
# If file is symlink or OS is not Mac, just make a standard mv
if [ -L " $source " ] || [ " $LOCAL_OS " != "MacOSX" ] ; then
mv -f " $source " " $dest "
return $?
elif [ -w " $source " ] ; then
[ -f " $dest " ] && rm -f " $dest "
cp -p " $source " " $dest " && rm -f " $source "
return $?
else
return -1
fi
}
function _deleteRemoteSub {
function _deleteRemoteSub {
## Empty earlier failed delete list
## Empty earlier failed delete list
@ -4626,32 +4633,12 @@ function _deleteRemoteSub {
if [ " $parentdir " != "." ] ; then
if [ " $parentdir " != "." ] ; then
RemoteLogger " Moving deleted file [ $REPLICA_DIR $files ] to [ $REPLICA_DIR $DELETION_DIR / $parentdir ] on $REPLICA_TYPE . " "VERBOSE"
RemoteLogger " Moving deleted file [ $REPLICA_DIR $files ] to [ $REPLICA_DIR $DELETION_DIR / $parentdir ] on $REPLICA_TYPE . " "VERBOSE"
mkdir -p " $REPLICA_DIR $DELETION_DIR / $parentdir "
mkdir -p " $REPLICA_DIR $DELETION_DIR / $parentdir "
# Apple BS mv does not keep ownership, simulating move
FileMove " $REPLICA_DIR $files " " $REPLICA_DIR $DELETION_DIR / $parentdir "
if [ -L " $REPLICA_DIR $files " ] ; then
retval = $?
mv -f " $REPLICA_DIR $files " " $REPLICA_DIR $DELETION_DIR / $parentdir "
retval = $?
elif [ -w " $REPLICA_DIR $files " ] ; then
[ -f " $REPLICA_DIR $DELETION_DIR / $parentdir / $files " ] && rm -f " $REPLICA_DIR $DELETION_DIR / $parentdir / $files "
cp -p " $REPLICA_DIR $files " " $REPLICA_DIR $DELETION_DIR / $parentdir / " && rm -f " $REPLICA_DIR $files "
retval = $?
else
RemoteLogger " File [ $replicaDir $files ] is not writable. " "ERROR"
retval = -1
fi
else
else
RemoteLogger " Moving deleted file [ $REPLICA_DIR $files ] to [ $REPLICA_DIR $DELETION_DIR ] on $REPLICA_TYPE . " "VERBOSE"
RemoteLogger " Moving deleted file [ $REPLICA_DIR $files ] to [ $REPLICA_DIR $DELETION_DIR ] on $REPLICA_TYPE . " "VERBOSE"
# Apple BS mv does not keep ownership, simulating move
FileMove " $REPLICA_DIR $files " " $REPLICA_DIR $DELETION_DIR "
if [ -L " $REPLICA_DIR $files " ] ; then
retval = $?
mv -f " $REPLICA_DIR $files " " $REPLICA_DIR $DELETION_DIR "
retval = $?
elif [ -w " $REPLICA_DIR $files " ] ; then
[ -f " $REPLICA_DIR $DELETION_DIR / $files " ] && rm -f " $REPLICA_DIR $DELETION_DIR / $files "
cp -p " $REPLICA_DIR $files " " $REPLICA_DIR $DELETION_DIR / " && rm -f " $REPLICA_DIR $files "
retval = $?
else
RemoteLogger " File [ $replicaDir $files ] is not writable. " "ERROR"
retval = -1
fi
fi
fi
if [ $retval -ne 0 ] ; then
if [ $retval -ne 0 ] ; then
RemoteLogger " Cannot move [ $REPLICA_DIR $files ] to deletion directory [ $REPLICA_DIR $DELETION_DIR ] on $REPLICA_TYPE . " "ERROR" $retval
RemoteLogger " Cannot move [ $REPLICA_DIR $files ] to deletion directory [ $REPLICA_DIR $DELETION_DIR ] on $REPLICA_TYPE . " "ERROR" $retval