File: frob_slack_rc

package info (click to toggle)
apparmor 4.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 34,800 kB
  • sloc: ansic: 24,940; python: 24,595; sh: 12,524; cpp: 9,024; yacc: 2,061; makefile: 1,921; lex: 1,215; pascal: 1,145; perl: 1,033; ruby: 365; lisp: 282; exp: 250; java: 212; xml: 159
file content (103 lines) | stat: -rwxr-xr-x 3,113 bytes parent folder | download | duplicates (8)
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
#!/usr/bin/perl -w
# ----------------------------------------------------------------------
#    Copyright (c) 2004, 2005 NOVELL (All rights reserved)
#
#    This program is free software; you can redistribute it and/or
#    modify it under the terms of version 2 of the GNU General Public
#    License published by the Free Software Foundation.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program; if not, contact Novell, Inc.
# ----------------------------------------------------------------------

use Getopt::Long;
use File::Temp qw/ :mktemp  /;
use File::stat;

sub usage {
	print "$0\t(--init|--shutdown) \tmodify startup or shutdown script\n";
	print "\t\t\t--file=<file> \tmodify <file>\n";
	print "\t\t\t--remove \tremove option from config file\n";
	print "\t\t\t--help \t\tthis help\n";
	print '$Revision: 1.1 $', "\n";
	exit(0);
}

my ($conffile,$help,$remove,$init,$shutdown);
GetOptions(
	"file=s" => \$conffile,
	"init" => \$init,
	"shutdown" => \$shutdown,
	"remove" => \$remove,
	"help!" => \$help
) or usage();

usage() if ($help);

my ($my_regexp, $my_command);
if (defined $init) {
	$my_regexp = '^echo "Going multiuser..."$';
	$my_command = "start";
} elsif (defined $shutdown) {
	$my_regexp = '^# Kill all processes.$';
	$my_command = "kill";
} else {
	usage();
}

if (defined $conffile) {
	$old = $conffile;
	chomp($old);
} elsif (defined $init) {
	$old="/etc/rc.d/rc.M";
} elsif (defined $shutdown) {
	$old="/etc/rc.d/rc.K";
}

open(MENU,"<$old") or die "Fatal: can't open $old: $!";
($fh, $file) = mkstemp($old . "XXXXXX" );

my $skip = FALSE;
while (<MENU>) {
# ok, we rely on the '="' to site the changes ;
	if (! defined $remove) {
		if ( /$my_regexp/ ) {
			print $fh $_;
			print $fh "# BEGIN rc.apparmor INSERTION\n";
			print $fh "if [ -x /etc/rc.d/rc.apparmor ] ; then\n";
			print $fh "  /etc/rc.d/rc.apparmor $my_command\n";
			print $fh "fi\n";
			print $fh "# END rc.apparmor INSERTION\n";
		} elsif ( /^# BEGIN rc.subdomain INSERTION$/ ) {
			$skip = TRUE;
		} elsif ( $skip eq TRUE ) {
			if ( /^# END rc.subdomain INSERTION$/ ) {
				$skip = FALSE;
			}
		} else {
			print $fh $_;
		}
	} elsif ( /^# BEGIN rc.(apparmor\|subdomain) INSERTION$/ ) {
		$skip = TRUE;
	} elsif ( $skip eq TRUE ) {
		if ( /^# END rc.(apparmor\|subdomain) INSERTION$/ ) {
			$skip = FALSE;
		}
	} else {
		print $fh $_;
	}
}

my $sb = stat($old) || die "Could not get permission bits from $old";
my $oldmode = $sb->mode & 07777;

rename $old, "$old.orig" || system("/bin/mv", $old, "$old.orig") &&
	die "$old could not be renamed to $old.orig ($!); see $file for modifications";
rename $file, "$old" || system("/bin/mv", $file, "$old") &&
	die "$file could not be renamed to $old ($!); see $file for modifications";
chmod $oldmode, $old || die "COuld not restore permission bits on $old";