From owner-freebsd-hackers@FreeBSD.ORG Mon Jan 12 03:48:45 2009 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 540371065691; Mon, 12 Jan 2009 03:48:45 +0000 (UTC) (envelope-from kientzle@freebsd.org) Received: from kientzle.com (kientzle.com [66.166.149.50]) by mx1.freebsd.org (Postfix) with ESMTP id 29CEC8FC1F; Mon, 12 Jan 2009 03:48:45 +0000 (UTC) (envelope-from kientzle@freebsd.org) Received: from [10.123.2.23] (h-66-166-149-52.snvacaid.covad.net [66.166.149.52]) by kientzle.com (8.12.9/8.12.9) with ESMTP id n0C3miC1008840; Sun, 11 Jan 2009 19:48:44 -0800 (PST) (envelope-from kientzle@freebsd.org) Message-ID: <496ABD9A.8080006@freebsd.org> Date: Sun, 11 Jan 2009 19:48:42 -0800 From: Tim Kientzle User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7.12) Gecko/20060422 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Tim Kientzle References: <49692659.2030306@freebsd.org> <49696C24.8010601@freebsd.org> <496AA714.1090904@freebsd.org> In-Reply-To: <496AA714.1090904@freebsd.org> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-hackers@freebsd.org, pluknet Subject: Re: extattr problems? X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Jan 2009 03:48:45 -0000 I think this one is a bug. It appears that extattr_set_fd() obeys the permissions on the file, not the permissions of the descriptor. In particular, I see this on FreeBSD 6.3: [tim@dark /tmp]$ ./extattr_test fd=3 extattr_set_fd() = -1 errno = 13 (Permission denied) [tim@dark /tmp]$ cat extattr_test.c #include #include #include #include #include int main(int argc, char **argv) { int n, fd; fd = open("/tmp/test12345", O_RDWR | O_CREAT | O_EXCL, 0000); printf("fd=%d\n", fd); n = extattr_set_fd(fd, EXTATTR_NAMESPACE_USER, "testattr", "1234", 4); printf("extattr_set_fd() = %d\n", n); if (n != 0) printf("errno = %d (%s)\n", errno, strerror(errno)); exit(0); }