summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.inspircd.inc9
-rw-r--r--src/listensocket.cpp4
2 files changed, 7 insertions, 6 deletions
diff --git a/.inspircd.inc b/.inspircd.inc
index b0933f07d..b09ffb386 100644
--- a/.inspircd.inc
+++ b/.inspircd.inc
@@ -180,17 +180,14 @@ sub valdebugunattended
my $pid = fork;
if ($pid == 0) {
POSIX::setsid();
+ umask 022;
+ open STDERR, '>', "$valgrindlogpath/valdebug.$$" or die $!;
umask 066;
open STDIN, '/dev/null' or die $!;
open STDOUT, '>', "$valgrindlogpath/out.$$" or die $!;
- open STDERR, '>', "$valgrindlogpath/err.$$" or die $!;
- umask 022;
- exec "valgrind -v --tool=memcheck --leak-check=yes --num-callers=10 --time-stamp=yes --log-file=$valgrindlogpath/valdebug.\%p $binpath/$executable -nofork -debug -nolog";
+ exec "valgrind -v --tool=memcheck --leak-check=yes --num-callers=10 --time-stamp=yes --log-fd=2 $binpath/$executable -nofork -debug -nolog";
exit 1;
}
- # Sleep 5 seconds to give valgrind time to initialize before chmodding the logdir for apache access.
- sleep(5);
- system("chmod 644 $valgrindlogpath/valdebug.*");
}
sub screenvaldebug
diff --git a/src/listensocket.cpp b/src/listensocket.cpp
index 961156ae6..313396ed7 100644
--- a/src/listensocket.cpp
+++ b/src/listensocket.cpp
@@ -128,6 +128,10 @@ void ListenSocketBase::AcceptInternal()
if (this->family == AF_INET6)
{
inet_ntop(AF_INET6, &((const sockaddr_in6*)client)->sin6_addr, buf, sizeof(buf));
+ if (!strncmp(buf, "::ffff:", 7))
+ {
+ memmove(buf, buf+7, sizeof(buf)-7);
+ }
socklen_t raddrsz = sizeof(sockaddr_in6);
if (getsockname(incomingSockfd, (sockaddr*) raddr, &raddrsz) == 0)
inet_ntop(AF_INET6, &((const sockaddr_in6*)raddr)->sin6_addr, target, sizeof(target));