[libvirt] [PATCH] Make avahi startup more robust.

Daniel Veillard veillard at redhat.com
Wed Apr 21 21:04:39 UTC 2010


On Wed, Apr 21, 2010 at 03:22:41PM -0400, Chris Lalancette wrote:
> If the hostname of the current virtualization machine
> could not be resolved, then libvirtd would fail to
> start.  However, for disconnected operation (on a laptop,
> for instance) the hostname may very legitimately not
> be resolvable.  This patch makes it so that if we can't
> resolve the hostname, avahi doesn't fail, it just uses
> a less useful MDNS string.
> 
> Signed-off-by: Chris Lalancette <clalance at redhat.com>
> ---
>  daemon/libvirtd.c |   28 ++++++++++++++++++++--------
>  1 files changed, 20 insertions(+), 8 deletions(-)
> 
> diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c
> index 863bf21..4533f40 100644
> --- a/daemon/libvirtd.c
> +++ b/daemon/libvirtd.c
> @@ -998,22 +998,34 @@ static int qemudNetworkInit(struct qemud_server *server) {
>          struct libvirtd_mdns_group *group;
>          struct qemud_socket *sock;
>          int port = 0;
> +        int ret;
>  
>          server->mdns = libvirtd_mdns_new();
>  
>          if (!mdns_name) {
> -            char groupname[64], *localhost, *tmp;
> -            /* Extract the host part of the potentially FQDN */
> +            char *groupname, *localhost, *tmp;
> +
>              localhost = virGetHostname(NULL);
>              if (localhost == NULL)
> +                /* we couldn't resolve the hostname; assume that we are
> +                 * running in disconnected operation, and report a less
> +                 * useful Avahi string
> +                 */
> +                ret = virAsprintf(&groupname, "Virtualization Host");
> +            else {
> +                /* Extract the host part of the potentially FQDN */
> +                if ((tmp = strchr(localhost, '.')))
> +                    *tmp = '\0';
> +                ret = virAsprintf(&groupname, "Virtualization Host %s",
> +                                  localhost);
> +            }
> +            VIR_FREE(localhost);
> +            if (ret < 0) {
> +                virReportOOMError();
>                  goto cleanup;
> -
> -            if ((tmp = strchr(localhost, '.')))
> -                *tmp = '\0';
> -            snprintf(groupname, sizeof(groupname)-1, "Virtualization Host %s", localhost);
> -            groupname[sizeof(groupname)-1] = '\0';
> +            }
>              group = libvirtd_mdns_add_group(server->mdns, groupname);
> -            VIR_FREE(localhost);
> +            VIR_FREE(groupname);
>          } else {
>              group = libvirtd_mdns_add_group(server->mdns, mdns_name);
>          }

 Revised version of the patch I tested,

 ACK,

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list