aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-12-13 17:42:49 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2009-12-13 17:42:49 +0100
commit78fcec4dc700dde189b0149ddfb53d321c4c75be (patch)
tree58a7f2d86e609da04a0d0af0940853a18591277e
parentaa42d13e320250d3573c6be975876a612c00e91f (diff)
downloadbusybox-w32-78fcec4dc700dde189b0149ddfb53d321c4c75be.tar.gz
busybox-w32-78fcec4dc700dde189b0149ddfb53d321c4c75be.tar.bz2
busybox-w32-78fcec4dc700dde189b0149ddfb53d321c4c75be.zip
crond: do not log info messages at LOG_ERR. Closes bug 681. +62 bytes.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--libbb/info_msg.c2
-rw-r--r--miscutils/crond.c41
2 files changed, 27 insertions, 16 deletions
diff --git a/libbb/info_msg.c b/libbb/info_msg.c
index 5f375d43b..bc9d23b95 100644
--- a/libbb/info_msg.c
+++ b/libbb/info_msg.c
@@ -38,6 +38,7 @@ void FAST_FUNC bb_info_msg(const char *s, ...)
38 38
39 va_start(p, s); 39 va_start(p, s);
40 used = vasprintf(&msg, s, p); 40 used = vasprintf(&msg, s, p);
41 va_end(p);
41 if (used < 0) 42 if (used < 0)
42 return; 43 return;
43 44
@@ -51,6 +52,5 @@ void FAST_FUNC bb_info_msg(const char *s, ...)
51 } 52 }
52 53
53 free(msg); 54 free(msg);
54 va_end(p);
55#endif 55#endif
56} 56}
diff --git a/miscutils/crond.c b/miscutils/crond.c
index 8e4f0bfd6..ad217f007 100644
--- a/miscutils/crond.c
+++ b/miscutils/crond.c
@@ -122,15 +122,16 @@ static void EndJob(const char *user, CronLine *line);
122static void DeleteFile(const char *userName); 122static void DeleteFile(const char *userName);
123 123
124 124
125/* 0 is the most verbose, default 8 */
125#define LVL5 "\x05" 126#define LVL5 "\x05"
126#define LVL7 "\x07" 127#define LVL7 "\x07"
127#define LVL8 "\x08" 128#define LVL8 "\x08"
128#define LVL9 "\x09"
129#define WARN9 "\x49" 129#define WARN9 "\x49"
130#define DIE9 "\xc9" 130#define DIE9 "\xc9"
131/* level >= 20 is "error" */ 131/* level >= 20 is "error" */
132#define ERR20 "\x14" 132#define ERR20 "\x14"
133 133
134static void crondlog(const char *ctl, ...) __attribute__ ((format (printf, 1, 2)));
134static void crondlog(const char *ctl, ...) 135static void crondlog(const char *ctl, ...)
135{ 136{
136 va_list va; 137 va_list va;
@@ -146,8 +147,16 @@ static void crondlog(const char *ctl, ...)
146 if (logfd >= 0) 147 if (logfd >= 0)
147 xmove_fd(logfd, STDERR_FILENO); 148 xmove_fd(logfd, STDERR_FILENO);
148 } 149 }
149// TODO: ERR -> error, WARN -> warning, LVL -> info 150 /* When we log to syslog, level > 8 is logged at LOG_ERR
150 bb_verror_msg(ctl + 1, va, /* strerr: */ NULL); 151 * syslog level, level <= 8 is logged at LOG_INFO. */
152 if (level > 8) {
153 bb_verror_msg(ctl + 1, va, /* strerr: */ NULL);
154 } else {
155 char *msg = NULL;
156 vasprintf(&msg, ctl + 1, va);
157 bb_info_msg("%s: %s", applet_name, msg);
158 free(msg);
159 }
151 } 160 }
152 va_end(va); 161 va_end(va);
153 if (ctl[0] & 0x80) 162 if (ctl[0] & 0x80)
@@ -157,25 +166,25 @@ static void crondlog(const char *ctl, ...)
157int crond_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 166int crond_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
158int crond_main(int argc UNUSED_PARAM, char **argv) 167int crond_main(int argc UNUSED_PARAM, char **argv)
159{ 168{
160 unsigned opt; 169 unsigned opts;
161 170
162 INIT_G(); 171 INIT_G();
163 172
164 /* "-b after -f is ignored", and so on for every pair a-b */ 173 /* "-b after -f is ignored", and so on for every pair a-b */
165 opt_complementary = "f-b:b-f:S-L:L-S" IF_FEATURE_CROND_D(":d-l") 174 opt_complementary = "f-b:b-f:S-L:L-S" IF_FEATURE_CROND_D(":d-l")
166 ":l+:d+"; /* -l and -d have numeric param */ 175 ":l+:d+"; /* -l and -d have numeric param */
167 opt = getopt32(argv, "l:L:fbSc:" IF_FEATURE_CROND_D("d:"), 176 opts = getopt32(argv, "l:L:fbSc:" IF_FEATURE_CROND_D("d:"),
168 &LogLevel, &LogFile, &CDir 177 &LogLevel, &LogFile, &CDir
169 IF_FEATURE_CROND_D(,&LogLevel)); 178 IF_FEATURE_CROND_D(,&LogLevel));
170 /* both -d N and -l N set the same variable: LogLevel */ 179 /* both -d N and -l N set the same variable: LogLevel */
171 180
172 if (!(opt & OPT_f)) { 181 if (!(opts & OPT_f)) {
173 /* close stdin, stdout, stderr. 182 /* close stdin, stdout, stderr.
174 * close unused descriptors - don't need them. */ 183 * close unused descriptors - don't need them. */
175 bb_daemonize_or_rexec(DAEMON_CLOSE_EXTRA_FDS, argv); 184 bb_daemonize_or_rexec(DAEMON_CLOSE_EXTRA_FDS, argv);
176 } 185 }
177 186
178 if (!DebugOpt && LogFile == NULL) { 187 if (!(opts & OPT_d) && LogFile == NULL) {
179 /* logging to syslog */ 188 /* logging to syslog */
180 openlog(applet_name, LOG_CONS | LOG_PID, LOG_CRON); 189 openlog(applet_name, LOG_CONS | LOG_PID, LOG_CRON);
181 logmode = LOGMODE_SYSLOG; 190 logmode = LOGMODE_SYSLOG;
@@ -184,20 +193,21 @@ int crond_main(int argc UNUSED_PARAM, char **argv)
184 xchdir(CDir); 193 xchdir(CDir);
185 //signal(SIGHUP, SIG_IGN); /* ? original crond dies on HUP... */ 194 //signal(SIGHUP, SIG_IGN); /* ? original crond dies on HUP... */
186 xsetenv("SHELL", DEFAULT_SHELL); /* once, for all future children */ 195 xsetenv("SHELL", DEFAULT_SHELL); /* once, for all future children */
187 crondlog(LVL9 "crond (busybox "BB_VER") started, log level %d", LogLevel); 196 crondlog(LVL8 "crond (busybox "BB_VER") started, log level %d", LogLevel);
188 SynchronizeDir(); 197 SynchronizeDir();
189 198
190 /* main loop - synchronize to 1 second after the minute, minimum sleep 199 /* main loop - synchronize to 1 second after the minute, minimum sleep
191 * of 1 second. */ 200 * of 1 second. */
192 { 201 {
193 time_t t1 = time(NULL); 202 time_t t1 = time(NULL);
194 time_t t2;
195 long dt;
196 int rescan = 60; 203 int rescan = 60;
197 int sleep_time = 60; 204 int sleep_time = 60;
198 205
199 write_pidfile("/var/run/crond.pid"); 206 write_pidfile("/var/run/crond.pid");
200 for (;;) { 207 for (;;) {
208 time_t t2;
209 long dt;
210
201 sleep((sleep_time + 1) - (time(NULL) % sleep_time)); 211 sleep((sleep_time + 1) - (time(NULL) % sleep_time));
202 212
203 t2 = time(NULL); 213 t2 = time(NULL);
@@ -227,7 +237,7 @@ int crond_main(int argc UNUSED_PARAM, char **argv)
227 if (DebugOpt) 237 if (DebugOpt)
228 crondlog(LVL5 "wakeup dt=%ld", dt); 238 crondlog(LVL5 "wakeup dt=%ld", dt);
229 if (dt < -60 * 60 || dt > 60 * 60) { 239 if (dt < -60 * 60 || dt > 60 * 60) {
230 crondlog(WARN9 "time disparity of %d minutes detected", dt / 60); 240 crondlog(WARN9 "time disparity of %ld minutes detected", dt / 60);
231 } else if (dt > 0) { 241 } else if (dt > 0) {
232 TestJobs(t1, t2); 242 TestJobs(t1, t2);
233 RunJobs(); 243 RunJobs();
@@ -239,8 +249,9 @@ int crond_main(int argc UNUSED_PARAM, char **argv)
239 } 249 }
240 } 250 }
241 t1 = t2; 251 t1 = t2;
242 } 252 } /* for (;;) */
243 } 253 }
254
244 return 0; /* not reached */ 255 return 0; /* not reached */
245} 256}
246 257
@@ -281,7 +292,7 @@ static void ChangeUser(struct passwd *pas)
281 /* careful: we're after vfork! */ 292 /* careful: we're after vfork! */
282 change_identity(pas); /* - initgroups, setgid, setuid */ 293 change_identity(pas); /* - initgroups, setgid, setuid */
283 if (chdir(pas->pw_dir) < 0) { 294 if (chdir(pas->pw_dir) < 0) {
284 crondlog(LVL9 "can't chdir(%s)", pas->pw_dir); 295 crondlog(WARN9 "can't chdir(%s)", pas->pw_dir);
285 if (chdir(TMPDIR) < 0) { 296 if (chdir(TMPDIR) < 0) {
286 crondlog(DIE9 "can't chdir(%s)", TMPDIR); /* exits */ 297 crondlog(DIE9 "can't chdir(%s)", TMPDIR); /* exits */
287 } 298 }
@@ -760,7 +771,7 @@ ForkJob(const char *user, CronLine *line, int mailFd,
760 /* prepare things before vfork */ 771 /* prepare things before vfork */
761 pas = getpwnam(user); 772 pas = getpwnam(user);
762 if (!pas) { 773 if (!pas) {
763 crondlog(LVL9 "can't get uid for %s", user); 774 crondlog(WARN9 "can't get uid for %s", user);
764 goto err; 775 goto err;
765 } 776 }
766 SetEnv(pas); 777 SetEnv(pas);
@@ -900,7 +911,7 @@ static void RunJob(const char *user, CronLine *line)
900 /* prepare things before vfork */ 911 /* prepare things before vfork */
901 pas = getpwnam(user); 912 pas = getpwnam(user);
902 if (!pas) { 913 if (!pas) {
903 crondlog(LVL9 "can't get uid for %s", user); 914 crondlog(WARN9 "can't get uid for %s", user);
904 goto err; 915 goto err;
905 } 916 }
906 SetEnv(pas); 917 SetEnv(pas);