Fixup fromcvs/togit conversion
[minix-pkgsrc.git] / mk / pkginstall / usergroup-check
blobb8dc17bf3af29f8437d62348ab3a355de5e5386f
1 #!/bin/sh
3 # $NetBSD: usergroup-check,v 1.1 2006/05/21 23:50:15 jlam Exp $
5 # Copyright (c) 2006 The NetBSD Foundation, Inc.
6 # All rights reserved.
8 # This code is derived from software contributed to The NetBSD Foundation
9 # by Johnny C. Lam.
11 # Redistribution and use in source and binary forms, with or without
12 # modification, are permitted provided that the following conditions
13 # are met:
14 # 1. Redistributions of source code must retain the above copyright
15 # notice, this list of conditions and the following disclaimer.
16 # 2. Redistributions in binary form must reproduce the above copyright
17 # notice, this list of conditions and the following disclaimer in the
18 # documentation and/or other materials provided with the distribution.
19 # 3. All advertising materials mentioning features or use of this software
20 # must display the following acknowledgement:
21 # This product includes software developed by the NetBSD
22 # Foundation, Inc. and its contributors.
23 # 4. Neither the name of The NetBSD Foundation nor the names of its
24 # contributors may be used to endorse or promote products derived
25 # from this software without specific prior written permission.
27 # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
28 # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
29 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
30 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
31 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
32 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
33 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
34 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
35 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
36 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
37 # POSSIBILITY OF SUCH DAMAGE.
40 ######################################################################
42 # NAME
43 # usergroup-check -- verify that users/groups match numeric IDs
45 # SYNOPSIS
46 # usergroup-check -g [group_entry ...]
47 # usergroup-check -u [user_entry ...]
49 # DESCRIPTION
50 # usergroup-check checks for the existence of users and groups
51 # and verifies that they match the requested numeric IDs if
52 # given. The group_entry format matches that of /etc/group and
53 # the user_entry format matches that of /etc/passwd, though the
54 # field contents may be empty.
56 # usergroup-check exits 0 if the users and groups exist and match
57 # the numeric IDs, and >0 otherwise.
59 # OPTIONS
60 # The following command line arguments are supported.
62 # -g Indicates that the subsequent arguments are group entries.
64 # -u Indicates that the subsequent arguments are user entries.
66 ######################################################################
68 : ${PERL5=perl}
70 self="${0##*/}"
72 usage() {
73 echo 1>&2 "usage: $self -g [group_entry ...]"
74 echo 1>&2 " $self -u [user_entry ...]"
77 if test $# -lt 1; then
78 usage; exit 1
81 check=
82 case "$1" in
83 -g) check=groups ;;
84 -u) check=users ;;
85 *) usage; exit 1 ;;
86 esac
87 shift
89 missing_groups=
90 missing_users=
92 case $check in
93 groups)
94 while test $# -gt 0; do
95 entry="$1"; shift
96 ( SAVEIFS="$IFS"; IFS=":"
97 set -- $entry; group="$1"; groupid="$2"
98 IFS="$SAVEIFS"
99 gid=`${PERL5} -le 'print scalar getgrnam shift' $group`
100 test -n "$gid" || exit 1
101 case "$groupid" in
102 ""|$gid) exit 0 ;;
103 *) exit 1 ;;
104 esac ) || missing_groups="$missing_groups $i"
105 done
108 users)
109 missing_users=
110 while test $# -gt 0; do
111 entry="$1"; shift
112 ( SAVEIFS="$IFS"; IFS=":"
113 set -- $entry; user="$1"; userid="$3"
114 IFS="$SAVEIFS"
115 gid=`${PERL5} -le 'print scalar getpwnam shift' $user`
116 test -n "$gid" || exit 1
117 case "$userid" in
118 ""|$gid) exit 0 ;;
119 *) exit 1 ;;
120 esac ) || missing_users="$missing_users $i"
121 done
123 esac
125 test -z "$missing_groups" -a -z "$missing_users" || exit 1
126 exit 0