#!/usr/bin/perl -w =head1 NAME dh_suidregister - obsolete suid registration program =head1 SYNOPSIS Do not run! =head1 DESCRIPTION This program used to register suid and sgid files with L, but with the introduction of L, registration of files in this way is unnecessary, and even harmful, so this program should not be used. =head1 CONVERTING TO STATOVERRIDE Converting a package that uses this program to use the new statoverride mechanism is easy. Just remove the call to dh_suidregister from debian/rules, and add a versioned conflicts into your control file, as follows: Conflicts: suidmanager (<< 0.50) The conflicts is only necessary if your package used to register things with suidmanager; if it did not, you can just remove the call to this program from your rules file. =cut use strict; use Debian::Debhelper::Dh_Lib; init(); my $notused=1; foreach my $package (@{$dh{DOPACKAGES}}) { my $tmp=tmpdir($package); my $suid=pkgfile($package,"suid"); my $tostrip=''; my @files; if ($suid) { @files=filearray($suid, $tmp); } if (($package eq $dh{FIRSTPACKAGE} || $dh{PARAMS_ALL}) && @ARGV) { push @files, @ARGV; } if (! @files && ! $suid) { # No files specified (and no empty debian/suid file), so # guess what files to process. @files=split(/\n/,`find $tmp -type f -perm +6000`); # Strip the debian working directory off of the filenames. $tostrip="$tmp/"; } else { # We will strip leading /'s, so the user can feed this # program either absolute filenames, or relative filenames, # and it will do the right thing either way. $tostrip="/"; } # Register files with suidregister. foreach my $file (@files) { # Strip leading $tostrip from $file. $file=~s/^$tostrip//; # Create the sed string that will be used to # fill in the blanks in the autoscript files. # Fill with the owner, group, and perms of the file. my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat("$tmp/$file"); # Now come up with the user and group names for the uid and # gid. my $user=getpwuid($uid); if (! defined $user) { warning("$file has odd uid $uid, not in /etc/passwd"); $user=$uid; } my $group=getgrgid($gid); if (! defined $group) { warning("$file has odd gid $gid not in /etc/group"); $group=$gid; } # Note that I have to print mode in ocal, stripping file # type. my $sedstr=sprintf("s:#FILE#:$file:;s/#PACKAGE#/$package/;s/#OWNER#/$user/;s/#GROUP#/$group/;s/#PERMS#/%#o/", $mode & 07777); autoscript($package,"postinst","postinst-suid",$sedstr); autoscript($package,"postrm","postrm-suid","$sedstr"); } # Remove suid bits from files. This is delayed to this point, because # of a situation with hard linked files if it is done earlier. # See changelog for 2.0.77. foreach my $file (@files) { if ( -e "$tmp/$file") { doit("chmod","a-s","$tmp/$file"); } } if (@files) { warning("This program should no longer be used. Please read the dh_suidregister(1) man page."); $notused=0; } } # Although they called it, it's not going to do anything. if ($notused) { warning("This program is obsolete, does nothing, and may be safely removed from your rules file."); } =head1 SEE ALSO L This program is a part of debhelper. =head1 AUTHOR Joey Hess =cut