The functions virGetUserID and virGetGroupID are now able to parse
user/group names and IDs in a similar way to coreutils' chown. So, user
and group parsing in security_dac can be simplified.
---
src/security/security_dac.c | 45 ++++++++-------------------------------------
1 file changed, 8 insertions(+), 37 deletions(-)
diff --git a/src/security/security_dac.c b/src/security/security_dac.c
index a427e9d..22edba2 100644
--- a/src/security/security_dac.c
+++ b/src/security/security_dac.c
@@ -69,8 +69,8 @@ static
int parseIds(const char *label, uid_t *uidPtr, gid_t *gidPtr)
{
int rc = -1;
- unsigned int theuid;
- unsigned int thegid;
+ uid_t theuid;
+ gid_t thegid;
char *tmp_label = NULL;
char *sep = NULL;
char *owner = NULL;
@@ -94,41 +94,12 @@ int parseIds(const char *label, uid_t *uidPtr, gid_t *gidPtr)
owner = tmp_label;
group = sep + 1;
- /* Parse owner */
- if (*owner == '+') {
- if (virStrToLong_ui(++owner, NULL, 10, &theuid) < 0) {
- virReportError(VIR_ERR_INVALID_ARG,
- _("Invalid uid \"%s\" in DAC label
\"%s\""),
- owner, label);
- goto cleanup;
- }
- } else {
- if (virGetUserID(owner, &theuid) < 0 &&
- virStrToLong_ui(owner, NULL, 10, &theuid) < 0) {
- virReportError(VIR_ERR_INVALID_ARG,
- _("Invalid owner \"%s\" in DAC label
\"%s\""),
- owner, label);
- goto cleanup;
- }
- }
-
- /* Parse group */
- if (*group == '+') {
- if (virStrToLong_ui(++group, NULL, 10, &thegid) < 0) {
- virReportError(VIR_ERR_INVALID_ARG,
- _("Invalid gid \"%s\" in DAC label
\"%s\""),
- group, label);
- goto cleanup;
- }
- } else {
- if (virGetGroupID(group, &thegid) < 0 &&
- virStrToLong_ui(group, NULL, 10, &thegid) < 0) {
- virReportError(VIR_ERR_INVALID_ARG,
- _("Invalid group \"%s\" in DAC label
\"%s\""),
- group, label);
- goto cleanup;
- }
- }
+ /* Parse owner and group, error message is defined by
+ * virGetUserID or virGetGroupID.
+ */
+ if (virGetUserID(owner, &theuid) < 0 ||
+ virGetGroupID(group, &thegid) < 0)
+ goto cleanup;
if (uidPtr)
*uidPtr = theuid;
--
1.7.12