mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-08 18:22:05 -04:00
return LWRES_R_* result codes (all are negative values, otehr than success, which is 0)
This commit is contained in:
parent
651a38a706
commit
8cd870e3f5
8 changed files with 177 additions and 153 deletions
|
|
@ -19,7 +19,6 @@
|
|||
#include <config.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
|
@ -31,6 +30,7 @@
|
|||
|
||||
#include <lwres/context.h>
|
||||
#include <lwres/lwres.h>
|
||||
#include <lwres/result.h>
|
||||
|
||||
#include "context_p.h"
|
||||
#include "assert_p.h"
|
||||
|
|
@ -60,10 +60,8 @@ lwres_context_create(lwres_context_t **contextp, void *arg,
|
|||
}
|
||||
|
||||
ctx = malloc_function(arg, sizeof(lwres_context_t));
|
||||
if (ctx == NULL) {
|
||||
errno = ENOMEM;
|
||||
return (-1);
|
||||
}
|
||||
if (ctx == NULL)
|
||||
return (LWRES_R_NOMEMORY);
|
||||
|
||||
/*
|
||||
* Set up the context.
|
||||
|
|
@ -79,7 +77,7 @@ lwres_context_create(lwres_context_t **contextp, void *arg,
|
|||
(void)context_connect(ctx); /* XXXMLG */
|
||||
|
||||
*contextp = ctx;
|
||||
return (0);
|
||||
return (LWRES_R_SUCCESS);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -172,17 +170,17 @@ context_connect(lwres_context_t *ctx)
|
|||
|
||||
s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
||||
if (s < 0)
|
||||
return (-1);
|
||||
return (LWRES_R_IOERROR);
|
||||
|
||||
ret = connect(s, (struct sockaddr *)&localhost, sizeof(localhost));
|
||||
if (ret != 0) {
|
||||
close(s);
|
||||
return (-1);
|
||||
return (LWRES_R_IOERROR);
|
||||
}
|
||||
|
||||
ctx->sock = s;
|
||||
|
||||
return (0);
|
||||
return (LWRES_R_SUCCESS);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
@ -198,17 +196,23 @@ lwres_context_sendrecv(lwres_context_t *ctx,
|
|||
if (ret < 0)
|
||||
return (ret);
|
||||
if (ret != sendlen)
|
||||
return (-1);
|
||||
return (LWRES_R_IOERROR);
|
||||
|
||||
again:
|
||||
fromlen = sizeof(sin);
|
||||
ret = recvfrom(ctx->sock, recvbase, recvlen, 0,
|
||||
(struct sockaddr *)&sin, &fromlen);
|
||||
if (ret < 0)
|
||||
return (-1);
|
||||
return (LWRES_R_IOERROR);
|
||||
|
||||
/*
|
||||
* If we got something other than what we expect, re-issue our
|
||||
* recvfrom() call. This can happen if an old result comes in,
|
||||
* or if someone is sending us random stuff.
|
||||
*/
|
||||
if (sin.sin_addr.s_addr != htonl(INADDR_LOOPBACK)
|
||||
|| sin.sin_port != htons(LWRES_UDP_PORT))
|
||||
return (-1);
|
||||
goto again;
|
||||
|
||||
return (ret);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ top_srcdir = @top_srcdir@
|
|||
#
|
||||
# Only list headers that are to be installed!
|
||||
#
|
||||
HEADERS = lwbuffer.h lwpacket.h lwres.h
|
||||
HEADERS = context.h lwbuffer.h lwpacket.h lwres.h netdb.h result.h
|
||||
|
||||
SUBDIRS =
|
||||
TARGETS =
|
||||
|
|
|
|||
31
lib/lwres/include/lwres/result.h
Normal file
31
lib/lwres/include/lwres/result.h
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
* Copyright (C) 2000 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
|
||||
* ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
|
||||
* CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef LWRES_RESULT_H
|
||||
#define LWRES_RESULT_H 1
|
||||
|
||||
#define LWRES_R_SUCCESS 0
|
||||
#define LWRES_R_NOMEMORY -1
|
||||
#define LWRES_R_TIMEDOUT -2
|
||||
#define LWRES_R_NOTFOUND -3
|
||||
#define LWRES_R_UNEXPECTEDEND -4 /* unexpected end of input */
|
||||
#define LWRES_R_FAILURE -5 /* generic failure */
|
||||
#define LWRES_R_IOERROR -6
|
||||
#define LWRES_R_NOTIMPLEMENTED -7
|
||||
#define LWRES_R_UNEXPECTED -8
|
||||
|
||||
#endif /* LWRES_RESULT_H */
|
||||
|
|
@ -18,12 +18,12 @@
|
|||
#include <config.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <lwres/lwbuffer.h>
|
||||
#include <lwres/lwpacket.h>
|
||||
#include <lwres/result.h>
|
||||
|
||||
#include "assert_p.h"
|
||||
|
||||
|
|
@ -36,7 +36,7 @@ lwres_lwpacket_renderheader(lwres_buffer_t *b, lwres_lwpacket_t *pkt)
|
|||
REQUIRE(pkt != NULL);
|
||||
|
||||
if (!SPACE_OK(b, LWPACKET_LENGTH))
|
||||
return (-1);
|
||||
return (LWRES_R_UNEXPECTEDEND);
|
||||
|
||||
lwres_buffer_putuint32(b, pkt->length);
|
||||
lwres_buffer_putuint16(b, pkt->version);
|
||||
|
|
@ -48,7 +48,7 @@ lwres_lwpacket_renderheader(lwres_buffer_t *b, lwres_lwpacket_t *pkt)
|
|||
lwres_buffer_putuint16(b, pkt->authtype);
|
||||
lwres_buffer_putuint16(b, pkt->authlength);
|
||||
|
||||
return (0);
|
||||
return (LWRES_R_SUCCESS);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
@ -61,11 +61,11 @@ lwres_lwpacket_parseheader(lwres_buffer_t *b, lwres_lwpacket_t *pkt)
|
|||
|
||||
space = LWRES_BUFFER_REMAINING(b);
|
||||
if (space < LWPACKET_LENGTH)
|
||||
return (-1);
|
||||
return (LWRES_R_UNEXPECTEDEND);
|
||||
|
||||
pkt->length = lwres_buffer_getuint32(b);
|
||||
if (pkt->length > space)
|
||||
return (-1);
|
||||
return (LWRES_R_UNEXPECTEDEND);
|
||||
pkt->version = lwres_buffer_getuint16(b);
|
||||
pkt->flags = lwres_buffer_getuint16(b);
|
||||
pkt->serial = lwres_buffer_getuint32(b);
|
||||
|
|
@ -75,5 +75,5 @@ lwres_lwpacket_parseheader(lwres_buffer_t *b, lwres_lwpacket_t *pkt)
|
|||
pkt->authtype = lwres_buffer_getuint16(b);
|
||||
pkt->authlength = lwres_buffer_getuint16(b);
|
||||
|
||||
return (0);
|
||||
return (LWRES_R_SUCCESS);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,13 +18,13 @@
|
|||
#include <config.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <lwres/lwbuffer.h>
|
||||
#include <lwres/lwpacket.h>
|
||||
#include <lwres/lwres.h>
|
||||
#include <lwres/result.h>
|
||||
|
||||
#include "context_p.h"
|
||||
#include "assert_p.h"
|
||||
|
|
@ -51,10 +51,9 @@ lwres_gabnrequest_render(lwres_context_t *ctx, lwres_gabnrequest_t *req,
|
|||
|
||||
buflen = LWRES_LWPACKET_LENGTH + payload_length;
|
||||
buf = CTXMALLOC(buflen);
|
||||
if (buf == NULL) {
|
||||
errno = ENOMEM;
|
||||
return (-1);
|
||||
}
|
||||
if (buf == NULL)
|
||||
return (LWRES_R_NOMEMORY);
|
||||
|
||||
lwres_buffer_init(b, buf, buflen);
|
||||
|
||||
pkt->length = buflen;
|
||||
|
|
@ -66,7 +65,7 @@ lwres_gabnrequest_render(lwres_context_t *ctx, lwres_gabnrequest_t *req,
|
|||
pkt->authlength = 0;
|
||||
|
||||
ret = lwres_lwpacket_renderheader(b, pkt);
|
||||
if (ret != 0) {
|
||||
if (ret != LWRES_R_SUCCESS) {
|
||||
lwres_buffer_invalidate(b);
|
||||
CTXFREE(buf, buflen);
|
||||
return (ret);
|
||||
|
|
@ -88,7 +87,7 @@ lwres_gabnrequest_render(lwres_context_t *ctx, lwres_gabnrequest_t *req,
|
|||
|
||||
INSIST(LWRES_BUFFER_AVAILABLECOUNT(b) == 0);
|
||||
|
||||
return (0);
|
||||
return (LWRES_R_SUCCESS);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
@ -122,10 +121,8 @@ lwres_gabnresponse_render(lwres_context_t *ctx, lwres_gabnresponse_t *req,
|
|||
|
||||
buflen = LWRES_LWPACKET_LENGTH + payload_length;
|
||||
buf = CTXMALLOC(buflen);
|
||||
if (buf == NULL) {
|
||||
errno = ENOMEM;
|
||||
return (-1);
|
||||
}
|
||||
if (buf == NULL)
|
||||
return (LWRES_R_NOMEMORY);
|
||||
lwres_buffer_init(b, buf, buflen);
|
||||
|
||||
pkt->length = buflen;
|
||||
|
|
@ -136,7 +133,7 @@ lwres_gabnresponse_render(lwres_context_t *ctx, lwres_gabnresponse_t *req,
|
|||
pkt->authlength = 0;
|
||||
|
||||
ret = lwres_lwpacket_renderheader(b, pkt);
|
||||
if (ret != 0) {
|
||||
if (ret != LWRES_R_SUCCESS) {
|
||||
lwres_buffer_invalidate(b);
|
||||
CTXFREE(buf, buflen);
|
||||
return (ret);
|
||||
|
|
@ -175,7 +172,7 @@ lwres_gabnresponse_render(lwres_context_t *ctx, lwres_gabnresponse_t *req,
|
|||
|
||||
INSIST(LWRES_BUFFER_AVAILABLECOUNT(b) == 0);
|
||||
|
||||
return (0);
|
||||
return (LWRES_R_SUCCESS);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
@ -194,10 +191,10 @@ lwres_gabnrequest_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
|||
REQUIRE(structp != NULL && *structp == NULL);
|
||||
|
||||
if ((pkt->flags & LWRES_LWPACKETFLAG_RESPONSE) == 0)
|
||||
return (-1);
|
||||
return (LWRES_R_FAILURE);
|
||||
|
||||
if (!SPACE_REMAINING(b, 4))
|
||||
return (-1);
|
||||
return (LWRES_R_UNEXPECTEDEND);
|
||||
|
||||
addrtypes = lwres_buffer_getuint32(b);
|
||||
|
||||
|
|
@ -205,22 +202,22 @@ lwres_gabnrequest_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
|||
* Pull off the name itself
|
||||
*/
|
||||
ret = lwres_string_parse(b, &name, &namelen);
|
||||
if (ret != 0)
|
||||
if (ret != LWRES_R_SUCCESS)
|
||||
return (ret);
|
||||
|
||||
if (LWRES_BUFFER_REMAINING(b) != 0)
|
||||
return (-1);
|
||||
return (LWRES_R_UNEXPECTEDEND);
|
||||
|
||||
gabn = CTXMALLOC(sizeof(lwres_gabnrequest_t));
|
||||
if (gabn == NULL)
|
||||
return (-1);
|
||||
return (LWRES_R_NOMEMORY);
|
||||
|
||||
gabn->addrtypes = addrtypes;
|
||||
gabn->name = name;
|
||||
gabn->namelen = namelen;
|
||||
|
||||
*structp = gabn;
|
||||
return (0);
|
||||
return (LWRES_R_SUCCESS);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
@ -241,19 +238,19 @@ lwres_gabnresponse_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
|||
gabn = NULL;
|
||||
|
||||
if ((pkt->flags & LWRES_LWPACKETFLAG_RESPONSE) == 0)
|
||||
return (-1);
|
||||
return (LWRES_R_FAILURE);
|
||||
|
||||
/*
|
||||
* Pull off the name itself
|
||||
*/
|
||||
if (!SPACE_REMAINING(b, sizeof(isc_uint16_t) * 2))
|
||||
return (-1);
|
||||
return (LWRES_R_UNEXPECTEDEND);
|
||||
naliases = lwres_buffer_getuint16(b);
|
||||
naddrs = lwres_buffer_getuint16(b);
|
||||
|
||||
gabn = CTXMALLOC(sizeof(lwres_gabnresponse_t));
|
||||
if (gabn == NULL)
|
||||
return (-1);
|
||||
return (LWRES_R_NOMEMORY);
|
||||
gabn->aliases = NULL;
|
||||
gabn->aliaslen = NULL;
|
||||
gabn->addrs = NULL;
|
||||
|
|
@ -264,19 +261,19 @@ lwres_gabnresponse_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
|||
|
||||
gabn->aliases = CTXMALLOC(sizeof(char *) * naliases);
|
||||
if (gabn->aliases == NULL) {
|
||||
ret = -1;
|
||||
ret = LWRES_R_NOMEMORY;
|
||||
goto out;
|
||||
}
|
||||
|
||||
gabn->aliaslen = CTXMALLOC(sizeof(isc_uint16_t) * naliases);
|
||||
if (gabn->aliaslen == NULL) {
|
||||
ret = -1;
|
||||
ret = LWRES_R_NOMEMORY;
|
||||
goto out;
|
||||
}
|
||||
|
||||
gabn->addrs = CTXMALLOC(sizeof(lwres_addr_t) * naddrs);
|
||||
if (gabn->addrs == NULL) {
|
||||
ret = -1;
|
||||
ret = LWRES_R_NOMEMORY;
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
|
@ -284,7 +281,7 @@ lwres_gabnresponse_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
|||
* Now, pull off the real name.
|
||||
*/
|
||||
ret = lwres_string_parse(b, &gabn->realname, &gabn->realnamelen);
|
||||
if (ret != 0)
|
||||
if (ret != LWRES_R_SUCCESS)
|
||||
goto out;
|
||||
|
||||
/*
|
||||
|
|
@ -292,7 +289,7 @@ lwres_gabnresponse_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
|||
*/
|
||||
for (x = 0 ; x < gabn->naddrs ; x++) {
|
||||
ret = lwres_addr_parse(b, &gabn->addrs[x]);
|
||||
if (ret != 0)
|
||||
if (ret != LWRES_R_SUCCESS)
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
|
@ -302,17 +299,17 @@ lwres_gabnresponse_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
|||
for (x = 0 ; x < gabn->naliases ; x++) {
|
||||
ret = lwres_string_parse(b, &gabn->aliases[x],
|
||||
&gabn->aliaslen[x]);
|
||||
if (ret != 0)
|
||||
if (ret != LWRES_R_SUCCESS)
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (LWRES_BUFFER_REMAINING(b) != 0) {
|
||||
ret = -1;
|
||||
ret = LWRES_R_UNEXPECTEDEND;
|
||||
goto out;
|
||||
}
|
||||
|
||||
*structp = gabn;
|
||||
return (0);
|
||||
return (LWRES_R_SUCCESS);
|
||||
|
||||
out:
|
||||
if (gabn != NULL) {
|
||||
|
|
|
|||
|
|
@ -18,13 +18,13 @@
|
|||
#include <config.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <lwres/lwbuffer.h>
|
||||
#include <lwres/lwpacket.h>
|
||||
#include <lwres/lwres.h>
|
||||
#include <lwres/result.h>
|
||||
|
||||
#include "context_p.h"
|
||||
#include "assert_p.h"
|
||||
|
|
@ -51,10 +51,8 @@ lwres_gnbarequest_render(lwres_context_t *ctx, lwres_gnbarequest_t *req,
|
|||
|
||||
buflen = LWRES_LWPACKET_LENGTH + payload_length;
|
||||
buf = CTXMALLOC(buflen);
|
||||
if (buf == NULL) {
|
||||
errno = ENOMEM;
|
||||
return (-1);
|
||||
}
|
||||
if (buf == NULL)
|
||||
return (LWRES_R_NOMEMORY);
|
||||
lwres_buffer_init(b, buf, buflen);
|
||||
|
||||
pkt->length = buflen;
|
||||
|
|
@ -66,7 +64,7 @@ lwres_gnbarequest_render(lwres_context_t *ctx, lwres_gnbarequest_t *req,
|
|||
pkt->authlength = 0;
|
||||
|
||||
ret = lwres_lwpacket_renderheader(b, pkt);
|
||||
if (ret != 0) {
|
||||
if (ret != LWRES_R_SUCCESS) {
|
||||
lwres_buffer_invalidate(b);
|
||||
CTXFREE(buf, buflen);
|
||||
return (ret);
|
||||
|
|
@ -84,7 +82,7 @@ lwres_gnbarequest_render(lwres_context_t *ctx, lwres_gnbarequest_t *req,
|
|||
|
||||
INSIST(LWRES_BUFFER_AVAILABLECOUNT(b) == 0);
|
||||
|
||||
return (0);
|
||||
return (LWRES_R_SUCCESS);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
@ -113,10 +111,8 @@ lwres_gnbaresponse_render(lwres_context_t *ctx, lwres_gnbaresponse_t *req,
|
|||
|
||||
buflen = LWRES_LWPACKET_LENGTH + payload_length;
|
||||
buf = CTXMALLOC(buflen);
|
||||
if (buf == NULL) {
|
||||
errno = ENOMEM;
|
||||
return (-1);
|
||||
}
|
||||
if (buf == NULL)
|
||||
return (LWRES_R_NOMEMORY);
|
||||
lwres_buffer_init(b, buf, buflen);
|
||||
|
||||
pkt->length = buflen;
|
||||
|
|
@ -127,7 +123,7 @@ lwres_gnbaresponse_render(lwres_context_t *ctx, lwres_gnbaresponse_t *req,
|
|||
pkt->authlength = 0;
|
||||
|
||||
ret = lwres_lwpacket_renderheader(b, pkt);
|
||||
if (ret != 0) {
|
||||
if (ret != LWRES_R_SUCCESS) {
|
||||
lwres_buffer_invalidate(b);
|
||||
CTXFREE(buf, buflen);
|
||||
return (ret);
|
||||
|
|
@ -153,7 +149,7 @@ lwres_gnbaresponse_render(lwres_context_t *ctx, lwres_gnbaresponse_t *req,
|
|||
|
||||
INSIST(LWRES_BUFFER_AVAILABLECOUNT(b) == 0);
|
||||
|
||||
return (0);
|
||||
return (LWRES_R_SUCCESS);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
@ -169,23 +165,23 @@ lwres_gnbarequest_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
|||
REQUIRE(structp != NULL && *structp == NULL);
|
||||
|
||||
if ((pkt->flags & LWRES_LWPACKETFLAG_RESPONSE) == 0)
|
||||
return (-1);
|
||||
return (LWRES_R_FAILURE);
|
||||
|
||||
gnba = CTXMALLOC(sizeof(lwres_gnbarequest_t));
|
||||
if (gnba == NULL)
|
||||
return (-1);
|
||||
return (LWRES_R_NOMEMORY);
|
||||
|
||||
ret = lwres_addr_parse(b, &gnba->addr);
|
||||
if (ret != 0)
|
||||
if (ret != LWRES_R_SUCCESS)
|
||||
goto out;
|
||||
|
||||
if (LWRES_BUFFER_REMAINING(b) != 0) {
|
||||
ret = -1;
|
||||
ret = LWRES_R_UNEXPECTEDEND;
|
||||
goto out;
|
||||
}
|
||||
|
||||
*structp = gnba;
|
||||
return (0);
|
||||
return (LWRES_R_SUCCESS);
|
||||
|
||||
out:
|
||||
if (gnba != NULL)
|
||||
|
|
@ -211,18 +207,18 @@ lwres_gnbaresponse_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
|||
gnba = NULL;
|
||||
|
||||
if ((pkt->flags & LWRES_LWPACKETFLAG_RESPONSE) == 0)
|
||||
return (-1);
|
||||
return (LWRES_R_FAILURE);
|
||||
|
||||
/*
|
||||
* Pull off the name itself
|
||||
*/
|
||||
if (!SPACE_REMAINING(b, sizeof(isc_uint16_t)))
|
||||
return (-1);
|
||||
return (LWRES_R_UNEXPECTEDEND);
|
||||
naliases = lwres_buffer_getuint16(b);
|
||||
|
||||
gnba = CTXMALLOC(sizeof(lwres_gnbaresponse_t));
|
||||
if (gnba == NULL)
|
||||
return (-1);
|
||||
return (LWRES_R_NOMEMORY);
|
||||
gnba->base = NULL;
|
||||
gnba->aliases = NULL;
|
||||
gnba->aliaslen = NULL;
|
||||
|
|
@ -245,7 +241,7 @@ lwres_gnbaresponse_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
|||
* Now, pull off the real name.
|
||||
*/
|
||||
ret = lwres_string_parse(b, &gnba->realname, &gnba->realnamelen);
|
||||
if (ret != 0)
|
||||
if (ret != LWRES_R_SUCCESS)
|
||||
goto out;
|
||||
|
||||
/*
|
||||
|
|
@ -254,7 +250,7 @@ lwres_gnbaresponse_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
|||
for (x = 0 ; x < gnba->naliases ; x++) {
|
||||
ret = lwres_string_parse(b, &gnba->aliases[x],
|
||||
&gnba->aliaslen[x]);
|
||||
if (ret != 0)
|
||||
if (ret != LWRES_R_SUCCESS)
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
|
@ -264,7 +260,7 @@ lwres_gnbaresponse_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
|||
}
|
||||
|
||||
*structp = gnba;
|
||||
return (0);
|
||||
return (LWRES_R_SUCCESS);
|
||||
|
||||
out:
|
||||
if (gnba != NULL) {
|
||||
|
|
|
|||
|
|
@ -18,13 +18,13 @@
|
|||
#include <config.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <lwres/lwbuffer.h>
|
||||
#include <lwres/lwpacket.h>
|
||||
#include <lwres/lwres.h>
|
||||
#include <lwres/result.h>
|
||||
|
||||
#include "context_p.h"
|
||||
#include "assert_p.h"
|
||||
|
|
@ -47,10 +47,8 @@ lwres_nooprequest_render(lwres_context_t *ctx, lwres_nooprequest_t *req,
|
|||
|
||||
buflen = LWRES_LWPACKET_LENGTH + payload_length;
|
||||
buf = CTXMALLOC(buflen);
|
||||
if (buf == NULL) {
|
||||
errno = ENOMEM;
|
||||
return (-1);
|
||||
}
|
||||
if (buf == NULL)
|
||||
return (LWRES_R_NOMEMORY);
|
||||
lwres_buffer_init(b, buf, buflen);
|
||||
|
||||
pkt->length = buflen;
|
||||
|
|
@ -62,7 +60,7 @@ lwres_nooprequest_render(lwres_context_t *ctx, lwres_nooprequest_t *req,
|
|||
pkt->authlength = 0;
|
||||
|
||||
ret = lwres_lwpacket_renderheader(b, pkt);
|
||||
if (ret != 0) {
|
||||
if (ret != LWRES_R_SUCCESS) {
|
||||
lwres_buffer_invalidate(b);
|
||||
CTXFREE(buf, buflen);
|
||||
return (ret);
|
||||
|
|
@ -79,7 +77,7 @@ lwres_nooprequest_render(lwres_context_t *ctx, lwres_nooprequest_t *req,
|
|||
|
||||
INSIST(LWRES_BUFFER_AVAILABLECOUNT(b) == 0);
|
||||
|
||||
return (0);
|
||||
return (LWRES_R_SUCCESS);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
@ -100,10 +98,8 @@ lwres_noopresponse_render(lwres_context_t *ctx, lwres_noopresponse_t *req,
|
|||
|
||||
buflen = LWRES_LWPACKET_LENGTH + payload_length;
|
||||
buf = CTXMALLOC(buflen);
|
||||
if (buf == NULL) {
|
||||
errno = ENOMEM;
|
||||
return (-1);
|
||||
}
|
||||
if (buf == NULL)
|
||||
return (LWRES_R_NOMEMORY);
|
||||
lwres_buffer_init(b, buf, buflen);
|
||||
|
||||
pkt->length = buflen;
|
||||
|
|
@ -114,7 +110,7 @@ lwres_noopresponse_render(lwres_context_t *ctx, lwres_noopresponse_t *req,
|
|||
pkt->authlength = 0;
|
||||
|
||||
ret = lwres_lwpacket_renderheader(b, pkt);
|
||||
if (ret != 0) {
|
||||
if (ret != LWRES_R_SUCCESS) {
|
||||
lwres_buffer_invalidate(b);
|
||||
CTXFREE(buf, buflen);
|
||||
return (ret);
|
||||
|
|
@ -131,7 +127,7 @@ lwres_noopresponse_render(lwres_context_t *ctx, lwres_noopresponse_t *req,
|
|||
|
||||
INSIST(LWRES_BUFFER_AVAILABLECOUNT(b) == 0);
|
||||
|
||||
return (0);
|
||||
return (LWRES_R_SUCCESS);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
@ -147,33 +143,33 @@ lwres_nooprequest_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
|||
REQUIRE(structp != NULL && *structp == NULL);
|
||||
|
||||
if ((pkt->flags & LWRES_LWPACKETFLAG_RESPONSE) != 0)
|
||||
return (-1);
|
||||
return (LWRES_R_FAILURE);
|
||||
|
||||
req = CTXMALLOC(sizeof(lwres_nooprequest_t));
|
||||
if (req == NULL)
|
||||
return (-1);
|
||||
return (LWRES_R_NOMEMORY);
|
||||
|
||||
if (!SPACE_REMAINING(b, sizeof(isc_uint16_t))) {
|
||||
ret = -1;
|
||||
ret = LWRES_R_UNEXPECTEDEND;
|
||||
goto out;
|
||||
}
|
||||
req->datalength = lwres_buffer_getuint16(b);
|
||||
|
||||
if (!SPACE_REMAINING(b, req->datalength)) {
|
||||
ret = -1;
|
||||
ret = LWRES_R_UNEXPECTEDEND;
|
||||
goto out;
|
||||
}
|
||||
req->data = b->base + b->current;
|
||||
lwres_buffer_forward(b, req->datalength);
|
||||
|
||||
if (LWRES_BUFFER_REMAINING(b) != 0) {
|
||||
ret = -1;
|
||||
ret = LWRES_R_UNEXPECTEDEND;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* success! */
|
||||
*structp = req;
|
||||
return (0);
|
||||
return (LWRES_R_SUCCESS);
|
||||
|
||||
/* Error return */
|
||||
out:
|
||||
|
|
@ -194,33 +190,33 @@ lwres_noopresponse_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
|||
REQUIRE(structp != NULL && *structp == NULL);
|
||||
|
||||
if ((pkt->flags & LWRES_LWPACKETFLAG_RESPONSE) == 0)
|
||||
return (-1);
|
||||
return (LWRES_R_FAILURE);
|
||||
|
||||
req = CTXMALLOC(sizeof(lwres_noopresponse_t));
|
||||
if (req == NULL)
|
||||
return (-1);
|
||||
return (LWRES_R_NOMEMORY);
|
||||
|
||||
if (!SPACE_REMAINING(b, sizeof(isc_uint16_t))) {
|
||||
ret = -1;
|
||||
ret = LWRES_R_UNEXPECTEDEND;
|
||||
goto out;
|
||||
}
|
||||
req->datalength = lwres_buffer_getuint16(b);
|
||||
|
||||
if (!SPACE_REMAINING(b, req->datalength)) {
|
||||
ret = -1;
|
||||
ret = LWRES_R_UNEXPECTEDEND;
|
||||
goto out;
|
||||
}
|
||||
req->data = b->base + b->current;
|
||||
|
||||
lwres_buffer_forward(b, req->datalength);
|
||||
if (LWRES_BUFFER_REMAINING(b) != 0) {
|
||||
ret = -1;
|
||||
ret = LWRES_R_UNEXPECTEDEND;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* success! */
|
||||
*structp = req;
|
||||
return (0);
|
||||
return (LWRES_R_SUCCESS);
|
||||
|
||||
/* Error return */
|
||||
out:
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@
|
|||
#include <config.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
|
@ -30,6 +29,7 @@
|
|||
|
||||
#include <lwres/lwbuffer.h>
|
||||
#include <lwres/lwres.h>
|
||||
#include <lwres/result.h>
|
||||
|
||||
#include "assert_p.h"
|
||||
#include "context_p.h"
|
||||
|
|
@ -58,11 +58,11 @@ lwres_string_parse(lwres_buffer_t *b, char **c, isc_uint16_t *len)
|
|||
REQUIRE(b != NULL);
|
||||
|
||||
if (!SPACE_REMAINING(b, sizeof(isc_uint16_t)))
|
||||
return (-1);
|
||||
return (LWRES_R_UNEXPECTEDEND);
|
||||
datalen = lwres_buffer_getuint16(b);
|
||||
datalen++;
|
||||
if (!SPACE_REMAINING(b, datalen))
|
||||
return (-1);
|
||||
return (LWRES_R_UNEXPECTEDEND);
|
||||
|
||||
string = b->base + b->current;
|
||||
|
||||
|
|
@ -73,7 +73,7 @@ lwres_string_parse(lwres_buffer_t *b, char **c, isc_uint16_t *len)
|
|||
if (c != NULL)
|
||||
*c = string;
|
||||
|
||||
return (0);
|
||||
return (LWRES_R_SUCCESS);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
@ -82,15 +82,15 @@ lwres_addr_parse(lwres_buffer_t *b, lwres_addr_t *addr)
|
|||
REQUIRE(addr != NULL);
|
||||
|
||||
if (!SPACE_REMAINING(b, sizeof(isc_uint32_t) + sizeof(isc_uint16_t)))
|
||||
return (-1);
|
||||
return (LWRES_R_UNEXPECTEDEND);
|
||||
addr->family = lwres_buffer_getuint32(b);
|
||||
addr->length = lwres_buffer_getuint16(b);
|
||||
if (!SPACE_REMAINING(b, addr->length))
|
||||
return (-1);
|
||||
return (LWRES_R_UNEXPECTEDEND);
|
||||
addr->address = b->base + b->current;
|
||||
lwres_buffer_forward(b, addr->length);
|
||||
|
||||
return (0);
|
||||
return (LWRES_R_SUCCESS);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
@ -100,8 +100,7 @@ lwres_getaddrsbyname(lwres_context_t *ctx, const char *name,
|
|||
lwres_gabnrequest_t request;
|
||||
lwres_gabnresponse_t *response;
|
||||
int ret;
|
||||
int free_b;
|
||||
lwres_buffer_t b;
|
||||
lwres_buffer_t b_in, b_out;
|
||||
lwres_lwpacket_t pkt;
|
||||
isc_uint32_t serial;
|
||||
char *buffer;
|
||||
|
|
@ -111,14 +110,15 @@ lwres_getaddrsbyname(lwres_context_t *ctx, const char *name,
|
|||
REQUIRE(addrtypes != 0);
|
||||
REQUIRE(structp != NULL && *structp == NULL);
|
||||
|
||||
b_in.base = NULL;
|
||||
b_out.base = NULL;
|
||||
response = NULL;
|
||||
free_b = 0;
|
||||
buffer = NULL;
|
||||
serial = (isc_uint32_t)name;
|
||||
|
||||
buffer = CTXMALLOC(LWRES_RECVLENGTH);
|
||||
if (buffer == NULL) {
|
||||
ret = -1;
|
||||
ret = LWRES_R_NOMEMORY;
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
|
@ -132,44 +132,44 @@ lwres_getaddrsbyname(lwres_context_t *ctx, const char *name,
|
|||
pkt.result = 0;
|
||||
pkt.recvlength = LWRES_RECVLENGTH;
|
||||
|
||||
ret = lwres_gabnrequest_render(ctx, &request, &pkt, &b);
|
||||
again:
|
||||
ret = lwres_gabnrequest_render(ctx, &request, &pkt, &b_out);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
free_b = 1;
|
||||
|
||||
ret = lwres_context_sendrecv(ctx, b.base, b.length, buffer,
|
||||
ret = lwres_context_sendrecv(ctx, b_out.base, b_out.length, buffer,
|
||||
LWRES_RECVLENGTH);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
CTXFREE(b.base, b.length);
|
||||
free_b = 0;
|
||||
|
||||
lwres_buffer_init(&b, buffer, ret);
|
||||
lwres_buffer_init(&b_in, buffer, ret);
|
||||
|
||||
/*
|
||||
* Parse the packet header.
|
||||
*/
|
||||
ret = lwres_lwpacket_parseheader(&b, &pkt);
|
||||
ret = lwres_lwpacket_parseheader(&b_in, &pkt);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
|
||||
/*
|
||||
* Sanity check.
|
||||
*/
|
||||
if (pkt.serial != serial) {
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
if (pkt.opcode != LWRES_OPCODE_GETADDRSBYNAME) {
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
if (pkt.serial != serial)
|
||||
goto again;
|
||||
if (pkt.opcode != LWRES_OPCODE_GETADDRSBYNAME)
|
||||
goto again;
|
||||
|
||||
/*
|
||||
* Free what we've transmitted
|
||||
*/
|
||||
CTXFREE(b_out.base, b_out.length);
|
||||
b_out.base = NULL;
|
||||
b_out.length = 0;
|
||||
|
||||
/*
|
||||
* Parse the response.
|
||||
*/
|
||||
ret = lwres_gabnresponse_parse(ctx, &b, &pkt, &response);
|
||||
ret = lwres_gabnresponse_parse(ctx, &b_in, &pkt, &response);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
response->base = buffer;
|
||||
|
|
@ -177,11 +177,11 @@ lwres_getaddrsbyname(lwres_context_t *ctx, const char *name,
|
|||
buffer = NULL; /* don't free this below */
|
||||
|
||||
*structp = response;
|
||||
return (0);
|
||||
return (LWRES_R_SUCCESS);
|
||||
|
||||
out:
|
||||
if (free_b != 0)
|
||||
CTXFREE(b.base, b.length);
|
||||
if (b_out.base != NULL)
|
||||
CTXFREE(b_out.base, b_out.length);
|
||||
if (buffer != NULL)
|
||||
CTXFREE(buffer, LWRES_RECVLENGTH);
|
||||
if (response != NULL)
|
||||
|
|
@ -199,8 +199,7 @@ lwres_getnamebyaddr(lwres_context_t *ctx, isc_uint32_t addrtype,
|
|||
lwres_gnbarequest_t request;
|
||||
lwres_gnbaresponse_t *response;
|
||||
int ret;
|
||||
int free_b;
|
||||
lwres_buffer_t b;
|
||||
lwres_buffer_t b_in, b_out;
|
||||
lwres_lwpacket_t pkt;
|
||||
isc_uint32_t serial;
|
||||
char *buffer;
|
||||
|
|
@ -211,14 +210,15 @@ lwres_getnamebyaddr(lwres_context_t *ctx, isc_uint32_t addrtype,
|
|||
REQUIRE(addr != NULL);
|
||||
REQUIRE(structp != NULL && *structp == NULL);
|
||||
|
||||
b_in.base = NULL;
|
||||
b_out.base = NULL;
|
||||
response = NULL;
|
||||
free_b = 0;
|
||||
buffer = NULL;
|
||||
serial = (isc_uint32_t)addr;
|
||||
|
||||
buffer = CTXMALLOC(LWRES_RECVLENGTH);
|
||||
if (buffer == NULL) {
|
||||
ret = -1;
|
||||
ret = LWRES_R_NOMEMORY;
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
|
@ -233,44 +233,44 @@ lwres_getnamebyaddr(lwres_context_t *ctx, isc_uint32_t addrtype,
|
|||
pkt.result = 0;
|
||||
pkt.recvlength = LWRES_RECVLENGTH;
|
||||
|
||||
ret = lwres_gnbarequest_render(ctx, &request, &pkt, &b);
|
||||
again:
|
||||
ret = lwres_gnbarequest_render(ctx, &request, &pkt, &b_out);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
free_b = 1;
|
||||
|
||||
ret = lwres_context_sendrecv(ctx, b.base, b.length, buffer,
|
||||
ret = lwres_context_sendrecv(ctx, b_out.base, b_out.length, buffer,
|
||||
LWRES_RECVLENGTH);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
CTXFREE(b.base, b.length);
|
||||
free_b = 0;
|
||||
|
||||
lwres_buffer_init(&b, buffer, ret);
|
||||
lwres_buffer_init(&b_in, buffer, ret);
|
||||
|
||||
/*
|
||||
* Parse the packet header.
|
||||
*/
|
||||
ret = lwres_lwpacket_parseheader(&b, &pkt);
|
||||
ret = lwres_lwpacket_parseheader(&b_in, &pkt);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
|
||||
/*
|
||||
* Sanity check.
|
||||
*/
|
||||
if (pkt.serial != serial) {
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
if (pkt.opcode != LWRES_OPCODE_GETNAMEBYADDR) {
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
if (pkt.serial != serial)
|
||||
goto again;
|
||||
if (pkt.opcode != LWRES_OPCODE_GETNAMEBYADDR)
|
||||
goto again;
|
||||
|
||||
/*
|
||||
* Free what we've transmitted
|
||||
*/
|
||||
CTXFREE(b_out.base, b_out.length);
|
||||
b_out.base = NULL;
|
||||
b_out.length = 0;
|
||||
|
||||
/*
|
||||
* Parse the response.
|
||||
*/
|
||||
ret = lwres_gnbaresponse_parse(ctx, &b, &pkt, &response);
|
||||
ret = lwres_gnbaresponse_parse(ctx, &b_in, &pkt, &response);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
response->base = buffer;
|
||||
|
|
@ -278,11 +278,11 @@ lwres_getnamebyaddr(lwres_context_t *ctx, isc_uint32_t addrtype,
|
|||
buffer = NULL; /* don't free this below */
|
||||
|
||||
*structp = response;
|
||||
return (0);
|
||||
return (LWRES_R_SUCCESS);
|
||||
|
||||
out:
|
||||
if (free_b != 0)
|
||||
CTXFREE(b.base, b.length);
|
||||
if (b_out.base != NULL)
|
||||
CTXFREE(b_out.base, b_out.length);
|
||||
if (buffer != NULL)
|
||||
CTXFREE(buffer, LWRES_RECVLENGTH);
|
||||
if (response != NULL)
|
||||
|
|
|
|||
Loading…
Reference in a new issue