When virGetUserEnt() and virGetGroupEnt() fail due to the uid or gid not
existing on the machine they'll print a message like:
$ virsh -c vbox:///session list
error: failed to connect to the hypervisor
error: Failed to find user record for uid '32655': Success
The success at the end is a bit confusing. This changes it to:
$ virsh -c vbox:///session list
error: failed to connect to the hypervisor
error: Failed to find user record for uid '32655'
---
src/util/virutil.c | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/src/util/virutil.c b/src/util/virutil.c
index 34f5998..39d4717 100644
--- a/src/util/virutil.c
+++ b/src/util/virutil.c
@@ -692,11 +692,16 @@ virGetUserEnt(uid_t uid, char **name, gid_t *group, char **dir)
if (VIR_RESIZE_N(strbuf, strbuflen, strbuflen, strbuflen) < 0)
goto cleanup;
}
- if (rc != 0 || pw == NULL) {
+ if (rc != 0) {
virReportSystemError(rc,
_("Failed to find user record for uid
'%u'"),
(unsigned int) uid);
goto cleanup;
+ } else if (pw == NULL) {
+ virReportError(VIR_ERR_SYSTEM_ERROR,
+ _("Failed to find user record for uid '%u'"),
+ (unsigned int) uid);
+ goto cleanup;
}
if (name && VIR_STRDUP(*name, pw->pw_name) < 0)
@@ -746,9 +751,16 @@ static char *virGetGroupEnt(gid_t gid)
}
}
if (rc != 0 || gr == NULL) {
- virReportSystemError(rc,
- _("Failed to find group record for gid
'%u'"),
- (unsigned int) gid);
+ if (rc != 0) {
+ virReportSystemError(rc,
+ _("Failed to find group record for gid
'%u'"),
+ (unsigned int) gid);
+ } else {
+ virReportError(VIR_ERR_SYSTEM_ERROR,
+ _("Failed to find group record for gid
'%u'"),
+ (unsigned int) gid);
+ }
+
VIR_FREE(strbuf);
return NULL;
}
--
1.8.1.5