[systemd-devel] [PATCH] test-resolve.c: Cleanup and make use of sockaddr_pretty()

Lennart Poettering lennart at poettering.net
Thu Apr 24 00:28:41 PDT 2014


On Wed, 26.03.14 14:17, Daniel Buch (boogiewasthere at gmail.com) wrote:

Applied! Thanks!

> ---
>  src/libsystemd/sd-resolve/test-resolve.c | 48 +++++++++++++++-----------------
>  1 file changed, 22 insertions(+), 26 deletions(-)
> 
> diff --git a/src/libsystemd/sd-resolve/test-resolve.c b/src/libsystemd/sd-resolve/test-resolve.c
> index d3b2d55..6334dad 100644
> --- a/src/libsystemd/sd-resolve/test-resolve.c
> +++ b/src/libsystemd/sd-resolve/test-resolve.c
> @@ -4,6 +4,7 @@
>    This file is part of systemd.
>  
>    Copyright 2005-2008 Lennart Poettering
> +  Copyright 2014 Daniel Buch
>  
>    systemd is free software; you can redistribute it and/or modify it
>    under the terms of the GNU Lesser General Public License as published by
> @@ -31,36 +32,39 @@
>  #include <signal.h>
>  #include <errno.h>
>  
> +#include "socket-util.h"
>  #include "sd-resolve.h"
>  #include "resolve-util.h"
>  #include "macro.h"
>  
>  int main(int argc, char *argv[]) {
> -        int r = 1;
> +        int r = 0;
>          _cleanup_resolve_unref_ sd_resolve *resolve = NULL;
>          _cleanup_resolve_addrinfo_free_ struct addrinfo *ai = NULL;
>          _cleanup_free_ unsigned char *srv = NULL;
> -        sd_resolve_query *q1 = NULL, *q2 = NULL, *q3 = NULL;
> -        struct addrinfo hints = {};
> -        struct sockaddr_in sa = {};
>          _cleanup_free_ char *host = NULL, *serv = NULL;
> +        sd_resolve_query *q1 = NULL, *q2 = NULL, *q3 = NULL;
> +
> +        struct addrinfo hints = {
> +                .ai_family = PF_UNSPEC,
> +                .ai_socktype = SOCK_STREAM,
> +                .ai_flags = AI_CANONNAME
> +        };
> +
> +        struct sockaddr_in sa = {
> +                .sin_family = AF_INET,
> +                .sin_port = htons(80)
> +        };
>  
>          assert_se(sd_resolve_new(&resolve) >= 0);
>  
>          /* Make a name -> address query */
> -        hints.ai_family = PF_UNSPEC;
> -        hints.ai_socktype = SOCK_STREAM;
> -        hints.ai_flags = AI_CANONNAME;
> -
>          r = sd_resolve_getaddrinfo(resolve, &q1, argc >= 2 ? argv[1] : "www.heise.de", NULL, &hints);
>          if (r < 0)
>                  log_error("sd_resolve_getaddrinfo(): %s\n", strerror(-r));
>  
>          /* Make an address -> name query */
> -        sa.sin_family = AF_INET;
> -        sa.sin_addr.s_addr = inet_addr(argc >= 3 ? argv[2] : "193.99.144.71");
> -        sa.sin_port = htons(80);
> -
> +        sa.sin_addr.s_addr = inet_addr(argc >= 3 ? argv[2] : "193.99.144.71"),
>          r = sd_resolve_getnameinfo(resolve, &q2, (struct sockaddr*) &sa, sizeof(sa), 0, true, true);
>          if (r < 0)
>                  log_error("sd_resolve_getnameinfo(): %s\n", strerror(-r));
> @@ -90,15 +94,11 @@ int main(int argc, char *argv[]) {
>                  struct addrinfo *i;
>  
>                  for (i = ai; i; i = i->ai_next) {
> -                        char t[256];
> -                        const char *p = NULL;
> +                        _cleanup_free_ char *addr = NULL;
>  
> -                        if (i->ai_family == PF_INET)
> -                                p = inet_ntop(AF_INET, &((struct sockaddr_in*) i->ai_addr)->sin_addr, t, sizeof(t));
> -                        else if (i->ai_family == PF_INET6)
> -                                p = inet_ntop(AF_INET6, &((struct sockaddr_in6*) i->ai_addr)->sin6_addr, t, sizeof(t));
> +                        assert_se(sockaddr_pretty(i->ai_addr, i->ai_addrlen, false, &addr) == 0);
>  
> -                        printf("%s\n", p);
> +                        puts(addr);
>                  }
>  
>                  printf("canonical name: %s\n", strna(ai->ai_canonname));
> @@ -109,7 +109,7 @@ int main(int argc, char *argv[]) {
>          if (r)
>                  log_error("error: %s %i\n", gai_strerror(r), r);
>          else
> -                printf("%s -- %s\n", host, serv);
> +                printf("Host: %s -- Serv: %s\n", host, serv);
>  
>          /* Interpret the result of the SRV lookup */
>          r = sd_resolve_res_done(q3, &srv);
> @@ -118,9 +118,7 @@ int main(int argc, char *argv[]) {
>          else if (r == 0)
>                  log_error("No reply for SRV lookup\n");
>          else {
> -                int qdcount;
> -                int ancount;
> -                int len;
> +                int qdcount, ancount, len;
>                  const unsigned char *pos = srv + sizeof(HEADER);
>                  unsigned char *end = srv + r;
>                  HEADER *head = (HEADER *)srv;
> @@ -157,7 +155,5 @@ int main(int argc, char *argv[]) {
>                  }
>          }
>  
> -        r = 0;
> -
> -        return r;
> +        return 0;
>  }


Lennart

-- 
Lennart Poettering, Red Hat


More information about the systemd-devel mailing list