summaryrefslogtreecommitdiff
path: root/dh_fixperms
blob: 6024c506c39905bbfd9fb9f63c55b9326d761325 (plain)
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
#!/usr/bin/perl -w
#
# Do some general file permission fixups.

use strict;
use Debian::Debhelper::Dh_Lib;
init();

foreach my $package (@{$dh{DOPACKAGES}}) {
	my $tmp=tmpdir($package);

	my $find_options='';
	if (defined($dh{EXCLUDE_FIND}) && $dh{EXCLUDE_FIND} ne '') {
		$find_options="! \\( $dh{EXCLUDE_FIND} \\)";
	}

	# General permissions fixing.
	complex_doit("find $tmp $find_options -print0",
		"2>/dev/null | xargs -0r chown --no-dereference 0.0");
	complex_doit("find $tmp ! -type l $find_options -print0",
		"2>/dev/null | xargs -0r chmod go=rX,u+rw,a-s");
		
	# Fix up premissions in usr/share/doc, setting everything to not
	# executable by default, but leave examples directories alone.
	complex_doit("find $tmp/usr/share/doc $tmp/usr/doc -type f $find_options ! -regex '.*/examples/.*' -print0",
		"2>/dev/null | xargs -0r chmod 644");
	complex_doit("find $tmp/usr/share/doc $tmp/usr/doc -type d $find_options -print0",
		"2>/dev/null | xargs -0r chmod 755");

	# Executable man pages are a bad thing..
	complex_doit("find $tmp/usr/share/man $tmp/usr/man/ $tmp/usr/X11*/man/ -type f",
		"$find_options -print0 2>/dev/null | xargs -0r chmod 644");

	# ..and so are executable shared and static libraries 
	# (and .la files from libtool)
	complex_doit("find $tmp -perm -5 -type f",
		"\\( -name '*.so*' -or -name '*.la' -or -name '*.a' \\) $find_options -print0",
		"2>/dev/null | xargs -0r chmod a-X");
}