aboutsummaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
Diffstat (limited to 'bin')
-rwxr-xr-xbin/crypted-backups45
1 files changed, 36 insertions, 9 deletions
diff --git a/bin/crypted-backups b/bin/crypted-backups
index e2dc887..5de0b7c 100755
--- a/bin/crypted-backups
+++ b/bin/crypted-backups
@@ -2,7 +2,12 @@
set -euo pipefail
IFS=$'\n\t'
-. /etc/crypted-backups
+if [ -r /etc/crypted-backups ]; then
+ . /etc/crypted-backups
+else
+ echo "Configuration file (/etc/crypted-backups) not readable! Aborting!"
+ exit 1
+fi
user_mode=""
source_mode=""
verbose=''
@@ -75,6 +80,16 @@ function check_database_settings () {
function check_directory_exists () {
local destination=$1
if [ ! -d $destination ]; then
+ echo "Directory \"$destination\" does not exist!"
+ return 1
+ else
+ return 0
+ fi
+}
+
+function check_directory_exists_and_autocreate () {
+ local destination=$1
+ if [ ! -d $destination ]; then
echo "Directory \"$destination\" does not exist yet. Creating..."
mkdir -p $destination
else
@@ -111,14 +126,15 @@ function check_directory_owner_user() {
function check_user_directory () {
local directory=$1
- check_directory_exists $directory
+ echo "Checking directory \"$directory\"."
+ check_directory_exists_and_autocreate $directory
check_directory_writable_user $directory
return 0
}
function check_root_directory () {
local directory=$1
- check_directory_exists $directory
+ check_directory_exists_and_autocreate $directory
check_directory_permission_root $directory
return 0
}
@@ -167,12 +183,21 @@ function compress_to_tmp_file () {
function encrypt_tmp_file () {
local tmp_file=$1
local destination_file=$2
+ local encrypt_return=-1
echo "Encrypting $tmp_file to $destination_file."
- #TODO: Failover for still deleting $tmp_file, if encryption fails
+ set +eu
gpg -e \
-r "$gpg_public_key" \
-o "$destination_file" \
"$tmp_file"
+ encrypt_return=$?
+ set -eu
+ if [ $encrypt_return -gt 0 ];then
+ echo "GnuPG encryption returns with: $encrypt_return"
+ echo "Removing $tmp_file."
+ rm -f "$tmp_file"
+ return 1
+ fi
echo "Removing $tmp_file."
rm -f "$tmp_file"
return 0
@@ -190,7 +215,6 @@ function backup_single_directory () {
notification_source_to_destination "$source_parent_directory$source_directory_basename" $destination_file
echo "Going to $source_directory_basename's parent directory: $source_parent_directory."
cd $source_parent_directory
- #TODO: check if directory, not for existence?
check_directory_exists $source_directory
"check_"$user_mode"_directory" $tmp_directory
"check_"$user_mode"_directory" $destination_directory
@@ -202,14 +226,17 @@ function backup_multiple_directories () {
local source_directory=$(sanitize_pathname $1)
local destination_directory=$(sanitize_pathname $2)
local layered=0
+ local sub_count=0
if [ ${#@} -gt 2 ]; then
layered=$3
- echo "Multi-layered"
+ echo "Recursive backup (depth=1) of \"$source_directory\"."
fi
+ check_directory_exists $source_directory
"check_"$user_mode"_directory" $destination_directory
for sub_directory in $source_directory*
do
if [ -d $sub_directory ];then
+ sub_count=$((sub_count+1))
"check_"$user_mode"_directory" $sub_directory
if [ $layered -eq 1 ];then
backup_multiple_directories $sub_directory $destination_directory$(get_basename_directory $sub_directory)
@@ -218,7 +245,9 @@ function backup_multiple_directories () {
fi
fi
done
-
+ if [ $sub_count -eq 0 ]; then
+ echo "There are actually no folders to backup in \"$source_directory\". Please check the configuration file!"
+ fi
}
function dump_database () {
@@ -292,11 +321,9 @@ function print_help () {
exit 0
}
-#TODO: Add function to delete compressed data in working directory (also after fail)
#TODO: Add function to cleanup backups
#TODO: Add function to mirror backups
#TODO: Add function to automatically add key to keyring, if not found
-#TODO: Create logic to distinguish between different backups
#TODO: Add verbose flag