]> xenbits.xensource.com Git - libvirt.git/commit
New utility functions virFileCreate and virDirCreate
authorLaine Stump <laine@laine.org>
Wed, 20 Jan 2010 23:33:43 +0000 (00:33 +0100)
committerDaniel Veillard <veillard@redhat.com>
Wed, 20 Jan 2010 23:33:43 +0000 (00:33 +0100)
commit98f6f381c8d138600c4f9732d8ffb5b608e713ee
tree8ea3927c197e080cb38562d7d0329ab31c8ba8cd
parentd2259ada4997c6e1362b2db9eb004827591b1471
New utility functions virFileCreate and virDirCreate

These functions create a new file or directory with the given
uid/gid. If the flag VIR_FILE_CREATE_AS_UID is given, they do this by
forking a new process, calling setuid/setgid in the new process, and
then creating the file. This is better than simply calling open then
fchown, because in the latter case, a root-squashing nfs server would
create the new file as user nobody, then refuse to allow fchown.

If VIR_FILE_CREATE_AS_UID is not specified, the simpler tactic of
creating the file/dir, then chowning is is used. This gives better
results in cases where the parent directory isn't on a root-squashing
NFS server, but doesn't give permission for the specified uid/gid to
create files. (Note that if the fork/setuid method fails to create the
file due to access privileges, the parent process will make a second
attempt using this simpler method.)

If the bit VIR_FILE_CREATE_ALLOW_EXIST is set in the flags, an
existing file/directory will not cause an error; in this case, the
function will simply set the permissions of the file/directory to
those requested. If VIR_FILE_CREATE_ALLOW_EXIST is not specified, an
existing file/directory is considered (and reported as) an error.

Return from both of these functions is 0 on success, or the value of
errno if there was a failure.

* src/util/util.[ch]: add the 2 new util functions
src/util/util.c
src/util/util.h