From owner-freebsd-ports-bugs@FreeBSD.ORG Tue Aug 28 07:20:02 2012 Return-Path: Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 42714106564A for ; Tue, 28 Aug 2012 07:20:02 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 16D528FC18 for ; Tue, 28 Aug 2012 07:20:02 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.5/8.14.5) with ESMTP id q7S7K1lk001578 for ; Tue, 28 Aug 2012 07:20:01 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.5/8.14.5/Submit) id q7S7K1g9001577; Tue, 28 Aug 2012 07:20:01 GMT (envelope-from gnats) Resent-Date: Tue, 28 Aug 2012 07:20:01 GMT Resent-Message-Id: <201208280720.q7S7K1g9001577@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, "G. Paul Ziemba" Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BE2DA106566C for ; Tue, 28 Aug 2012 07:17:09 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from red.freebsd.org (red.freebsd.org [IPv6:2001:4f8:fff6::22]) by mx1.freebsd.org (Postfix) with ESMTP id A8A9C8FC0C for ; Tue, 28 Aug 2012 07:17:09 +0000 (UTC) Received: from red.freebsd.org (localhost [127.0.0.1]) by red.freebsd.org (8.14.4/8.14.4) with ESMTP id q7S7H9vX090488 for ; Tue, 28 Aug 2012 07:17:09 GMT (envelope-from nobody@red.freebsd.org) Received: (from nobody@localhost) by red.freebsd.org (8.14.4/8.14.4/Submit) id q7S7H9EB090487; Tue, 28 Aug 2012 07:17:09 GMT (envelope-from nobody) Message-Id: <201208280717.q7S7H9EB090487@red.freebsd.org> Date: Tue, 28 Aug 2012 07:17:09 GMT From: "G. Paul Ziemba" To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: ports/171134: inn-2.5 innd/nnrpd semget failures X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 28 Aug 2012 07:20:02 -0000 >Number: 171134 >Category: ports >Synopsis: inn-2.5 innd/nnrpd semget failures >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Aug 28 07:20:01 UTC 2012 >Closed-Date: >Last-Modified: >Originator: G. Paul Ziemba >Release: 8.2-STABLE Nov 10, 2011 >Organization: >Environment: FreeBSD hairball.ziemba.us 8.2-STABLE FreeBSD 8.2-STABLE #8: Thu Nov 17 14:20:20 PST 2011 root@hairball:/usr/obj/usr/src/sys/GPZ-111011 i386 >Description: Upgraded from inn-2.4.6 to inn-2.5.2 today. Built with options: % make showconfig ===> The following configuration options are available for inn-2.5.2_1: BERKELEYDB=on: Enable BerkeleyDB (for ovdb overview method) GNUPG=off: GnuPG support (for pgpverify control message) KERBEROS=off: Enable Kerberos v5 (for auth_krb5) KEYWORDS=on: Automatic keyword generation support LARGE_FILES=off: Support for files larger than 2GB OPENSSL=off: Enable OpenSSL (for NNTP over TLS/SSL support) PYTHON=off: Embedded Python module support SASL=off: Enable SASL (for imapfeed authentication) TAGGED_HASH=on: Use tagged hash table for history nnrpd fails upon connect with the following messages in /var/log/news/news.debug: Aug 27 20:14:00 hairball nnrpd[18237]: cant get semaphore using /var/news/spool/overview/OV1: Permission denied Aug 27 20:14:00 hairball nnrpd[18237]: failed to create semaphore for /var/news/spool/overview/OV1 Aug 27 20:14:00 hairball nnrpd[18237]: buffindexed: ovinitdisks: cant create shmem for /var/news/spool/overview/OV1 len 16384: Permission denied Aug 27 20:14:00 hairball nnrpd[18237]: can't open overview Permission denied >How-To-Repeat: >Fix: 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 follows. 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) >Release-Note: >Audit-Trail: >Unformatted: