1
0
Fork 0
mirror of synced 2024-12-22 06:31:07 -05:00

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_YADM_ENCRYPT"
echo "$efile" >> "$T_DIR_WORK/$efile" echo "$efile" >> "$T_DIR_WORK/$efile"
mkdir -p "$T_DIR_WORK/dir one/$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" echo "dir one/$efile/file1" >> "$T_DIR_WORK/dir one/$efile/file1"
done done
} }

View file

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

15
yadm
View file

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