diff --git a/src/datastore_mad/remotes/fs/rm b/src/datastore_mad/remotes/fs/rm index 2284c21289..30a79d80fa 100755 --- a/src/datastore_mad/remotes/fs/rm +++ b/src/datastore_mad/remotes/fs/rm @@ -39,12 +39,26 @@ DRV_ACTION=$1 ID=$2 XPATH="${DRIVER_PATH}/../xpath.rb -b $DRV_ACTION" -SRC=`$XPATH /DS_DRIVER_ACTION_DATA/IMAGE/SOURCE` + +unset i XPATH_ELEMENTS + +while IFS= read -r -d '' element; do + XPATH_ELEMENTS[i++]="$element" +done < <($XPATH /DS_DRIVER_ACTION_DATA/IMAGE/SOURCE \ + /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH) + +SRC="${XPATH_ELEMENTS[0]}" +BASE_PATH="${XPATH_ELEMENTS[1]}" # ------------ Remove the image from the repository ------------ -if [ -e $SRC ] ; then +if [ -f "$SRC" -a `dirname "$SRC"` = "$BASE_PATH" -a -n `basename "$SRC"` ] +then log "Removing $SRC from the image repository" - exec_and_log "rm -r $SRC" \ + + exec_and_log "rm -f $SRC" \ "Error deleting $SRC" +else + log_error "Bad formed or unavailable Image source: ${SRC}" + exit 1 fi diff --git a/src/datastore_mad/remotes/libfs.sh b/src/datastore_mad/remotes/libfs.sh index a4d180a94c..498e9b830a 100644 --- a/src/datastore_mad/remotes/libfs.sh +++ b/src/datastore_mad/remotes/libfs.sh @@ -72,7 +72,15 @@ function generate_image_path { $CANONICAL_STR EOF ) - echo "${BASE_PATH}/`echo $CANONICAL_MD5 | cut -d ' ' -f1`" + IMAGE_HASH=$(echo $CANONICAL_MD5 | cut -d ' ' -f1) + IMAGE_HASH=$(basename "$IMAGE_HASH") + + if [ -z "$IMAGE_HASH" ]; then + log_error "Error generating the path in generate_image_path." + exit 1 + fi + + echo "${BASE_PATH}/${IMAGE_HASH}" } #------------------------------------------------------------------------------- diff --git a/src/datastore_mad/remotes/vmware/rm b/src/datastore_mad/remotes/vmware/rm index 2284c21289..201c08786b 100755 --- a/src/datastore_mad/remotes/vmware/rm +++ b/src/datastore_mad/remotes/vmware/rm @@ -39,12 +39,26 @@ DRV_ACTION=$1 ID=$2 XPATH="${DRIVER_PATH}/../xpath.rb -b $DRV_ACTION" -SRC=`$XPATH /DS_DRIVER_ACTION_DATA/IMAGE/SOURCE` + +unset i XPATH_ELEMENTS + +while IFS= read -r -d '' element; do + XPATH_ELEMENTS[i++]="$element" +done < <($XPATH /DS_DRIVER_ACTION_DATA/IMAGE/SOURCE \ + /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH) + +SRC="${XPATH_ELEMENTS[0]}" +BASE_PATH="${XPATH_ELEMENTS[1]}" # ------------ Remove the image from the repository ------------ -if [ -e $SRC ] ; then +if [ -d "$SRC" -a `dirname "$SRC"` = "$BASE_PATH" -a -n `basename "$SRC"` ] +then log "Removing $SRC from the image repository" + exec_and_log "rm -r $SRC" \ "Error deleting $SRC" +else + log_error "Bad formed or unavailable Image source: ${SRC}" + exit 1 fi