I installed this; it should be useful for coreutils and perhaps for other applications.
2007-03-23 Paul Eggert <[EMAIL PROTECTED]> * MODULES.html.sh (File system functions): New module write-any-file. * modules/write-any-file, lib/write-any-file.c, lib/write-any-file.h: * m4/write-any-file.m4: New files. Index: MODULES.html.sh =================================================================== RCS file: /cvsroot/gnulib/gnulib/MODULES.html.sh,v retrieving revision 1.201 retrieving revision 1.202 diff -u -r1.201 -r1.202 --- MODULES.html.sh 1 Mar 2007 00:07:34 -0000 1.201 +++ MODULES.html.sh 23 Mar 2007 17:33:07 -0000 1.202 @@ -2072,6 +2072,7 @@ func_module unlinkdir func_module utimecmp func_module utimens + func_module write-any-file func_module xgetcwd func_module xreadlink func_module xreadlink-with-size --- /dev/null 2005-09-24 22:00:15.000000000 -0700 +++ modules/write-any-file 2007-03-23 09:19:12.000000000 -0700 @@ -0,0 +1,24 @@ +Description: +Determine whether we can write any file. + +Files: +lib/write-any-file.h +lib/write-any-file.c +m4/write-any-file.m4 + +Depends-on: +stdbool + +configure.ac: +gl_WRITE_ANY_FILE + +Makefile.am: + +Include: +"write-any-file.h" + +License: +GPL + +Maintainer: +Paul Eggert, Jim Meyering --- /dev/null 2005-09-24 22:00:15.000000000 -0700 +++ lib/write-any-file.c 2007-03-23 09:57:31.000000000 -0700 @@ -0,0 +1,59 @@ +/* Determine whether we can write any file. + + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Paul Eggert. */ + +#include <config.h> + +#include "write-any-file.h" + +#if HAVE_PRIV_H +# include <priv.h> +#endif +#include <unistd.h> + +/* Return true if we know that we can write any file, including + writing directories. */ + +bool +can_write_any_file (void) +{ + static bool initialized; + static bool can; + + if (! initialized) + { +#if defined PRIV_EFFECTIVE && defined PRIV_FILE_DAC_WRITE + priv_set_t *pset = priv_allocset (); + if (pset) + { + can = + (getppriv (PRIV_EFFECTIVE, pset) == 0 + && priv_ismember (pset, PRIV_FILE_DAC_WRITE)); + priv_freeset (pset); + } + else +#else + /* In traditional Unix, only root can unlink directories. */ + can = (geteuid () == 0); +#endif + initialized = true; + } + + return can; +} --- /dev/null 2005-09-24 22:00:15.000000000 -0700 +++ lib/write-any-file.h 2007-03-23 10:30:17.000000000 -0700 @@ -0,0 +1,2 @@ +#include <stdbool.h> +bool can_write_any_file (void); --- /dev/null 2005-09-24 22:00:15.000000000 -0700 +++ m4/write-any-file.m4 2007-03-23 09:21:34.000000000 -0700 @@ -0,0 +1,15 @@ +# Determine whether we can write any file. + +# Copyright (C) 2007 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Written by Paul Eggert. + +AC_DEFUN([gl_WRITE_ANY_FILE], +[ + AC_CHECK_HEADERS_ONCE(priv.h) + AC_LIBOBJ([write-any-file]) +])