
On Mon, Oct 07, 2013 at 10:33:44AM +0200, Michal Privoznik wrote:
On 05.10.2013 07:56, Ryota Ozaki wrote:
This fixes the following error: error : virGetUserEnt:703 : Failed to find user record for uid '32654'
'32654' (it's random and varies) comes from getsockopt with LOCAL_PEERCRED option. getsockopt returns w/o error but seems to not set any value to the buffer for uid.
For Mac OS X, LOCAL_PEERCRED has to be used with SOL_LOCAL level. With SOL_LOCAL, getsockopt returns a correct uid.
Note that SOL_LOCAL can be found in /System/Library/Frameworks/Kernel.framework/Versions/A/Headers/sys/un.h.
Signed-off-by: Ryota Ozaki <ozaki.ryota@gmail.com> --- src/rpc/virnetsocket.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c index 152c5fc..a6ef07a 100644 --- a/src/rpc/virnetsocket.c +++ b/src/rpc/virnetsocket.c @@ -1159,7 +1159,11 @@ int virNetSocketGetUNIXIdentity(virNetSocketPtr sock, socklen_t cr_len = sizeof(cr); virObjectLock(sock);
+#if defined(__APPLE__) + if (getsockopt(sock->fd, SOL_LOCAL, LOCAL_PEERCRED, &cr, &cr_len) < 0) { +#else if (getsockopt(sock->fd, SOL_SOCKET, LOCAL_PEERCRED, &cr, &cr_len) < 0) { +#endif virReportSystemError(errno, "%s", _("Failed to get client socket identity")); virObjectUnlock(sock);
Indentation off. Fixed and pushed. You can use 'make syntax-check' to catch these problems. Although, you need cppi installed.
ACK
IIUC, this error was present on BSD too, so I think probably we should not have the conditional here, but just use SOL_LOCAL for everything (this code block is already conditionalized) Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|