提交 3022375d 编写于 作者: E Eric Blake

addrToString: give better error message

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.
上级 2a82a33e
/* /*
* remote.c: handlers for RPC method calls * 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 * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
#include <string.h> #include <string.h>
#include <errno.h> #include <errno.h>
#include <fnmatch.h> #include <fnmatch.h>
#include <arpa/inet.h>
#include "virterror_internal.h" #include "virterror_internal.h"
#if HAVE_POLKIT0 #if HAVE_POLKIT0
...@@ -3169,21 +3170,36 @@ remoteDispatchAuthList (struct qemud_server *server, ...@@ -3169,21 +3170,36 @@ remoteDispatchAuthList (struct qemud_server *server,
#if HAVE_SASL #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, static char *addrToString(remote_error *rerr,
struct sockaddr_storage *sa, socklen_t salen) { struct sockaddr_storage *ss, socklen_t salen) {
char host[1024], port[20]; char host[NI_MAXHOST], port[NI_MAXSERV];
char *addr; char *addr;
int err; int err;
struct sockaddr *sa = (struct sockaddr *)ss;
if ((err = getnameinfo((struct sockaddr *)sa, salen, if ((err = getnameinfo(sa, salen,
host, sizeof(host), host, sizeof(host),
port, sizeof(port), port, sizeof(port),
NI_NUMERICHOST | NI_NUMERICSERV)) != 0) { NI_NUMERICHOST | NI_NUMERICSERV)) != 0) {
remoteDispatchFormatError(rerr, char ip[INET6_ADDRSTRLEN];
_("Cannot resolve address %d: %s"), void *rawaddr;
err, gai_strerror(err));
if (sa->sa_family == AF_INET)
rawaddr = &((struct sockaddr_in *)sa)->sin_addr;
else
rawaddr = &((struct sockaddr_in6 *)sa)->sin6_addr;
if (inet_ntop(sa->sa_family, rawaddr, 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; return NULL;
} }
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <fcntl.h> #include <fcntl.h>
#include <arpa/inet.h>
/* Windows socket compatibility functions. */ /* Windows socket compatibility functions. */
#include <errno.h> #include <errno.h>
...@@ -6570,21 +6571,36 @@ remoteAuthenticate (virConnectPtr conn, struct private_data *priv, ...@@ -6570,21 +6571,36 @@ remoteAuthenticate (virConnectPtr conn, struct private_data *priv,
#if HAVE_SASL #if HAVE_SASL
/* /*
* NB, keep in sync with similar method in remote/remote.c * NB, keep in sync with similar method in daemon/remote.c
*/ */
static char *addrToString(struct sockaddr_storage *sa, socklen_t salen) static char *addrToString(struct sockaddr_storage *ss, socklen_t salen)
{ {
char host[NI_MAXHOST], port[NI_MAXSERV]; char host[NI_MAXHOST], port[NI_MAXSERV];
char *addr; char *addr;
int err; int err;
struct sockaddr *sa = (struct sockaddr *)ss;
if ((err = getnameinfo((struct sockaddr *)sa, salen, if ((err = getnameinfo(sa, salen,
host, sizeof(host), host, sizeof(host),
port, sizeof(port), port, sizeof(port),
NI_NUMERICHOST | NI_NUMERICSERV)) != 0) { NI_NUMERICHOST | NI_NUMERICSERV)) != 0) {
remoteError(VIR_ERR_UNKNOWN_HOST, char ip[INET6_ADDRSTRLEN];
_("Cannot resolve address %d: %s"), void *rawaddr;
err, gai_strerror(err));
if (sa->sa_family == AF_INET)
rawaddr = &((struct sockaddr_in *)sa)->sin_addr;
else
rawaddr = &((struct sockaddr_in6 *)sa)->sin6_addr;
if (inet_ntop(sa->sa_family, rawaddr, ip, sizeof ip)) {
remoteError(VIR_ERR_UNKNOWN_HOST,
_("Cannot resolve address %s: %s"),
ip, gai_strerror(err));
} else {
remoteError(VIR_ERR_UNKNOWN_HOST,
_("Cannot resolve address: %s"),
gai_strerror(err));
}
return NULL; return NULL;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册