1 /*
2 * Copyright (C) 2006-2007, 2010-2018 Free Software Foundation, Inc.
3 * Written by Simon Josefsson
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program 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
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <https://www.gnu.org/licenses/>. */
17
18 #include <config.h>
19
20 #include "read-file.h"
21
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <sys/stat.h>
25
26 #define FILE1 "/etc/resolv.conf"
27 #define FILE2 "/dev/null"
28
29 int
main(void)30 main (void)
31 {
32 struct stat statbuf;
33 int err = 0;
34
35 /* We can perform the test only if the file exists and is readable.
36 Test whether it exists, then assume it is world-readable. */
37 if (stat (FILE1, &statbuf) >= 0)
38 {
39 size_t len;
40 char *out = read_file (FILE1, &len);
41
42 if (!out)
43 {
44 perror ("Could not read file");
45 err = 1;
46 }
47 else
48 {
49 if (out[len] != '\0')
50 {
51 perror ("BAD: out[len] not zero");
52 err = 1;
53 }
54
55 if (S_ISREG (statbuf.st_mode))
56 {
57 /* FILE1 is a regular file or a symlink to a regular file. */
58 if (len != statbuf.st_size)
59 {
60 fprintf (stderr, "Read %lu from %s...\n",
61 (unsigned long) len, FILE1);
62 err = 1;
63 }
64 }
65 else
66 {
67 /* Assume FILE1 is not empty. */
68 if (len == 0)
69 {
70 fprintf (stderr, "Read nothing from %s\n", FILE1);
71 err = 1;
72 }
73 }
74 free (out);
75 }
76 }
77
78 /* We can perform the test only if the file exists and is readable.
79 Test whether it exists, then assume it is world-readable. */
80 if (stat (FILE2, &statbuf) >= 0)
81 {
82 size_t len;
83 char *out = read_file (FILE2, &len);
84
85 if (!out)
86 {
87 perror ("Could not read file");
88 err = 1;
89 }
90 else
91 {
92 if (out[len] != '\0')
93 {
94 perror ("BAD: out[len] not zero");
95 err = 1;
96 }
97
98 /* /dev/null should always be empty. Ignore statbuf.st_size, since it
99 is not a regular file. */
100 if (len != 0)
101 {
102 fprintf (stderr, "Read %lu from %s...\n",
103 (unsigned long) len, FILE2);
104 err = 1;
105 }
106 free (out);
107 }
108 }
109
110 return err;
111 }
112