diff options
Diffstat (limited to 'pidfile.patch')
-rw-r--r-- | pidfile.patch | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/pidfile.patch b/pidfile.patch new file mode 100644 index 000000000000..596fa9b67870 --- /dev/null +++ b/pidfile.patch @@ -0,0 +1,63 @@ +diff --git a/src/os.c b/src/os.c +index 66c3ada..246c10f 100644 +--- a/src/os.c ++++ b/src/os.c +@@ -33,7 +33,6 @@ + #include "debug.h" + #include "ddns.h" + #include "cache.h" +-#include "libite/lite.h" + + #define MAXSTRING 1024 + +@@ -421,6 +420,39 @@ static int mkparentdir(char *file) + return rc; + } + ++static void pidexit(void) ++{ ++ if (pidfile_path) { ++ unlink(pidfile_path); ++ free(pidfile_path); ++ pidfile_path = NULL; ++ } ++} ++ ++/* Continue using old pidfile fn for Inadyn 1.x series, ++ * incompatible semantics with OpenBSD version. */ ++static int old_pidfile(char *file) ++{ ++ FILE *fp; ++ ++ /* Ignore any errors, we may not be allowed to create the dir, ++ * but still be able to create/overwrite the pidfile. */ ++ mkparentdir(file); ++ ++ fp = fopen(file, "w"); ++ if (!fp) { ++ logit(LOG_ERR, "Failed creating pidfile %s: %s", file, strerror(errno)); ++ return RC_FILE_IO_ACCESS_ERROR; ++ } ++ ++ fprintf(fp, "%u\n", getpid()); ++ fclose(fp); ++ ++ atexit(pidexit); ++ ++ return 0; ++} ++ + /* Create pid and cache file repository, make sure we can write to it. If + * we are restarted we cannot otherwise make sure we've not already updated + * the IP -- and the user will be locked-out of their DDNS server provider +@@ -440,8 +472,8 @@ int os_check_perms(void *UNUSED(arg)) + return RC_FILE_IO_ACCESS_ERROR; + } + +- /* Not creating a pidfile is OK, the cache file is the critical point. */ +- pidfile(pidfile_path); ++ if (old_pidfile(pidfile_path)) ++ logit(LOG_WARNING, "Failed creating pidfile %s: %m", pidfile_path); + + return 0; + } |