mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-24 06:35:24 +00:00
storage_conf: Use uid_t/gid_t instead of int to cast the value
And error out if the casted value is not same with the original one, which prevents the bug on platform(s) where uid_t/gid_t has different size with long.
This commit is contained in:
parent
ec2b81c68b
commit
6c89768da4
@ -44,6 +44,7 @@
|
|||||||
#include "viralloc.h"
|
#include "viralloc.h"
|
||||||
#include "virfile.h"
|
#include "virfile.h"
|
||||||
#include "virstring.h"
|
#include "virstring.h"
|
||||||
|
#include "virlog.h"
|
||||||
|
|
||||||
#define VIR_FROM_THIS VIR_FROM_STORAGE
|
#define VIR_FROM_THIS VIR_FROM_STORAGE
|
||||||
|
|
||||||
@ -747,7 +748,7 @@ virStorageDefParsePerms(xmlXPathContextPtr ctxt,
|
|||||||
int defaultmode)
|
int defaultmode)
|
||||||
{
|
{
|
||||||
char *mode;
|
char *mode;
|
||||||
long v;
|
long val;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
xmlNodePtr relnode;
|
xmlNodePtr relnode;
|
||||||
xmlNodePtr node;
|
xmlNodePtr node;
|
||||||
@ -784,23 +785,28 @@ virStorageDefParsePerms(xmlXPathContextPtr ctxt,
|
|||||||
if (virXPathNode("./owner", ctxt) == NULL) {
|
if (virXPathNode("./owner", ctxt) == NULL) {
|
||||||
perms->uid = (uid_t) -1;
|
perms->uid = (uid_t) -1;
|
||||||
} else {
|
} else {
|
||||||
if (virXPathLong("number(./owner)", ctxt, &v) < 0) {
|
if (virXPathLong("number(./owner)", ctxt, &val) < 0 ||
|
||||||
|
((uid_t)val != val &&
|
||||||
|
val != -1)) {
|
||||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||||
_("malformed owner element"));
|
_("malformed owner element"));
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
perms->uid = (int)v;
|
|
||||||
|
perms->uid = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (virXPathNode("./group", ctxt) == NULL) {
|
if (virXPathNode("./group", ctxt) == NULL) {
|
||||||
perms->gid = (gid_t) -1;
|
perms->gid = (gid_t) -1;
|
||||||
} else {
|
} else {
|
||||||
if (virXPathLong("number(./group)", ctxt, &v) < 0) {
|
if (virXPathLong("number(./group)", ctxt, &val) < 0 ||
|
||||||
|
((gid_t) val != val &&
|
||||||
|
val != -1)) {
|
||||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||||
_("malformed group element"));
|
_("malformed group element"));
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
perms->gid = (int)v;
|
perms->gid = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* NB, we're ignoring missing labels here - they'll simply inherit */
|
/* NB, we're ignoring missing labels here - they'll simply inherit */
|
||||||
|
Loading…
Reference in New Issue
Block a user