1 /* Test for processing of invalid gshadow entries. [BZ #18724]
2 Copyright (C) 2015-2021 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
17 <https://www.gnu.org/licenses/>. */
29 check (struct sgrp e
, const char *expected
)
33 FILE *f
= open_memstream (&buf
, &buf_size
);
37 printf ("open_memstream: %m\n");
42 int ret
= putsgent (&e
, f
);
50 printf ("putsgent: unexpected error code: %m\n");
56 printf ("putsgent: unexpected success (\"%s\")\n", e
.sg_namp
);
63 size_t expected_length
= strlen (expected
);
66 long written
= ftell (f
);
68 if (written
<= 0 || fflush (f
) < 0)
70 printf ("stream error: %m\n");
73 else if (buf
[written
- 1] != '\n')
75 printf ("FAILED: \"%s\" without newline\n", expected
);
78 else if (strncmp (buf
, expected
, written
- 1) != 0
79 || written
- 1 != expected_length
)
81 printf ("FAILED: \"%s\" (%ld), expected \"%s\" (%zu)\n",
82 buf
, written
- 1, expected
, expected_length
);
88 printf ("FAILED: putsgent (expected \"%s\"): %m\n", expected
);
100 check ((struct sgrp
) {
101 .sg_namp
= (char *) "root",
104 check ((struct sgrp
) {
105 .sg_namp
= (char *) "root",
106 .sg_passwd
= (char *) "password",
109 check ((struct sgrp
) {
110 .sg_namp
= (char *) "root",
111 .sg_passwd
= (char *) "password",
112 .sg_adm
= (char *[]) {(char *) "adm1", (char *) "adm2", NULL
},
113 .sg_mem
= (char *[]) {(char *) "mem1", (char *) "mem2", NULL
},
115 "root:password:adm1,adm2:mem1,mem2");
119 static const char *const bad_strings
[] = {
137 for (const char *const *bad
= bad_strings
; *bad
!= NULL
; ++bad
)
140 = {(char *) "first", (char *) *bad
, (char *) "last", NULL
};
141 if (strpbrk (*bad
, ":\n") != NULL
)
143 check ((struct sgrp
) {
144 .sg_namp
= (char *) *bad
,
146 check ((struct sgrp
) {
147 .sg_namp
= (char *) "root",
148 .sg_passwd
= (char *) *bad
,
151 check ((struct sgrp
) {
152 .sg_namp
= (char *) "root",
153 .sg_passwd
= (char *) "password",
156 check ((struct sgrp
) {
157 .sg_namp
= (char *) "root",
158 .sg_passwd
= (char *) "password",
167 #define TEST_FUNCTION do_test ()
168 #include "../test-skeleton.c"