GNU bug report logs - #45570
operating-system definitions allow duplicate passwd and group entries

Previous Next

Package: guix;

Reported by: Jason Conroy <conjaroy <at> gmail.com>

Date: Thu, 31 Dec 2020 18:15:02 UTC

Severity: normal

Done: Leo Prikler <leo.prikler <at> student.tugraz.at>

Bug is archived. No further changes may be made.

Full log


Message #17 received at 45570 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: Leo Prikler <leo.prikler <at> student.tugraz.at>
Cc: 45570 <at> debbugs.gnu.org, conjaroy <at> gmail.com
Subject: Re: bug#45570: [PATCH] system: Assert, that user and group names
 are unique.
Date: Wed, 06 Jan 2021 10:56:23 +0100
Hi,

Leo Prikler <leo.prikler <at> student.tugraz.at> skribis:

> *gnu/system/shadow.scm (find-duplicates): New variable.
> (assert-unique-account-names, assert-unique-group-names): New variables.
> (account-activation): Use them here.

[...]

> +(define (find-duplicates list =)
> +  (match list
> +    ('() '())

This should be:

  (match list
    (() '())
    …)

I’m surprised '() works as a pattern.

> +    ((first . rest)
> +     (if (member first rest =) ; (srfi srfi-1) member
> +         (cons first (find-duplicates rest =))
> +         (find-duplicates rest =)))))

Note that this is quadratic; it’s fine as long as we don’t have “too
many” users, which may be the case in general.

> +(define (assert-unique-account-names users)
> +  (for-each
> +   (lambda (account)
> +     (raise (condition
> +             (&message
> +              (message
> +               (format #f (G_ "account with name '~a' found twice.")
> +                       (user-account-name account)))))))
> +   (find-duplicates users (lambda (alice bob)
> +                            (string=? (user-account-name alice)
> +                                      (user-account-name bob))))))

‘for-each’ looks awkward since we’ll stop on the first one.  How about
something like:

  (define (assert-unique-account-names users)
    (match (find-duplicates things …)
      (() #t)
      (lst
       (raise (formatted-message (G_ "the following accounts appear more than once:~{ ~a~}~%"
                                 lst))))))

?

Thanks!

Ludo’.




This bug report was last modified 4 years and 217 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.