1 | /* Test for invalid field handling in file-style NSS databases. [BZ #18724] |
2 | Copyright (C) 2015-2022 Free Software Foundation, Inc. |
3 | This file is part of the GNU C Library. |
4 | |
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. |
9 | |
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. |
14 | |
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/>. */ |
18 | |
19 | /* This test needs to be statically linked because it access hidden |
20 | functions. */ |
21 | |
22 | #include <nss.h> |
23 | #include <stdbool.h> |
24 | #include <stdio.h> |
25 | #include <stdlib.h> |
26 | #include <string.h> |
27 | |
28 | #include <support/support.h> |
29 | |
30 | static bool errors; |
31 | |
32 | static void |
33 | check (const char *what, bool expr) |
34 | { |
35 | if (!expr) |
36 | { |
37 | printf (format: "FAIL: %s\n" , what); |
38 | errors = true; |
39 | } |
40 | } |
41 | |
42 | #define CHECK(expr) check (#expr, (expr)) |
43 | |
44 | static void |
45 | check_rewrite (const char *input, const char *expected) |
46 | { |
47 | char *to_free; |
48 | const char *result = __nss_rewrite_field (value: input, to_be_freed: &to_free); |
49 | CHECK (result != NULL); |
50 | if (result != NULL && strcmp (result, expected) != 0) |
51 | { |
52 | printf (format: "FAIL: rewrite \"%s\" -> \"%s\", expected \"%s\"\n" , |
53 | (input == NULL) ? "(null)" : input, result, |
54 | (expected == NULL) ? "(null)" : expected); |
55 | errors = true; |
56 | } |
57 | free (ptr: to_free); |
58 | } |
59 | |
60 | static int |
61 | do_test (void) |
62 | { |
63 | CHECK (__nss_valid_field (NULL)); |
64 | CHECK (__nss_valid_field ("" )); |
65 | CHECK (__nss_valid_field ("+" )); |
66 | CHECK (__nss_valid_field ("-" )); |
67 | CHECK (__nss_valid_field (" " )); |
68 | CHECK (__nss_valid_field ("abcdef" )); |
69 | CHECK (__nss_valid_field ("abc def" )); |
70 | CHECK (__nss_valid_field ("abc\tdef" )); |
71 | CHECK (!__nss_valid_field ("abcdef:" )); |
72 | CHECK (!__nss_valid_field ("abcde:f" )); |
73 | CHECK (!__nss_valid_field (":abcdef" )); |
74 | CHECK (!__nss_valid_field ("abcdef\n" )); |
75 | CHECK (!__nss_valid_field ("\nabcdef" )); |
76 | CHECK (!__nss_valid_field (":" )); |
77 | CHECK (!__nss_valid_field ("\n" )); |
78 | |
79 | CHECK (__nss_valid_list_field (NULL)); |
80 | CHECK (__nss_valid_list_field ((char *[]) {(char *) "good" , NULL})); |
81 | CHECK (!__nss_valid_list_field ((char *[]) {(char *) "g,ood" , NULL})); |
82 | CHECK (!__nss_valid_list_field ((char *[]) {(char *) "g\nood" , NULL})); |
83 | CHECK (!__nss_valid_list_field ((char *[]) {(char *) "g:ood" , NULL})); |
84 | |
85 | check_rewrite (NULL, expected: "" ); |
86 | check_rewrite (input: "" , expected: "" ); |
87 | check_rewrite (input: "abc" , expected: "abc" ); |
88 | check_rewrite (input: "abc\n" , expected: "abc " ); |
89 | check_rewrite (input: "abc:" , expected: "abc " ); |
90 | check_rewrite (input: "\nabc" , expected: " abc" ); |
91 | check_rewrite (input: ":abc" , expected: " abc" ); |
92 | check_rewrite (input: ":" , expected: " " ); |
93 | check_rewrite (input: "\n" , expected: " " ); |
94 | check_rewrite (input: "a:b:c" , expected: "a b c" ); |
95 | check_rewrite (input: "a\nb\nc" , expected: "a b c" ); |
96 | check_rewrite (input: "a\nb:c" , expected: "a b c" ); |
97 | check_rewrite (input: "aa\nbb\ncc" , expected: "aa bb cc" ); |
98 | check_rewrite (input: "aa\nbb:cc" , expected: "aa bb cc" ); |
99 | |
100 | return errors; |
101 | } |
102 | |
103 | #include <support/test-driver.c> |
104 | |