--- tools/duende.c.orig Sat Jun 2 13:40:35 2007
+++ tools/duende.c Sat Jun 2 13:41:01 2007
@@ -35,10 +35,13 @@
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <syslog.h>
+#include <sys/param.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/wait.h>
+#include <libutil.h>
#include <unistd.h>
#include "../MaraDns.h"
@@ -139,6 +142,9 @@
int exit_status;
pid_t pid, log_pid;
int stream1[2]; /* Used for piping */
+ struct pidfh *pfh;
+ char *name;
+ char *pidfile;
if(argv[0] == NULL || argv[1] == NULL) {
printf("Usage: duende [program] [arguments]\n");
exit(1);
@@ -202,7 +208,24 @@
log_helper(argv[1],stream1[0]);
syslog(LOG_ALERT,"log_helper finished, terminating\n");
exit(1);
- }
+ }
+
+ name = strrchr(argv[1], '/');
+ if (name && *name != '\0') {
+ pidfile = malloc(strlen("/var/run/") + strlen(name) + strlen(".pid") + 1);
+ if (pidfile) {
+ strcpy(pidfile, "/var/run/");
+ strcat(pidfile, name);
+ strcat(pidfile, ".pid");
+ remove(pidfile);
+ pfh = pidfile_open(pidfile, 0600, &pid);
+ if (pfh) {
+ pidfile_write(pfh);
+ pidfile_close(pfh);
+ }
+ free(pidfile);
+ }
+ }
for(;;) {
/* If we got a HUP signal, send it to the child */
if(got_hup_signal == 1) {
syntax highlighted by Code2HTML, v. 0.9.1