|
|
@@ -0,0 +1,119 @@
|
|
|
+#!/bin/bash
|
|
|
+
|
|
|
+# This is a script to generate "awkward" files and directories as test cases,
|
|
|
+# to check that exa can actually handle them: symlinks that point at
|
|
|
+# themselves, directories that you aren't allowed to view, files with strange
|
|
|
+# extended attributes, that sort of thing.
|
|
|
+
|
|
|
+## -- configuration --
|
|
|
+
|
|
|
+# Directory that the files should be generated in.
|
|
|
+DIR=testcases
|
|
|
+
|
|
|
+if [[ -e "$DIR" ]]
|
|
|
+then
|
|
|
+ echo "'$DIR' already exists - aborting" >&2
|
|
|
+ exit 2
|
|
|
+fi
|
|
|
+
|
|
|
+# You! Yes, you, the name of the user running this script.
|
|
|
+YOU=`whoami`
|
|
|
+
|
|
|
+# Someone with *higher* privileges than yourself, such as root.
|
|
|
+ROOT=root
|
|
|
+
|
|
|
+# A UID that doesn't map to any user on the system.
|
|
|
+INVALID_UID=666
|
|
|
+
|
|
|
+# A GID that doesn't map to any group on the system.
|
|
|
+INVALID_GID=616
|
|
|
+
|
|
|
+# List commands as they are run
|
|
|
+# set -x
|
|
|
+
|
|
|
+# Abort on any error!
|
|
|
+abort() { echo 'Hit an error - aborting' >&2; exit 1; }
|
|
|
+trap 'abort' ERR
|
|
|
+
|
|
|
+# Get confirmation from the user before running.
|
|
|
+
|
|
|
+# echo "This script will generate files into the $DIR directory."
|
|
|
+# echo "It requires sudo for the '$ROOT' user."
|
|
|
+# echo "You probably want to edit this file before running it."
|
|
|
+# read -r -p "Continue? [y/N] " response
|
|
|
+# if [[ ! $response =~ ^([yY][eE][sS]|[yY])$ ]]
|
|
|
+# then
|
|
|
+# exit 2
|
|
|
+# fi
|
|
|
+
|
|
|
+mkdir "$DIR"
|
|
|
+
|
|
|
+
|
|
|
+## -- links --
|
|
|
+
|
|
|
+mkdir "$DIR/links"
|
|
|
+ln -s / "$DIR/links/root"
|
|
|
+ln -s /usr "$DIR/links/usr"
|
|
|
+ln -s nowhere "$DIR/links/broken"
|
|
|
+
|
|
|
+
|
|
|
+## -- users and groups --
|
|
|
+
|
|
|
+mkdir "$DIR/passwd"
|
|
|
+
|
|
|
+# sudo is needed for these because we technically aren't a member of the
|
|
|
+# groups (because they don't exist), and chown and chgrp are smart enough to
|
|
|
+# disallow it!
|
|
|
+
|
|
|
+touch "$DIR/passwd/unknown-uid"
|
|
|
+sudo -u "$ROOT" chown $INVALID_UID "$DIR/passwd/unknown-uid"
|
|
|
+
|
|
|
+touch "$DIR/passwd/unknown-gid"
|
|
|
+sudo -u "$ROOT" chgrp $INVALID_GID "$DIR/passwd/unknown-gid"
|
|
|
+
|
|
|
+
|
|
|
+## -- permissions --
|
|
|
+
|
|
|
+mkdir "$DIR/permissions"
|
|
|
+
|
|
|
+touch "$DIR/permissions/all-permissions"
|
|
|
+chmod 777 "$DIR/permissions/all-permissions"
|
|
|
+
|
|
|
+touch "$DIR/permissions/no-permissions"
|
|
|
+chmod 000 "$DIR/permissions/no-permissions"
|
|
|
+
|
|
|
+mkdir "$DIR/permissions/forbidden-directory"
|
|
|
+chmod 000 "$DIR/permissions/forbidden-directory"
|
|
|
+
|
|
|
+
|
|
|
+## -- extended attributes --
|
|
|
+
|
|
|
+mkdir "$DIR/attributes"
|
|
|
+
|
|
|
+touch "$DIR/attributes/none"
|
|
|
+
|
|
|
+touch "$DIR/attributes/one"
|
|
|
+xattr -w greeting hello "$DIR/attributes/one"
|
|
|
+
|
|
|
+touch "$DIR/attributes/two"
|
|
|
+xattr -w greeting hello "$DIR/attributes/two"
|
|
|
+xattr -w another_greeting hi "$DIR/attributes/two"
|
|
|
+
|
|
|
+touch "$DIR/attributes/forbidden"
|
|
|
+xattr -w greeting hello "$DIR/attributes/forbidden"
|
|
|
+chmod +a "$YOU deny readextattr" "$DIR/attributes/forbidden"
|
|
|
+
|
|
|
+mkdir "$DIR/attributes/dirs"
|
|
|
+
|
|
|
+mkdir "$DIR/attributes/dirs/empty-with-attribute"
|
|
|
+xattr -w greeting hello "$DIR/attributes/dirs/empty-with-attribute"
|
|
|
+
|
|
|
+mkdir "$DIR/attributes/dirs/full-with-attribute"
|
|
|
+touch "$DIR/attributes/dirs/full-with-attribute/file"
|
|
|
+xattr -w greeting hello "$DIR/attributes/dirs/full-with-attribute"
|
|
|
+
|
|
|
+mkdir "$DIR/attributes/dirs/full-but-forbidden"
|
|
|
+touch "$DIR/attributes/dirs/full-but-forbidden/file"
|
|
|
+xattr -w greeting hello "$DIR/attributes/dirs/full-but-forbidden"
|
|
|
+chmod 000 "$DIR/attributes/dirs/full-but-forbidden"
|
|
|
+chmod +a "$YOU deny readextattr" "$DIR/attributes/dirs/full-but-forbidden"
|