diff --git a/src/cond.c b/src/cond.c index 842d50e0..afcc6893 100644 --- a/src/cond.c +++ b/src/cond.c @@ -50,11 +50,11 @@ const char *condstr(enum cond_state s) const char *cond_path(const char *name) { char tmp[MAX_ARG_LEN]; - static char file[MAX_ARG_LEN]; + static char path[256]; snprintf(tmp, sizeof(tmp), COND_PATH "/%s", name); - return pid_runpath(tmp, file, sizeof(file)); + return pid_runpath(tmp, path, sizeof(path)); } unsigned int cond_get_gen(const char *file) diff --git a/src/initctl.c b/src/initctl.c index e9493b03..71e318a2 100644 --- a/src/initctl.c +++ b/src/initctl.c @@ -688,6 +688,19 @@ int main(int argc, char *argv[]) return usage(1); } +void logit(int prio, const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + if (prio <= LOG_ERR) + verrx(1, fmt, ap); + else + vwarnx(fmt, ap); + va_end(ap); +} + + /** * Local Variables: * indent-tabs-mode: t diff --git a/src/pid.c b/src/pid.c index dbe75c1c..1ae19ffc 100644 --- a/src/pid.c +++ b/src/pid.c @@ -96,7 +96,7 @@ char *pid_get_name(pid_t pid, char *name, size_t len) char *pid_file(svc_t *svc) { char fn[MAX_ARG_LEN]; - static char path[MAX_ARG_LEN]; + static char path[256]; if (svc->pidfile[0]) { if (svc->pidfile[0] == '!') diff --git a/src/pid.h b/src/pid.h index f204858f..a865c534 100644 --- a/src/pid.h +++ b/src/pid.h @@ -46,8 +46,9 @@ int pid_file_parse (svc_t *svc, char *arg); */ static inline char *pid_runpath(const char *file, char *path, size_t len) { - static int unknown = 1; static char *prefix = "/var/run"; + static int unknown = 1; + int rc; if (unknown) { if (fisdir("/run")) @@ -60,7 +61,9 @@ static inline char *pid_runpath(const char *file, char *path, size_t len) else if (!strncmp(file, "/run/", 5)) file += 5; - snprintf(path, len, "%s/%s", prefix, file); + rc = snprintf(path, len, "%s/%s", prefix, file); + if (rc < 0 || (size_t)rc >= len) + _e("File path '%s' truncated, should end with '%s'", path, file); return path; } diff --git a/src/svc.h b/src/svc.h index ae539fde..57f90a58 100644 --- a/src/svc.h +++ b/src/svc.h @@ -95,7 +95,7 @@ typedef struct svc { /* Service details */ pid_t pid; - char pidfile[MAX_ARG_LEN]; + char pidfile[256]; long start_time; /* Start time, as seconds since boot, from sysinfo() */ const svc_state_t state; /* Paused, Reloading, Restart, Running, ... */ svc_type_t type; /* Service, run, task, inetd, ... */