From: Fredrik Tolf Date: Sat, 23 Mar 2013 04:13:28 +0000 (+0100) Subject: patplex: Search for the configuration file if it contains no slashes. X-Git-Tag: 0.12~3 X-Git-Url: http://www.dolda2000.com/gitweb/?p=ashd.git;a=commitdiff_plain;h=518c678c21a99f4b148f3cb1f40afe8b51577082 patplex: Search for the configuration file if it contains no slashes. --- diff --git a/doc/patplex.doc b/doc/patplex.doc index dafe5e2..dff248b 100644 --- a/doc/patplex.doc +++ b/doc/patplex.doc @@ -40,7 +40,10 @@ directories named by the *PATH* environment variable, appended with `../etc/ashd`. For example, then, if *PATH* is `/usr/local/bin:/bin:/usr/bin`, the directories `/usr/local/etc/ashd`, `/etc/ashd` and `/usr/etc/ashd` are searched for `patplex.rc`, in that -order. Only the first file found is used, should there exist several. +order. Only the first file found is used, should there exist +several. If the given 'CONFIGFILE' contains any slashes, it is opened +by that exact name. Otherwise, it is searched for in the same manner +as the global configuration file. Should the global and the given configuration files conflict, the directives from the given file take precedence. diff --git a/src/patplex.c b/src/patplex.c index 13fa062..a0818d2 100644 --- a/src/patplex.c +++ b/src/patplex.c @@ -514,7 +514,7 @@ int main(int argc, char **argv) { int c; int nodef; - char *gcf; + char *gcf, *lcf; struct hthead *req; int fd; @@ -542,8 +542,14 @@ int main(int argc, char **argv) free(gcf); } } - if((lconfig = readconfig(argv[optind])) == NULL) { - flog(LOG_ERR, "could not read `%s'", argv[optind]); + if((strchr(lcf = argv[optind], '/')) == NULL) { + if((lcf = findstdconf(sprintf3("ashd/%s", lcf))) == NULL) { + flog(LOG_ERR, "could not find requested configuration file `%s'", argv[optind]); + exit(1); + } + } + if((lconfig = readconfig(lcf)) == NULL) { + flog(LOG_ERR, "could not read `%s'", lcf); exit(1); } signal(SIGCHLD, chldhandler); @@ -551,7 +557,7 @@ int main(int argc, char **argv) signal(SIGPIPE, sighandler); while(1) { if(reload) { - reloadconf(argv[optind]); + reloadconf(lcf); reload = 0; } if((fd = recvreq(0, &req)) < 0) {