AC_HEADER_SYS_WAIT
AC_TYPE_OFF_T
AC_TYPE_UID_T
-AC_CHECK_FUNCS([floor gethostname memmove rmdir strncasecmp strrchr strtol atoll dup2 fdatasync ftruncate gettimeofday memset mkdir mkfifo select socket strcasecmp strchr strdup strerror strstr clock_gettime getrusage rand uname setlocale getcwd mktime gmtime_r gmtime strlcpy strlcat ftruncate stat64 sbrk mmap mremap setrlimit sysconf gethostbyaddr initgroups getifaddrs freeifaddrs getnameinfo getaddrinfo inet_ntoa localtime_r nl_langinfo putenv realpath strndup gethostbyname2 gethostbyname getpeerucred getpeereid])
+AC_CHECK_FUNCS([floor gethostname memmove rmdir strncasecmp strrchr strtol atoll dup2 fdatasync ftruncate gettimeofday memset mkdir mkfifo select socket strcasecmp strchr strdup strerror strstr clock_gettime getrusage rand uname setlocale getcwd mktime gmtime_r gmtime strlcpy strlcat ftruncate stat64 sbrk mmap mremap setrlimit sysconf gethostbyaddr initgroups getifaddrs freeifaddrs getnameinfo getaddrinfo inet_ntoa localtime_r nl_langinfo putenv realpath strndup gethostbyname2 gethostbyname getpeerucred getpeereid setresuid])
# restore LIBS
LIBS=$SAVE_LIBS
/**
- * Create a UDP socket for writinging.
+ * Create a UDP socket for writing.
*
* @param my_ip source address (our ip address)
* @return -1 on error
{
fprintf (stderr, "Error binding UDP socket to port %u: %s\n", NAT_TRAV_PORT,
strerror (errno));
- /* likely problematic, but not certain, try to continue */
+ close (ret);
+ return -1;
}
return ret;
}
if (-1 == (rawsock = make_raw_socket ()))
{
close (icmpsock);
- return 3;
+ return 4;
}
uid = getuid ();
+#ifdef HAVE_SETRESUID
if (0 != setresuid (uid, uid, uid))
{
fprintf (stderr, "Failed to setresuid: %s\n", strerror (errno));
- /* not critical, continue anyway */
+ return 5;
+ }
+#else
+ if (0 != (setuid (uid) | seteuid (uid)))
+ {
+ fprintf (stderr, "Failed to setuid: %s\n", strerror (errno));
+ return 6;
}
+#endif
if (-1 == (udpsock = make_udp_socket (&external)))
{
close (icmpsock);
close (rawsock);
- return 3;
+ return 7;
}
alt = 0;
while (1)
close (icmpsock);
close (rawsock);
close (udpsock);
- return 4;
+ return 8;
}