Index: head/net-mgmt/ettercap/Makefile =================================================================== --- head/net-mgmt/ettercap/Makefile (revision 379519) +++ head/net-mgmt/ettercap/Makefile (revision 379520) @@ -1,83 +1,84 @@ # Created by: George Reid # $FreeBSD$ PORTNAME= ettercap PORTVERSION= 0.8.1 +PORTREVISION= 1 PORTEPOCH= 1 CATEGORIES= net-mgmt security MAINTAINER= sunpoet@FreeBSD.org COMMENT= Network sniffer/interceptor/injector/logger for switched LANs LICENSE= GPLv2 LIB_DEPENDS= libnet.so:${PORTSDIR}/net/libnet OPTIONS_DEFINE= DESKTOP DOCS GTK2 IPV6 NCURSES PCRE PLUGINS SSL UTF8 OPTIONS_DEFAULT=GTK2 NCURSES PCRE PLUGINS SSL UTF8 OPTIONS_SUB= yes DESKTOP_DESC= Install ettercap.desktop NCURSES_DESC= Ncurses interface PCRE_DESC= Use PCRE in filters SSL_DESC= SSH1 and SSL decryption support CMAKE_ARGS= -DBUNDLED_LIBS=OFF \ -DHAVE_DLOPEN=ON \ -DHAVE_PCAP=${LIBDIR} \ -DHAVE_RESOLV=${LIBDIR} \ -DHAVE_LIBNET=${LOCALBASE}/lib/libnet11 \ -DINSTALL_SYSCONFDIR=${PREFIX}/etc \ -DMAN_INSTALLDIR=${PREFIX}/man CMAKE_VERBOSE= yes LDFLAGS+= -L${LIBDIR} -L${LOCALBASE}/lib -L${LOCALBASE}/lib/libnet11 ${ICONV_LIB} -lnet -lpcap MAKE_JOBS_UNSAFE= yes USES= bison cmake:outsource cpe iconv pkgconfig DOCS= AUTHORS CHANGELOG README README.BINARIES README.BUGS \ README.GIT README.PLATFORMS THANKS TODO TODO.TESTING \ doc/capture doc/decoders doc/dissectors doc/plugins doc/threads PORTDATA= * PORTDOCS= * CPE_VENDOR= ${PORTNAME}_project GH_ACCOUNT= Ettercap GH_PROJECT= ${PORTNAME} GH_TAGNAME= v${PORTVERSION} GH_COMMIT= 535f984 USE_GITHUB= yes DESKTOP_CMAKE_OFF= -DINSTALL_DESKTOP=OFF DESKTOP_CMAKE_ON= -DINSTALL_DESKTOP=ON DESKTOP_USES= desktop-file-utils NCURSES_CMAKE_OFF= -DENABLE_CURSES=OFF NCURSES_CMAKE_ON= -DENABLE_CURSES=ON NCURSES_USE= NCURSES=yes GTK2_CMAKE_OFF= -DENABLE_GTK=OFF GTK2_CMAKE_ON= -DENABLE_GTK=ON GTK2_USE= GNOME=gtk20 IPV6_CMAKE_OFF= -DENABLE_IPV6=OFF IPV6_CMAKE_ON= -DENABLE_IPV6=ON PCRE_CMAKE_OFF= -DHAVE_PCRE=OFF PCRE_CMAKE_ON= -DHAVE_PCRE=ON PCRE_LIB_DEPENDS= libpcre.so:${PORTSDIR}/devel/pcre PLUGINS_BUILD_DEPENDS= curl>=7.26.0:${PORTSDIR}/ftp/curl PLUGINS_CMAKE_OFF= -DENABLE_PLUGINS=OFF PLUGINS_CMAKE_ON= -DENABLE_PLUGINS=ON PLUGINS_LIB_DEPENDS= libcurl.so:${PORTSDIR}/ftp/curl PLUGINS_USE= LDCONFIG=${PREFIX}/lib/ettercap PLUGINS_USE_OFF= LDCONFIG=yes SSL_CMAKE_OFF= -DENABLE_SSL=OFF SSL_CMAKE_ON= -DENABLE_SSL=ON SSL_USE= OPENSSL=yes UTF8_CMAKE_OFF= -DHAVE_UTF8=OFF UTF8_CMAKE_ON= -DHAVE_UTF8=ON \ -DHAVE_ICONV=${ICONV_PREFIX} UTF8_USES= iconv post-install: ${INSTALL_DATA} ${STAGEDIR}${ETCDIR}/etter.conf ${STAGEDIR}${PREFIX}/etc/etter.conf.sample ${MKDIR} ${STAGEDIR}${DOCSDIR}/ cd ${WRKSRC}/ && ${INSTALL_DATA} ${DOCS} ${STAGEDIR}${DOCSDIR}/ .include Index: head/net-mgmt/ettercap/files/patch-include-ec_log.h =================================================================== --- head/net-mgmt/ettercap/files/patch-include-ec_log.h (nonexistent) +++ head/net-mgmt/ettercap/files/patch-include-ec_log.h (revision 379520) @@ -0,0 +1,21 @@ +Obtained from: https://github.com/Ettercap/ettercap/commit/42600aada0ba56b9c63dabcc2b0cb1417fa27863 + +--- include/ec_log.h.orig 2014-10-17 01:29:44.000000000 +0800 ++++ include/ec_log.h 2015-02-21 19:58:20.730805519 +0800 +@@ -8,6 +8,7 @@ + + #include + #include ++#include + + + struct log_fd { +@@ -126,6 +127,8 @@ + #define LOG_TRUE 1 + #define LOG_FALSE 0 + ++EC_API_EXTERN void reset_logfile_owners(uid_t old_uid, gid_t old_gid, uid_t new_uid, gid_t new_gid); ++ + EC_API_EXTERN int log_open(struct log_fd *fd, char *filename); + EC_API_EXTERN void log_close(struct log_fd *fd); + EC_API_EXTERN void log_stop(void); Property changes on: head/net-mgmt/ettercap/files/patch-include-ec_log.h ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: head/net-mgmt/ettercap/files/patch-src-ec_log.c =================================================================== --- head/net-mgmt/ettercap/files/patch-src-ec_log.c (nonexistent) +++ head/net-mgmt/ettercap/files/patch-src-ec_log.c (revision 379520) @@ -0,0 +1,143 @@ +Obtained from: https://github.com/Ettercap/ettercap/commit/42600aada0ba56b9c63dabcc2b0cb1417fa27863 + +--- src/ec_log.c.orig 2014-10-17 01:29:44.000000000 +0800 ++++ src/ec_log.c 2015-02-21 19:58:20.733803628 +0800 +@@ -37,8 +37,11 @@ + + /* globals */ + +-static struct log_fd fdp; +-static struct log_fd fdi; ++/* zero is formally a valid value for an opened file descriptor ++ * so we need a custom initializer ++ */ ++static struct log_fd fdp = {0, NULL, -1}; ++static struct log_fd fdi = {0, NULL, -1}; + + /* protos */ + +@@ -79,7 +82,7 @@ + /* all the host type will be unknown, warn the user */ + if (GBL_OPTIONS->read) { + USER_MSG("*********************************************************\n"); +- USER_MSG("WARNING: while reading form file we cannot determine \n"); ++ USER_MSG("WARNING: while reading form file we cannot determine \n"); + USER_MSG("if an host is local or not because the ip address of \n"); + USER_MSG("the NIC may have been changed from the time of the dump. \n"); + USER_MSG("*********************************************************\n\n"); +@@ -168,23 +171,30 @@ + + /* + * open a file in the appropriate log_fd struct ++ * ++ * whether or not the log is compressed ++ * fd->fd becomes to always be a file descriptor of the opened file ++ * and fd->cfd is a non-NULL gzip stream descriptor when the log is to be compressed ++ * ++ * TODO: it is likely that we dont need 'type' field in 'log_fd' struct ++ * to mark a compressed log; non-NULL 'cfd' field becomes such a flag + */ + int log_open(struct log_fd *fd, char *filename) + { +- int zerr; + +- if (fd->type == LOG_COMPRESSED) { +- fd->cfd = gzopen(filename, "wb9"); +- if (fd->cfd == NULL) +- SEMIFATAL_ERROR("%s", gzerror(fd->cfd, &zerr)); +- } else { +- fd->fd = open(filename, O_CREAT | O_TRUNC | O_RDWR | O_BINARY, S_IRUSR | S_IWUSR); +- if (fd->fd == -1) +- SEMIFATAL_ERROR("Can't create %s: %s", filename, strerror(errno)); +- } +- +- /* set the permissions */ +- chmod(filename, 0600); ++ fd->fd = open(filename, O_CREAT|O_TRUNC|O_RDWR|O_BINARY, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH); ++ if (fd->fd == -1) ++ SEMIFATAL_ERROR("Can't create %s: %s", filename, strerror(errno)); ++ else ++ { ++ if (GBL_OPTIONS->compress) ++ { ++ int zerr; ++ fd->cfd = gzdopen(fd->fd, "wb9"); ++ if (fd->cfd == NULL) ++ SEMIFATAL_ERROR("%s", gzerror(fd->cfd, &zerr)); ++ }; ++ }; + + return E_SUCCESS; + } +@@ -195,14 +205,66 @@ + void log_close(struct log_fd *fd) + { + DEBUG_MSG("log_close: type: %d [%p][%d]", fd->type, fd->cfd, fd->fd); +- +- if (fd->type == LOG_COMPRESSED && fd->cfd) { ++ ++ if (fd->cfd) ++ { ++ /* gzclose() on the gzip stream descriptor (fd->cfd) ++ * will also close the file descriptor (fd->fd) ++ */ + gzclose(fd->cfd); + fd->cfd = NULL; +- } else if (fd->type == LOG_UNCOMPRESSED && fd->fd) { ++ fd->fd = -1; /* to prevent double closing the file descriptor */ ++ }; ++ ++ if (fd->fd >= 0) ++ { + close(fd->fd); +- fd->fd = 0; +- } ++ fd->fd = -1; ++ }; ++} ++ ++/* ++ * set the owner:group of the packet and info logfiles to new_uid:new_gid ++ * if the current owners are old_uid:old_gid respectively ++ * ++ * prefer this way to unconditionally setting the new ownership as far as ++ * the file may be intentionally located in the set-group-ID directory ++ */ ++void reset_logfile_owners(uid_t old_uid, gid_t old_gid, uid_t new_uid, gid_t new_gid) ++{ ++ struct stat f; ++ uid_t uid; ++ gid_t gid; ++ ++ /* packet logfile */ ++ if (fdp.fd >= 0) ++ { ++ DEBUG_MSG("reset_logfile_owners: packet log file"); ++ if (fstat(fdp.fd, &f) == 0) ++ { ++ uid = (f.st_uid == old_uid) ? new_uid : (uid_t)-1; ++ gid = (f.st_gid == old_gid) ? new_gid : (gid_t)-1; ++ if ( fchown(fdp.fd, uid, gid) != 0 ) ++ ERROR_MSG("fchown()"); ++ } ++ else ++ ERROR_MSG("fstat()"); ++ }; ++ ++ /* info logfile */ ++ if (fdi.fd >= 0) ++ { ++ DEBUG_MSG("reset_logfile_owners: info log file"); ++ if (fstat(fdi.fd, &f) == 0) ++ { ++ uid = (f.st_uid == old_uid) ? new_uid : (uid_t)-1; ++ gid = (f.st_gid == old_gid) ? new_gid : (gid_t)-1; ++ if ( fchown(fdi.fd, uid, gid) != 0 ) ++ ERROR_MSG("fchown()"); ++ } ++ else ++ ERROR_MSG("fstat()"); ++ }; + } + + /* Property changes on: head/net-mgmt/ettercap/files/patch-src-ec_log.c ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: head/net-mgmt/ettercap/files/patch-src-ec_utils.c =================================================================== --- head/net-mgmt/ettercap/files/patch-src-ec_utils.c (nonexistent) +++ head/net-mgmt/ettercap/files/patch-src-ec_utils.c (revision 379520) @@ -0,0 +1,28 @@ +Obtained from: https://github.com/Ettercap/ettercap/commit/42600aada0ba56b9c63dabcc2b0cb1417fa27863 + +--- src/ec_utils.c.orig 2014-10-17 01:29:44.000000000 +0800 ++++ src/ec_utils.c 2015-02-21 19:58:20.735805931 +0800 +@@ -225,17 +225,19 @@ + else + gid = GBL_CONF->ec_gid; + +- DEBUG_MSG("drop_privs: setuid(%d) setgid(%d)", uid, gid); ++ reset_logfile_owners(geteuid(), getegid(), uid, gid); ++ ++ DEBUG_MSG("drop_privs: seteuid(%d) setegid(%d)", uid, gid); + + /* drop to a good uid/gid ;) */ +- if ( setgid(gid) < 0 ) +- ERROR_MSG("setgid()"); ++ if ( setegid(gid) < 0 ) ++ ERROR_MSG("setegid()"); + + if ( seteuid(uid) < 0 ) + ERROR_MSG("seteuid()"); + + DEBUG_MSG("privs: UID: %d %d GID: %d %d", (int)getuid(), (int)geteuid(), (int)getgid(), (int)getegid() ); +- USER_MSG("Privileges dropped to UID %d GID %d...\n\n", (int)getuid(), (int)getgid() ); ++ USER_MSG("Privileges dropped to EUID %d EGID %d...\n\n", (int)geteuid(), (int)getegid() ); + } + + /* base64 stuff */ Property changes on: head/net-mgmt/ettercap/files/patch-src-ec_utils.c ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: head/net-mgmt/ettercap/files/patch-src-os-ec_bsd.c =================================================================== --- head/net-mgmt/ettercap/files/patch-src-os-ec_bsd.c (nonexistent) +++ head/net-mgmt/ettercap/files/patch-src-os-ec_bsd.c (revision 379520) @@ -0,0 +1,13 @@ +Obtained from: https://github.com/Ettercap/ettercap/commit/00f864d7dd2d82b640064db81aad065794b9b11b + +--- src/os/ec_bsd.c.orig 2014-10-17 01:29:44.000000000 +0800 ++++ src/os/ec_bsd.c 2015-02-21 19:58:20.738805431 +0800 +@@ -136,7 +136,7 @@ + + /* open the socket to work on */ + sock = socket(PF_INET, SOCK_DGRAM, 0); +- if (sock = -1) ++ if (sock == -1) + FATAL_ERROR("Unable to open socket on interface for MTU query\n"); + memset(&ifr, 0, sizeof(ifr)); + strncpy(ifr.ifr_name, iface, sizeof(ifr.ifr_name)); Property changes on: head/net-mgmt/ettercap/files/patch-src-os-ec_bsd.c ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property