Make -I only apply to rm's run in the foreground. Silently discard it if
authorMatthew Dillon <dillon@dragonflybsd.org>
Fri, 3 Jun 2005 16:00:23 +0000 (16:00 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Fri, 3 Jun 2005 16:00:23 +0000 (16:00 +0000)
the rm is run in the background.

Reported-by: "George Georgalis" <george@galis.org>
bin/rm/rm.1
bin/rm/rm.c

index 76dc66d..55c1d06 100644 (file)
@@ -34,7 +34,7 @@
 .\"
 .\"    @(#)rm.1        8.5 (Berkeley) 12/5/94
 .\" $FreeBSD: src/bin/rm/rm.1,v 1.19.2.6 2003/02/04 22:10:42 trhodes Exp $
-.\" $DragonFly: src/bin/rm/rm.1,v 1.5 2004/11/05 19:09:53 dillon Exp $
+.\" $DragonFly: src/bin/rm/rm.1,v 1.6 2005/06/03 16:00:23 dillon Exp $
 .\"
 .Dd January 28, 1999
 .Dt RM 1
@@ -83,7 +83,9 @@ option overrides any previous
 options.
 .It Fl I
 Request confirmation once if more than three files are being removed or if a
-directory is being recursively removed.
+directory is being recursively removed.  This option only applies when the
+.Nm
+utility is run in the foreground.
 This is a far less intrusive option than
 .Fl i
 yet provides almost the same level of protection against mistakes.
index 54d723f..a78b4ff 100644 (file)
  * @(#) Copyright (c) 1990, 1993, 1994 The Regents of the University of California.  All rights reserved.
  * @(#)rm.c    8.5 (Berkeley) 4/18/94
  * $FreeBSD: src/bin/rm/rm.c,v 1.29.2.5 2002/07/12 07:25:48 tjr Exp $
- * $DragonFly: src/bin/rm/rm.c,v 1.11 2005/01/05 16:24:19 liamfoy Exp $
+ * $DragonFly: src/bin/rm/rm.c,v 1.12 2005/06/03 16:00:23 dillon Exp $
  */
 
 #include <sys/stat.h>
 #include <sys/param.h>
 #include <sys/mount.h>
+#include <sys/ioctl.h>
 
 #include <err.h>
 #include <errno.h>
@@ -74,6 +75,7 @@ main(int argc, char *argv[])
 {
        int ch;
        const char *p;
+       pid_t tty_pgrp;
 
        /*
         * Test for the special case where the utility is called as
@@ -110,7 +112,15 @@ main(int argc, char *argv[])
                        iflag = 1;
                        break;
                case 'I':
-                       Iflag = 1;
+                       /*
+                        * The -I flag is intended to be generally aliasable
+                        * in /etc/csh.cshrc.  We apply it only to foreground
+                        * processes.
+                        */
+                       if (ioctl(0, TIOCGPGRP, &tty_pgrp) == 0) {
+                               if (tty_pgrp == getpgrp())
+                                       Iflag = 1;
+                       }
                        break;
                case 'P':
                        Pflag = 1;