1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
#!/bin/sh
set -e
set -u
NAME=$(basename ${0})
USAGE="Usage: $NAME SOURCE_PACKAGE --profile-name NAME [ OPTION... ]
Options:
--release RELEASE extract the latest version of the source
package from the specified release
--version VERSION extract the specified version of the source
package
--profile-source FILENAME get the profile from the specified filename in
the unpacked source package tree
--profile-name NAME install the profile under this name into
/etc/apparmor.d/
--abstraction-source FILENAME get the abstraction from the specified filename
in the unpacked source package tree
--abstraction-name install the profile under this name into
/etc/apparmor.d/abstractions/
"
error() {
echo "$@" >&2
exit 1
}
### Parse and validate command-line
[ $# -ge 1 ] || error "$USAGE"
SOURCE_PACKAGE="$1" ; shift
[ -n "$SOURCE_PACKAGE" ] || error "$USAGE"
VERSION_SPECIFIER=
PROFILE_SOURCE=
PROFILE_NAME=
ABSTRACTION_SOURCE=
ABSTRACTION_NAME=
SHORTOPTS=
LONGOPTS="release:,version:"
LONGOPTS="$LONGOPTS,profile-source:,profile-name:"
LONGOPTS="$LONGOPTS,abstraction-source:,abstraction-name:"
OPTS=$(getopt -o $SHORTOPTS --longoptions $LONGOPTS -n "${NAME}" -- "$@")
eval set -- "$OPTS"
while [ $# -gt 0 ]; do
case $1 in
--release|--version)
shift
VERSION_SPECIFIER="$1"
;;
--profile-source)
shift
PROFILE_SOURCE="$1"
;;
--profile-name)
shift
PROFILE_NAME="$1"
;;
--abstraction-source)
shift
ABSTRACTION_SOURCE="$1"
;;
--abstraction-name)
shift
ABSTRACTION_NAME="$1"
;;
--help)
echo "$USAGE" >&2
exit 0
;;
esac
shift
done
# Options consistency checks
[ -n "$PROFILE_NAME" ] || error "--profile-name is required.\n$USAGE"
if [ -n "$ABSTRACTION_SOURCE" ]; then
[ -n "$ABSTRACTION_NAME" ] || \
error "--abstraction-name is required when --abstraction-source is used."
fi
# Fallback settings
[ -n "$PROFILE_SOURCE" ] || PROFILE_SOURCE=debian/apparmor-profile
if [ -n "$ABSTRACTION_NAME" ] && [ -z "$ABSTRACTION_SOURCE" ]; then
ABSTRACTION_SOURCE=debian/apparmor-profile.abstraction
fi
### Initialization and sanity checks
[ -x "$(which pull-lp-source)" ] || \
error "pull-lp-source not found. Install the ubuntu-dev-tools package."
TEMP_DIR=$(mktemp -d)
WORK_DIR=$(readlink -f $(dirname $(dirname $(dirname "$0"))))
PROFILES_DIR="$WORK_DIR/profiles"
ABSTRACTIONS_DIR="$PROFILES_DIR/abstractions"
[ -d "$PROFILES_DIR" ] || error "'$PROFILES_DIR' is not a directory."
[ -d "$ABSTRACTIONS_DIR" ] || error "'$ABSTRACTIONS_DIR' is not a directory."
### Main
(
cd "$TEMP_DIR"
if [ -n "$VERSION_SPECIFIER" ]; then
pull-lp-source "$SOURCE_PACKAGE" "$VERSION_SPECIFIER"
else
pull-lp-source "$SOURCE_PACKAGE"
fi
cp "$SOURCE_PACKAGE"*/"$PROFILE_SOURCE" "$PROFILES_DIR/$PROFILE_NAME"
if [ -n "$ABSTRACTION_NAME" ]; then
cp "$SOURCE_PACKAGE"*/"$ABSTRACTION_SOURCE" \
"$ABSTRACTIONS_DIR/$ABSTRACTION_NAME"
fi
)
|