Annotation of /trunk/mkinitrd-magellan/busybox/sysklogd/logger.c
Parent Directory | Revision Log
Revision 984 -
(hide annotations)
(download)
Sun May 30 11:32:42 2010 UTC (14 years ago) by niro
File MIME type: text/plain
File size: 4530 byte(s)
Sun May 30 11:32:42 2010 UTC (14 years ago) by niro
File MIME type: text/plain
File size: 4530 byte(s)
-updated to busybox-1.16.1 and enabled blkid/uuid support in default config
1 | niro | 532 | /* vi: set sw=4 ts=4: */ |
2 | /* | ||
3 | * Mini logger implementation for busybox | ||
4 | * | ||
5 | * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org> | ||
6 | * | ||
7 | * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. | ||
8 | */ | ||
9 | |||
10 | niro | 816 | /* |
11 | * Done in syslogd_and_logger.c: | ||
12 | #include "libbb.h" | ||
13 | niro | 532 | #define SYSLOG_NAMES |
14 | niro | 816 | #define SYSLOG_NAMES_CONST |
15 | #include <syslog.h> | ||
16 | */ | ||
17 | niro | 532 | |
18 | /* Decode a symbolic name to a numeric value | ||
19 | * this function is based on code | ||
20 | * Copyright (c) 1983, 1993 | ||
21 | * The Regents of the University of California. All rights reserved. | ||
22 | * | ||
23 | * Original copyright notice is retained at the end of this file. | ||
24 | */ | ||
25 | niro | 816 | static int decode(char *name, const CODE *codetab) |
26 | niro | 532 | { |
27 | niro | 816 | const CODE *c; |
28 | niro | 532 | |
29 | if (isdigit(*name)) | ||
30 | return atoi(name); | ||
31 | for (c = codetab; c->c_name; c++) { | ||
32 | if (!strcasecmp(name, c->c_name)) { | ||
33 | return c->c_val; | ||
34 | } | ||
35 | } | ||
36 | |||
37 | return -1; | ||
38 | } | ||
39 | |||
40 | /* Decode a symbolic name to a numeric value | ||
41 | * this function is based on code | ||
42 | * Copyright (c) 1983, 1993 | ||
43 | * The Regents of the University of California. All rights reserved. | ||
44 | * | ||
45 | * Original copyright notice is retained at the end of this file. | ||
46 | */ | ||
47 | static int pencode(char *s) | ||
48 | { | ||
49 | char *save; | ||
50 | int lev, fac = LOG_USER; | ||
51 | |||
52 | for (save = s; *s && *s != '.'; ++s) | ||
53 | ; | ||
54 | if (*s) { | ||
55 | *s = '\0'; | ||
56 | fac = decode(save, facilitynames); | ||
57 | if (fac < 0) | ||
58 | bb_error_msg_and_die("unknown %s name: %s", "facility", save); | ||
59 | *s++ = '.'; | ||
60 | } else { | ||
61 | s = save; | ||
62 | } | ||
63 | lev = decode(s, prioritynames); | ||
64 | if (lev < 0) | ||
65 | bb_error_msg_and_die("unknown %s name: %s", "priority", save); | ||
66 | return ((lev & LOG_PRIMASK) | (fac & LOG_FACMASK)); | ||
67 | } | ||
68 | |||
69 | niro | 816 | #define strbuf bb_common_bufsiz1 |
70 | niro | 532 | |
71 | niro | 816 | int logger_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
72 | niro | 984 | int logger_main(int argc UNUSED_PARAM, char **argv) |
73 | niro | 532 | { |
74 | char *str_p, *str_t; | ||
75 | niro | 984 | int opt; |
76 | niro | 532 | int i = 0; |
77 | |||
78 | /* Fill out the name string early (may be overwritten later) */ | ||
79 | niro | 984 | str_t = uid2uname_utoa(geteuid()); |
80 | niro | 532 | |
81 | /* Parse any options */ | ||
82 | niro | 984 | opt = getopt32(argv, "p:st:", &str_p, &str_t); |
83 | niro | 532 | |
84 | niro | 984 | if (opt & 0x2) /* -s */ |
85 | niro | 532 | i |= LOG_PERROR; |
86 | niro | 984 | //if (opt & 0x4) /* -t */ |
87 | niro | 532 | openlog(str_t, i, 0); |
88 | i = LOG_USER | LOG_NOTICE; | ||
89 | niro | 984 | if (opt & 0x1) /* -p */ |
90 | niro | 532 | i = pencode(str_p); |
91 | |||
92 | argv += optind; | ||
93 | niro | 984 | if (!argv[0]) { |
94 | niro | 816 | while (fgets(strbuf, COMMON_BUFSIZE, stdin)) { |
95 | if (strbuf[0] | ||
96 | && NOT_LONE_CHAR(strbuf, '\n') | ||
97 | niro | 532 | ) { |
98 | /* Neither "" nor "\n" */ | ||
99 | niro | 816 | syslog(i, "%s", strbuf); |
100 | niro | 532 | } |
101 | } | ||
102 | } else { | ||
103 | char *message = NULL; | ||
104 | niro | 816 | int len = 0; |
105 | niro | 532 | int pos = 0; |
106 | do { | ||
107 | len += strlen(*argv) + 1; | ||
108 | niro | 816 | message = xrealloc(message, len + 1); |
109 | niro | 532 | sprintf(message + pos, " %s", *argv), |
110 | pos = len; | ||
111 | } while (*++argv); | ||
112 | syslog(i, "%s", message + 1); /* skip leading " " */ | ||
113 | } | ||
114 | |||
115 | closelog(); | ||
116 | return EXIT_SUCCESS; | ||
117 | } | ||
118 | |||
119 | niro | 816 | /* Clean up. Needed because we are included from syslogd_and_logger.c */ |
120 | #undef strbuf | ||
121 | niro | 532 | |
122 | /*- | ||
123 | * Copyright (c) 1983, 1993 | ||
124 | * The Regents of the University of California. All rights reserved. | ||
125 | * | ||
126 | * This is the original license statement for the decode and pencode functions. | ||
127 | * | ||
128 | * Redistribution and use in source and binary forms, with or without | ||
129 | * modification, are permitted provided that the following conditions | ||
130 | * are met: | ||
131 | * 1. Redistributions of source code must retain the above copyright | ||
132 | * notice, this list of conditions and the following disclaimer. | ||
133 | * 2. Redistributions in binary form must reproduce the above copyright | ||
134 | * notice, this list of conditions and the following disclaimer in the | ||
135 | * documentation and/or other materials provided with the distribution. | ||
136 | * | ||
137 | * 3. <BSD Advertising Clause omitted per the July 22, 1999 licensing change | ||
138 | * ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change> | ||
139 | * | ||
140 | * 4. Neither the name of the University nor the names of its contributors | ||
141 | * may be used to endorse or promote products derived from this software | ||
142 | * without specific prior written permission. | ||
143 | * | ||
144 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | ||
145 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
146 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
147 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | ||
148 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
149 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
150 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
151 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
152 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
153 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
154 | * SUCH DAMAGE. | ||
155 | */ |