Index: head/sysutils/mcelog/Makefile =================================================================== --- head/sysutils/mcelog/Makefile (revision 443466) +++ head/sysutils/mcelog/Makefile (revision 443467) @@ -1,43 +1,43 @@ # Created by: Jeremy Chadwick # $FreeBSD$ PORTNAME= mcelog -PORTVERSION= 151 +PORTVERSION= 153 DISTVERSIONPREFIX= v CATEGORIES= sysutils MAINTAINER= ultima1252@gmail.com COMMENT= Collects and decodes Machine Check Exception data LICENSE= GPLv2 TEST_DEPENDS= bash:shells/bash USE_GITHUB= yes GH_ACCOUNT= andikleen ONLY_FOR_ARCHS= amd64 i386 ia64 USES= alias gmake shebangfix SHEBANG_FILES= tests/cache/inject tests/memdb/inject tests/page/inject \ tests/pfa/inject tests/server/inject tests/socket/inject \ tests/trigger tests/unknown/inject MAKE_ENV+= FREEBSD=1 MAKE_ARGS+= CFLAGS="${CFLAGS}" prefix="${PREFIX}" LDFLAGS+= -lkvm PLIST_FILES= bin/mcelog man/man8/mcelog.8.gz post-patch: @${ECHO} "${DISTVERSIONPREFIX}${PORTVERSION}" >${WRKSRC}/.os_version @${CP} ${FILESDIR}/memstream.c ${WRKSRC}/memstream.c @${REINPLACE_CMD} 's/\"unknown\"/\"${PORTVERSION}\"/' \ ${WRKSRC}/Makefile do-install: ${INSTALL_PROGRAM} ${WRKSRC}/mcelog ${STAGEDIR}${PREFIX}/bin ${INSTALL_MAN} ${WRKSRC}/mcelog.8 ${STAGEDIR}${MANPREFIX}/man/man8 .include Index: head/sysutils/mcelog/distinfo =================================================================== --- head/sysutils/mcelog/distinfo (revision 443466) +++ head/sysutils/mcelog/distinfo (revision 443467) @@ -1,3 +1,3 @@ -TIMESTAMP = 1495807224 -SHA256 (andikleen-mcelog-v151_GH0.tar.gz) = a98268d782c66bcb3c657b81038871a47d6c841f4a5322471c7def88e33eb9f8 -SIZE (andikleen-mcelog-v151_GH0.tar.gz) = 297043 +TIMESTAMP = 1497297738 +SHA256 (andikleen-mcelog-v153_GH0.tar.gz) = 9b827f708855804b6952de6f6cbf2f6523fa1203c621e6050064388f459646f1 +SIZE (andikleen-mcelog-v153_GH0.tar.gz) = 297099 Index: head/sysutils/mcelog/files/patch-server.c =================================================================== --- head/sysutils/mcelog/files/patch-server.c (revision 443466) +++ head/sysutils/mcelog/files/patch-server.c (revision 443467) @@ -1,101 +1,123 @@ ---- server.c.orig 2016-02-10 18:38:43 UTC +--- server.c.orig 2017-06-11 18:52:26 UTC +++ server.c -@@ -101,7 +101,9 @@ static void dispatch_dump(FILE *fh, char +@@ -101,7 +101,9 @@ static void dispatch_dump(FILE *fh, char *s) static void dispatch_pages(FILE *fh) { +#ifdef __Linux__ dump_page_errors(fh); +#endif fprintf(fh, "done\n"); } -@@ -137,6 +139,7 @@ static void process_cmd(struct clientcon +@@ -137,6 +139,7 @@ static void process_cmd(struct clientcon *cc) Enomem(); } +#ifdef __Linux__ /* check if client is allowed to access */ static int access_check(int fd, struct msghdr *msg) { -@@ -162,11 +165,44 @@ static int access_check(int fd, struct m +@@ -162,11 +165,44 @@ static int access_check(int fd, struct msghdr *msg) sendstring(fd, "permission denied\n"); return -1; } +#endif -+ + +#ifdef __FreeBSD__ +/* check if client is allowed to access */ +static int access_check(int fd, struct msghdr *msg) +{ + struct cmsghdr *cmsg; + struct cmsgcred *cr; + + /* check credentials */ + cmsg = CMSG_FIRSTHDR(msg); + if (cmsg == NULL || + cmsg->cmsg_level != SOL_SOCKET || + cmsg->cmsg_type != SCM_CREDS) { + Eprintf("Did not receive credentials over client unix socket %p\n", + cmsg); + return -1; + } + cr = (struct cmsgcred *)CMSG_DATA(cmsg); + if (cr->cmcred_uid == 0 || + (acc.uid != -1U && cr->cmcred_uid == acc.uid) || + (acc.gid != -1U && cr->cmcred_gid == acc.gid)) + return 0; + Eprintf("rejected client access from pid:%u uid:%u gid:%u\n", + cr->cmcred_pid, cr->cmcred_uid, cr->cmcred_gid); + sendstring(fd, "permission denied\n"); + return -1; +} +#endif - ++ /* retrieve commands from client */ static int client_input(int fd, struct clientcon *cc) { +#ifdef __Linux__ char ctlbuf[CMSG_SPACE(sizeof(struct ucred))]; +#else + char ctlbuf[CMSG_SPACE(sizeof(struct cmsgcred))]; +#endif struct iovec miov; struct msghdr msg = { .msg_iov = &miov, -@@ -242,18 +278,22 @@ static void client_accept(struct pollfd +@@ -242,18 +278,22 @@ static void client_accept(struct pollfd *pfd, void *da { struct clientcon *cc = NULL; int nfd = accept(pfd->fd, NULL, 0); +#ifdef __Linux__ int on; +#endif if (nfd < 0) { SYSERRprintf("accept failed on client socket"); return; } +#ifdef __Linux__ on = 1; if (setsockopt(nfd, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on)) < 0) { SYSERRprintf("Cannot enable credentials passing on client socket"); goto cleanup; } +#endif cc = xalloc(sizeof(struct clientcon)); if (register_pollcb(nfd, POLLIN, client_event, cc) < 0) { -@@ -301,7 +341,12 @@ static int server_ping(struct sockaddr_u +@@ -301,7 +341,12 @@ static int server_ping(struct sockaddr_un *un) if (sigsetjmp(ping_timeout_ctx, 1) == 0) { ret = -1; alarm(initial_ping_timeout); +#ifdef __Linux__ if (connect(fd, un, sizeof(struct sockaddr_un)) < 0) +#endif +#ifdef __FreeBSD__ + if (connect(fd, (struct sockaddr *) un, sizeof(struct sockaddr_un)) < 0) +#endif goto cleanup; if (write(fd, PAIR("ping\n")) < 0) goto cleanup; +@@ -322,7 +367,9 @@ void server_setup(void) + { + int fd; + struct sockaddr_un adr; ++#ifdef __Linux__ + int on; ++#endif + + server_config(); + +@@ -363,9 +410,11 @@ void server_setup(void) + listen(fd, 10); + /* Set SO_PASSCRED to avoid race with client connecting too fast */ + /* Ignore error for old kernels */ ++#ifdef __Linux__ + on = 1; + setsockopt(fd, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on)); + ++#endif + register_pollcb(fd, POLLIN, client_accept, NULL); + return; +