Просмотр исходного кода

add new --import option to import settings from /etc/suid.conf

Wichert Akkerman лет назад: 25
Родитель
Сommit
c67116ec1e
5 измененных файлов с 59 добавлено и 2 удалено
  1. 5 0
      ChangeLog
  2. 6 0
      TODO
  3. 2 0
      debian/changelog
  4. 10 1
      scripts/dpkg-statoverride.8
  5. 36 1
      scripts/dpkg-statoverride.pl

+ 5 - 0
ChangeLog

@@ -1,3 +1,8 @@
+Thu Nov 30 02:45:42 CET 2000 Wichert Akkerman <wakkerma@debian.org>
+
+  * scripts/dpkg-statoverride.{pl,8}: add new --import option to
+    import settings from /etc/suid.conf
+
 Tue 28 Nov 18:48:52 CET 2000 peter karlsson <peterk@debian.org>
 
   * po/sv.po: Terminology changes

+ 6 - 0
TODO

@@ -17,6 +17,12 @@ dpkg
 * try to remove directories again after removing conffiles
 * verify Enhances works (ie don't trigger some assertion)
 
+Fix:
+<joeyh_> package a conflicted with old versions of package b. package b
+      conficted with old versions of package a. I had the old versions of both
+      installed, and told dpkg to install the new versions of a and b
+      simulantaneously. It refused.
+
 dselect:
 * support Enhances (GNU/FSF)
 * toggle for searching through descriptions

+ 2 - 0
debian/changelog

@@ -3,6 +3,8 @@ dpkg (1.8.0) unstable; urgency=low
   * Fix two memory leaks. Closes: Bug#74259
   * Fix some things perl5.6 complains about. Closes: Bug#77337
   * Fix referenes to dpkg-deb manpage. Closes: Bug#77855
+  * Add new --import option to dpkg-statoverride to make it easy to
+    import suidmanager settings.
 
  -- Wichert Akkerman <wakkerma@debian.org>  UNRELEASED
 

+ 10 - 1
scripts/dpkg-statoverride.8

@@ -1,4 +1,4 @@
-.TH DPKG-STATOVERRIDE 8 "June 2000" "Debian project" "dpkg utililties"
+.TH DPKG-STATOVERRIDE 8 "November 2000" "Debian project" "dpkg utililties"
 .SH NAME
 dpkg-statoverride -- override ownership and mode of files
 .SH SYNOPSIS
@@ -6,6 +6,8 @@ dpkg-statoverride -- override ownership and mode of files
 .br
 \fBdpkg-statoverride\fR [options] --remove \fI<file>\fR
 .br
+\fBdpkg-statoverride\fR [options] --import \fI<package>\fR \fI<file>\fR
+.br
 \fBdpkg-statoverride\fR [options] --list \fI[<glob-pattern>]\fR
 .SH DESCRIPTION
 `\fBstat overrides\fR' are a way to tell dpkg to use a different owner
@@ -30,6 +32,13 @@ groups can be specified by their name (for example \fBroot\fR or
 .I --remove <file>
 Remove an override for \fB<file>\fR.
 .TP
+.TP
+.I --import <package> <file>
+Import the override for file \fB<file>\fR as provided by package
+\fB<package>\fR. If the user has not made an override nothing is
+done and the default permissions are used. If an override is present
+it is removed from \fI/etc/suid.conf\fR and added to the statoverride
+database.
 .I --list [<glob-pattern>]
 List all overrides. If a glob pattern is specified restrict the output
 to overrides which match the glob.

+ 36 - 1
scripts/dpkg-statoverride.pl

@@ -19,6 +19,7 @@ for copying conditions.  There is NO warranty.
 Usage:
 
   dpkg-statoverride [options] --add <owner> <group> <mode> <file>
+  dpkg-statoverride [options] --import <package> <file>
   dpkg-statoverride [options] --remove <file>
   dpkg-statoverride [options] --list [<glob-pattern>]
 
@@ -61,6 +62,9 @@ while (@ARGV) {
 	} elsif (m/^--list$/) {
 		&CheckModeConflict;
 		$mode= 'list';
+	} elsif (m/^--import$/) {
+		&CheckModeConflict;
+		$mode= 'import';
 	} else {
 		&badusage("unknown option \`$_'");
 	}
@@ -118,7 +122,7 @@ if ($mode eq "add") {
 	    }
 	}
 } elsif ($mode eq "remove") {
-	@ARGV==1 || &badusage("--remove needs four arguments");
+	@ARGV==1 || &badusage("--remove needs one arguments");
 	$file=$ARGV[0];
 	if (not defined $user{$file}) {
 		print "No override present.";
@@ -129,6 +133,37 @@ if ($mode eq "add") {
 	delete $mode{$file};
 	$dowrite=1;
 	print STDERR "warning: --update is useless for --remove\n" if ($doupdate);
+} elsif ($mode eq "import") {
+	@ARGV==2 || &badusage("--import needs two arguments");
+	$pkg=$ARGV[0];
+	$file=$ARGV[1];
+	if (defined $user{$file}) {
+		print STDERR "An override for \"$file\" already exists, ";
+		if ($doforce) {
+			print STDERR "but --force specified so lets ignore it.\n";
+		} else {
+			print STDERR "aborting\n";
+			exit(3);
+		}
+		SUIDCONF=open("/etc/suid.conf") || &quit("error opening /etc/suid.conf");
+		while (<SUIDCONF>) {
+			chomp;
+			($sm_pkg,$sm_file,$sm_user,$sm_group)=split;
+			next ($sm_file != $pkg) next;
+			last if ($sm_pkg==$pkg);
+			$sm_user="#$sm_user") if ($sm_user =~ m/^\d*$/);
+			$sm_group="#$sm_group") if ($sm_group =~ m/^\d*$/);
+			$user{$fm_file}=$sm_user;
+			$group{$fm_file}=$sm_group;
+			if { -x /usr/sbin/suidunregister) {
+				@args = ("suidunregister", "$file");
+				system(@args) == 0 || &quit("system @args failed: $?");
+			}
+			$dowrite=1;
+			last;
+		}
+		close(SUIDCONF);
+	}
 } elsif ($mode eq "list") {
 	my (@list,@ilist,$pattern,$file);