runit

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 08f509a1ef326ac3f62a1de58e4b3ca27620b02c
parent 9cde52957e9fa980e852b9d1f64a28f8eaedf91d
Author: Gerrit Pape <pape@smarden.org>
Date:   Mon, 20 Sep 2004 20:08:26 +0000

  * debian/diff/svlogd.diff: remove; obsolete.
  * debian/rules: don't apply patch.

Diffstat:
Mdebian/changelog | 4+++-
Ddebian/diff/svlogd.diff | 589-------------------------------------------------------------------------------
Mdebian/rules | 1-
3 files changed, 3 insertions(+), 591 deletions(-)

diff --git a/debian/changelog b/debian/changelog @@ -4,8 +4,10 @@ runit (1.0.5-1) unstable; urgency=low * debian/getty-tty5.run: don't use absolute pathname. * debian/control, debian/rules, runit.postinst, runit.postrm: minor cleanup. + * debian/diff/svlogd.diff: remove; obsolete. + * debian/rules: don't apply patch. - -- Gerrit Pape <pape@smarden.org> Mon, 20 Sep 2004 20:03:21 +0000 + -- Gerrit Pape <pape@smarden.org> Mon, 20 Sep 2004 20:07:03 +0000 runit (1.0.4-2) unstable; urgency=medium diff --git a/debian/diff/svlogd.diff b/debian/diff/svlogd.diff @@ -1,589 +0,0 @@ -Index: src/svlogd.c -=================================================================== -RCS file: /var/lib/cvs/runit/src/svlogd.c,v -retrieving revision 1.12 -diff -u -r1.12 svlogd.c ---- src/svlogd.c 28 Mar 2004 18:17:14 -0000 1.12 -+++ src/svlogd.c 11 Sep 2004 09:42:46 -0000 -@@ -7,7 +7,6 @@ - #include <sys/time.h> - #include <dirent.h> - #include <unistd.h> --#include <dirent.h> - #include <stdio.h> - #include "pmatch.h" - #include "fmt_ptime.h" -@@ -45,8 +44,10 @@ - - unsigned int verbose =0; - unsigned int timestamp =0; --unsigned long linelen =1000; -+unsigned long linemax =1000; - unsigned long buflen =1024; -+unsigned long linelen; -+ - const char *replace =""; - char repl =0; - -@@ -62,6 +63,9 @@ - char *line; - char stamp[FMT_PTIME]; - unsigned int exitasap =0; -+unsigned int rotateasap =0; -+unsigned int reopenasap =0; -+unsigned int linecomplete =1; - int fdudp =-1; - - struct logdir { -@@ -78,7 +82,7 @@ - char *name; - int fdcur; - int fdlock; -- unsigned int match; -+ char match; - struct sockaddr_in udpaddr; - unsigned int udponly; - } *dir; -@@ -125,6 +129,8 @@ - sig_unblock(sig_alarm); - sig_unblock(sig_hangup); - -+ if (verbose) -+ strerr_warn5(INFO, "processing: ", ld->name, "/", ld->fnsave, 0); - if ((fd =open_read(ld->fnsave)) == -1) - fatal2("unable to open input for processor", ld->name); - if (fd_move(0, fd) == -1) -@@ -160,7 +166,7 @@ - fatal2("unable to run processor", ld->name); - } - ld->ppid =pid; -- return(1); -+ return(1); - } - unsigned int processorstop(struct logdir *ld) { - char f[28]; -@@ -172,14 +178,15 @@ - sig_block(sig_hangup); - ld->ppid =0; - } -+ if (ld->fddir == -1) return(1); - while (fchdir(ld->fddir) == -1) - pause2("unable to change directory, want processor", ld->name); - if (wait_exitcode(wstat) != 0) { -- warnx("processor crashed, restart", ld->name); -+ warnx("processor failed, restart", ld->name); - ld->fnsave[26] ='t'; - unlink(ld->fnsave); - ld->fnsave[26] ='u'; -- if (ld->processor.len) processorstart(ld); -+ processorstart(ld); - while (fchdir(fdwdir) == -1) - pause1("unable to change to initial working directory"); - return(ld->processor.len ? 0 : 1); -@@ -195,6 +202,7 @@ - pause2("unable to set mode of processed", ld->name); - while (rename("newstate", "state") == -1) - pause2("unable to rename state", ld->name); -+ if (verbose) strerr_warn5(INFO, "processed: ", ld->name, "/", f, 0); - while (fchdir(fdwdir) == -1) - pause1("unable to change to initial working directory"); - return(1); -@@ -207,6 +215,7 @@ - char tmp[FMT_ULONG +1]; - char oldest[FMT_PTIME]; - -+ if (ld->fddir == -1) return(0); - if (ld->size <= 0) return(1); - if (ld->ppid) while(! processorstop(ld)); - -@@ -245,11 +254,11 @@ - ld->size =0; - while (fchmod(ld->fdcur, 0644) == -1) - pause2("unable to set mode of current", ld->name); -- buffer_init(&ld->b, buffer_unixwrite, ld->fdcur, ld->btmp, sizeof ld->btmp); - -- oldest[0] ='A'; oldest[1] =oldest[27] =0; errno =0; -+ oldest[0] ='A'; oldest[1] =oldest[27] =0; - while (! (d =opendir("."))) - pause2("unable to open directory, want rotate", ld->name); -+ errno =0; - while ((f =readdir(d))) - if ((f->d_name[0] == '@') && (str_len(f->d_name) == 27)) { - ++n; -@@ -264,14 +273,29 @@ - warn2("unable to unlink oldest logfile", ld->name); - } - -- if (ld->processor.len) { -- processorstart(ld); -- } -+ processorstart(ld); - while (fchdir(fdwdir) == -1) - pause1("unable to change to initial working directory"); - return(1); - } - -+int buffer_pwrite(int n, char *s, unsigned int len) { -+ int i; -+ -+ if ((dir +n)->sizemax) { -+ if ((dir +n)->size >= (dir +n)->sizemax) rotate(dir +n); -+ if (len > ((dir +n)->sizemax -(dir +n)->size)) -+ len =(dir +n)->sizemax -(dir +n)->size; -+ } -+ while ((i =write((dir +n)->fdcur, s, len)) == -1) -+ pause2("unable to write to current", (dir +n)->name); -+ (dir +n)->size +=i; -+ if ((dir +n)->sizemax) -+ if (s[i -1] == '\n') -+ if ((dir +n)->size >= ((dir +n)->sizemax -linemax)) rotate(dir +n); -+ return(i); -+} -+ - void logdir_close(struct logdir *ld) { - if (ld->fddir == -1) return; - if (verbose) strerr_warn3(INFO, "close: ", ld->name, 0); -@@ -288,6 +312,7 @@ - if (ld->fdlock == -1) return; /* impossible */ - close(ld->fdlock); - ld->fdlock =-1; -+ while (! stralloc_copys(&ld->processor, "")) pause_nomem(); - } - - /* taken from libdjbdns */ -@@ -335,7 +360,8 @@ - ld->sizemax =1000000; - ld->nmax =10; - ld->name =(char*)fn; -- ld->match =0; -+ ld->ppid =0; -+ ld->match ='+'; - ld->udpaddr.sin_port =0; - ld->udponly =0; - while (! stralloc_copys(&ld->inst, "")) pause_nomem(); -@@ -367,9 +393,6 @@ - break; - case 's': - scan_ulong(&sa.s[i +1], &ld->sizemax); -- /* -- if (ld->sizemax && (ld->sizemax < linelen)) ld->sizemax =2 *linelen; -- */ - break; - case 'n': - scan_ulong(&sa.s[i +1], &ld->nmax); -@@ -421,6 +444,7 @@ - } while ((stat(ld->fnsave, &st) != -1) || (errno != error_noent)); - while (rename("current", ld->fnsave) == -1) - pause2("unable to rename current", ld->name); -+ i =-1; - } - else - ld->size =st.st_size; -@@ -438,7 +462,7 @@ - coe(ld->fdcur); - while (fchmod(ld->fdcur, 0644) == -1) - pause2("unable to set mode of current", ld->name); -- buffer_init(&ld->b, buffer_unixwrite, ld->fdcur, ld->btmp, sizeof ld->btmp); -+ buffer_init(&ld->b, buffer_pwrite, ld -dir, ld->btmp, buflen); - - if (verbose) { - if (i == 0) strerr_warn4(INFO, "append: ", ld->name, "/current", 0); -@@ -461,121 +485,43 @@ - if (! ok) fatalx("no functional log directories."); - } - --unsigned int linestart(struct logdir *ld, char *s, int len) { -- int i; -- -- /* check inst, set match */ -- ld->match ='+'; -- if (ld->inst.len) { -- for (i =0; i < ld->inst.len; ++i) { -- switch(ld->inst.s[i]) { -- case '+': -- case '-': -- if (pmatch(&ld->inst.s[i +1], s, len)) -- ld->match =ld->inst.s[i]; -- break; -- case 'e': -- if (pmatch(&ld->inst.s[i +1], s, len)) { -- if (timestamp) buffer_puts(buffer_2, stamp); -- buffer_put(buffer_2, s, len); -- if (len == linelen) buffer_puts(buffer_2, "..."); -- buffer_putflush(buffer_2, "\n", 1); -- } -- break; -- case 'E': -- if (! pmatch(&ld->inst.s[i +1], s, len)) { -- if (timestamp) buffer_puts(buffer_2, stamp); -- buffer_put(buffer_2, s, len); -- if (len == linelen) buffer_puts(buffer_2, "..."); -- buffer_putflush(buffer_2, "\n", 1); -- } -- break; -- } -- i +=byte_chr(&ld->inst.s[i], ld->inst.len -i, 0); -- } -- } -- if (ld->match == '-') return(0); -- if (! ld->udponly) { -- if (timestamp) { -- buffer_puts(&ld->b, stamp); -- if (timestamp != 3) ld->size +=26; -- else ld->size +=20; -- } -- buffer_put(&ld->b, s, len); -- ld->size +=len; -- } -- if (ld->udpaddr.sin_port != 0) { -- if (fdudp == -1) { -- buffer_puts(&ld->b, "warning: no udp socket available: "); -- buffer_put(&ld->b, s, len); -- buffer_putflush(&ld->b, "\n", 1); -- } -- else { -- if (len >= linelen -1) { -- s[linelen -4] =s[linelen -3] =s[linelen -2] ='.'; -- len =linelen -1; -- } -- if (s[len -1] != '\n') s[len++] ='\n'; -- if (sendto(fdudp, s, len, 0, (struct sockaddr *)&ld->udpaddr, -- sizeof(ld->udpaddr)) != len) { -- buffer_puts(&ld->b, "warning: failure sending through udp: "); -- buffer_put(&ld->b, s, len); -- buffer_putflush(&ld->b, "\n", 1); -- } -- } -- } -- return(1); --} --unsigned int lineadd(struct logdir *ld, char *s, int len) { -- if ((ld->match != '+') || ld->udponly) return(0); -- buffer_put(&ld->b, s, len); -- ld->size +=len; -- /* if (ld->sizemax && (ld->size >= ld->sizemax)) rotate(ld); */ -- return(1); --} --unsigned int lineflush(struct logdir *ld, char *s, int len) { -- switch(ld->match) { -- case '-': -- ld->match =0; -- return(0); -- case 0: -- linestart(ld, s, len); -- break; -- case '+': -- if (ld->udponly) { -- ld->match =0; -- return(0); -- } -- buffer_put(&ld->b, s, len); -- ld->size +=len; -- break; -- } -- if (ld->match == '+') { -- buffer_putflush(&ld->b, "\n", 1); -- ld->size +=1; -- ld->match =0; -- if (ld->sizemax) -- if ((linelen > ld->sizemax) || (ld->size >= (ld->sizemax -linelen))) -- rotate(ld); -- return(1); -- } -- ld->match =0; -- return(0); --} - int buffer_pread(int fd, char *s, unsigned int len) { -- int rc; -+ int i; - -- rc =read(fd, s, len); -- if ((rc == -1) && (errno == error_intr)) return(0); -- return(rc); -+ for (i =0; i < dirn; ++i) buffer_flush(&dir[i].b); -+ if (rotateasap) { -+ for (i =0; i < dirn; ++i) rotate(dir +i); -+ rotateasap =0; -+ } -+ if (exitasap) { -+ if (linecomplete) return(0); -+ len =1; -+ } -+ if (reopenasap) { -+ logdirs_reopen(); -+ reopenasap =0; -+ } -+ sig_unblock(sig_term); -+ sig_unblock(sig_child); -+ sig_unblock(sig_alarm); -+ sig_unblock(sig_hangup); -+ i =read(fd, s, len); -+ sig_block(sig_term); -+ sig_block(sig_child); -+ sig_block(sig_alarm); -+ sig_block(sig_hangup); -+ if (i == -1) if (errno != error_intr) warn("unable to read standard input"); -+ if (i > 0) linecomplete =(s[i -1] == '\n'); -+ return(i); - } - void sig_term_handler(void) { -- exitasap =1; - if (verbose) strerr_warn2(INFO, "sigterm received.", 0); -+ exitasap =1; - } - void sig_child_handler(void) { - int pid, l; - -+ if (verbose) strerr_warn2(INFO, "sigchild received.", 0); - while ((pid =wait_nohang(&wstat)) > 0) - for (l =0; l < dirn; ++l) - if (dir[l].ppid == pid) { -@@ -583,26 +529,50 @@ - processorstop(&dir[l]); - break; - } -- if (verbose) strerr_warn2(INFO, "sigchild received.", 0); - } - void sig_alarm_handler(void) { -- int l; -- -- for (l =0; l < dirn; ++l) -- if (dir[l].fddir != -1) -- if (dir[l].size > 0) -- rotate(&dir[l]); - if (verbose) strerr_warn2(INFO, "sigalarm received.", 0); -+ rotateasap =1; - } - void sig_hangup_handler(void) { -- logdirs_reopen(); - if (verbose) strerr_warn2(INFO, "sighangup received.", 0); -+ reopenasap =1; - } - -+void logmatch(struct logdir *ld) { -+ int i; -+ -+ ld->match ='+'; -+ for (i =0; i < ld->inst.len; ++i) { -+ switch(ld->inst.s[i]) { -+ case '+': -+ case '-': -+ if (pmatch(&ld->inst.s[i +1], line, linelen)) -+ ld->match =ld->inst.s[i]; -+ break; -+ case 'e': -+ if (pmatch(&ld->inst.s[i +1], line, linelen)) { -+ if (timestamp) buffer_puts(buffer_2, stamp); -+ buffer_put(buffer_2, line, linelen); -+ if (linelen == linemax) buffer_puts(buffer_2, "..."); -+ buffer_put(buffer_2, "\n", 1); buffer_flush(buffer_2); -+ } -+ break; -+ case 'E': -+ if (! pmatch(&ld->inst.s[i +1], line, linelen)) { -+ if (timestamp) buffer_puts(buffer_2, stamp); -+ buffer_put(buffer_2, line, linelen); -+ if (linelen == linemax) buffer_puts(buffer_2, "..."); -+ buffer_put(buffer_2, "\n", 1); buffer_flush(buffer_2); -+ } -+ break; -+ } -+ i +=byte_chr(&ld->inst.s[i], ld->inst.len -i, 0); -+ } -+} - int main(int argc, const char **argv) { - int i; - int opt; -- unsigned int eol; - - progname =*argv; - -@@ -617,8 +587,8 @@ - if (! repl || *(optarg +1)) usage(); - break; - case 'l': -- scan_ulong(optarg, &linelen); -- if (linelen == 0) linelen =1000; -+ scan_ulong(optarg, &linemax); -+ if (linemax == 0) linemax =1000; - break; - case 'b': - scan_ulong(optarg, &buflen); -@@ -638,7 +608,7 @@ - - dirn =argc -optind; - if (dirn <= 0) usage(); -- if (buflen <= linelen) usage(); -+ if (buflen <= linemax) usage(); - if ((fdwdir =open_read(".")) == -1) - fatal("unable to open current working directory"); - coe(fdwdir); -@@ -653,7 +623,7 @@ - databuf =(char*)alloc(buflen *sizeof(char)); - if (! databuf) die_nomem(); - buffer_init(&data, buffer_pread, 0, databuf, buflen); -- line =(char*)alloc(linelen *sizeof(char)); -+ line =(char*)alloc(linemax *sizeof(char)); - if (! line) die_nomem(); - fndir =argv; - -@@ -668,79 +638,101 @@ - - logdirs_reopen(); - -- for(eol =0;;) { -- int r, len; -- char *ch; -- -- if (exitasap && ! data.p) break; /* buffer is empty */ -- -- sig_unblock(sig_term); -- sig_unblock(sig_child); -- sig_unblock(sig_alarm); -- sig_unblock(sig_hangup); -- errno =0; -- r =buffer_feed(&data); -- sig_block(sig_term); -- sig_block(sig_child); -- sig_block(sig_alarm); -- sig_block(sig_hangup); -+ for(;;) { -+ char ch; - -- if (r == -1) { -- warn("unable to read standard input"); -- continue; -- } -- if (r == 0) { -- if (errno == error_intr) continue; -- break; /* eof */ -- } -- if (r > linelen) r =linelen; -- if (timestamp && (eol == 0)) { -- taia_now(&now); -- switch (timestamp) { -- case 1: -- stamp[fmt_taia(stamp, &now)] =' '; -- stamp[26] =0; -- break; -- case 2: -- stamp[fmt_ptime(stamp, &now)] =' '; -- stamp[26] =0; -- break; -- case 3: -- stamp[fmt_ptime(stamp, &now)] =0; -- stamp[19] =' '; stamp[20] =0; -+ linelen =0; -+ if (exitasap && ! data.p) break; /* data buffer is empty */ -+ for (linelen =0; linelen < linemax; ++linelen) { -+ if (buffer_GETC(&data, &ch) <= 0) { -+ exitasap =1; - break; - } -- } -- ch =buffer_peek(&data); -- for (len =0; len < r; ++len, ++ch) { -- if (*ch == '\n') { -- eol =2; -- break; -+ if (! linelen && timestamp) { -+ taia_now(&now); -+ switch (timestamp) { -+ case 1: -+ stamp[fmt_taia(stamp, &now)] =' '; -+ stamp[26] =0; -+ break; -+ case 2: -+ stamp[fmt_ptime(stamp, &now)] =' '; -+ stamp[26] =0; -+ break; -+ case 3: -+ stamp[fmt_ptime(stamp, &now)] =0; -+ stamp[19] =' '; stamp[20] =0; -+ break; -+ } - } -- line[len] =*ch; -- -+ if (ch == '\n') break; - if (repl) { -- if ((line[len] < 33) || (line[len] > 126)) -- line[len] =repl; -+ if ((ch < 32) || (ch > 126)) -+ ch =repl; - else - for (i =0; replace[i]; ++i) -- if (line[len] == replace[i]) { -- line[len] =repl; -+ if (ch == replace[i]) { -+ ch =repl; - break; - } - } -+ line[linelen] =ch; - } -- buffer_seek(&data, len); -+ if (! linelen) continue; -+ for (i =0; i < dirn; ++i) -+ if (dir[i].fddir != -1) { -+ if (dir[i].inst.len) logmatch(&dir[i]); -+ if (dir[i].match != '+') continue; -+ if (! dir[i].udponly) { -+ if (timestamp) buffer_puts(&dir[i].b, stamp); -+ buffer_put(&dir[i].b, line, linelen); -+ } -+ if (dir[i].udpaddr.sin_port != 0) { -+ if (fdudp == -1) { -+ buffer_puts(&dir[i].b, "warning: no udp socket available: "); -+ buffer_put(&dir[i].b, line, linelen); -+ buffer_put(&dir[i].b, "\n", 1); -+ buffer_flush(&dir[i].b); -+ } -+ else { -+ if (linelen >= linemax -1) { -+ line[linemax -4] =line[linemax -3] =line[linemax -2] ='.'; -+ linelen =linemax -1; -+ } -+ if (line[linelen -1] != '\n') line[linelen++] ='\n'; -+ if (sendto(fdudp, line, linelen, 0, -+ (struct sockaddr *)&dir[i].udpaddr, -+ sizeof(dir[i].udpaddr)) != linelen) { -+ buffer_puts(&dir[i].b, "warning: failure sending through udp: "); -+ buffer_put(&dir[i].b, line, linelen); -+ buffer_put(&dir[i].b, "\n", 1); -+ buffer_flush(&dir[i].b); -+ } -+ } -+ } -+ } -+ if (linelen == linemax) -+ for (;;) { -+ if (buffer_GETC(&data, &ch) <= 0) { -+ exitasap =1; -+ break; -+ } -+ if (ch == '\n') break; -+ for (i =0; i < dirn; ++i) -+ if (dir[i].fddir != -1) { -+ if (dir[i].match != '+') continue; -+ if (! dir[i].udponly) buffer_PUTC(&dir[i].b, ch); -+ } -+ } - for (i =0; i < dirn; ++i) - if (dir[i].fddir != -1) { -- switch(eol) { -- case 0: linestart(&dir[i], line, len); break; -- case 1: lineadd(&dir[i], line, len); break; -- case 2: lineflush(&dir[i], line, len); break; -+ if (dir[i].match != '+') continue; -+ if (! dir[i].udponly) { -+ ch ='\n'; -+ buffer_PUTC(&dir[i].b, ch); -+ buffer_flush(&dir[i].b); - } - } -- if (eol == 0) eol =1; -- if (eol == 2) { eol =0; buffer_seek(&data, 1); } - } - - for (i =0; i < dirn; ++i) { diff --git a/debian/rules b/debian/rules @@ -25,7 +25,6 @@ unpack: deb-checkdir unpack-stamp unpack-stamp: tar xzf runit-1.0.5.tar.gz ln -s runit-1.0.5 admin/runit - (cd admin/runit && patch -p0) <debian/diff/svlogd.diff echo '$(CC) $(CFLAGS)' >admin/runit/src/conf-cc echo '$(CC) $(LDFLAGS)' >admin/runit/src/conf-ld touch unpack-stamp