You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

197 lines
5.0 KiB

Index: getopt/getopt.c
--- getopt/getopt.c.orig 2002-09-07 04:27:51 +0200
+++ getopt/getopt.c 2007-10-23 08:55:09 +0200
@@ -40,6 +40,7 @@
#endif
#include <stdio.h>
+#include <string.h>
/* Comment out all this code if we are using the GNU C Library, and are not
actually compiling the library itself. This code is part of the GNU C
Index: src/Makefile.in
--- src/Makefile.in.orig 2005-05-30 04:13:28 +0200
+++ src/Makefile.in 2007-10-23 08:55:09 +0200
@@ -73,7 +73,7 @@
VERSION = @VERSION@
YACC = @YACC@
-CFLAGS = -Wall -ggdb -O3 -DPORTFWD_CONF=\"$(sysconfdir)/portfwd.cfg\"
+CFLAGS = -DPORTFWD_CONF=\"$(sysconfdir)/portfwd.cfg\"
CXXFLAGS = $(CFLAGS)
INCLUDES = -I$(top_srcdir)/src
Index: src/director.cc
--- src/director.cc.orig 2005-05-30 04:13:28 +0200
+++ src/director.cc 2007-10-23 08:55:09 +0200
@@ -195,7 +195,7 @@
address.len = 0;
address.addr = (char *) malloc(address_buf_size * sizeof(char *));
if (!address.addr) {
- syslog(LOG_ERR, "director::director(): malloc(%d) failed", address_buf_size);
+ syslog(LOG_ERR, "director::director(): malloc(%ld) failed", address_buf_size);
exit(1);
}
}
@@ -352,7 +352,7 @@
*/
if (addr_buf_len > address_buf_size) {
- syslog(LOG_ERR, "Insufficient space in local buffer for address (local_buffer_size=%d < address_length=%d)", address_buf_size, addr_buf_len);
+ syslog(LOG_ERR, "Insufficient space in local buffer for address (local_buffer_size=%ld < address_length=%ld)", (long)address_buf_size, (long)addr_buf_len);
return -1;
}
Index: src/portfwd.cc
--- src/portfwd.cc.orig 2005-05-30 04:13:28 +0200
+++ src/portfwd.cc 2007-10-23 08:55:09 +0200
@@ -37,6 +37,8 @@
int on_the_fly_dns = 0;
int foreground = 0;
+int dmz = -1;
+const char *pidfile = NULL;
void usage(FILE *out)
{
@@ -52,7 +54,8 @@
" -f | --on-the-fly-dns\n"
" -g | --foreground\n"
- " -c <config-file> | --config <config-file>\n",
+ " -c <config-file> | --config <config-file>\n"
+ " -p <pid-file> | --pidfile <pid-file>\n",
prog);
}
@@ -82,14 +85,16 @@
{"on-the-fly-dns", 0, 0, 'f'},
{"foreground", 0, 0, 'g'},
{"config", 1, 0, 'c'},
+ {"pidfile", 1, 0, 'p'},
{0, 0, 0, 0}
};
*config = 0;
+ pidfile = 0;
for (;;) {
- opt = getopt_long(argc, (char ** const) argv, "hvdtfgc:", long_options, &option_index);
+ opt = getopt_long(argc, (char ** const) argv, "hvdtfgc:p:", long_options, &option_index);
if (opt == -1)
break;
@@ -125,6 +130,13 @@
}
*config = optarg;
break;
+ case 'p':
+ if (pidfile) {
+ fprintf(stderr, "%s: Pid-file redefinition: %s", me, optarg);
+ exit(1);
+ }
+ pidfile = optarg;
+ break;
case '?':
usage(stderr);
exit(1);
@@ -246,6 +258,9 @@
closelog();
+ if (!dmz && pidfile)
+ unlink(pidfile);
+
exit(0);
}
@@ -291,7 +306,7 @@
* Go to background.
*/
if (!foreground) {
- int dmz = daemonize();
+ dmz = daemonize(pidfile);
if (dmz) {
syslog(LOG_ERR, "daemonize() failed: %d", dmz);
exit(1);
Index: src/portfwd.h
--- src/portfwd.h.orig 2005-05-30 04:13:28 +0200
+++ src/portfwd.h 2007-10-23 08:55:09 +0200
@@ -18,6 +18,7 @@
extern int on_the_fly_dns;
extern int foreground;
+extern const char *pidfile;
#endif /* PORTFWD_H */
Index: src/util.cc
--- src/util.cc.orig 2005-05-30 04:13:28 +0200
+++ src/util.cc 2007-10-23 08:55:09 +0200
@@ -118,7 +118,7 @@
return 0;
}
-int daemonize()
+int daemonize(const char *pidfile)
{
ONVERBOSE(syslog(LOG_INFO, "Daemonizing"));
@@ -146,6 +146,20 @@
return -1;
}
+ if (pidfile) {
+ int pidfd;
+ size_t n;
+ char buf[20];
+ n = snprintf(buf,sizeof(buf),"%lu",(unsigned long)pid);
+ if (n < sizeof(buf)) {
+ pidfd = open(pidfile, O_CREAT|O_TRUNC|O_WRONLY, 0666);
+ if (pidfd != -1) {
+ write(pidfd,buf,n);
+ close(pidfd);
+ }
+ }
+ }
+
/*
* Parent exits
*/
Index: src/util.h
--- src/util.h.orig 2005-05-30 04:13:28 +0200
+++ src/util.h 2007-10-23 08:55:09 +0200
@@ -28,7 +28,7 @@
int cd_root();
int std_to_null();
-int daemonize();
+int daemonize(const char *pidfile);
void socket_close(int fd);
Index: src/util.hpp
--- src/util.hpp.orig 2001-05-15 02:25:01 +0200
+++ src/util.hpp 2007-10-23 08:55:09 +0200
@@ -15,7 +15,7 @@
{
sample = new T[size];
if (!sample) {
- syslog(LOG_EMERG, "%s:%s (%d x %d)\n", "safe_new()", "could not allocate array", size, sizeof(T));
+ syslog(LOG_EMERG, "%s:%s (%ld x %ld)\n", "safe_new()", "could not allocate array", (long)size, (long)sizeof(T));
exit(1);
}
Index: src/vector.hpp
--- src/vector.hpp.orig 2005-06-28 23:46:27 +0200
+++ src/vector.hpp 2007-10-23 08:55:09 +0200
@@ -55,8 +55,6 @@
T *begin_ptr() const;
T *past_end_ptr() const;
static T *next_ptr(T *i);
-
- friend std::ostream& operator << <T> (std::ostream& out, const vector<T>& v);
};
template <class T>