Blame SOURCES/bz1334170-allow_fence_virtd_to_run_as_non_root.patch

cb2ad0
diff -ur a/server/daemon_init.c b/server/daemon_init.c
cb2ad0
--- a/server/daemon_init.c	2014-06-23 15:56:09.000000000 -0400
cb2ad0
+++ b/server/daemon_init.c	2016-06-27 11:46:20.838477025 -0400
cb2ad0
@@ -29,14 +29,14 @@
cb2ad0
 /*
cb2ad0
  * This should ultimately go in a header file.
cb2ad0
  */
cb2ad0
-void daemon_init(const char *prog, int nofork);
cb2ad0
+void daemon_init(const char *prog, const char *pid_file, int nofork);
cb2ad0
 void daemon_cleanup(void);
cb2ad0
-int check_process_running(const char *prog, pid_t * pid);
cb2ad0
+int check_process_running(const char *cmd, const char *pid_file, pid_t * pid);
cb2ad0
 
cb2ad0
 /*
cb2ad0
  * Local prototypes.
cb2ad0
  */
cb2ad0
-static void update_pidfile(const char *prog);
cb2ad0
+static void update_pidfile(const char *filename);
cb2ad0
 static int setup_sigmask(void);
cb2ad0
 static char pid_filename[PATH_MAX];
cb2ad0
 
cb2ad0
@@ -99,12 +99,10 @@
cb2ad0
 
cb2ad0
 
cb2ad0
 int
cb2ad0
-check_process_running(const char *prog, pid_t * pid)
cb2ad0
+check_process_running(const char *cmd, const char *filename, pid_t * pid)
cb2ad0
 {
cb2ad0
 	pid_t oldpid;
cb2ad0
 	FILE *fp;
cb2ad0
-	char filename[PATH_MAX];
cb2ad0
-	char *cmd;
cb2ad0
 	int ret;
cb2ad0
 	struct stat st;
cb2ad0
 
cb2ad0
@@ -114,11 +112,6 @@
cb2ad0
 	 * Now see if there is a pidfile associated with this cmd in /var/run
cb2ad0
 	 */
cb2ad0
 	fp = NULL;
cb2ad0
-	memset(filename, 0, PATH_MAX);
cb2ad0
-
cb2ad0
-	cmd = basename((char *)prog);
cb2ad0
-	snprintf(filename, sizeof (filename), "/var/run/%s.pid", cmd);
cb2ad0
-
cb2ad0
 	ret = stat(filename, &st);
cb2ad0
 	if ((ret < 0) || (!st.st_size))
cb2ad0
 		return 0;
cb2ad0
@@ -146,15 +139,11 @@
cb2ad0
 
cb2ad0
 
cb2ad0
 static void
cb2ad0
-update_pidfile(const char *prog)
cb2ad0
+update_pidfile(const char *filename)
cb2ad0
 {
cb2ad0
 	FILE *fp = NULL;
cb2ad0
-	char *cmd;
cb2ad0
-
cb2ad0
-	memset(pid_filename, 0, PATH_MAX);
cb2ad0
 
cb2ad0
-	cmd = basename((char *)prog);
cb2ad0
-	snprintf(pid_filename, sizeof (pid_filename), "/var/run/%s.pid", cmd);
cb2ad0
+	strncpy(pid_filename, filename, PATH_MAX);
cb2ad0
 
cb2ad0
 	fp = fopen(pid_filename, "w");
cb2ad0
 	if (fp == NULL) {
cb2ad0
@@ -197,19 +186,11 @@
cb2ad0
 
cb2ad0
 
cb2ad0
 void
cb2ad0
-daemon_init(const char *prog, int nofork)
cb2ad0
+daemon_init(const char *prog, const char *pid_file, int nofork)
cb2ad0
 {
cb2ad0
-	uid_t uid;
cb2ad0
 	pid_t pid;
cb2ad0
 
cb2ad0
-	uid = getuid();
cb2ad0
-	if (uid) {
cb2ad0
-		syslog(LOG_ERR,
cb2ad0
-			"daemon_init: Sorry, only root wants to run this.\n");
cb2ad0
-		exit(1);
cb2ad0
-	}
cb2ad0
-
cb2ad0
-	if (check_process_running(prog, &pid) && (pid != getpid())) {
cb2ad0
+	if (check_process_running(prog, pid_file, &pid) && (pid != getpid())) {
cb2ad0
 		syslog(LOG_ERR,
cb2ad0
 			"daemon_init: Process \"%s\" already running.\n",
cb2ad0
 			prog);
cb2ad0
@@ -226,7 +207,7 @@
cb2ad0
 		exit(1);
cb2ad0
 	}
cb2ad0
 
cb2ad0
-	update_pidfile(prog);
cb2ad0
+	update_pidfile(pid_file);
cb2ad0
 }
cb2ad0
 
cb2ad0
 
cb2ad0
diff -ur a/server/main.c b/server/main.c
cb2ad0
--- a/server/main.c	2014-06-23 15:56:09.000000000 -0400
cb2ad0
+++ b/server/main.c	2016-06-27 11:39:55.345859796 -0400
cb2ad0
@@ -4,6 +4,7 @@
cb2ad0
 #include <unistd.h>
cb2ad0
 #include <signal.h>
cb2ad0
 #include <sys/types.h>
cb2ad0
+#include <sys/param.h>
cb2ad0
 
cb2ad0
 /* Local includes */
cb2ad0
 #include <stdint.h>
cb2ad0
@@ -16,7 +17,7 @@
cb2ad0
 
cb2ad0
 /* configure.c */
cb2ad0
 int do_configure(config_object_t *config, const char *filename);
cb2ad0
-int daemon_init(const char *prog, int nofork);
cb2ad0
+int daemon_init(const char *prog, const char *pid_file, int nofork);
cb2ad0
 int daemon_cleanup(void);
cb2ad0
 
cb2ad0
 
cb2ad0
@@ -29,6 +30,8 @@
cb2ad0
 	printf("  -d <level>       Set debugging level to <level>.\n");
cb2ad0
 	printf("  -c               Configuration mode.\n");
cb2ad0
 	printf("  -l               List plugins.\n");
cb2ad0
+	printf("  -w               Wait for initialization.\n");
cb2ad0
+	printf("  -p <file>        Use <file> to record the active process id.\n");
cb2ad0
 }
cb2ad0
 
cb2ad0
 
cb2ad0
@@ -47,6 +50,7 @@
cb2ad0
 	char listener_name[80];
cb2ad0
 	char backend_name[80];
cb2ad0
 	const char *config_file = DEFAULT_CONFIG_FILE;
cb2ad0
+	char *pid_file = NULL;
cb2ad0
 	config_object_t *config = NULL;
cb2ad0
 	map_object_t *map = NULL;
cb2ad0
 	const listener_plugin_t *lp;
cb2ad0
@@ -64,7 +68,7 @@
cb2ad0
 		return -1;
cb2ad0
 	}
cb2ad0
 
cb2ad0
-	while ((opt = getopt(argc, argv, "Ff:d:cwlh")) != EOF) {
cb2ad0
+	while ((opt = getopt(argc, argv, "Ff:d:cwlhp:")) != EOF) {
cb2ad0
 		switch(opt) {
cb2ad0
 		case 'F':
cb2ad0
 			printf("Background mode disabled\n");
cb2ad0
@@ -74,6 +78,10 @@
cb2ad0
 			printf("Using %s\n", optarg);
cb2ad0
 			config_file = optarg;
cb2ad0
 			break;
cb2ad0
+		case 'p':
cb2ad0
+			printf("Using %s\n", optarg);
cb2ad0
+			pid_file = optarg;
cb2ad0
+			break;
cb2ad0
 		case 'd':
cb2ad0
 			debug_set = atoi(optarg);
cb2ad0
 			break;
cb2ad0
@@ -190,7 +198,13 @@
cb2ad0
 		return 1;
cb2ad0
 	}
cb2ad0
 
cb2ad0
-	daemon_init(basename(argv[0]), foreground);
cb2ad0
+        if(pid_file == NULL) {
cb2ad0
+            pid_file = malloc(PATH_MAX);
cb2ad0
+            memset(pid_file, 0, PATH_MAX);
cb2ad0
+            snprintf(pid_file, PATH_MAX, "/var/run/%s.pid", basename(argv[0]));
cb2ad0
+        }
cb2ad0
+        
cb2ad0
+	daemon_init(basename(argv[0]), pid_file, foreground);
cb2ad0
 	signal(SIGINT, exit_handler);
cb2ad0
 	signal(SIGTERM, exit_handler);
cb2ad0
 	signal(SIGQUIT, exit_handler);