diff options
| -rw-r--r-- | surveil/APKBUILD | 16 | ||||
| -rw-r--r-- | surveil/surveil/Makefile | 4 | ||||
| -rw-r--r-- | surveil/surveil/config.c | 12 | ||||
| -rw-r--r-- | surveil/surveil/main.c | 193 | ||||
| -rw-r--r-- | surveil/surveil/msg.c | 29 | ||||
| -rw-r--r-- | surveil/surveil/msg.h | 18 | ||||
| -rw-r--r-- | surveil/surveil/search.c | 4 |
7 files changed, 180 insertions, 96 deletions
diff --git a/surveil/APKBUILD b/surveil/APKBUILD index 0b2d386..1f98457 100644 --- a/surveil/APKBUILD +++ b/surveil/APKBUILD @@ -1,8 +1,8 @@ # Contributor: John Vogel <jvogel4@stny.rr.com> # Maintainer: John Vogel <jvogel4@stny.rr.com> pkgname=surveil -pkgver=0.2 -pkgrel=1 +pkgver=0.3 +pkgrel=0 pkgdesc="trach changes to remote files" url="http://localhost/home/john/Code/surveil" arch="all" @@ -28,6 +28,8 @@ source="surveil/LICENSE surveil/job.c surveil/job.h surveil/main.c + surveil/msg.c + surveil/msg.h surveil/net.c surveil/net.h surveil/search.c @@ -49,13 +51,13 @@ package() { sha512sums=" 9aa08e37eca237a54b10ac6a78a8e496641b7fdfa6a220e9d59f1db061cdf13165619ea4cda129e8d97afd9dfa4630f9d923df1c70a7f7a7e65dd7420b1329f0 LICENSE -d2ea7eb831f22576fe7e81c6dea3e7d2c9e9fad1dae63f15926142aaa56ba26f6c55c8cf58edb3cd5be1641ae12fb38fdf0fdfc52ff419e16b0dac74fe8bb064 Makefile +6fc81255dfdc1d8467793ad1a66f0919e8dab387fa7e115e1b30dfc00841c98722b00163b65c603c9227966018c606ecb8e4614c43f2cae02ba85bd43c8a1288 Makefile a061db311e7ba7fcb29659eb584b0b530bdd69324966036f28046c2931ee63f23a07ed0e8c06b0aa6ff8619134e11f8ed4ba31a6d5717a6d67a53498651166bc NOTES f6767772a8d024c156d2f5b6baf635c159ea2939ecdc25e1d4d55189d22f0bd00da6a0ab6ad7f02f38d01bbb5c564d7db743fcb81a8b4a1dd413cf21986b91f3 README.md 527f4f820488574bae8ab81ce3df11a95f3dc419ab6eef6d565d0a817ea2257f98c6b3152ded22521059b9999cf71f892dddc5d8f05180bd087aaa55168b3417 buf.c 999a896fa4c896414c21cd91bb9f954e45c71aed025e8d44df0c40914b839320b88dc6da9437818509c9145f0c5dc2034c9180c0cbb370f2ab5e17ece5d90b14 buf.h e96e532a270e16962e3dd01df2ebb8347e06168e977f8f8a97bd480e31f7468daca8308ea7a675a44b4c3199bf658601272c5790fa97a0a7fa73995631dd4a97 common.h -1c1906e1e11834ad4c6ad1bbd3fd4778352915c7f361678f72cd805924b238c9f75862aa2d9d86f0fb2fad959158aa87a0da83ef40b2d43f15a2942abedabcab config.c +1189c0fdc5f26b8f488f5ba5eea507bfe6146dae342f8badd593625cc6ecbaf94561ce095c0e56ce60a8403be272b696f5e8fd9780e975c989b9db17e9a4d37f config.c ac91e67d546dc8a2b66aae1a216bc271813c67a33a50eb3978e00834ef9ffd50afb16d88edbd61c1598a9484438f54f4a2bdbc73e444c5bd441f4c889d29172c config.h c5a3819658879ea7a7d146c79615fc8f9925a8a90efe6946434b75a215fae84e7349fab751aa22521c03548909a810b23cd2cbfc12455c634eb3a5235d9175dc db.c e2549a6caa1ec65f1753f44dfdfe4dd0c7baa5987be2ea13c1235b3f2388a79d5e89fda450a074120d5cd8d9cde596a89bb308c3f927ba08aab63cf357b7b140 db.h @@ -66,10 +68,12 @@ bae7269e443ffa471d23079ad7ba206256ab71053f678ee89353e8bfa05ffbae1d7b964aa39eb5ba 5216eb767b1cd2b65923905f28a93637049e712055badcfc8cb999908e8d748d70284c9ebe67aa52b040d557544f44a83b52c108b926ae7945fc12a35621194d example.conf 39938dfd96c72993d8bddbc9a6d685ee18af1df61dac6039448630aa05283b63b14352594972c2ea8e96553a135234b01fe1334702ecada306bce25a717b27d6 job.c 4ea25eb9fb63df997cc3be98cd7ef0b0f2b9750504731566f39210ba7062877cd53842aea78f7c4fb418eef841f19081b50d287495d4012d80f1fe343c04fd83 job.h -017fb0a24c056a3d4149bfd121ca34841ae55479e4eccce6c44f26bd39ca59acedad75c9eae065245428de790f76131f47de7c8d6873c501f614691e2b9c08e6 main.c +58662d013624c729971a6d532780698c1be1218c3e886bd65d0b17da701b48cceba0b00d1368db9c1b6054a0537d09d5597d553723d81fcc344364ef079746ab main.c +3c25f4f7c467df2da07033d1a6f2065caa0144341dd75922dd3608546ccc7a6193a25d01cf9344df57e5559c8ec49222e3c9f84ae8dc3deb2c3dd36cdb51cd28 msg.c +460b99b401ec625b78f5e43c38578a4781cba475d0e14ace79bb38698139fee17a8d23933b0daeb208733c8b59c34e989f5dee4e758f8c062e1af085f96f3d5b msg.h 3da1034b59084528b78f9a9b07da271f3715d0109141913e44d8cbde8f2647569b7c425b7f60f541a9daeaf78f11cd5c8991dc163bf40d9c341ae3bb6aa0ce89 net.c d5b2accdbf041d92f7b1874423d205a0cb9bdfcbf6a8dbbff99bd00d542ce318f5566e3634728b5b4ecedb0534be043f6a121adf4dd0c44fc5bac7cc6a34552e net.h -97057c053c96adcf182f3eed1724621f17cce3376d1dcadfcc063c82da674a68fefe351a2833e0d3d867c506c82e7710a175c7e5c70e0cbe477b837b51c1b6b9 search.c +aceb8093e5dab4c5d54c83dfd3589d339ab58ed35069697de9281f32e358e36a5bacf4892b474ba90159b99642547e56aabd11f84f1a5c5e44122ca93590eb1d search.c 795b356d875804b39576b99c155f4fa2a954ec7c8281029e6f2f43a88b3ab6535c50bee85d0105fa30cd08329286addc11a8207ee7d6450331d2ba952b5b949d search.h c642b266fd3300f832cc597b02875c28ac9fb37fbc3975206b1ba665dbb64a3f8e15663d6299553b4915193c6ade418e346503f7499c7371be994c9cbd6a943e surveil.1 a7227dc9a91339bbf7aeed27f335f9d4cc6b277c07f7d29fe81c1942513b5d9bcb22f7c2ba6050d2504728ca8ad23392bdc9957a4f3412a0478b79b89966ded2 util.c diff --git a/surveil/surveil/Makefile b/surveil/surveil/Makefile index 8212189..bc8728c 100644 --- a/surveil/surveil/Makefile +++ b/surveil/surveil/Makefile @@ -14,8 +14,8 @@ MANDIR = $(PREFIX)/share/man DOCDIR = $(PREFIX)/share/doc/surveil BIN = surveil -SRCS = buf.c config.c db.c dgst.c diff.c job.c main.c net.c search.c util.c -HDRS = buf.h common.h config.h db.h dgst.h diff.h job.h net.h search.h util.h +SRCS = buf.c config.c db.c dgst.c diff.c job.c main.c msg.c net.c search.c util.c +HDRS = buf.h common.h config.h db.h dgst.h diff.h job.h msg.h net.h search.h util.h OBJS = $(SRCS:.c=.o) ifdef DEBUG diff --git a/surveil/surveil/config.c b/surveil/surveil/config.c index d42e69a..62f2236 100644 --- a/surveil/surveil/config.c +++ b/surveil/surveil/config.c @@ -133,12 +133,14 @@ struct config *config(char *cfgd, char *cfgf, char *datd, char *datf) struct config *cfg; cfg = NULL; - configfile = datafile = NULL; + home = configfile = datafile = NULL; - home = getuserhome(); - if (!home) { - warnx("unable to determine home directory"); - return NULL; + if ((!cfgf && !cfgd) || (!datd && !datf)) { + home = getuserhome(); + if (!home) { + warnx("unable to determine home directory"); + return NULL; + } } if (cfgf) { diff --git a/surveil/surveil/main.c b/surveil/surveil/main.c index 54975e9..ee0e244 100644 --- a/surveil/surveil/main.c +++ b/surveil/surveil/main.c @@ -18,6 +18,7 @@ #include "job.h" #include "db.h" #include "diff.h" +#include "msg.h" #include "net.h" #include "search.h" #include "util.h" @@ -126,14 +127,14 @@ void prune_data(struct config *cfg, struct tqh *jobs, int stale) if (cfg->nspecified > 0) { for (i = 0; i < cfg->nspecified; i++) { - if (cfg->test) { - printf("test: prune %s\n", cfg->specified[i]); + msgx(MSG_LVL_TEST, "purge '%s'\n'", + cfg->specified[i]); + if (cfg->test) continue; - } - if (db_delete(cfg->specified[i]) == -1) { - warnx("purging data for job '%s' failed", + if (db_delete(cfg->specified[i]) == -1) + msgx(MSG_LVL_NORMAL, + "purging data for job '%s' failed", cfg->specified[i]); - } } } else { @@ -149,12 +150,12 @@ void prune_data(struct config *cfg, struct tqh *jobs, int stale) j = e->data; if (jobs && stale && job_is_in_jobs(j->name, jobs)) continue; - if (cfg->test) { - printf("test: prune %s\n", j->name); + msgx(MSG_LVL_TEST, "prune '%s'", j->name); + if (cfg->test) continue; - } if (db_delete(j->name) == -1) { - warnx("pruning job '%s' data failed", + msgx(MSG_LVL_NORMAL, + "pruning job '%s' data failed", j->name); } } @@ -178,7 +179,7 @@ int main(int argc, char *argv[]) char *buf; char *configdir, *configfile, *datadir, *datafile; int eflag, hflag, pflag, Pflag, qflag, tflag, vflag; - int res, c, ret = EXIT_FAILURE; + int res, c, ret = EXIT_SUCCESS; size_t i; dgstasc = prevdgstasc = NULL; @@ -235,13 +236,13 @@ int main(int argc, char *argv[]) qflag = 0; break; case ':': - fprintf(stderr, - "Option -%c requires an operand\n", optopt); + msgx(MSG_LVL_NORMAL, + "Option -%c requires an operand", optopt); eflag++; break; case '?': - fprintf(stderr, - "Unrecognized option '-%c'\n", optopt); + msgx(MSG_LVL_NORMAL, + "Unrecognized option '-%c'", optopt); eflag++; break; default: @@ -250,30 +251,37 @@ int main(int argc, char *argv[]) } } + if (qflag != 0) + cur_msg_lvl = MSG_LVL_QUIET; + if (tflag != 0) + cur_msg_lvl = MSG_LVL_TEST; + if (vflag != 0) + cur_msg_lvl = vflag > 1 ? MSG_LVL_DEBUG : MSG_LVL_VERBOSE; + if (configdir && configfile) { - warnx("-C and -c are mutually exclusive"); + msgx(MSG_LVL_NORMAL, "-C and -c are mutually exclusive"); eflag++; } if (datadir && datafile) { - warnx("-D and -d are mutually exclusive"); + msgx(MSG_LVL_NORMAL, "-D and -d are mutually exclusive"); eflag++; } if (pflag && Pflag) { - warnx("-P (purge) overrides -p (prune)"); + msgx(MSG_LVL_NORMAL, "-P (purge) overrides -p (prune)"); pflag = 0; } - if (eflag) { - hflag++; + if (eflag) ret = EXIT_FAILURE; - } - if (hflag) { - fprintf(stderr, "Usage: " - "%s [-dhpPqtv] [-C dir|-c file] [-D dir|-d file] [job]...\n", progname); - return ret; - } + if (hflag || eflag) { + if (qflag == 0) + fprintf(stderr, + "Usage: %s [-dhpPqtv] [-C dir|-c file] " + "[-D dir|-d file] [job]...\n", progname); + return ret; + } cfg = config(configdir, configfile, datadir, datafile); if (cfg == NULL) @@ -295,11 +303,12 @@ int main(int argc, char *argv[]) jobs = ctx.jobs = tq_new(); ret = ini_parse(cfg->configfile, chandler, &ctx); if (ret < 0 ) { - warn("failed reading %s", cfg->configfile); + msg(MSG_LVL_NORMAL, "failed reading %s", cfg->configfile); goto main_done; } else if (ret != 0) { - warnx("ini_parse(%s) failed at line %d", cfg->configfile, ret); + msgx(MSG_LVL_NORMAL, "ini_parse(%s) failed at line %d", + cfg->configfile, ret); goto main_done; } @@ -308,15 +317,23 @@ int main(int argc, char *argv[]) if (pflag) { if (cfg->nspecified > 0) { - warnx("-p ignored when jobs are specified"); + msgx(MSG_LVL_NORMAL, + "-p ignored when jobs are specified"); cfg->prune = 0; } else if (config_global(cfg, "prune", "on") == -1) { - warnx("failed to set prune setting"); + msgx(MSG_LVL_NORMAL, "failed to set prune setting"); goto main_fail; } } + if (qflag != 0) + cfg->quiet = qflag; + if (tflag != 0) + cfg->test = tflag; + if (vflag != 0) + cfg->verbose = vflag; + if (db_init(cfg->datafile) == -1) goto main_done; @@ -336,18 +353,12 @@ int main(int argc, char *argv[]) } } if (!exists) { - warnx("job '%s' not found", cfg->specified[i]); + msgx(MSG_LVL_NORMAL, "job '%s' not found", + cfg->specified[i]); goto main_done; } } - if (qflag != 0) - cfg->quiet = qflag; - if (tflag != 0) - cfg->test = tflag; - if (vflag != 0) - cfg->verbose = vflag; - if (cfg->prune) prune_data(cfg, jobs, 1); @@ -359,18 +370,20 @@ int main(int argc, char *argv[]) dgstasc = prevdgstasc = NULL; j = (struct job *)e->data; - if (tflag) - printf("test: job '%s'\n", j->name); + if (cur_msg_lvl >= MSG_LVL_DEBUG) + printf("job '%s' start\n", j->name); /* Do some sanity checks. */ if (!j->url) { - warnx("job %s: missing url", j->name); + msgx(MSG_LVL_NORMAL, "job %s: missing url", j->name); eflag++; } if (!j->dtype) j->dtype = DEFAULT_DIGEST; if (!digest_is_provided(j->dtype)) { - warnx("job %s: digest %s not provided\n", j->name, j->dtype); + msgx(MSG_LVL_NORMAL, + "job %s: digest %s not provided\n", + j->name, j->dtype); eflag++; } @@ -378,98 +391,118 @@ int main(int argc, char *argv[]) continue; if (run_job(j) == -1) { - warnx("job %s failed", j->name); + msgx(MSG_LVL_NORMAL, "job %s failed", j->name); continue; } - if (cfg->test) { - printf("%s: output:\n%s\n", j->name, j->buf); - continue; - } + if (cur_msg_lvl >= MSG_LVL_TEST) + printf("job '%s': output:\n%s", j->name, j->buf); res = db_find(j->name, &prev); if (res == -1) { - warnx("internal db error"); + msgx(MSG_LVL_NORMAL, "internal db error"); eflag++; goto main_fail; } if (res == 0) { - if (db_insert(j) == -1) { - warnx("db_insert(%s) failed", j->name); + if (cfg->test == 0 && db_insert(j) == -1) { + msgx(MSG_LVL_NORMAL, "db_insert(%s) failed", + j->name); eflag++; goto main_fail; } continue; } if (res == 1 && !prev) { - warnx("db_find(%s) returned FOUND in database, but return value not set"); + msgx(MSG_LVL_NORMAL, + "db_find(%s) returned FOUND in database, " + "but return value not set"); eflag++; goto main_fail; } if (!j->buf) { - warnx("data for job %s missing", j->name); + msgx(MSG_LVL_NORMAL, "data for job %s missing", + j->name); eflag++; goto main_fail; } if (!prev->buf) { - warnx("data for job %s previous run missing", prev->name); + msgx(MSG_LVL_NORMAL, + "data for job %s previous run missing", + prev->name); eflag++; goto main_fail; } - dgst = calcdgst(j->dtype ? j->dtype : DEFAULT_DIGEST, j->buf, j->bufsz, &dlen); + dgst = calcdgst(j->dtype ? j->dtype : DEFAULT_DIGEST, + j->buf, j->bufsz, &dlen); if (!dgst) { - warnx("failed to derive digest for job %s new data", j->name); + msgx(MSG_LVL_NORMAL, + "failed to derive digest for job %s new data", + j->name); eflag++; goto main_fail; } - prevdgst = calcdgst(j->dtype ? j->dtype : DEFAULT_DIGEST, prev->buf, prev->bufsz, &prevdlen); + prevdgst = calcdgst(j->dtype ? j->dtype : DEFAULT_DIGEST, + prev->buf, prev->bufsz, &prevdlen); if (!dgst) { - warnx("failed to derive digest for job %s old data", prev->name); + msgx(MSG_LVL_NORMAL, + "failed to derive digest for job %s old data", + prev->name); eflag++; goto main_fail; } if (dlen != prevdlen) { - warnx("digest lengths for old and new data don't match for job %s", j->name); + msgx(MSG_LVL_NORMAL, + "digest lengths for old and new data don't " + "match for job %s", j->name); eflag++; goto main_fail; } if (memcmp(dgst, prevdgst, dlen) == 0) { - if (cfg->verbose > 0) - warnx("%s: no change", j->name); + if (cur_msg_lvl >= MSG_LVL_TEST) + printf("job '%s': no change\n\n", j->name); goto loop_done; } dgstasc = dgst2asc(dgst, dlen); prevdgstasc = dgst2asc(prevdgst, prevdlen); - if (strftime(lasttime, sizeof(lasttime), "%c", gmtime(&prev->date)) == 0 || - strftime(thistime, sizeof(thistime), "%c", gmtime(&j->date)) == 0) - warnx("failed to format date strings"); - if (cfg->verbose || cfg->test) { - printf("%s (%s):\n%s: %s\n%s: %s\n\n", - j->name, j->url, lasttime, prevdgstasc, thistime, dgstasc); + if (strftime(lasttime, sizeof(lasttime), "%c", + gmtime(&prev->date)) == 0) { + msgx(MSG_LVL_NORMAL, "failed to format previous date"); + snprintf(lasttime, sizeof(lasttime), "%ld", prev->date); } - if (db_update(j) == -1) { - warnx("db_update(%s) failed", j->name); + if (strftime(thistime, sizeof(thistime), "%c", + gmtime(&j->date)) == 0) { + msgx(MSG_LVL_NORMAL, "failed to format this date"); + snprintf(thistime, sizeof(thistime), "%ld", j->date); + } + + msgx(MSG_LVL_TEST, "%s (%s):\n%s: %s\n%s: %s", + j->name, j->url, lasttime,prevdgstasc, + thistime, dgstasc); + + if (cfg->test == 0 && db_update(j) == -1) { + msgx(MSG_LVL_NORMAL, "db_update(%s) failed", j->name); eflag++; } - if (!cfg->quiet || cfg->verbose || cfg->test) { - buf = get_diff(prev->buf, prev->bufsz, j->buf, j->bufsz); - if (buf == NULL) { - warnx("failed to get diff with last run for job '%s'", j->name); - eflag++; - } - else { - printf("job %s:\n", j->name); - printf("prev_dgst=%s\n", prevdgstasc); - printf("new_dgst=%s\n", dgstasc); - printf("job: %s\n--- last\n+++ this\n%s", j->name, buf); - } + buf = get_diff(prev->buf, prev->bufsz, j->buf, j->bufsz); + if (buf == NULL) { + msgx(MSG_LVL_NORMAL, "job '%s': diff failed", j->name); + eflag++; + } + else if (cfg->quiet == 0) { + printf("job: %s:\n", j->name); + if (cfg->verbose > 0) + printf("previous digest: %s\n" + "this digest: %s\n", + prevdgstasc, dgstasc); + printf("--- last\n+++ this\n%s\n\n", buf); } loop_done: diff --git a/surveil/surveil/msg.c b/surveil/surveil/msg.c new file mode 100644 index 0000000..420e4b4 --- /dev/null +++ b/surveil/surveil/msg.c @@ -0,0 +1,29 @@ +/* vim: set ts=4 sw=4 ai: */ +#include <stdarg.h> +#include <err.h> + +#include "msg.h" + +enum msg_level cur_msg_lvl = MSG_LVL_NORMAL; + +void msg(enum msg_level lvl, const char *fmt, ...) +{ + va_list ap; + + if (cur_msg_lvl >= lvl) { + va_start(ap, fmt); + vwarn(fmt, ap); + va_end(ap); + } +} + +void msgx(enum msg_level lvl, const char *fmt, ...) +{ + va_list ap; + + if (cur_msg_lvl >= lvl) { + va_start(ap, fmt); + vwarnx(fmt, ap); + va_end(ap); + } +} diff --git a/surveil/surveil/msg.h b/surveil/surveil/msg.h new file mode 100644 index 0000000..8f84e17 --- /dev/null +++ b/surveil/surveil/msg.h @@ -0,0 +1,18 @@ +/* vim: set ts=4 sw=4 ai: */ +#ifndef SURVEIL_MSG_H +#define SURVEIL_MSG_H + +enum msg_level { + MSG_LVL_QUIET = 0, + MSG_LVL_NORMAL = 1, + MSG_LVL_TEST = 2, + MSG_LVL_VERBOSE = 3, + MSG_LVL_DEBUG = 4 +}; + +extern enum msg_level cur_msg_lvl; + +void msg(enum msg_level, const char *, ...); +void msgx(enum msg_level, const char *, ...); + +#endif/*!SURVEIL_MSG_H*/ diff --git a/surveil/surveil/search.c b/surveil/surveil/search.c index 351df25..38245ba 100644 --- a/surveil/surveil/search.c +++ b/surveil/surveil/search.c @@ -196,9 +196,7 @@ ssize_t get_matches(char **buf, struct tqh *s) } } - if (buf_addchr(&b, '\n') == -1 || - buf_addchr(&b, '\0') == -1 || - b.len > b.size) + if (buf_addchr(&b, '\0') == -1 || b.len > b.size) goto get_matches_fail; *buf = b.ptr; |
