Description: Don't fail test if cryptsetup fails for disabled module loading
Author: Christoph Biedl <debian.axhn@manchmal.in-ulm.de>
Date: 2017-11-20
Forwarded: not-needed
Bug-Debian: https://bugs.debian.org/881864

    On the Debian buildds and porter boxes, the crypt_format call in
    libcryptsetup fails:

    socket(AF_ALG, SOCK_SEQPACKET, 0) = -1 EAFNOSUPPORT (Address family not supported by protocol)

    Reproducer using command line (run as non-root):
    $ fallocate --length 8m test.img
    $ echo foo | /sbin/cryptsetup luksFormat test.img -

    The actual reason is DSA disabled automatic module loading by
    setting /proc/sys/kernel/modules_disabled to 1, for obvious reaons.

    Make the tests non-fatal if they fail at that place, by using the
    special exit code 77.

--- a/test.c
+++ b/test.c
@@ -147,6 +147,10 @@
 
     r = crypt_format(cd, CRYPT_LUKS1, "aes", "xts-plain64",
                      NULL, NULL, 32, NULL);
+    if (r == -5) {
+        fprintf(stderr, "crypt_format failed, assuming AF_ALG,SOCK_SEQPACKET failure\n");
+        exit(77);
+    }
     if (r < 0)
         error(EXIT_FAILURE, -r, "%s:%d", __FILE__, __LINE__);
 
--- a/test-luksmeta
+++ b/test-luksmeta
@@ -11,7 +11,13 @@
 trap 'onexit' EXIT
 
 truncate -s 4M $tmp
-echo -n foo | /sbin/cryptsetup luksFormat --type luks1 $tmp -
+PRE="$(md5sum $tmp)"
+echo -n foo | /sbin/cryptsetup luksFormat --type luks1 $tmp - || true
+PST="$(md5sum $tmp)"
+if [ "$PRE" = "$PST" ] ; then
+    echo 'cryptsetup failed, assuming AF_ALG,SOCK_SEQPACKET failure'
+    exit 77
+fi
 
 ! ./luksmeta test -d $tmp
 
