From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5470 invoked by alias); 26 Apr 2016 14:31:47 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 38348 Received: (qmail 4013 invoked from network); 26 Apr 2016 14:31:46 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, HTML_MESSAGE,T_DKIM_INVALID autolearn=ham autolearn_force=no version=3.4.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:date:message-id:subject:from:to; bh=hfV+8/9stM61Dlm5e+2JKvAhlHMmiLuheCKBSF+rUvY=; b=aOdeVaxVYqkHTJgOwosJUAKXjHXw3T4+zt1MFODGn6Wd8Cq78z3iy3tj5LFxmw7bOJ NpoCS2Cqh0DRQStzPJO7tELbZ7v4rsv25fr0Td2xpq3LzAP9CUzW48kHq30ykXs+ev60 2IWlEcmcIsQuwyCiu2shGhjz3eKdB7AWHFx+dkUYexINhpdUA4hE7ABfkfBQZjC8uBHP HvXKXwCnN1GliukTA3/BX8QseSGsrIUxKaIihrSI33vIBm+CjrXtCxUb1lvfKkTuSBkx UmW51h8mLv2tDcLXiGmsqlQb3qboyfLwk4EaOhAPfE2dI5Rz1APMg4y8QeEAH9xCjtM2 N1YA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:sender:date:message-id:subject:from :to; bh=hfV+8/9stM61Dlm5e+2JKvAhlHMmiLuheCKBSF+rUvY=; b=FsWpFkuadQ3NswtK0w5Y9deELtZ0D0JLYJYNcH+FAO4ZqS3+1cur35Vkc1b3uY0195 L6mY/7aKZQ1bUqQMomEwW1PIswB4dxgGdgVPxm32B1LRxvR4auL1WDjnA898arwukQui 5BTgDcS012P30FJQfZcrowmq+5QlQFHtiZbmH+nbSV4P6L9LebFRtHEYAeZrScDbSzVI GGEpVfXHnjdxrKlSRrVG34QV+STeg0RmSFf30QDOXdWAhPsZbc2lA0MusfAL6gZow/jT AIVaHEMsfW4VODzoj6o9QEpF/YgD2Pz1lnZ1F1kRXcWsja1tOxZX/a0BWvzILyPXD1uf hWYA== X-Gm-Message-State: AOPr4FUk/y5mi+47VrxEwdJEsef9CuFjk0U0XkBeKc+x3b0T+i9jgwzJrqNGAPM0sfvvpCj3LGCh8nm9rPDwDg== MIME-Version: 1.0 X-Received: by 10.50.230.17 with SMTP id su17mr3874211igc.80.1461681101935; Tue, 26 Apr 2016 07:31:41 -0700 (PDT) Sender: gssrox001@gmail.com X-Google-Sender-Delegation: gssrox001@gmail.com Date: Tue, 26 Apr 2016 10:31:41 -0400 X-Google-Sender-Auth: O2tSQ_pnnzDM4t5tyqwiC4l70iI Message-ID: Subject: [Patch] No warnings for `rm /*` From: Glenn Smith To: zsh-workers@zsh.org Content-Type: multipart/mixed; boundary=f46d04289c1ddc1eb5053164264c --f46d04289c1ddc1eb5053164264c Content-Type: multipart/alternative; boundary=f46d04289c1ddc1eb0053164264a --f46d04289c1ddc1eb0053164264a Content-Type: text/plain; charset=UTF-8 Hi all, I was reading a reddit thread today about shells protecting you from `rm -rf /` but not `rm -rf /*` and remembered how zsh has a feature that warns you before executing `rm *` or `rm /dir/*`. After a short investigation (and the loss of a few files, but that's beside the point), I discovered that zsh warns in every case except `rm /*`. This seemed like a serious oversight, so I cloned the repository and made a small patch that should fix this. You can find it attached to this message. I hope you accept this patch, as this is a simple fix that can save many people a lot of trouble. Thanks, Glenn --f46d04289c1ddc1eb0053164264a Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi all,
I was reading a reddit thread today about shells protecting you from= `rm -rf /` but not `rm -rf /*` and remembered how zsh has a feature that w= arns you before executing `rm *` or `rm /dir/*`. After a short investigatio= n (and the loss of a few files, but that's beside the point), I discove= red that zsh warns in every case except `rm /*`.

T= his seemed like a serious oversight, so I cloned the repository and made a = small patch that should fix this. You can find it attached to this message.= I hope you accept this patch, as this is a simple fix that can save many p= eople a lot of trouble.

Thanks,
Glenn
--f46d04289c1ddc1eb0053164264a-- --f46d04289c1ddc1eb5053164264c Content-Type: text/plain; charset=US-ASCII; name="fix-rm-slash-star.diff" Content-Disposition: attachment; filename="fix-rm-slash-star.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_inhj1h9i0 ZGlmZiAtLWdpdCBhL1NyYy9leGVjLmMgYi9TcmMvZXhlYy5jCmluZGV4IDUwZWZmNzIuLjNmMGEx NDEgMTAwNjQ0Ci0tLSBhL1NyYy9leGVjLmMKKysrIGIvU3JjL2V4ZWMuYwpAQCAtMjkwMiwxMyAr MjkwMiwyMyBAQCBleGVjY21kKEVzdGF0ZSBzdGF0ZSwgaW50IGlucHV0LCBpbnQgb3V0cHV0LCBp bnQgaG93LCBpbnQgbGFzdDEpCiAJICAgIGlmIChzWzBdID09IFN0YXIgJiYgIXNbMV0pIHsKIAkJ aWYgKCFjaGVja3JtYWxsKHB3ZCkpCiAJCSAgICB1cmVtbm9kZShhcmdzLCBub2RlKTsKLQkgICAg fSBlbHNlIGlmIChsID4gMiAmJiBzW2wgLSAyXSA9PSAnLycgJiYgc1tsIC0gMV0gPT0gU3Rhcikg ewotCQljaGFyIHQgPSBzW2wgLSAyXTsKLQotCQlzW2wgLSAyXSA9IDA7CisJICAgIH0gZWxzZSBp ZiAobCA+PSAyICYmIHNbbCAtIDJdID09ICcvJyAmJiBzW2wgLSAxXSA9PSBTdGFyKSB7CisJCWNo YXIgdDsKKwkJaWYgKGwgPiAyKSB7CisJCSAgICB0ID0gc1tsIC0gMl07CisJCSAgICBzW2wgLSAy XSA9IDA7CisJCX0gZWxzZSB7CisJCSAgICB0ID0gc1tsIC0gMV07CisJCSAgICBzW2wgLSAxXSA9 IDA7CisJCX0KIAkJaWYgKCFjaGVja3JtYWxsKHMpKQogCQkgICAgdXJlbW5vZGUoYXJncywgbm9k ZSk7Ci0JCXNbbCAtIDJdID0gdDsKKworCQlpZiAobCA+IDIpIHsKKwkJICAgIHNbbCAtIDJdID0g dDsKKwkJfSBlbHNlIHsKKwkJICAgIHNbbCAtIDFdID0gdDsKKwkJfQogCSAgICB9CiAJfQogCWlm ICghbmV4dG5vZGUoZmlyc3Rub2RlKGFyZ3MpKSkK --f46d04289c1ddc1eb5053164264c-- From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15564 invoked by alias); 26 Apr 2016 17:36:05 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 38350 Received: (qmail 17357 invoked from network); 26 Apr 2016 17:36:04 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=ham autolearn_force=no version=3.4.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20150623.gappssmtp.com; s=20150623; h=from:message-id:date:in-reply-to:comments:references:to:subject :mime-version; bh=bBMzpgMV0KepqG+v0tTRJkxs955rT8e4trjIDA5n2hE=; b=DHo611qy4aK9ApdS29PAyXHDwi5lGx1V0mYUf2Y/xN30PkEPC54Wb6takadr7ZGgP9 SreIGWHbg8rJ6z3puFj/gH3qqf/54Aba+rfrdNFRaREoHetv1xwkQJAScltdcjUyD+xP LerlsdOPTtFoWf/z++wBeQhBrUONJxXl1mWvBCYnCJNTiPTvuTGeGhlu7aCrsbDempFQ bz/sAdfwO2kb28YpnGehiIFyQwbBAjccfCXYGkiX+Ujl0hBDKTs+oTECXwf/c2q3iK0O kf44lyvYauO0RDju/IocTJDqppm1QQLtL5PtxVxUcMKVPLJ8JuZFj5TePuaP/xYtDErK +aXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:message-id:date:in-reply-to:comments :references:to:subject:mime-version; bh=bBMzpgMV0KepqG+v0tTRJkxs955rT8e4trjIDA5n2hE=; b=D8a3BXEvN8uZi90EZO32Ip8XSTm62/4OhxXCRNUEa35uWjTOJG4Rh3kuDZlxIFJjzo ikENESx/3DuYkkga9JtUx33oQm3pUutEAOO49tU8UjGSv4B1wZObhQLKvyebL8S7Kf1Z 4qmN03N+2MdfsvRCbvZF5iB9BXa99tCfBj3Gd30S7+Qmf8V3iBciDy4EqZqCPqpOR7GK NSqwQWM3cwCXBgZFhOQlrVGqoBwg9Tbqj6p/A2qGyvYj5Fs8dUCMDAC/nTAVHTBuKSC5 HtpNDbbX0fo3FNDWURaIlmj/lCSsGXvfgkuomkfyxAOmxAD3NLMalyLmKszvqz24qWh+ +DDg== X-Gm-Message-State: AOPr4FWWev6kOCx8u7ho9Sh+m2uyK/Bg5N/iFGo8BF9RxZWMXOjqa1LtyrB5VsdP8cH4uw== X-Received: by 10.67.14.7 with SMTP id fc7mr5373558pad.1.1461692160069; Tue, 26 Apr 2016 10:36:00 -0700 (PDT) From: Bart Schaefer Message-Id: <160426103624.ZM11049@torch.brasslantern.com> Date: Tue, 26 Apr 2016 10:36:24 -0700 In-Reply-To: Comments: In reply to Glenn Smith "[Patch] No warnings for `rm /*`" (Apr 26, 10:31am) References: X-Mailer: OpenZMail Classic (0.9.2 24April2005) To: zsh-workers@zsh.org Subject: Re: [Patch] No warnings for `rm /*` MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Apr 26, 10:31am, Glenn Smith wrote: } Subject: [Patch] No warnings for `rm /*` } } I discovered that zsh warns in every case except `rm /*`. Thanks. I think the following simpler patch does the same. diff --git a/Src/exec.c b/Src/exec.c index 50eff72..2dcd5bc 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -2902,11 +2902,11 @@ execcmd(Estate state, int input, int output, int how, int last1) if (s[0] == Star && !s[1]) { if (!checkrmall(pwd)) uremnode(args, node); - } else if (l > 2 && s[l - 2] == '/' && s[l - 1] == Star) { + } else if (l >= 2 && s[l - 2] == '/' && s[l - 1] == Star) { char t = s[l - 2]; s[l - 2] = 0; - if (!checkrmall(s)) + if (!checkrmall(*s ? s : "/")) uremnode(args, node); s[l - 2] = t; } As an aside: % rm /nonexistentdir/* zsh: sure you want to delete all the files in /nonexistentdir [yn]? Seems like we could detect when opendir() fails with ENOENT and skip the prompt, but maybe there are cases of race condition (directory is created after I type "rm ..." but before /bin/rm is executed?) where the default answer of "y" would be incorrect. From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14353 invoked by alias); 26 Apr 2016 18:08:56 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 38351 Received: (qmail 10990 invoked from network); 26 Apr 2016 18:08:55 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID autolearn=ham autolearn_force=no version=3.4.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc; bh=PTk3I1cKtRdPHQyEj26AC+CbGOow0nGhn7npJT8unQs=; b=R4JnNByRoKawo2PE/j+aYPG0GDgQ+P+e0uVVfPdL1RAZNYLcvXctqv/3nLu2yyDxaR U+IoirX9MqAxaWv+yi49T2FStKNFa/WKXoN0mDjofWNuKZER9L/gpjIem923qowanavN x0Qh8shlOpeTRST9L6gP49FZcwXiKlNuuT5IqCT5zdbOApRXKCa75zYWyq811PqYatNb gHqdhPhzCbmMsfygBVuFjxyQoOrB28VxHGXw0hX298ZzjVnKXIGqFOHwAzAtzC6pPdDJ vtkc9kxfk4SHr0Xux796CdLtEBtKcM+qBhHHcyUUeyv3CyibM1y+lh6dXr0whSJTMeDm Bxgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc; bh=PTk3I1cKtRdPHQyEj26AC+CbGOow0nGhn7npJT8unQs=; b=GYuSNceMy8jy6/ppR1Ax1dqIhGXVRpLxq6ady0TZVWW+giLczPPtl5Ms3xA6fM/7vB lRp4NvXyVSVQeL3YLzjOrzBHPK9wHAJ+kv8wlylvfnOx65psgDqrz4cTAKmYz/mmoJ4X iu/7TEeWBjclCMcPJoKctav6WETCJ7IXobdAuVkwB7EE1G5b0NoHjfygB7AOygK4kqzl tMg9HTdOuDli/LuS7x162xs2PW1U/dHL7A4Z5H0gPsDk/wXG5leyDB+mAoXloCxdaQR6 8qNFjcPbHu9SnkCJYlMAbhmfx29hIjMbUctsaCoRzzPvDjyrncxfCo0WY5pXKdNzhTBa BYsQ== X-Gm-Message-State: AOPr4FUHtskVN+Joi3S5YaA449aL+qM9RigUc7J11t3uWRxkTSOvF9/0TtyEqCJc/OhsMf6kd84guzcJBswyYQ== MIME-Version: 1.0 X-Received: by 10.55.47.70 with SMTP id v67mr3699431qkh.135.1461694128179; Tue, 26 Apr 2016 11:08:48 -0700 (PDT) In-Reply-To: <160426103624.ZM11049@torch.brasslantern.com> References: <160426103624.ZM11049@torch.brasslantern.com> Date: Tue, 26 Apr 2016 20:08:48 +0200 Message-ID: Subject: Re: [Patch] No warnings for `rm /*` From: Mikael Magnusson To: Bart Schaefer Cc: zsh workers Content-Type: text/plain; charset=UTF-8 On Tue, Apr 26, 2016 at 7:36 PM, Bart Schaefer wrote: > On Apr 26, 10:31am, Glenn Smith wrote: > } Subject: [Patch] No warnings for `rm /*` > } > } I discovered that zsh warns in every case except `rm /*`. > > Thanks. I think the following simpler patch does the same. > > diff --git a/Src/exec.c b/Src/exec.c > index 50eff72..2dcd5bc 100644 > --- a/Src/exec.c > +++ b/Src/exec.c > @@ -2902,11 +2902,11 @@ execcmd(Estate state, int input, int output, int how, int last1) > if (s[0] == Star && !s[1]) { > if (!checkrmall(pwd)) > uremnode(args, node); > - } else if (l > 2 && s[l - 2] == '/' && s[l - 1] == Star) { > + } else if (l >= 2 && s[l - 2] == '/' && s[l - 1] == Star) { > char t = s[l - 2]; > > s[l - 2] = 0; > - if (!checkrmall(s)) > + if (!checkrmall(*s ? s : "/")) > uremnode(args, node); > s[l - 2] = t; > } > > > As an aside: > > % rm /nonexistentdir/* > zsh: sure you want to delete all the files in /nonexistentdir [yn]? > > Seems like we could detect when opendir() fails with ENOENT and skip > the prompt, but maybe there are cases of race condition (directory is > created after I type "rm ..." but before /bin/rm is executed?) where > the default answer of "y" would be incorrect. This is pretty contrived, but it's not even a race condition. % mkdir /tmp/r; rm /tmp/r/.(e:'echo hello; touch $REPLY/foo:') /tmp/r/* zsh: sure you want to delete all the files in /tmp/r [yn]? y hello rm: cannot remove '/tmp/r/.': Is a directory removed '/tmp/r/foo' -- Mikael Magnusson