[libvirt] [PATCH 4/4] Create storage pool directories with proper uid/gid/mode

Laine Stump laine at laine.org
Wed Jan 20 22:36:37 UTC 2010


On 01/20/2010 03:20 PM, Daniel Veillard wrote:
> On Wed, Jan 20, 2010 at 02:29:43AM -0500, Laine Stump wrote:
>    
>> Previously the uid/gid/mode in the xml was ignored when creating new
>> storage pool directories. This commit attempts to honor the requested
>> permissions, and spits out an error if it can't.
>>
>> Note that when creating the directory, the rest of the path leading up
>> to the final element is created using current uid/gid/mode, and the
>> final element gets the settings from xml. It is NOT an error for the
>> directory to already exist; in this case, the perms for the existing
>> directory are just set (if necessary).
>> ---
>>   src/storage/storage_backend_fs.c |   41 +++++++++++++++++++++++++++++++++++--
>>   1 files changed, 38 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c
>> index cc26f2f..481e46e 100644
>> --- a/src/storage/storage_backend_fs.c
>> +++ b/src/storage/storage_backend_fs.c
>> @@ -506,9 +506,44 @@ virStorageBackendFileSystemBuild(virConnectPtr conn,
>>                                    unsigned int flags ATTRIBUTE_UNUSED)
>>   {
>>       int err;
>> -    if ((err = virFileMakePath(pool->def->target.path))<  0) {
>> -        virReportSystemError(conn, err,
>> -                             _("cannot create path '%s'"),
>> +    char path[PATH_MAX];
>>      
>    Urgh, I though we we trying to avoid allocating a full page like this
> for an argument on the stack...
>    

As someone who normally cringes when seeing large allocations on the 
stack, I'm embarrassed to admit I authored this! :-P My only excuse is 
that it was very late, and the virFileMakePath does that, which tricked 
my at-the-moment feeble mind into thinking it was okay.

>
>    and considering the handling done with path, I think a simple making
> patch a char * and initializing it with just a simple strdup() should be
> just fine, all we are doing is truncating the path. But it also need to
> be freed.
>    

Yup. Patch to follow momentarily, with that suggestion incorporated.

(And I should probably make a patch for virFileMakePath as well, but 
that's long-standing code, so not as urgent).




More information about the libvir-list mailing list