chiark
/
gitweb
/
~mdw
/
tripe
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
2b3ef39
)
client: Capture server stderr and send it to the logfile.
author
Mark Wooding
<mdw@distorted.org.uk>
Sat, 20 Dec 2008 17:06:11 +0000
(17:06 +0000)
committer
Mark Wooding
<mdw@distorted.org.uk>
Mon, 29 Dec 2008 21:52:05 +0000
(21:52 +0000)
client/tripectl.c
patch
|
blob
|
blame
|
history
diff --git
a/client/tripectl.c
b/client/tripectl.c
index 4c8dde5a5a246f8375f54417981b4a066ecc9dfb..0daaacbad1b7ae401f05b3e10d970387a59234cc 100644
(file)
--- a/
client/tripectl.c
+++ b/
client/tripectl.c
@@
-132,14
+132,14
@@
static void dolog(int prio, const char *msg, ...)
if (f & f_syslog) syslog(prio, "%s", d.buf);
if (logfp) {
switch (prio) {
if (f & f_syslog) syslog(prio, "%s", d.buf);
if (logfp) {
switch (prio) {
- case LOG_WARN: cat = "warning"; break;
+ case LOG_WARN
ING
: cat = "warning"; break;
case LOG_DEBUG: cat = "debug"; break;
case LOG_ERR: cat = "error"; break;
default: cat = "message"; break;
}
writelog(cat, d.buf);
}
case LOG_DEBUG: cat = "debug"; break;
case LOG_ERR: cat = "error"; break;
default: cat = "message"; break;
}
writelog(cat, d.buf);
}
- if (prio == LOG_WARN && (f & f_warn))
+ if (prio == LOG_WARN
ING
&& (f & f_warn))
fprintf(stderr, "Warning: %s\n", d.buf);
dstr_destroy(&d);
}
fprintf(stderr, "Warning: %s\n", d.buf);
dstr_destroy(&d);
}
@@
-217,6
+217,16
@@
static void uline(char *p, size_t len, void *b)
}
}
}
}
+static void eline(char *p, size_t len, void *b)
+{
+ if (p)
+ dolog(LOG_WARNING, "(stderr): %s", p);
+ else {
+ selbuf_destroy(b);
+ close(fd);
+ }
+}
+
static void setup(const char *cmd)
{
dstr d = DSTR_INIT;
static void setup(const char *cmd)
{
dstr d = DSTR_INIT;
@@
-356,12
+366,12
@@
int main(int argc, char *argv[])
size_t sz;
uid_t u = -1;
gid_t g = -1;
size_t sz;
uid_t u = -1;
gid_t g = -1;
- int pfd[2];
+ int pfd[2]
, efd[2]
;
pid_t kid;
struct sigaction sa;
sigset_t newmask, oldmask;
struct sockaddr_un sun;
pid_t kid;
struct sigaction sa;
sigset_t newmask, oldmask;
struct sockaddr_un sun;
- selbuf bu, bs;
+ selbuf bu, bs
, be
;
dstr d = DSTR_INIT;
sig hup;
dstr d = DSTR_INIT;
sig hup;
@@
-498,7
+508,7
@@
int main(int argc, char *argv[])
putarg(&spawnopts, "-d.");
putarg(&spawnopts, "-F");
putarg(&spawnopts, "%s", spawnpath);
putarg(&spawnopts, "-d.");
putarg(&spawnopts, "-F");
putarg(&spawnopts, "%s", spawnpath);
- if (socketpair(PF_UNIX, SOCK_STREAM, 0, pfd))
+ if (socketpair(PF_UNIX, SOCK_STREAM, 0, pfd)
|| pipe(efd)
)
die(EXIT_FAILURE, "error from socketpair: %s", strerror(errno));
sigemptyset(&newmask);
sigaddset(&newmask, SIGCHLD);
die(EXIT_FAILURE, "error from socketpair: %s", strerror(errno));
sigemptyset(&newmask);
sigaddset(&newmask, SIGCHLD);
@@
-508,8
+518,9
@@
int main(int argc, char *argv[])
if (!kid) {
dup2(pfd[1], STDIN_FILENO);
dup2(pfd[1], STDOUT_FILENO);
if (!kid) {
dup2(pfd[1], STDIN_FILENO);
dup2(pfd[1], STDOUT_FILENO);
- close(pfd[0]);
- close(pfd[1]);
+ dup2(efd[1], STDERR_FILENO);
+ close(pfd[0]); close(pfd[1]);
+ close(efd[0]); close(efd[1]);
if (logfp) fclose(logfp);
if (pidfp) fclose(pidfp);
closelog();
if (logfp) fclose(logfp);
if (pidfp) fclose(pidfp);
closelog();
@@
-519,7
+530,8
@@
int main(int argc, char *argv[])
}
sigprocmask(SIG_SETMASK, &oldmask, 0);
fd = pfd[0];
}
sigprocmask(SIG_SETMASK, &oldmask, 0);
fd = pfd[0];
- close(pfd[1]);
+ close(pfd[1]); close(efd[1]);
+ selbuf_init(&be, &sel, efd[0], eline, &be);
} else {
sz = strlen(sock) + 1;
if (sz > sizeof(sun.sun_path))
} else {
sz = strlen(sock) + 1;
if (sz > sizeof(sun.sun_path))