Just one question: do you think that makes sense for virGetUserID and virGetGroupID to check if a id exists when a numeric value is given? Regards, Marcelo On Fri, Oct 05, 2012 at 09:44:46AM -0300, Marcelo Cerri wrote: > On Thu, Oct 04, 2012 at 05:46:31PM -0600, Eric Blake wrote: > > On 10/02/2012 11:57 AM, Marcelo Cerri wrote: > > > The DAC driver is missing parsing of group and user names for DAC labels > > > and currently just parses uid and gid. This patch extends it to support > > > names, so the following security label definition is now valid: > > > > > > <seclabel type='static' model='dac' relabel='yes'> > > > <label>qemu:qemu</label> > > > <imagelabel>qemu:qemu</imagelabel> > > > </seclabel> > > > > > > When it tries to parse an owner or a group, it first tries to resolve it as > > > a name, if it fails or it's an invalid user/group name then it tries to > > > parse it as an UID or GID. A leading '+' can also be used for both owner and > > > group to force it to be parsed as IDs, so the following example is also > > > valid: > > > > > > <seclabel type='static' model='dac' relabel='yes'> > > > <label>+101:+101</label> > > > <imagelabel>+101:+101</imagelabel> > > > </seclabel> > > > > > > > Yuck. With this patch, I'm seeing lots of ugly error messages in the log: > > > > 2012-10-04 22:59:52.584+0000: 9225: error : virGetUserID:2535 : Failed > > to find user record for name '0': Success > > > > I think the correct fix is to move this logic... > > > > > + /* 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; > > > + } > > > } > > > > ...out of security_dac.c and into src/util/util.c:virGetUserID(), so > > that we are consistently parsing in this manner for ALL places where we > > convert a string into a user id, and also so that virGetUserID will quit > > logging such a bogus error message when it fails to find a given id > > string that happens to be a valid number. > Ok. I'll provide a patch for this. > > I made a search in the code for virGetUserID and, other than in > security_dac.c, it seems to be used just for parsing user name in > qemu.conf. > > > > > Likewise for virGetGroupID. > > Same for virGetGroupID. > > > > > -- > > Eric Blake eblake@xxxxxxxxxx +1-919-301-3266 > > Libvirt virtualization library http://libvirt.org > > > > > -- > libvir-list mailing list > libvir-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/libvir-list > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list