From owner-svn-ports-all@FreeBSD.ORG Sun Sep 2 13:53:16 2012 Return-Path: Delivered-To: svn-ports-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A0BEC1065670; Sun, 2 Sep 2012 13:53:16 +0000 (UTC) (envelope-from fluffy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 8B90B8FC12; Sun, 2 Sep 2012 13:53:16 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q82DrGFP012068; Sun, 2 Sep 2012 13:53:16 GMT (envelope-from fluffy@svn.freebsd.org) Received: (from fluffy@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q82DrGat012065; Sun, 2 Sep 2012 13:53:16 GMT (envelope-from fluffy@svn.freebsd.org) Message-Id: <201209021353.q82DrGat012065@svn.freebsd.org> From: Dima Panov Date: Sun, 2 Sep 2012 13:53:16 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org X-SVN-Group: ports-head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r303548 - in head/news/inn: . files X-BeenThere: svn-ports-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the ports tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 02 Sep 2012 13:53:16 -0000 Author: fluffy Date: Sun Sep 2 13:53:16 2012 New Revision: 303548 URL: http://svn.freebsd.org/changeset/ports/303548 Log: - Fix innd/nnrpd semget failures Do not set any shmem permission bits except for the six allowed bits PR: 171134 Submitted by: G. Paul Ziemba Added: head/news/inn/files/patch-storage_buffindexed_shmem.c (contents, props changed) Modified: head/news/inn/Makefile (contents, props changed) Modified: head/news/inn/Makefile ============================================================================== --- head/news/inn/Makefile Sun Sep 2 13:08:58 2012 (r303547) +++ head/news/inn/Makefile Sun Sep 2 13:53:16 2012 (r303548) @@ -7,7 +7,7 @@ PORTNAME?= inn PORTVERSION?= 2.5.2 -PORTREVISION?= 2 +PORTREVISION?= 3 CATEGORIES= news ipv6 # Master distribution broken #MASTER_SITES?= ${MASTER_SITE_ISC} Added: head/news/inn/files/patch-storage_buffindexed_shmem.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/news/inn/files/patch-storage_buffindexed_shmem.c Sun Sep 2 13:53:16 2012 (r303548) @@ -0,0 +1,73 @@ +The problem seems to be that unsupported permission bits are being given to semget(2) as in the following snippet (there are several such instances): + +storage/buffindexed/shmem.c: + + id = semget(kt, 2, IPC_CREAT|S_IRWXU|S_IRWXG|S_IRWXO); + +The semget(2) man page does not indicate that the usual file mode bits may be used. Instead, it allows: + + SEM_R Read access for user. + + SEM_A Alter access for user. + + (SEM_R>>3) Read access for group. + + (SEM_A>>3) Alter access for group. + + (SEM_R>>6) Read access for other. + + (SEM_A>>6) Alter access for other. + +The allowed bits correspond to read and write bits of the file mode constants. The execute bit is not among the defined bits for semget. + +The fix: do not set any permission bits except for the six allowed bits. + +Note that the documentation for linux semget differs, and seems to allow but ignore the execute bits. + +Patch attached with submission follows: + +--- storage/buffindexed/shmem.c.orig 2012-08-27 23:39:42.000000000 -0700 ++++ storage/buffindexed/shmem.c 2012-08-27 23:37:50.000000000 -0700 +@@ -26,7 +26,9 @@ + static int smcGetSemaphore(const char *name) + { + key_t kt = ftok( (char *)name, 0 ); +- int id = semget(kt, 0, S_IRWXU|S_IRWXG|S_IRWXO); ++ int perm = SEM_R | SEM_A | (SEM_R>>3) | (SEM_A>>3) | ++ (SEM_R>>6) | (SEM_A>>6); ++ int id = semget(kt, 0, perm); + + if (id < 0) { + syswarn("semget failed to get semaphore for %s", name); +@@ -37,15 +39,17 @@ + static int smcCreateSemaphore(const char *name) + { + key_t kt = ftok( (char *)name, 0 ); +- int id = semget(kt, 2, IPC_CREAT|S_IRWXU|S_IRWXG|S_IRWXO); ++ int perm = SEM_R | SEM_A | (SEM_R>>3) | (SEM_A>>3) | ++ (SEM_R>>6) | (SEM_A>>6); ++ int id = semget(kt, 2, IPC_CREAT|perm); + + if (id < 0) { + if (errno == EACCES || errno == EINVAL) { + /* looks like a wrong semaphore exists. remove it. */ +- id = semget(kt, 0, S_IRWXU|S_IRWXG|S_IRWXO); ++ id = semget(kt, 0, perm); + if (id < 0) { + /* couldn't even retrieve it. */ +- syswarn("cant get semaphore using %s", name); ++ syswarn("cant get semaphore using %s (key=%d)", name, kt); + return id; + } + /* try to remove it */ +@@ -65,7 +69,7 @@ + } + #endif + /* and retry creating it */ +- id = semget(kt, 2, IPC_CREAT|S_IRWXU|S_IRWXG|S_IRWXO); ++ id = semget(kt, 2, IPC_CREAT|perm); + } + } + if (id < 0) + +