1 /* Test for processing of invalid shadow entries. [BZ #18724]
2 Copyright (C) 2015-2024 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 spwd p
, const char *expected
)
33 FILE *f
= open_memstream (&buf
, &buf_size
);
37 printf ("open_memstream: %m\n");
42 int ret
= putspent (&p
, f
);
50 printf ("putspent: unexpected error code: %m\n");
56 printf ("putspent: unexpected success (\"%s\")\n", p
.sp_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: putspent (expected \"%s\"): %m\n", expected
);
100 check ((struct spwd
) {
101 .sp_namp
= (char *) "root",
103 "root::0:0:0:0:0:0:0");
104 check ((struct spwd
) {
105 .sp_namp
= (char *) "root",
106 .sp_pwdp
= (char *) "password",
108 "root:password:0:0:0:0:0:0:0");
109 check ((struct spwd
) {
110 .sp_namp
= (char *) "root",
111 .sp_pwdp
= (char *) "password",
120 "root:password:::::::");
121 check ((struct spwd
) {
122 .sp_namp
= (char *) "root",
123 .sp_pwdp
= (char *) "password",
132 "root:password:1:2:3:4:5:6:7");
136 static const char *const bad_strings
[] = {
148 for (const char *const *bad
= bad_strings
; *bad
!= NULL
; ++bad
)
150 check ((struct spwd
) {
151 .sp_namp
= (char *) *bad
,
153 check ((struct spwd
) {
154 .sp_namp
= (char *) "root",
155 .sp_pwdp
= (char *) *bad
,
163 #define TEST_FUNCTION do_test ()
164 #include "../test-skeleton.c"