[libvirt] [PATCHv2] addrToString: give better error message
Matthias Bolte
matthias.bolte at googlemail.com
Thu Apr 22 20:33:15 UTC 2010
2010/4/21 Eric Blake <eblake at redhat.com>:
> The user probably doesn't care what the gai error numbers are, as
> much as what the failed conversion IP address was.
>
> * src/remote/remote_driver.c (addrToString): Mention which address
> could not be converted.
> * daemon/remote.c (addrToString): Likewise.
> ---
>
> Changes in v2:
> Remove magic numbers in remote.c's array sizing
> Use correct offset for IP addresses
>
> daemon/remote.c | 30 ++++++++++++++++++++++--------
> src/remote/remote_driver.c | 26 ++++++++++++++++++++------
> 2 files changed, 42 insertions(+), 14 deletions(-)
>
> diff --git a/daemon/remote.c b/daemon/remote.c
> index 149176f..b753a4a 100644
> --- a/daemon/remote.c
> +++ b/daemon/remote.c
> @@ -1,7 +1,7 @@
> /*
> * remote.c: handlers for RPC method calls
> *
> - * Copyright (C) 2007, 2008, 2009 Red Hat, Inc.
> + * Copyright (C) 2007-2010 Red Hat, Inc.
> *
> * This library is free software; you can redistribute it and/or
> * modify it under the terms of the GNU Lesser General Public
> @@ -41,6 +41,7 @@
> #include <string.h>
> #include <errno.h>
> #include <fnmatch.h>
> +#include <arpa/inet.h>
> #include "virterror_internal.h"
>
> #if HAVE_POLKIT0
> @@ -3169,21 +3170,34 @@ remoteDispatchAuthList (struct qemud_server *server,
>
> #if HAVE_SASL
> /*
> - * NB, keep in sync with similar method in src/remote_internal.c
> + * NB, keep in sync with similar method in src/remote/remote_driver.c
> */
> static char *addrToString(remote_error *rerr,
> - struct sockaddr_storage *sa, socklen_t salen) {
> - char host[1024], port[20];
> + struct sockaddr_storage *ss, socklen_t salen) {
> + char host[NI_MAXHOST], port[NI_MAXSERV];
> char *addr;
> int err;
> + struct sockaddr *sa = (struct sockaddr *)ss;
>
> - if ((err = getnameinfo((struct sockaddr *)sa, salen,
> + if ((err = getnameinfo(sa, salen,
> host, sizeof(host),
> port, sizeof(port),
> NI_NUMERICHOST | NI_NUMERICSERV)) != 0) {
> - remoteDispatchFormatError(rerr,
> - _("Cannot resolve address %d: %s"),
> - err, gai_strerror(err));
> + char ip[INET6_ADDRSTRLEN];
> +
> + if (inet_ntop(sa->sa_family,
> + (sa->sa_family == AF_INET
> + ? (void *)&((struct sockaddr_in *)sa)->sin_addr
> + : (void *)&((struct sockaddr_in6 *)sa)->sin6_addr),
Could we avoid this void * cast? The same cast is in
src/remote/remote_driver.c too.
> + ip, sizeof ip)) {
> + remoteDispatchFormatError(rerr,
> + _("Cannot resolve address %s: %s"),
> + ip, gai_strerror(err));
> + } else {
> + remoteDispatchFormatError(rerr,
> + _("Cannot resolve address: %s"),
> + gai_strerror(err));
> + }
> return NULL;
> }
>
ACK.
Matthias
More information about the libvir-list
mailing list