mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
New helper ynh_secure_remove (#281)
* New helper ynh_secure_remove A secure way to remove a file or directory. Prevent to knew issues. Tested with this paths: - / -> Not removed - /var -> Not removed - /var/www -> Not removed - /var/www/file -> Removed - /opt -> Not removed - /opt/file -> Removed - /home/yunohost.app -> Not removed - /home -> Not removed - /home/ -> Not removed - // -> Not removed - /etc/cron.d/ -> Not removed - /etc -> Not removed - /etc/ -> Not removed - /etc/X11 -> Removed - /etc/X11/$var -> Removed (if $var is not empty) * JimboJoe's typo fix
This commit is contained in:
parent
6cc237dcca
commit
47ce6d9e33
1 changed files with 28 additions and 0 deletions
|
@ -80,3 +80,31 @@ properly with chmod/chown." >&2
|
||||||
chmod 755 $TMP_DIR
|
chmod 755 $TMP_DIR
|
||||||
echo $TMP_DIR
|
echo $TMP_DIR
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Remove a file or a directory securely
|
||||||
|
#
|
||||||
|
# usage: ynh_secure_remove path_to_remove
|
||||||
|
# | arg: path_to_remove - File or directory to remove
|
||||||
|
ynh_secure_remove () {
|
||||||
|
path_to_remove=$1
|
||||||
|
forbidden_path=" \
|
||||||
|
/var/www \
|
||||||
|
/home/yunohost.app"
|
||||||
|
|
||||||
|
if [[ "$forbidden_path" =~ "$path_to_remove" \
|
||||||
|
# Match all paths or subpaths in $forbidden_path
|
||||||
|
|| "$path_to_remove" =~ ^/[[:alnum:]]+$ \
|
||||||
|
# Match all first level paths from / (Like /var, /root, etc...)
|
||||||
|
|| "${path_to_remove:${#path_to_remove}-1}" = "/" ]]
|
||||||
|
# Match if the path finishes by /. Because it seems there is an empty variable
|
||||||
|
then
|
||||||
|
echo "Avoid deleting $path_to_remove." >&2
|
||||||
|
else
|
||||||
|
if [ -e "$path_to_remove" ]
|
||||||
|
then
|
||||||
|
sudo rm -R "$path_to_remove"
|
||||||
|
else
|
||||||
|
echo "$path_to_remove wasn't deleted because it doesn't exist." >&2
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue