fix FSF address
[opensuse:polkit-default-privs.git] / set_polkit_default_privs
1 #! /bin/bash
2 # This module sets policykit default permissions
3 # Copyright (C) 2008 SUSE Linux Products GmbH, Nuernberg, Germany.
4 #
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 2 of the License, or
8 # (at your option) any later version.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 #
19 # Based on SuSEconfig.permissions
20 #
21 # Author: Ludwig Nussel <lnussel@suse.de> 2008
22 #
23
24 shopt -s nullglob
25
26 . /etc/sysconfig/security || exit 1
27
28 if [ -z "$POLKIT_DEFAULT_PRIVS" ]; then
29         case "$PERMISSION_SECURITY" in
30                 *secure*|*paranoid*) POLKIT_DEFAULT_PRIVS="restrictive" ;;
31                 *) POLKIT_DEFAULT_PRIVS="standard" ;;
32         esac
33 fi
34
35 mode=""
36 case "$CHECK_POLKIT_PRIVS" in
37     set|"") mode="-set" ;;
38     warn) ;;
39     no) exit 0 ;;
40     *) echo "invalid value '$CHECK_POLKIT_PRIVS' for \$CHECK_POLKIT_PRIVS, using 'set'" >&2; mode="-set" ;;
41 esac
42
43 # collect files that contain permission specifications
44 # we need to use a useful order
45 #
46 # 1. common privileges file (we have none yet)
47 files=""
48
49 # 2. relaxed, standard, restrictive as those are defined by SUSE
50 have_local=
51 for level in $POLKIT_DEFAULT_PRIVS; do 
52     case "$level" in
53         relaxed|standard|restrictive)
54             if [ -e /etc/polkit-default-privs.$level ]; then
55                 files="$files /etc/polkit-default-privs.$level"
56             fi
57         ;;
58     esac
59 done
60
61 if [ -z "$have_local" ]; then
62         POLKIT_DEFAULT_PRIVS="$POLKIT_DEFAULT_PRIVS local"
63 fi
64
65 # 3. package specific privileges
66 pkgfiles=(/etc/polkit-default-privs.d/*)
67 pkgfiles=(${pkgfiles[*]##*/})
68 pkgfiles=(${pkgfiles[*]%%.*})
69 pkgfiles=(`for i in ${pkgfiles[@]}; do echo $i; done | /usr/bin/sort -u`)
70
71 for file in ${pkgfiles[@]}; do
72     file=/etc/polkit-default-privs.d/$file
73     [ -e $file ] && files="$files $file"
74     for level in $POLKIT_DEFAULT_PRIVS; do 
75         [ -e $file.$level ] && files="$files $file.$level"
76     done
77 done
78
79 # 4. central privileges files with user defined level incl 'local'
80 for level in $POLKIT_DEFAULT_PRIVS; do 
81     case "$level" in
82         relaxed|standard|restrictive) continue ;;
83         local) have_local=1 ;;
84     esac
85     if [ -e /etc/polkit-default-privs.$level ]; then
86         files="$files /etc/polkit-default-privs.$level"
87     fi
88 done
89
90 chkstat-polkit $mode $files