-
Notifications
You must be signed in to change notification settings - Fork 0
/
grid-mapfile.sh.in
141 lines (124 loc) · 3.82 KB
/
grid-mapfile.sh.in
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#!/bin/sh
# File: vo-support-vomsdir/gridmapdir.sh
# Author: Dennis van Dok <[email protected]>
#
# Copyright 2012 Stichting FOM
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# This script is installed as a module in
# /usr/share/vo-support/modules/gridmapdir.sh
# It is normally run by %post or %preun scriptlets in RPM packages
# for each installed VO. The first argument is the main command.
# Commands understood by this script are:
# configure [list of VOs to add]
# deconfigure [list of VOs to remove]
#
# Other commands are silently ignored. The list of VOs may be empty.
#
# The configure command will add the VO's FQAN mapping rule to
# /etc/grid-security/voms-mapfile and /etc/grid-security/groupmapfile.
# The configuration parameters in
# /etc/vo-support/$vo.conf
# are poolprefix and groupmapping.
#
# If the environment variable GRID_SECURITY_DIR is set, it is
# used instead of /etc/grid-security.
#
# The deconfigure will uninstall these files.
# installation variable
sbindir=@sbindir@
sysconfdir=@sysconfdir@
printusage() {
cat >&2 <<EOF
Usage: $prg command [ VO ... ]
Valid commands:
configure add grid-mapfile entries for given VOs
deconfigure remove grid-mapfile entries for given VOs
EOF
}
if [ $# -lt 1 ] ; then
echo "$0 requires a command" >&2
printusage
exit 1
fi
if [ -z "$GRID_SECURITY_DIR" ]; then
gridsecdir=$sysconfdir/grid-security
else
gridsecdir="$GRID_SECURITY_DIR"
fi
gridmapfile="$gridsecdir/voms-grid-mapfile"
groupmapfile="$gridsecdir/groupmapfile"
cmd="$1"
shift
# This function asserts the presence of
# the grid-mapfile and groupmapfile
createmapfilesifneeded() {
if [ ! -d "$gridsecdir" ]; then
mkdir -p "$gridsecdir"
fi
if [ ! -f "$gridmapfile" ]; then
touch "$gridmapfile"
fi
if [ ! -f "$groupmapfile" ]; then
touch "$groupmapfile"
fi
}
# $1 = VO
# $2 = configure/deconfigure
# FIXME: the mappings for /pvier also need to be replicated for
# /pvier/Role=Null/Capability=Null because of some legacy software
# support.
update_mapfiles() {
createmapfilesifneeded
for fqan in `vo-config get-fqans $1` ; do
poolprefix=`vo-config get-vo-param "$fqan" poolprefix`
groupmapping=`vo-config get-vo-param "$fqan" groupmapping`
test "$groupmapping" != undefined || continue
if [ $2 = configure ]; then
# add the FQAN to the mapfiles
# if it's not already there
if test "$poolprefix" != undefined &&
! grep -qF "\"$fqan\" " $gridmapfile >/dev/null 2>&1 ; then
echo "\"$fqan\" .$poolprefix" >> $gridmapfile
fi
if test "$groupmapping" != undefined &&
! grep -qF "\"$fqan\" " $groupmapfile >/dev/null 2>&1 ; then
echo "\"$fqan\" $groupmapping" >> $groupmapfile
fi
else # deconfigure
# remove the FQAN from the mapfiles
if test "$poolprefix" != undefined &&
grep -qF "\"$fqan\" " $gridmapfile >/dev/null 2>&1 ; then
sed "\\@\"$fqan\"@ d" $gridmapfile > $gridmapfile.new
mv $gridmapfile.new $gridmapfile
fi
if test "$groupmapping" != undefined &&
grep -qF "\"$fqan\" " $groupmapfile >/dev/null 2>&1 ; then
sed "\\@\"$fqan\"@ d" $groupmapfile > $groupmapfile.new
mv $groupmapfile.new $groupmapfile
fi
fi
done
}
case "$cmd" in
configure|deconfigure)
for vo in "$@" ; do
update_mapfiles $vo $cmd
done
;;
*)
echo "Unknown command $cmd" >&2
printusage
exit 1
;;
esac