|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
--- xtide-2.14/xttpd.cc.pidfile 2014-10-12 04:42:10.000000000 +0900
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+++ xtide-2.14/xttpd.cc 2015-12-30 21:05:16.087233767 +0900
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
@@ -34,6 +34,11 @@ using namespace libxtide;
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
#include <netdb.h>
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
#include <pwd.h>
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
#include <grp.h>
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+#include <errno.h>
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+#include <sys/stat.h>
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+#include <sys/types.h>
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+#include <signal.h>
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+#include <unistd.h>
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
// These browsers nowadays can get pretty verbose.
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
@@ -44,6 +49,11 @@ static const size_t bufsize (10000);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
static Dstr webmaster;
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
static ZoneIndex zoneIndex;
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
static bool zoneinfoIsNotHorriblyObsolete;
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+static int processTermReason = 0;
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+// Pid file name
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+#define PID_FILE_DIR "/var/run/xttpd"
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+#define PID_FILE_NAME PID_FILE_DIR "/xttpd.pid"
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
namespace TimeControl {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
@@ -1153,6 +1163,89 @@ static void dontBeRoot() {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
}
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
}
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+static void createPidFileDirectory(void) {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ struct stat st;
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ mode_t dirMode = S_IRWXU | S_IRGRP | S_IXGRP;
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ if (stat(PID_FILE_DIR, &st) != 0) {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ int errnum = errno;
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ if (errnum != ENOENT) {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ Global::xperror("stat");
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ exit (-1);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ if (mkdir(PID_FILE_DIR, dirMode) < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ Global::xperror("mkdir");
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ exit (-1);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ if (stat(PID_FILE_DIR, &st) != 0) {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ Global::xperror("stat");
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ exit (-1);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ // Make it sure that PID_FILE_DIR is a directory
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ // (not a symlink or so)
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ if (!S_ISDIR(st.st_mode)) {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ Dstr msg (PID_FILE_DIR " is not a directory");
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ Global::log (msg, LOG_ERR);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ exit (-1);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ // Again chmod
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ if (chmod(PID_FILE_DIR, dirMode) < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ Global::xperror("chmod");
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ exit (-1);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ group *gr = getgrnam (xttpd_group);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ if (!gr) {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ Global::xperror ("getgrnam");
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ exit (-1);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ passwd *nb = getpwnam (xttpd_user);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ if (!nb) {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ Global::xperror ("getpwnam");
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ exit(-1);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ if (chown(PID_FILE_DIR, nb->pw_uid, gr->gr_gid) < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ Global::xperror ("chown");
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ exit(-1);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+}
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+static void writePidFile(pid_t pid) {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ FILE *pidFd = fopen(PID_FILE_NAME, "w");
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ if (!pidFd) {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ Global::xperror("fopen");
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ exit (-1);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ if (fprintf(pidFd, "%d", (int)pid) < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ Global::xperror ("fprintf");
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ exit (-1);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ fclose(pidFd);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+}
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+static void handlerSigterm(int sig) {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ processTermReason = sig;
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+}
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+static void initSignalHander(void) {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ struct sigaction sigact;
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ memset(&sigact, 0, sizeof sigact);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ sigemptyset(&sigact.sa_mask);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ sigact.sa_flags |= SA_RESTART;
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ sigact.sa_handler = handlerSigterm;
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ sigaction(SIGTERM, &sigact, NULL);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+}
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
int main (int argc, char **argv) {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
@@ -1181,7 +1274,13 @@ int main (int argc, char **argv) {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
portNumberEvade = parseAddress (portnum, addr, argv[1]);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
setupSocket (portnum, addr, listenSocket);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
}
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ // Create pid directory before dropping priviledge
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ createPidFileDirectory();
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
dontBeRoot();
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ writePidFile(getpid());
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ // Initialize signal handler
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ initSignalHander();
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
// An unfortunate consequence of needing to drop root ASAP is that
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
// failure to bind the port prevents xttpd -v from working.
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
@@ -1212,7 +1311,7 @@ int main (int argc, char **argv) {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
FD_ZERO (&rdset);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
FD_SET (listenSocket, &rdset);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
sockaddr addr;
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
- while (true) {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ while (!processTermReason) {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
fd_set trdset, twrset, texset;
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
trdset = rdset;
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
// I seem to remember that some platforms barf if you provide
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
@@ -1235,6 +1334,7 @@ int main (int argc, char **argv) {
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
while (waitpid (-1, (int*)NULL, WNOHANG|WUNTRACED) > 0);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
}
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
+ unlink(PID_FILE_NAME);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
exit (0);
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
}
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
d9f6f3f |
|