Update changelog for new release 0.18.
[grml-crypt.git] / grml-crypt
index 5591351..fade32e 100755 (executable)
@@ -35,7 +35,8 @@ DM_PATH_=""
 ACTION_=""
 DM_PREFIX_="grml-crypt_"
 FORCE_='false'
-OVERWRITE_SOURCE_DEV_='/dev/urandom'
+FSCK_='false'
+ENTROPY_SOURCE_='/dev/urandom'
 OPTIMIZED_MODE_SET_='false'
 OPTIMIZING_LEVEL_=0
 CIPHER_SIZE_="256"
@@ -65,6 +66,7 @@ OPTIONS:
    -o         optimised initialisation mode (should be as secure as the default but faster)
    -y         verifies the passphrase by asking for it twice
    -f         force file overwriting in format mode and/or disable confirmation dialog
+   -F         only for action start: run fsck before mounting the filesystem
    -m         additional arguments to mount
    -v         verbose (show what is going on, v++)
    -h         this help text
@@ -184,6 +186,9 @@ function actionStart
   $READONLY_SET_ && cargs_='--readonly'
   execute "$CRYPTSETUP_ $cargs_ luksOpen $TARGET_ $DM_NAME_" warn || execute "losetup -d $TARGET_" || \
     die "could not luksOpen $TARGET_"
+  if [[ "$FSCK_" == "true" ]] ; then
+    execute "fsck -C $DM_NAME_" || die "fsck failed on $DM_NAME_"
+  fi
   margs_=""
   $READONLY_SET_ && margs_='-r'
   execute "mount $margs_ $ADDITIONAL_MOUNT_ARGS_ $DM_PATH_ $MOUNT_POINT_" die
@@ -262,13 +267,13 @@ function actionFormat
         execute "dd if=/dev/zero of=$TARGET_ bs=1M count=${SIZE_} &>/dev/null" \
           die "could not initialise $TARGET_ with /dev/zero"
       else
-        if [[ $OVERWRITE_SOURCE_DEV_ == '/dev/zero' ]]; then
+        if [[ $ENTROPY_SOURCE_ == '/dev/zero' ]]; then
           echo "INSERCURE mode"
         else
           echo "SECURE mode (taking /dev/urandom as source, this could take some time)"
         fi
-        execute "dd if=$OVERWRITE_SOURCE_DEV_ of=$TARGET_ bs=1M count=${SIZE_} &>/dev/null" ||\
-          die "could not initialise $TARGET_ with $OVERWRITE_SOURCE_DEV_"
+        execute "dd if=$ENTROPY_SOURCE_ of=$TARGET_ bs=1M count=${SIZE_} &>/dev/null" ||\
+          die "could not initialise $TARGET_ with $ENTROPY_SOURCE_"
       fi
     fi
 
@@ -276,7 +281,7 @@ function actionFormat
 
     # TARGET_ is now /dev/loop<x>
     execute "losetup $TARGET_ $ORIG_TARGET_" die
-    if [[ $OPTIMIZED_MODE_SET_ == 'true' || $OVERWRITE_SOURCE_DEV_ == '/dev/zero' ]]; then
+    if [[ $OPTIMIZED_MODE_SET_ == 'true' || $ENTROPY_SOURCE_ == '/dev/zero' ]]; then
       execute "dd if=/dev/urandom of=$TARGET_ bs=1M count=2 &>/dev/null" \
       die "could not initialise the fist 2MB of $TARGET_ with /dev/urandom"
     fi
@@ -290,12 +295,12 @@ function actionFormat
       echo "optimised SECURE mode"
       execute "dd if=/dev/urandom of=$TARGET_ bs=1M count=2 &>/dev/null" ||\
         die "could not initialise the first 2MB of $TARGET_ with /dev/urandom"
-    elif [[ $OVERWRITE_SOURCE_DEV_ != '/dev/zero' ]]; then
+    elif [[ $ENTROPY_SOURCE_ != '/dev/zero' ]]; then
       # default mode
-      echo "SECURE mode (taking $OVERWRITE_SOURCE_DEV_ as source, this could take some time)"
-      execute "dd if=$OVERWRITE_SOURCE_DEV_ of=$TARGET_ bs=1M &>/dev/null" #||\
+      echo "SECURE mode (taking $ENTROPY_SOURCE_ as source, this could take some time)"
+      execute "dd if=$ENTROPY_SOURCE_ of=$TARGET_ bs=1M &>/dev/null" #||\
         # skipped because "no space left on device" from dd
-        # die "could not initialise $TARGET_ with $OVERWRITE_SOURCE_DEV_"
+        # die "could not initialise $TARGET_ with $ENTROPY_SOURCE_"
     else
       echo 'INSECURE mode (only initialising the fist 2MB with /dev/urandom)'
       execute "dd if=/dev/urandom of=$TARGET_ bs=1M count=2 &>/dev/null" \
@@ -334,18 +339,19 @@ function actionFormat
 ### __MAIN
 ###
 
-while getopts "s:t:rzoyfm:hvS:C:I:A:" opt; do
+while getopts "s:t:rzoyfFm:hvS:C:I:A:" opt; do
   case "$opt" in
     s) SIZE_="$OPTARG"; SIZE_SET_='true' ;;
     t) FSTYPE_="$OPTARG" ;;
     r) READONLY_SET_='true' ;;
     z) let OPTIMIZING_LEVEL_=$OPTIMIZING_LEVEL_+1
-        OVERWRITE_SOURCE_DEV_='/dev/zero'
+        ENTROPY_SOURCE_='/dev/zero'
         warn 'initialising from INSECURE source /dev/zero' ;;
     o) let OPTIMIZING_LEVEL_=$OPTIMIZING_LEVEL_+1
         OPTIMIZED_MODE_SET_='true' ;;
     y) VERIFY_PW_="--verify-passphrase" ;;
     f) FORCE_='true' ;;
+    F) FSCK_='true' ;;
     m) ADDITIONAL_MOUNT_ARGS_="$OPTARG" ;;
     h) printUsage; exit ;;
     v) let verbose_=$verbose_+1 ;;