]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
ntpq-subs.c:
authorDave Hart <hart@ntp.org>
Fri, 5 Mar 2010 19:22:27 +0000 (19:22 +0000)
committerDave Hart <hart@ntp.org>
Fri, 5 Mar 2010 19:22:27 +0000 (19:22 +0000)
  use ========= instead of --------- to separate column headings
    from rows in mrulist().
ntp_config.c:
  unpeer by hostname, needed to unpeer pool prototype
    assocations.

bk: 4b9159f3J1vR6hPKIDe47nwlXHnPqg

ntpd/ntp_config.c
ntpq/ntpq-subs.c

index 83695d888824878b7c9c62031083dab6616dcaaa..4e30e4e4d65c3f994bc38561e62d63792ae8b7c8 100644 (file)
@@ -3682,7 +3682,7 @@ config_peers(
                                             (void *)ctx);
 #else  /* !WORKER follows */
                        msyslog(LOG_ERR,
-                               "hostname %s can not be used, please use address\n",
+                               "hostname %s can not be used, please use IP address instead.\n",
                                curr_peer->addr->address);
 #endif
                }
@@ -3792,7 +3792,9 @@ config_unpeers(
        struct addrinfo         hints;
        isc_netaddr_t           i_netaddr;
        struct unpeer_node *    curr_unpeer;
-       struct peer *           peer;
+       struct peer *           p;
+       const char *            name;
+       u_short                 af;
 
        for (curr_unpeer = queue_head(ptree->unpeers);
             curr_unpeer != NULL;
@@ -3803,24 +3805,21 @@ config_unpeers(
                 * address addr, or it is nonzero and addr NULL.
                 */
                if (curr_unpeer->assocID) {
-                       peer = findpeerbyassoc(curr_unpeer->assocID);
-                       if (peer != NULL) {
-                               peer_clear(peer, "GONE");
-                               unpeer(peer);
+                       p = findpeerbyassoc(curr_unpeer->assocID);
+                       if (p != NULL) {
+                               msyslog(LOG_NOTICE, "unpeered %s",
+                                       stoa(&p->srcadr));
+                               peer_clear(p, "GONE");
+                               unpeer(p);
                        }       
 
                        continue;
                }
 
-               /*
-                * If we have a numeric address, we can finish in the
-                * mainline.  Otherwise hand the name off to the
-                * blocking child to resolve.
-                */
-               if (is_ip_address(curr_unpeer->addr->address,
-                                 (u_short)curr_unpeer->addr->type,
-                                 &i_netaddr)) {
-
+               name = curr_unpeer->addr->address;
+               af = curr_unpeer->addr->type;
+               /* Do we have a numeric address? */
+               if (is_ip_address(name, af, &i_netaddr)) {
                        AF(&peeraddr) = (u_short)i_netaddr.family;
                        if (AF_INET6 == i_netaddr.family)
                                SET_ADDR6N(&peeraddr,
@@ -3829,40 +3828,45 @@ config_unpeers(
                                SET_ADDR4N(&peeraddr,
                                           i_netaddr.type.in.s_addr);
 
-                       DPRINTF(1, ("searching for %s\n", stoa(&peeraddr)));
-                       peer = NULL;
-                       while (TRUE) {
-                               peer = findexistingpeer(&peeraddr, NULL, peer, -1);
-                               if (NULL == peer)
-                                       break;
-                               if (FLAG_CONFIG & peer->flags)
-                                       break;
-                       }
-
-                       if (peer != NULL) {
-                               msyslog(LOG_INFO, "unpeered %s",
+                       DPRINTF(1, ("unpeer: searching for %s\n",
+                                   stoa(&peeraddr)));
+                       p = findexistingpeer(&peeraddr, NULL, NULL, -1);
+                       if (p != NULL) {
+                               msyslog(LOG_NOTICE, "unpeered %s",
                                        stoa(&peeraddr));
-                               peer_clear(peer, "GONE");
-                               unpeer(peer);
+                               peer_clear(p, "GONE");
+                               unpeer(p);
                        }
-               } else {
-                       /* we have a hostname to resolve */
+
+                       continue;
+               }
+               /* 
+                * It's not a numeric IP address, it's a hostname.
+                * Check for associations with a matching hostname.
+                */
+               for (p = peer_list; p != NULL; p = p->p_link)
+                       if (p->hostname != NULL)
+                               if (!strcasecmp(p->hostname, name))
+                                       break;
+               if (p != NULL) {
+                       msyslog(LOG_NOTICE, "unpeered %s", name);
+                       peer_clear(p, "GONE");
+                       unpeer(p);
+               }
+               /* Resolve the hostname to address(es). */
 #ifdef WORKER
-                       memset(&hints, 0, sizeof(hints));
-                       hints.ai_family = (u_short)curr_unpeer->addr->type;
-                       hints.ai_socktype = SOCK_DGRAM;
-                       hints.ai_protocol = IPPROTO_UDP;
-                       getaddrinfo_sometime(curr_unpeer->addr->address,
-                                            "ntp", &hints,
-                                            INITIAL_DNS_RETRY,
-                                            &unpeer_name_resolved, 
-                                            (void *)hints.ai_family);
+               memset(&hints, 0, sizeof(hints));
+               hints.ai_family = af;
+               hints.ai_socktype = SOCK_DGRAM;
+               hints.ai_protocol = IPPROTO_UDP;
+               getaddrinfo_sometime(name, "ntp", &hints,
+                                    INITIAL_DNS_RETRY,
+                                    &unpeer_name_resolved, NULL);
 #else  /* !WORKER follows */
-                       msyslog(LOG_ERR,
-                               "hostname %s can not be used, please use address\n",
-                               curr_unpeer->addr->address);
+               msyslog(LOG_ERR,
+                       "hostname %s can not be used, please use IP address instead.\n",
+                       name);
 #endif
-               }
        }
 }
 
@@ -3886,46 +3890,36 @@ unpeer_name_resolved(
 {
        sockaddr_u      peeraddr;
        struct peer *   peer;
-       int             af;
+       u_short         af;
        const char *    fam_spec;
 
        DPRINTF(1, ("unpeer_name_resolved(%s) rescode %d\n", name, rescode));
 
-       af = (int)context;
-
-       if (rescode)
+       if (rescode) {
                msyslog(LOG_ERR, "giving up resolving unpeer %s: %s (%d)", 
                        name, gai_strerror(rescode), rescode);
-       else {
-               /*
-                * Loop through the addresses found
-                */
-               while (res) {
-                       memcpy(&peeraddr, res->ai_addr, res->ai_addrlen);
-                       DPRINTF(1, ("searching for peer %s\n", stoa(&peeraddr)));
-                       peer = NULL;
-                       while (TRUE) {
-                               peer = findexistingpeer(&peeraddr, NULL, peer, -1);
-                               if (NULL == peer)
-                                       break;
-                               if (FLAG_CONFIG & peer->flags)
-                                       break;
-                       }
-
-                       if (peer != NULL) {
-                               fam_spec = (AF_INET6 == af)
-                                              ? "(AAAA) "
-                                              : (AF_INET == af)
-                                                    ? "(A) "
-                                                    : "";
-                               msyslog(LOG_INFO, "unpeered %s %s-> %s",
-                                       name, fam_spec,
-                                       stoa(&peeraddr));
-                               peer_clear(peer, "GONE");
-                               unpeer(peer);
-                       }
-
-                       res = res->ai_next;
+               return;
+       }
+       /*
+        * Loop through the addresses found
+        */
+       for (; res != NULL; res = res->ai_next) {
+               NTP_INSIST(res->ai_addrlen <= sizeof(peeraddr));
+               memcpy(&peeraddr, res->ai_addr, res->ai_addrlen);
+               DPRINTF(1, ("unpeer: searching for peer %s\n",
+                           stoa(&peeraddr)));
+               peer = findexistingpeer(&peeraddr, NULL, NULL, -1);
+               if (peer != NULL) {
+                       af = AF(&peeraddr);
+                       fam_spec = (AF_INET6 == af)
+                                      ? "(AAAA) "
+                                      : (AF_INET == af)
+                                            ? "(A) "
+                                            : "";
+                       msyslog(LOG_NOTICE, "unpeered %s %s-> %s", name,
+                               fam_spec, stoa(&peeraddr));
+                       peer_clear(peer, "GONE");
+                       unpeer(peer);
                }
        }
 }
index 30e59617657bd22920a5d9022d4a74160374c91d..8bb9ebde83f20879531c938dd58189ae4db8509f 100644 (file)
@@ -2416,7 +2416,7 @@ mrulist(
 
 
        printf( "lstint avgint rstr m v  count rport remote address\n"
-               "------------------------------------------------------------------------------\n");
+               "==============================================================================\n");
                /* '-' x 78 */
        ITER_DLIST_BEGIN(mru_list, recent, mlink, mru)
                interval = now;