Eliminate the use of `eval`

`eval` has always been used to process the globs in `.yadm/encrypt`.
This is being removed, as there is a risk of executing "dirty" data
found in `.yadm/encrypt`.

Caveats of this change:
  * Brace and tilde expansion will no longer work in `.yadm/encrypt`
  * Paths with spaces must not be quoted anymore
This commit is contained in:
Tim Byrne 2017-09-15 23:00:25 -05:00
parent 57866714c4
commit b78bb1eef4
No known key found for this signature in database
GPG Key ID: 14DB4FC2465A4B12
3 changed files with 28 additions and 19 deletions

View File

@ -10,7 +10,7 @@ function create_encrypt() {
echo "$efile" >> "$T_YADM_ENCRYPT"
echo "$efile" >> "$T_DIR_WORK/$efile"
mkdir -p "$T_DIR_WORK/dir one/$efile"
echo "'dir one'/$efile/file1" >> "$T_YADM_ENCRYPT"
echo "dir one/$efile/file1" >> "$T_YADM_ENCRYPT"
echo "dir one/$efile/file1" >> "$T_DIR_WORK/dir one/$efile/file1"
done
}

View File

@ -96,14 +96,16 @@ EOF
while IFS='' read -r glob || [ -n "$glob" ]; do
if [[ ! $glob =~ ^# && ! $glob =~ ^[[:space:]]*$ ]] ; then
local IFS=$'\n'
for matching_file in $(eval ls -d "$glob" 2>/dev/null); do
if [ -d "$matching_file" ]; then
echo "$matching_file/"
for subfile in "$matching_file"/*; do
echo "$subfile"
done
else
echo "$matching_file"
for matching_file in $glob; do
if [ -e "$matching_file" ]; then
if [ -d "$matching_file" ]; then
echo "$matching_file/"
for subfile in "$matching_file"/*; do
echo "$subfile"
done
else
echo "$matching_file"
fi
fi
done
fi
@ -297,7 +299,7 @@ EOF
#; add paths with spaces to YADM_ARCHIVE
local original_encrypt
original_encrypt=$(cat "$T_YADM_ENCRYPT")
echo -e "'space test'/file*" >> "$T_YADM_ENCRYPT"
echo -e "space test/file*" >> "$T_YADM_ENCRYPT"
#; run encrypt
run expect <<EOF
@ -331,7 +333,7 @@ EOF
#; add directory paths to YADM_ARCHIVE
local original_encrypt
original_encrypt=$(cat "$T_YADM_ENCRYPT")
echo -e "'space test'" >> "$T_YADM_ENCRYPT"
echo -e "space test" >> "$T_YADM_ENCRYPT"
#; run encrypt
run expect <<EOF

23
yadm
View File

@ -178,9 +178,11 @@ function alt() {
if [[ ! $glob =~ ^# && ! $glob =~ ^[[:space:]]*$ ]] ; then
# echo "working on ->$glob<-"
local IFS=$'\n'
for matching_file in $(eval "$LS_PROGRAM" -d "$glob" 2>/dev/null); do
ENC_FILES[$index]="$matching_file"
((index++))
for matching_file in $glob; do
if [ -e "$matching_file" ]; then
ENC_FILES[$index]="$matching_file"
((index++))
fi
done
fi
done < "$YADM_ENCRYPT"
@ -460,9 +462,11 @@ function encrypt() {
while IFS='' read -r glob || [ -n "$glob" ]; do
if [[ ! $glob =~ ^# && ! $glob =~ ^[[:space:]]*$ ]] ; then
local IFS=$'\n'
for matching_file in $(eval "$LS_PROGRAM" -d "$glob" 2>/dev/null); do
ENC_FILES[$index]="$matching_file"
((index++))
for matching_file in $glob; do
if [ -e "$matching_file" ]; then
ENC_FILES[$index]="$matching_file"
((index++))
fi
done
fi
done < "$YADM_ENCRYPT"
@ -710,8 +714,11 @@ function perms() {
#; include globs found in YADM_ENCRYPT (if present)
if [ -f "$YADM_ENCRYPT" ] ; then
while IFS='' read -r glob || [ -n "$glob" ]; do
if [[ ! $glob =~ ^# ]] ; then
GLOBS=("${GLOBS[@]}" $(eval "$LS_PROGRAM" -d "$glob" 2>/dev/null))
if [[ ! $glob =~ ^# && ! $glob =~ ^[[:space:]]*$ ]] ; then
local IFS=$'\n'
for matching_file in $glob; do
GLOBS=("${GLOBS[@]}" "$matching_file")
done
fi
done < "$YADM_ENCRYPT"
fi