File: pull-profile-from-ubuntu

package info (click to toggle)
apparmor-profiles-extra 1.35
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 112 kB
  • sloc: sh: 135; makefile: 26
file content (119 lines) | stat: -rwxr-xr-x 3,222 bytes parent folder | download | duplicates (6)
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
)