static int
-qemuSecurityChownCallback(virStorageSourcePtr src,
+qemuSecurityChownCallback(const virStorageSource *src,
uid_t uid,
gid_t gid)
{
+ virStorageSourcePtr cpy = NULL;
struct stat sb;
int save_errno = 0;
int ret = -1;
}
}
- return chown(src->path, uid, gid);
- }
+ if (chown(src->path, uid, gid) < 0)
+ goto cleanup;
+ } else {
+ if (!(cpy = virStorageSourceCopy(src, false)))
+ goto cleanup;
- /* storage file init reports errors, return -2 on failure */
- if (virStorageFileInit(src) < 0)
- return -2;
+ /* src file init reports errors, return -2 on failure */
+ if (virStorageFileInit(cpy) < 0) {
+ ret = -2;
+ goto cleanup;
+ }
- if (virStorageFileChown(src, uid, gid) < 0) {
- save_errno = errno;
- goto cleanup;
+ if (virStorageFileChown(cpy, uid, gid) < 0)
+ goto cleanup;
}
ret = 0;
cleanup:
- virStorageFileDeinit(src);
+ save_errno = errno;
+ virStorageFileDeinit(cpy);
+ virStorageSourceFree(cpy);
errno = save_errno;
return ret;
}
static int
-virSecurityDACSetOwnershipInternal(virSecurityDACDataPtr priv,
- virStorageSourcePtr src,
+virSecurityDACSetOwnershipInternal(const virSecurityDACData *priv,
+ const virStorageSource *src,
const char *path,
uid_t uid,
gid_t gid)
* @src. The callback shall return 0 on success, -1 on error and errno set (no
* libvirt error reported) OR -2 and a libvirt error reported. */
typedef int
-(*virSecurityManagerDACChownCallback)(virStorageSourcePtr src,
+(*virSecurityManagerDACChownCallback)(const virStorageSource *src,
uid_t uid,
gid_t gid);
int mode);
typedef int
-(*virStorageFileBackendChown)(virStorageSourcePtr src,
+(*virStorageFileBackendChown)(const virStorageSource *src,
uid_t uid,
gid_t gid);
static int
-virStorageFileBackendFileChown(virStorageSourcePtr src,
+virStorageFileBackendFileChown(const virStorageSource *src,
uid_t uid,
gid_t gid)
{
static int
-virStorageFileBackendGlusterChown(virStorageSourcePtr src,
+virStorageFileBackendGlusterChown(const virStorageSource *src,
uid_t uid,
gid_t gid)
{
/* ----------- file handlers cooperating with storage driver --------------- */
static bool
-virStorageFileIsInitialized(virStorageSourcePtr src)
+virStorageFileIsInitialized(const virStorageSource *src)
{
return src && src->drv;
}
* driver to perform labelling
*/
bool
-virStorageFileSupportsSecurityDriver(virStorageSourcePtr src)
+virStorageFileSupportsSecurityDriver(const virStorageSource *src)
{
int actualType;
virStorageFileBackendPtr backend;
* by libvirt storage backend.
*/
int
-virStorageFileChown(virStorageSourcePtr src,
+virStorageFileChown(const virStorageSource *src,
uid_t uid,
gid_t gid)
{
char **buf);
const char *virStorageFileGetUniqueIdentifier(virStorageSourcePtr src);
int virStorageFileAccess(virStorageSourcePtr src, int mode);
-int virStorageFileChown(virStorageSourcePtr src, uid_t uid, gid_t gid);
+int virStorageFileChown(const virStorageSource *src, uid_t uid, gid_t gid);
-bool virStorageFileSupportsSecurityDriver(virStorageSourcePtr src);
+bool virStorageFileSupportsSecurityDriver(const virStorageSource *src);
int virStorageFileGetMetadata(virStorageSourcePtr src,
uid_t uid, gid_t gid,
bool
-virStorageSourceIsLocalStorage(virStorageSourcePtr src)
+virStorageSourceIsLocalStorage(const virStorageSource *src)
{
virStorageType type = virStorageSourceGetActualType(src);
void virStorageSourcePoolDefFree(virStorageSourcePoolDefPtr def);
void virStorageSourceClear(virStorageSourcePtr def);
int virStorageSourceGetActualType(const virStorageSource *def);
-bool virStorageSourceIsLocalStorage(virStorageSourcePtr src);
+bool virStorageSourceIsLocalStorage(const virStorageSource *src);
bool virStorageSourceIsEmpty(virStorageSourcePtr src);
bool virStorageSourceIsBlockLocal(const virStorageSource *src);
void virStorageSourceFree(virStorageSourcePtr def);