The Unix Heritage Society mailing list
 help / color / mirror / Atom feed
* [TUHS] rm command
@ 2018-04-27 16:42 Noel Chiappa
  0 siblings, 0 replies; 17+ messages in thread
From: Noel Chiappa @ 2018-04-27 16:42 UTC (permalink / raw)


    > From: Dave Horsfall <dave at horsfall.org>

    > I am constantly bemused by the number of "setuid root" commands, when a
    > simple "setgid whatever" will achieve the same task.

  http://minnie.tuhs.org/cgi-bin/utree.pl?file=V6/usr/sys/ken/sys4.c

  /*
   * Unlink system call.
   */

  unlink()
  {	...

	if((ip->i_mode&IFMT)==IFDIR && !suser())
		goto out;

For many things, yes. Not in this particular case.

	Noel


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [TUHS] rm command
  2018-04-28 16:33       ` Michael Kjörling
  2018-04-28 18:01         ` Ian Zimmerman
@ 2018-04-28 18:51         ` Derek Fawcus
  1 sibling, 0 replies; 17+ messages in thread
From: Derek Fawcus @ 2018-04-28 18:51 UTC (permalink / raw)


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 357 bytes --]

On Sat, Apr 28, 2018 at 04:33:51PM +0000, Michael Kjörling wrote:
> 
> If you want weird, then tell me why on Earth /bin/ping _really_ needs
> to be setuid root on Linux (has no one heard of capabilities?),

It doesn't even need that anymore, like darwin it supports SOCK_DGRAM
ICMP sockets, such that ping can be written as an unpriviledged program.

DF


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [TUHS] rm command
  2018-04-28 16:33       ` Michael Kjörling
@ 2018-04-28 18:01         ` Ian Zimmerman
  2018-04-28 18:51         ` Derek Fawcus
  1 sibling, 0 replies; 17+ messages in thread
From: Ian Zimmerman @ 2018-04-28 18:01 UTC (permalink / raw)


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 737 bytes --]

On 2018-04-28 16:33, Michael Kjörling wrote:

> /bin/fusermount is, of all modes they could choose from, `-rwsr-xr--`.

it is setuid root because it needs the mount() syscall.
it is only executable by a group (probably other than root, but you
didn't say) to restrict the functionality to a subset of real users.

I find than debian has these things _very_ well thought out - better
than any Unix-like system in widespread use now.  Or rather, 2 years ago
when I stopped using it because systemd.

-- 
Please don't Cc: me privately on mailing lists and Usenet,
if you also post the followup to the list or newsgroup.
To reply privately _only_ on Usenet and on broken lists
which rewrite From, fetch the TXT record for no-use.mooo.com.


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [TUHS] rm command
  2018-04-27 18:17     ` Pete Wright
@ 2018-04-28 16:33       ` Michael Kjörling
  2018-04-28 18:01         ` Ian Zimmerman
  2018-04-28 18:51         ` Derek Fawcus
  0 siblings, 2 replies; 17+ messages in thread
From: Michael Kjörling @ 2018-04-28 16:33 UTC (permalink / raw)


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1725 bytes --]

On 27 Apr 2018 11:17 -0700, from pete at nomadlogic.org (Pete Wright):
>>>    On my FreeBSD server:
>>> 
>>>     % ls -l /bin/ps
>>>     -r-xr-xr-x  1 root  wheel  35640 Oct 15  2017 /bin/ps
>>> 
>>>    On my crappy MacBook:
>>> 
>>>     % ls -l /bin/ps
>>>     -rwsr-xr-x  1 root  wheel  51200 Jul 15  2017 /bin/ps
>> 
>> Debian 9:
>> 
>> nicci at jesustheasus:~$ ls -l $(which ps)
>> -rwxr-xr-x 1 root root 129336 Nov 22  2016 /bin/ps
>> 
>> Debian 8 kFreeBSD:
>> 
>> [usotsuki at licca ~]$ ls -l $(which ps)
>> -rwxr-xr-x 1 root root 93088 Mar  6  2015 /bin/ps

Debian 7 is the same, except /bin/ps is 93120 bytes there.


> interesting how the gnu userland marks ps as owner-writable, not
> sure it matters, but interesting...

That's more likely the package manager, or the packaging done by the
package maintainer, than it is anything about GNU per se.

I've got a gazillion 0755 0:0 binaries on my system. In fact, running
`ls -l /usr/bin | grep -v '^.rwx'` on my desktop Debian box returns
only a handful of hits, all of which are u=rws and a few of which are
g=r-s.

If you're root enough to take advantage of the owner-writable bit on a
file owned by root, then you're root enough to make quite a mess even
if they were mode 0555 or even 0111.

If you want weird, then tell me why on Earth /bin/ping _really_ needs
to be setuid root on Linux (has no one heard of capabilities?), or why
/bin/fusermount is, of all modes they could choose from, `-rwsr-xr--`.

-- 
Michael Kjörling • https://michael.kjorling.se • michael at kjorling.se
  “The most dangerous thought that you can have as a creative person
              is to think you know what you’re doing.” (Bret Victor)


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [TUHS] rm command
  2018-04-27 18:14   ` Steve Nickolas
@ 2018-04-27 18:17     ` Pete Wright
  2018-04-28 16:33       ` Michael Kjörling
  0 siblings, 1 reply; 17+ messages in thread
From: Pete Wright @ 2018-04-27 18:17 UTC (permalink / raw)


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1477 bytes --]



On 04/27/2018 11:14, Steve Nickolas wrote:
> On Sat, 28 Apr 2018, Dave Horsfall wrote:
>
>> On Wed, 25 Apr 2018, Noel Chiappa wrote:
>>
>>> On early PDP-11 Unixes, 'rm' is an ordinary program, and 'rmdir' is 
>>> setuid-root, since it has to do special magic (writing into 
>>> directory files, etc). Given that, it made sense to have 'rm' run 
>>> with the least amount of privilege needed to do its job.
>>
>> I am constantly bemused by the number of "setuid root" commands, when 
>> a simple "setgid whatever" will achieve the same task.
>>
>> My mantra has always been: "If you think you need setuid root, then 
>> you are probably thinking wrong."
>>
>> My favourite here is the "ps" command:
>>
>>    On my FreeBSD server:
>>
>>     % ls -l /bin/ps
>>     -r-xr-xr-x  1 root  wheel  35640 Oct 15  2017 /bin/ps
>>
>>    On my crappy MacBook:
>>
>>     % ls -l /bin/ps
>>     -rwsr-xr-x  1 root  wheel  51200 Jul 15  2017 /bin/ps
>>
>> (I didn't check my Penguin box, because I don't think that I'll like 
>> what I'll see.)
>>
>> -- Dave
>>
>
> Debian 9:
>
> nicci at jesustheasus:~$ ls -l $(which ps)
> -rwxr-xr-x 1 root root 129336 Nov 22  2016 /bin/ps
>
> Debian 8 kFreeBSD:
>
> [usotsuki at licca ~]$ ls -l $(which ps)
> -rwxr-xr-x 1 root root 93088 Mar  6  2015 /bin/ps
>
interesting how the gnu userland marks ps as owner-writable, not sure it 
matters, but interesting...

-p

-- 
Pete Wright
pete at nomadlogic.org
@nomadlogicLA



^ permalink raw reply	[flat|nested] 17+ messages in thread

* [TUHS] rm command
  2018-04-27 16:26 ` Dave Horsfall
  2018-04-27 16:58   ` Ian Zimmerman
@ 2018-04-27 18:14   ` Steve Nickolas
  2018-04-27 18:17     ` Pete Wright
  1 sibling, 1 reply; 17+ messages in thread
From: Steve Nickolas @ 2018-04-27 18:14 UTC (permalink / raw)


On Sat, 28 Apr 2018, Dave Horsfall wrote:

> On Wed, 25 Apr 2018, Noel Chiappa wrote:
>
>> On early PDP-11 Unixes, 'rm' is an ordinary program, and 'rmdir' is 
>> setuid-root, since it has to do special magic (writing into directory 
>> files, etc). Given that, it made sense to have 'rm' run with the least 
>> amount of privilege needed to do its job.
>
> I am constantly bemused by the number of "setuid root" commands, when a 
> simple "setgid whatever" will achieve the same task.
>
> My mantra has always been: "If you think you need setuid root, then you are 
> probably thinking wrong."
>
> My favourite here is the "ps" command:
>
>    On my FreeBSD server:
>
> 	% ls -l /bin/ps
> 	-r-xr-xr-x  1 root  wheel  35640 Oct 15  2017 /bin/ps
>
>    On my crappy MacBook:
>
> 	% ls -l /bin/ps
> 	-rwsr-xr-x  1 root  wheel  51200 Jul 15  2017 /bin/ps
>
> (I didn't check my Penguin box, because I don't think that I'll like what 
> I'll see.)
>
> -- Dave
>

Debian 9:

nicci at jesustheasus:~$ ls -l $(which ps)
-rwxr-xr-x 1 root root 129336 Nov 22  2016 /bin/ps

Debian 8 kFreeBSD:

[usotsuki at licca ~]$ ls -l $(which ps)
-rwxr-xr-x 1 root root 93088 Mar  6  2015 /bin/ps

-uso.


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [TUHS] rm command
  2018-04-27 16:26 ` Dave Horsfall
@ 2018-04-27 16:58   ` Ian Zimmerman
  2018-04-27 18:14   ` Steve Nickolas
  1 sibling, 0 replies; 17+ messages in thread
From: Ian Zimmerman @ 2018-04-27 16:58 UTC (permalink / raw)


On 2018-04-28 02:26, Dave Horsfall wrote:

>     On my FreeBSD server:
> 
> 	% ls -l /bin/ps
> 	-r-xr-xr-x  1 root  wheel  35640 Oct 15  2017 /bin/ps
> 
>     On my crappy MacBook:
> 
> 	% ls -l /bin/ps
> 	-rwsr-xr-x  1 root  wheel  51200 Jul 15  2017 /bin/ps

Clearly this will depend on how ps is implemented, which is one of the
messier aspects of our favorite OS.  If it does its thing just by
reading a pseudo-file or a pseudo-device, then setgid will be enough,
but maybe it needs to execute a root-only system call.

There is a longish thread on comp.unix.programmer right now about this
very topic.

-- 
Please don't Cc: me privately on mailing lists and Usenet,
if you also post the followup to the list or newsgroup.
To reply privately _only_ on Usenet and on broken lists
which rewrite From, fetch the TXT record for no-use.mooo.com.


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [TUHS] rm command
  2018-04-25 22:17 Noel Chiappa
@ 2018-04-27 16:26 ` Dave Horsfall
  2018-04-27 16:58   ` Ian Zimmerman
  2018-04-27 18:14   ` Steve Nickolas
  0 siblings, 2 replies; 17+ messages in thread
From: Dave Horsfall @ 2018-04-27 16:26 UTC (permalink / raw)


On Wed, 25 Apr 2018, Noel Chiappa wrote:

> On early PDP-11 Unixes, 'rm' is an ordinary program, and 'rmdir' is 
> setuid-root, since it has to do special magic (writing into directory 
> files, etc). Given that, it made sense to have 'rm' run with the least 
> amount of privilege needed to do its job.

I am constantly bemused by the number of "setuid root" commands, when a 
simple "setgid whatever" will achieve the same task.

My mantra has always been: "If you think you need setuid root, then you 
are probably thinking wrong."

My favourite here is the "ps" command:

     On my FreeBSD server:

 	% ls -l /bin/ps
 	-r-xr-xr-x  1 root  wheel  35640 Oct 15  2017 /bin/ps

     On my crappy MacBook:

 	% ls -l /bin/ps
 	-rwsr-xr-x  1 root  wheel  51200 Jul 15  2017 /bin/ps

(I didn't check my Penguin box, because I don't think that I'll like what 
I'll see.)

-- Dave


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [TUHS] rm command
  2018-04-26  2:19 Doug McIlroy
@ 2018-04-26  9:41 ` Ralph Corderoy
  0 siblings, 0 replies; 17+ messages in thread
From: Ralph Corderoy @ 2018-04-26  9:41 UTC (permalink / raw)


Hi Doug,

> > Google didn't seem to turn up much on TML
>
> Perhaps because there was no TML. I suspect you mean TMG

I do indeed, thanks;  all these `ML's nowadays must have corrupted my
memory.  Google knows lots about TMG,

    http://multicians.org/pl1.html#EPL
    http://multicians.org/tmg.html
    https://www.princeton.edu/~hos/mike/transcripts/mcilroy.htm
    http://hopl.info/showlanguage.prx?exp=242

and even GNU m4 has

    info '(m4)History' | cat

-- 
Cheers, Ralph.
https://plus.google.com/+RalphCorderoy


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [TUHS] rm command
@ 2018-04-26  2:19 Doug McIlroy
  2018-04-26  9:41 ` Ralph Corderoy
  0 siblings, 1 reply; 17+ messages in thread
From: Doug McIlroy @ 2018-04-26  2:19 UTC (permalink / raw)


> Google didn't seem to turn up much on TML

Perhaps because there was no TML. I suspect you mean TMG,
which I implemented from scratch, based on Bob McClure's 
original, on both PDP 8 and PDP 11 Unix. Bob Morris and
I used it to make EPL, the "early PL/I" compiler for
Multics. 

Off topic, but TMG on the GE 635, usedto buld Multics
got there via quite an Odyssey. Bob McClure created it 
for the CDC 1604. He tranliterated it by hand from 1604
assembly language to IBM 7090 and sent the green coding
sheets to me. Debugging it was an unusual exercise: I 
knew the logic was right; allI had to do was ferret
out mistranslations. The most prevalant problem was
confusion between CLA (signed load) and CAL (unsigned).
When we decided to do EPL, Clem Pease mechanically
reproduced a 7090 inside a Ge 635, by defining 7090
instructions as macros--sometimes quite hairy, but 
they worked.

Doug


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [TUHS] rm command
@ 2018-04-25 22:17 Noel Chiappa
  2018-04-27 16:26 ` Dave Horsfall
  0 siblings, 1 reply; 17+ messages in thread
From: Noel Chiappa @ 2018-04-25 22:17 UTC (permalink / raw)


    > From: William Corcoran

    > I think it's a bit more interesting to uncover why rm does not remove
    > directories by default thereby obviating the need for rmdir

On early PDP-11 Unixes, 'rm' is an ordinary program, and 'rmdir' is
setuid-root, since it has to do special magic (writing into directory files,
etc). Given that, it made sense to have 'rm' run with the least amount of
privilege needed to do its job.

	Noel


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [TUHS] rm command
  2018-04-25 21:53   ` William Corcoran
  2018-04-25 21:58     ` Derek Fawcus
@ 2018-04-25 22:09     ` Ralph Corderoy
  1 sibling, 0 replies; 17+ messages in thread
From: Ralph Corderoy @ 2018-04-25 22:09 UTC (permalink / raw)


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 604 bytes --]

Hi Bill,

> I think it’s a bit more interesting to uncover why rm does not remove
> directories by default thereby obviating the need for rmdir

Well, I'd guess it's: rm just does a single unlink to decrement an
inode's reference count by one, actually increment it since they were
negative, whereas rmdir on an empty directory needs to do two
decrements, one for its directory entry in the parent, and one for `..'.

(I think hard links could apply to directories in the early days, until
it made things too awkward, e.g. du(1) and cycles.)

-- 
Cheers, Ralph.
https://plus.google.com/+RalphCorderoy


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [TUHS] rm command
  2018-04-25 21:53   ` William Corcoran
@ 2018-04-25 21:58     ` Derek Fawcus
  2018-04-25 22:09     ` Ralph Corderoy
  1 sibling, 0 replies; 17+ messages in thread
From: Derek Fawcus @ 2018-04-25 21:58 UTC (permalink / raw)


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 692 bytes --]

On Wed, Apr 25, 2018 at 09:53:26PM +0000, William Corcoran wrote:
> Agreed.  Plus, it’s unmistakable that rm meant “remove” when you examine her sister “rmdir.”
> 
> I think it’s a bit more interesting to uncover why rm does not remove directories by default thereby obviating the need for rmdir—-especially since the potentially nightmarish  incantation of “rm -rf” does include files, folders and just about everything else in between.

Maybe because rm could just be wrapper around unlink,
whereas rmdir also had to remove '.' and '..' before
unlinking the directory?

Or maybe just symmetry with mkdir which had to use mknod,
and manual population of '.' and '..'?

DF


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [TUHS] rm command
  2018-04-25 21:33 ` John P. Linderman
@ 2018-04-25 21:53   ` William Corcoran
  2018-04-25 21:58     ` Derek Fawcus
  2018-04-25 22:09     ` Ralph Corderoy
  0 siblings, 2 replies; 17+ messages in thread
From: William Corcoran @ 2018-04-25 21:53 UTC (permalink / raw)


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1605 bytes --]

Agreed.  Plus, it’s unmistakable that rm meant “remove” when you examine her sister “rmdir.”

I think it’s a bit more interesting to uncover why rm does not remove directories by default thereby obviating the need for rmdir—-especially since the potentially nightmarish  incantation of “rm -rf” does include files, folders and just about everything else in between.

Bill Corcoran

On Apr 25, 2018, at 5:36 PM, John P. Linderman <jpl.jpl at gmail.com<mailto:jpl.jpl at gmail.com>> wrote:

Another country heard from.<http://www.tldp.org/LDP/LG/issue49/fischer.html> I doubt the Robert Morris story, given that a command as fundamental as "rm" must have come about very early in the development, and there isn't a pattern of naming commands after their authors.

On Wed, Apr 25, 2018 at 1:22 PM, Eric Blood <winkywooster at gmail.com<mailto:winkywooster at gmail.com>> wrote:
I came across this yesterday:

> Fun fact: according to unsubstantiated UNIX lore, "rm" is NOT short-hand
> for "remove" but rather, it stands for the initials of the developer that wrote
> the original implementation, Robert Morris.
>
> https://news.ycombinator.com/item?id=16916565

I was curious if there's any truth to it.  I found
http://minnie.tuhs.org/cgi-bin/utree.pl and was poking around but
couldn't determine when the rm command came about.

Thoughts?

--
Eric Blood
winkywooster at gmail.com<mailto:winkywooster at gmail.com>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://minnie.tuhs.org/pipermail/tuhs/attachments/20180425/85c63fec/attachment-0001.html>


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [TUHS] rm command
  2018-04-25 20:22 Eric Blood
  2018-04-25 21:23 ` Ralph Corderoy
@ 2018-04-25 21:33 ` John P. Linderman
  2018-04-25 21:53   ` William Corcoran
  1 sibling, 1 reply; 17+ messages in thread
From: John P. Linderman @ 2018-04-25 21:33 UTC (permalink / raw)


Another country heard from.
<http://www.tldp.org/LDP/LG/issue49/fischer.html> I doubt the Robert Morris
story, given that a command as fundamental as "rm" must have come about
very early in the development, and there isn't a pattern of naming commands
after their authors.

On Wed, Apr 25, 2018 at 1:22 PM, Eric Blood <winkywooster at gmail.com> wrote:

> I came across this yesterday:
>
> > Fun fact: according to unsubstantiated UNIX lore, "rm" is NOT short-hand
> > for "remove" but rather, it stands for the initials of the developer
> that wrote
> > the original implementation, Robert Morris.
> >
> > https://news.ycombinator.com/item?id=16916565
>
> I was curious if there's any truth to it.  I found
> http://minnie.tuhs.org/cgi-bin/utree.pl and was poking around but
> couldn't determine when the rm command came about.
>
> Thoughts?
>
> --
> Eric Blood
> winkywooster at gmail.com
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://minnie.tuhs.org/pipermail/tuhs/attachments/20180425/31ec0375/attachment.html>


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [TUHS] rm command
  2018-04-25 20:22 Eric Blood
@ 2018-04-25 21:23 ` Ralph Corderoy
  2018-04-25 21:33 ` John P. Linderman
  1 sibling, 0 replies; 17+ messages in thread
From: Ralph Corderoy @ 2018-04-25 21:23 UTC (permalink / raw)


Hi Eric,

> > it stands for the initials of the developer that wrote
> > the original implementation, Robert Morris.

http://minnie.tuhs.org/cgi-bin/utree.pl?file=V1/man/man1/rm.1, i.e. 1st
Ed., says the OWNER is `ken, dmr' so it seems unlikely as I understand
Bell Labs worked on a `last to touch it, owns it' principle.

http://minnie.tuhs.org/cgi-bin/utree.pl?file=V1/u2.s has sysunlink.

It's such a fundamental command that I'd have thought it was an early
obvious addition, and a small one at that.  Bob Morris seemed to always
be involved in the more intricate stuff like various crypt(3)s, and TML,
based on what we hear about him.  (Google didn't seem to turn up much on
TML.)

-- 
Cheers, Ralph.
https://plus.google.com/+RalphCorderoy


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [TUHS] rm command
@ 2018-04-25 20:22 Eric Blood
  2018-04-25 21:23 ` Ralph Corderoy
  2018-04-25 21:33 ` John P. Linderman
  0 siblings, 2 replies; 17+ messages in thread
From: Eric Blood @ 2018-04-25 20:22 UTC (permalink / raw)


I came across this yesterday:

> Fun fact: according to unsubstantiated UNIX lore, "rm" is NOT short-hand
> for "remove" but rather, it stands for the initials of the developer that wrote
> the original implementation, Robert Morris.
>
> https://news.ycombinator.com/item?id=16916565

I was curious if there's any truth to it.  I found
http://minnie.tuhs.org/cgi-bin/utree.pl and was poking around but
couldn't determine when the rm command came about.

Thoughts?

-- 
Eric Blood
winkywooster at gmail.com


^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2018-04-28 18:51 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-27 16:42 [TUHS] rm command Noel Chiappa
  -- strict thread matches above, loose matches on Subject: below --
2018-04-26  2:19 Doug McIlroy
2018-04-26  9:41 ` Ralph Corderoy
2018-04-25 22:17 Noel Chiappa
2018-04-27 16:26 ` Dave Horsfall
2018-04-27 16:58   ` Ian Zimmerman
2018-04-27 18:14   ` Steve Nickolas
2018-04-27 18:17     ` Pete Wright
2018-04-28 16:33       ` Michael Kjörling
2018-04-28 18:01         ` Ian Zimmerman
2018-04-28 18:51         ` Derek Fawcus
2018-04-25 20:22 Eric Blood
2018-04-25 21:23 ` Ralph Corderoy
2018-04-25 21:33 ` John P. Linderman
2018-04-25 21:53   ` William Corcoran
2018-04-25 21:58     ` Derek Fawcus
2018-04-25 22:09     ` Ralph Corderoy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).