]>
Commit | Line | Data |
---|---|---|
88407b93 KZ |
1 | /* |
2 | * Copyright (C) 2013 Karel Zak <kzak@redhat.com> | |
3 | */ | |
4 | ||
5 | #include <stdio.h> | |
bd299782 | 6 | #include <sys/stat.h> |
88407b93 KZ |
7 | #include <sys/types.h> |
8 | #include <fcntl.h> | |
9 | #include <string.h> | |
10 | #include <unistd.h> | |
11 | #include <stdlib.h> | |
12 | #include <getopt.h> | |
13 | ||
14 | #include "c.h" | |
15 | #include "nls.h" | |
16 | #include "pathnames.h" | |
17 | ||
18 | /* | |
19 | * Always return EXIT_FAILURE (1), don't try to be smart! | |
20 | */ | |
21 | ||
86be6a32 | 22 | static void __attribute__((__noreturn__)) usage(void) |
88407b93 | 23 | { |
86be6a32 | 24 | FILE *out = stdout; |
88407b93 | 25 | fputs(USAGE_HEADER, out); |
88407b93 KZ |
26 | fprintf(out, |
27 | _(" %s [options]\n"), program_invocation_short_name); | |
28 | ||
451dbcfa BS |
29 | fputs(USAGE_SEPARATOR, out); |
30 | fputs(_("Politely refuse a login.\n"), out); | |
31 | ||
88407b93 | 32 | fputs(USAGE_OPTIONS, out); |
f45f3ec3 | 33 | printf(USAGE_HELP_OPTIONS(16)); |
88407b93 | 34 | |
f45f3ec3 | 35 | printf(USAGE_MAN_TAIL("nologin(8)")); |
88407b93 KZ |
36 | exit(EXIT_FAILURE); |
37 | } | |
38 | ||
39 | int main(int argc, char *argv[]) | |
40 | { | |
dd732fa2 | 41 | int c, fd = -1; |
bd299782 | 42 | struct stat st; |
88407b93 | 43 | static const struct option longopts[] = { |
87918040 SK |
44 | { "help", 0, NULL, 'h' }, |
45 | { "version", 0, NULL, 'V' }, | |
46 | { NULL, 0, NULL, 0 } | |
88407b93 KZ |
47 | }; |
48 | ||
49 | setlocale(LC_ALL, ""); | |
50 | bindtextdomain(PACKAGE, LOCALEDIR); | |
51 | textdomain(PACKAGE); | |
52 | ||
53 | while ((c = getopt_long(argc, argv, "hV", longopts, NULL)) != -1) { | |
54 | switch (c) { | |
55 | case 'h': | |
86be6a32 | 56 | usage(); |
88407b93 KZ |
57 | break; |
58 | case 'V': | |
59 | printf(UTIL_LINUX_VERSION); | |
60 | return EXIT_FAILURE; | |
61 | default: | |
677ec86c | 62 | errtryhelp(EXIT_FAILURE); |
88407b93 KZ |
63 | } |
64 | } | |
65 | ||
66 | fd = open(_PATH_NOLOGIN_TXT, O_RDONLY); | |
dd732fa2 KZ |
67 | if (fd < 0) |
68 | goto dflt; | |
69 | ||
bd299782 | 70 | c = fstat(fd, &st); |
dd732fa2 KZ |
71 | if (c < 0 || !S_ISREG(st.st_mode)) |
72 | goto dflt; | |
73 | else { | |
88407b93 KZ |
74 | char buf[BUFSIZ]; |
75 | ssize_t rd; | |
76 | ||
77 | while ((rd = read(fd, buf, sizeof(buf))) > 0) | |
78 | ignore_result( write(STDOUT_FILENO, buf, rd) ); | |
dd732fa2 | 79 | |
88407b93 | 80 | close(fd); |
dd732fa2 KZ |
81 | return EXIT_FAILURE; |
82 | } | |
88407b93 | 83 | |
dd732fa2 KZ |
84 | dflt: |
85 | if (fd >= 0) | |
86 | close(fd); | |
87 | fprintf(stdout, _("This account is currently not available.\n")); | |
88407b93 KZ |
88 | return EXIT_FAILURE; |
89 | } |