move default rules to '90', bnc#807097
[opensuse:polkit-default-privs.git] / chkstat-polkit
1 #!/usr/bin/perl -w
2 # This module sets policykit permssions
3 # Copyright (C) 2008, 2009, 2013 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 #
19 # Author: Ludwig Nussel  <lnussel@suse.de> 2008
20 #
21
22 use strict;
23 use File::Path;
24
25 my $file = '/etc/polkit-1/rules.d/90-default-privs.rules';
26
27 my $do_set;
28 # privilege => value
29 my %to_set;
30
31 if($#ARGV != -1 && $ARGV[0] eq '--help' ) {
32         print "USAGE: $0 [-set] <files...>\n";
33         exit 0;
34 }
35
36 if($#ARGV != -1 && $ARGV[0] eq '-set') {
37         $do_set = 1;
38         shift @ARGV;
39 }
40
41 if($#ARGV == -1) {
42         print STDERR "specify files\n";
43         exit 1;
44 }
45
46 while(<>) {
47         chomp;
48         next unless $_;
49         next if(/^#/);
50         my ($privilege, $perms) = split(/\s+/);
51         if($perms !~ /:/) {
52                 $perms = $perms.':'.$perms.':'.$perms;
53         }
54         # convert PolicyKit syntax
55         my @p = map { s/^(auth_(?:admin|self)_keep).+$/$1/; s/_one_shot//; $_ } split(/:/, $perms);
56         for (@p) {
57                 unless (/^(?:auth_(?:admin|self)(?:_keep)?|yes|no)$/) {
58                         warn "invalid value $_ in line $.\n";
59                         next;
60                 }
61         }
62         $to_set{$privilege} = [ @p ];
63 }
64
65
66 my $rules = '';
67 while (my ($privilege, $perms) = each %to_set) {
68         my @p = @$perms;
69         $rules .= sprintf("\t\t'%s':\n\t\t\t[ '%s', '%s', '%s' ],\n", $privilege, $p[0], $p[1], $p[2]);
70 }
71
72 exit(0) unless $do_set;
73
74 open(F, '>', $file.'.new') or die "can't open $file.new: $!\n";
75 while(<DATA>) {
76         if (/INSERT_RULES_HERE/) {
77                 $_ = $rules;
78         }
79         print F;
80 }
81 close F;
82
83 rename($file.'.new', $file) or die "can't rename $file.new: $!\n";
84
85 __END__
86 /************************************\
87 * AUTOMATICALY GENERATED DO NOT EDIT *
88 * see man set_polkit_default_privs   *
89 \************************************/
90 polkit.addRule(function(action, subject) {
91         // set to true for debugging
92         var debug = false;
93         rules = { 
94                 "INSERT_RULES_HERE" : [ "auth_admin", "auth_admin", "auth_admin" ],
95         };
96         var i = 0;
97         if (subject.local) {
98                 if (subject.active) {
99                         i = 2;
100                 } else {
101                         i = 1;
102                 }   
103         }   
104         if (debug)
105                 polkit.log(subject);
106
107         if (rules[action.id]) {
108                 if (debug)
109                         polkit.log(action.id + " => " + rules[action.id][i]);
110                 return rules[action.id][i];
111         } else {
112                 if (debug)
113                         polkit.log(action.id + " => no override found");
114         }
115 });
116
117 // vim: syntax=javascript