From owner-svn-src-head@freebsd.org Wed Apr 13 03:36:35 2016 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E392AB0D367; Wed, 13 Apr 2016 03:36:35 +0000 (UTC) (envelope-from araujo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A595013D2; Wed, 13 Apr 2016 03:36:35 +0000 (UTC) (envelope-from araujo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u3D3aYde069450; Wed, 13 Apr 2016 03:36:34 GMT (envelope-from araujo@FreeBSD.org) Received: (from araujo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u3D3aY2h069447; Wed, 13 Apr 2016 03:36:34 GMT (envelope-from araujo@FreeBSD.org) Message-Id: <201604130336.u3D3aY2h069447@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: araujo set sender to araujo@FreeBSD.org using -f From: Marcelo Araujo Date: Wed, 13 Apr 2016 03:36:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r297907 - head/usr.sbin/ypldap X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Apr 2016 03:36:36 -0000 Author: araujo Date: Wed Apr 13 03:36:34 2016 New Revision: 297907 URL: https://svnweb.freebsd.org/changeset/base/297907 Log: Convert ypldap_addr list to a tailq(queue(3)). Obtained from: OpenBSD r1.11, r1.17 and r1.36 Modified: head/usr.sbin/ypldap/ldapclient.c head/usr.sbin/ypldap/ypldap.h head/usr.sbin/ypldap/ypldap_dns.c Modified: head/usr.sbin/ypldap/ldapclient.c ============================================================================== --- head/usr.sbin/ypldap/ldapclient.c Wed Apr 13 02:04:09 2016 (r297906) +++ head/usr.sbin/ypldap/ldapclient.c Wed Apr 13 03:36:34 2016 (r297907) @@ -57,18 +57,18 @@ int client_try_idm(struct env *, struct int client_addr_init(struct idm *); int client_addr_free(struct idm *); -struct aldap *client_aldap_open(struct ypldap_addr *); +struct aldap *client_aldap_open(struct ypldap_addr_list *); /* * dummy wrapper to provide aldap_init with its fd's. */ struct aldap * -client_aldap_open(struct ypldap_addr *addr) +client_aldap_open(struct ypldap_addr_list *addr) { int fd = -1; struct ypldap_addr *p; - for (p = addr; p != NULL; p = p->next) { + TAILQ_FOREACH(p, addr, next) { char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV]; struct sockaddr *sa = (struct sockaddr *)&p->ss; @@ -99,7 +99,7 @@ client_addr_init(struct idm *idm) struct sockaddr_in6 *sa_in6; struct ypldap_addr *h; - for (h = idm->idm_addr; h != NULL; h = h->next) { + TAILQ_FOREACH(h, &idm->idm_addr, next) { switch (h->ss.ss_family) { case AF_INET: sa_in = (struct sockaddr_in *)&h->ss; @@ -125,18 +125,14 @@ client_addr_init(struct idm *idm) int client_addr_free(struct idm *idm) { - struct ypldap_addr *h, *p; - - if (idm->idm_addr == NULL) - return (-1); + struct ypldap_addr *h; - for (h = idm->idm_addr; h != NULL; h = p) { - p = h->next; + while (!TAILQ_EMPTY(&idm->idm_addr)) { + h = TAILQ_FIRST(&idm->idm_addr); + TAILQ_REMOVE(&idm->idm_addr, h, next); free(h); } - idm->idm_addr = NULL; - return (0); } @@ -200,8 +196,8 @@ client_dispatch_dns(int fd, short events log_warnx("IMSG_HOST_DNS with invalid peerID"); break; } - if (idm->idm_addr != NULL) { - log_warnx("IMSG_HOST_DNS but addr != NULL!"); + if (!TAILQ_EMPTY(&idm->idm_addr)) { + log_warnx("IMSG_HOST_DNS but addrs set!"); break; } @@ -213,17 +209,10 @@ client_dispatch_dns(int fd, short events data = (u_char *)imsg.data; while (dlen >= sizeof(struct sockaddr_storage)) { - if ((h = calloc(1, sizeof(struct ypldap_addr))) == - NULL) + if ((h = calloc(1, sizeof(*h))) == NULL) fatal(NULL); memcpy(&h->ss, data, sizeof(h->ss)); - - if (idm->idm_addr == NULL) - h->next = NULL; - else - h->next = idm->idm_addr; - - idm->idm_addr = h; + TAILQ_INSERT_HEAD(&idm->idm_addr, h, next); data += sizeof(h->ss); dlen -= sizeof(h->ss); @@ -588,7 +577,7 @@ client_try_idm(struct env *env, struct i struct aldap *al; where = "connect"; - if ((al = client_aldap_open(idm->idm_addr)) == NULL) + if ((al = client_aldap_open(&idm->idm_addr)) == NULL) return (-1); if (idm->idm_flags & F_NEEDAUTH) { Modified: head/usr.sbin/ypldap/ypldap.h ============================================================================== --- head/usr.sbin/ypldap/ypldap.h Wed Apr 13 02:04:09 2016 (r297906) +++ head/usr.sbin/ypldap/ypldap.h Wed Apr 13 03:36:34 2016 (r297907) @@ -42,9 +42,10 @@ enum imsg_type { }; struct ypldap_addr { - struct ypldap_addr *next; - struct sockaddr_storage ss; + TAILQ_ENTRY(ypldap_addr) next; + struct sockaddr_storage ss; }; +TAILQ_HEAD(ypldap_addr_list, ypldap_addr); enum { PROC_MAIN, @@ -91,7 +92,7 @@ struct idm { enum client_state idm_state; u_int32_t idm_flags; /* lower 20 reserved */ u_int32_t idm_list; - struct ypldap_addr *idm_addr; + struct ypldap_addr_list idm_addr; in_port_t idm_port; char idm_binddn[LINE_WIDTH]; char idm_bindcred[LINE_WIDTH]; Modified: head/usr.sbin/ypldap/ypldap_dns.c ============================================================================== --- head/usr.sbin/ypldap/ypldap_dns.c Wed Apr 13 02:04:09 2016 (r297906) +++ head/usr.sbin/ypldap/ypldap_dns.c Wed Apr 13 03:36:34 2016 (r297907) @@ -48,7 +48,7 @@ struct imsgev *iev_dns; void dns_dispatch_imsg(int, short, void *); void dns_sig_handler(int, short, void *); void dns_shutdown(void); -int host_dns(const char *s, struct ypldap_addr **hn); +int host_dns(const char *, struct ypldap_addr_list *); void dns_sig_handler(int sig, short event, void *p) @@ -129,7 +129,8 @@ dns_dispatch_imsg(int fd, short events, struct imsg imsg; int n, cnt; char *name; - struct ypldap_addr *h, *hn; + struct ypldap_addr_list hn = TAILQ_HEAD_INITIALIZER(hn); + struct ypldap_addr *h; struct ibuf *buf; struct env *env = p; struct imsgev *iev = env->sc_iev; @@ -176,12 +177,11 @@ dns_dispatch_imsg(int fd, short events, if (buf == NULL) break; if (cnt > 0) { - h = hn; - while (h != NULL) { + while(!TAILQ_EMPTY(&hn)) { + h = TAILQ_FIRST(&hn); + TAILQ_REMOVE(&hn, h, next); imsg_add(buf, &h->ss, sizeof(h->ss)); - hn = h->next; free(h); - h = hn; } } @@ -204,13 +204,13 @@ done: } int -host_dns(const char *s, struct ypldap_addr **hn) +host_dns(const char *s, struct ypldap_addr_list *hn) { struct addrinfo hints, *res0, *res; int error, cnt = 0; struct sockaddr_in *sa_in; struct sockaddr_in6 *sa_in6; - struct ypldap_addr *h, *hh = NULL; + struct ypldap_addr *h; bzero(&hints, sizeof(hints)); hints.ai_family = PF_UNSPEC; @@ -243,12 +243,9 @@ host_dns(const char *s, struct ypldap_ad res->ai_addr)->sin6_addr, sizeof(struct in6_addr)); } - h->next = hh; - hh = h; + TAILQ_INSERT_HEAD(hn, h, next); cnt++; } freeaddrinfo(res0); - - *hn = hh; return (cnt); }