From 1c48b5a62f73234ed26bb20f0ab345ab61cda0ab Mon Sep 17 00:00:00 2001 From: Stephen Gallagher Date: Thu, 18 Feb 2010 07:49:04 -0500 Subject: Rename server/ directory to src/ Also update BUILD.txt --- server/resolv/ares/ares_parse_srv_reply.c | 183 ------------------------------ 1 file changed, 183 deletions(-) delete mode 100644 server/resolv/ares/ares_parse_srv_reply.c (limited to 'server/resolv/ares/ares_parse_srv_reply.c') diff --git a/server/resolv/ares/ares_parse_srv_reply.c b/server/resolv/ares/ares_parse_srv_reply.c deleted file mode 100644 index 086c4dba0..000000000 --- a/server/resolv/ares/ares_parse_srv_reply.c +++ /dev/null @@ -1,183 +0,0 @@ -/* - SSSD - - Async resolver - SRV records parsing - - Authors: - Jakub Hrozek - - Copyright (C) Red Hat, Inc 2009 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -/* - * This code is based on other c-ares parsing licensed as follows: - - * Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - - -#include -#include -#include -#include -#include -#include -#include -#include "ares.h" -/* this drags in some private macros c-ares uses */ -#include "ares_dns.h" -#include "ares_data.h" - -#include "ares_parse_srv_reply.h" - -int _ares_parse_srv_reply (const unsigned char *abuf, int alen, - struct ares_srv_reply **srv_out) -{ - unsigned int qdcount, ancount, i; - const unsigned char *aptr, *vptr; - int status, rr_type, rr_class, rr_len; - long len; - char *hostname = NULL, *rr_name = NULL; - struct ares_srv_reply *srv_head = NULL; - struct ares_srv_reply *srv_last = NULL; - struct ares_srv_reply *srv_curr; - - /* Set *srv_out to NULL for all failure cases. */ - *srv_out = NULL; - - /* Give up if abuf doesn't have room for a header. */ - if (alen < HFIXEDSZ) - return ARES_EBADRESP; - - /* Fetch the question and answer count from the header. */ - qdcount = DNS_HEADER_QDCOUNT (abuf); - ancount = DNS_HEADER_ANCOUNT (abuf); - if (qdcount != 1) - return ARES_EBADRESP; - if (ancount == 0) - return ARES_ENODATA; - - /* Expand the name from the question, and skip past the question. */ - aptr = abuf + HFIXEDSZ; - status = ares_expand_name (aptr, abuf, alen, &hostname, &len); - if (status != ARES_SUCCESS) - return status; - - if (aptr + len + QFIXEDSZ > abuf + alen) - { - free (hostname); - return ARES_EBADRESP; - } - aptr += len + QFIXEDSZ; - - /* Examine each answer resource record (RR) in turn. */ - for (i = 0; i < (int) ancount; i++) - { - /* Decode the RR up to the data field. */ - status = ares_expand_name (aptr, abuf, alen, &rr_name, &len); - if (status != ARES_SUCCESS) - { - break; - } - aptr += len; - if (aptr + RRFIXEDSZ > abuf + alen) - { - status = ARES_EBADRESP; - break; - } - rr_type = DNS_RR_TYPE (aptr); - rr_class = DNS_RR_CLASS (aptr); - rr_len = DNS_RR_LEN (aptr); - aptr += RRFIXEDSZ; - - /* Check if we are really looking at a SRV record */ - if (rr_class == C_IN && rr_type == T_SRV) - { - /* parse the SRV record itself */ - if (rr_len < 6) - { - status = ARES_EBADRESP; - break; - } - - /* Allocate storage for this SRV answer appending it to the list */ - srv_curr = _ares_malloc_data(ARES_DATATYPE_SRV_REPLY); - if (!srv_curr) - { - status = ARES_ENOMEM; - break; - } - if (srv_last) - { - srv_last->next = srv_curr; - } - else - { - srv_head = srv_curr; - } - srv_last = srv_curr; - - vptr = aptr; - srv_curr->priority = ntohs (*((const unsigned short *)vptr)); - vptr += sizeof(const unsigned short); - srv_curr->weight = ntohs (*((const unsigned short *)vptr)); - vptr += sizeof(const unsigned short); - srv_curr->port = ntohs (*((const unsigned short *)vptr)); - vptr += sizeof(const unsigned short); - - status = ares_expand_name (vptr, abuf, alen, &srv_curr->host, &len); - if (status != ARES_SUCCESS) - break; - } - - /* Don't lose memory in the next iteration */ - free(rr_name); - rr_name = NULL; - - /* Move on to the next record */ - aptr += rr_len; - } - - if (hostname) - free (hostname); - if (rr_name) - free (rr_name); - - /* clean up on error */ - if (status != ARES_SUCCESS) - { - if (srv_head) - _ares_free_data (srv_head); - return status; - } - - /* everything looks fine, return the data */ - *srv_out = srv_head; - - return ARES_SUCCESS; -} -- cgit