mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-18 06:30:05 +00:00
* nis/nis_callback.c (__nis_create_callback): Use asprinf instead
of snprintf+strdup. Handle OOM. * nis/nis_callback.c (__nis_create_callback): Allocate cb and cb->serv together. Remove now obsolete free calls. (__nis_destroy_callback): Remove now obsolete free call.
This commit is contained in:
parent
6e2a782528
commit
f90de83143
@ -1,3 +1,11 @@
|
|||||||
|
2006-05-18 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
* nis/nis_callback.c (__nis_create_callback): Use asprinf instead
|
||||||
|
of snprintf+strdup. Handle OOM.
|
||||||
|
* nis/nis_callback.c (__nis_create_callback): Allocate cb and
|
||||||
|
cb->serv together. Remove now obsolete free calls.
|
||||||
|
(__nis_destroy_callback): Remove now obsolete free call.
|
||||||
|
|
||||||
2006-05-18 David Woodhouse <dwmw2@infradead.org>
|
2006-05-18 David Woodhouse <dwmw2@infradead.org>
|
||||||
|
|
||||||
* sysdeps/posix/getaddrinfo.c: Add unique labels to the default
|
* sysdeps/posix/getaddrinfo.c: Add unique labels to the default
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1997, 1998, 1999, 2000, 2005 Free Software Foundation, Inc.
|
/* Copyright (C) 1997,1998,1999,2000,2005,2006 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1997.
|
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1997.
|
||||||
|
|
||||||
@ -275,15 +275,13 @@ __nis_create_callback (int (*callback) (const_nis_name, const nis_object *,
|
|||||||
int sock = RPC_ANYSOCK;
|
int sock = RPC_ANYSOCK;
|
||||||
struct sockaddr_in sin;
|
struct sockaddr_in sin;
|
||||||
socklen_t len = sizeof (struct sockaddr_in);
|
socklen_t len = sizeof (struct sockaddr_in);
|
||||||
char addr[NIS_MAXNAMELEN + 1];
|
|
||||||
unsigned short port;
|
unsigned short port;
|
||||||
|
|
||||||
cb = (struct nis_cb *) calloc (1, sizeof (struct nis_cb));
|
cb = (struct nis_cb *) calloc (1,
|
||||||
|
sizeof (struct nis_cb) + sizeof (nis_server));
|
||||||
if (__builtin_expect (cb == NULL, 0))
|
if (__builtin_expect (cb == NULL, 0))
|
||||||
goto failed;
|
goto failed;
|
||||||
cb->serv = (nis_server *) calloc (1, sizeof (nis_server));
|
cb->serv = (nis_server *) (cb + 1);
|
||||||
if (__builtin_expect (cb->serv == NULL, 0))
|
|
||||||
goto failed;
|
|
||||||
cb->serv->name = strdup (nis_local_principal ());
|
cb->serv->name = strdup (nis_local_principal ());
|
||||||
if (__builtin_expect (cb->serv->name == NULL, 0))
|
if (__builtin_expect (cb->serv->name == NULL, 0))
|
||||||
goto failed;
|
goto failed;
|
||||||
@ -334,7 +332,6 @@ __nis_create_callback (int (*callback) (const_nis_name, const nis_object *,
|
|||||||
xprt_unregister (cb->xprt);
|
xprt_unregister (cb->xprt);
|
||||||
svc_destroy (cb->xprt);
|
svc_destroy (cb->xprt);
|
||||||
xdr_free ((xdrproc_t) _xdr_nis_server, (char *) cb->serv);
|
xdr_free ((xdrproc_t) _xdr_nis_server, (char *) cb->serv);
|
||||||
free (cb->serv);
|
|
||||||
free (cb);
|
free (cb);
|
||||||
syslog (LOG_ERR, "NIS+: failed to register callback dispatcher");
|
syslog (LOG_ERR, "NIS+: failed to register callback dispatcher");
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -345,16 +342,17 @@ __nis_create_callback (int (*callback) (const_nis_name, const nis_object *,
|
|||||||
xprt_unregister (cb->xprt);
|
xprt_unregister (cb->xprt);
|
||||||
svc_destroy (cb->xprt);
|
svc_destroy (cb->xprt);
|
||||||
xdr_free ((xdrproc_t) _xdr_nis_server, (char *) cb->serv);
|
xdr_free ((xdrproc_t) _xdr_nis_server, (char *) cb->serv);
|
||||||
free (cb->serv);
|
|
||||||
free (cb);
|
free (cb);
|
||||||
syslog (LOG_ERR, "NIS+: failed to read local socket info");
|
syslog (LOG_ERR, "NIS+: failed to read local socket info");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
port = ntohs (sin.sin_port);
|
port = ntohs (sin.sin_port);
|
||||||
get_myaddress (&sin);
|
get_myaddress (&sin);
|
||||||
snprintf (addr, sizeof (addr), "%s.%d.%d", inet_ntoa (sin.sin_addr),
|
|
||||||
(port & 0xFF00) >> 8, port & 0x00FF);
|
if (asprintf (&cb->serv->ep.ep_val[0].uaddr, "%s.%d.%d",
|
||||||
cb->serv->ep.ep_val[0].uaddr = strdup (addr);
|
inet_ntoa (sin.sin_addr), (port & 0xFF00) >> 8, port & 0x00FF)
|
||||||
|
< 0)
|
||||||
|
goto failed;
|
||||||
|
|
||||||
return cb;
|
return cb;
|
||||||
|
|
||||||
@ -362,10 +360,7 @@ __nis_create_callback (int (*callback) (const_nis_name, const nis_object *,
|
|||||||
if (cb)
|
if (cb)
|
||||||
{
|
{
|
||||||
if (cb->serv)
|
if (cb->serv)
|
||||||
{
|
xdr_free ((xdrproc_t) _xdr_nis_server, (char *) cb->serv);
|
||||||
xdr_free ((xdrproc_t) _xdr_nis_server, (char *) cb->serv);
|
|
||||||
free (cb->serv);
|
|
||||||
}
|
|
||||||
free (cb);
|
free (cb);
|
||||||
}
|
}
|
||||||
syslog (LOG_ERR, "NIS+: out of memory allocating callback");
|
syslog (LOG_ERR, "NIS+: out of memory allocating callback");
|
||||||
@ -379,7 +374,6 @@ __nis_destroy_callback (struct nis_cb *cb)
|
|||||||
svc_destroy (cb->xprt);
|
svc_destroy (cb->xprt);
|
||||||
close (cb->sock);
|
close (cb->sock);
|
||||||
xdr_free ((xdrproc_t) _xdr_nis_server, (char *) cb->serv);
|
xdr_free ((xdrproc_t) _xdr_nis_server, (char *) cb->serv);
|
||||||
free (cb->serv);
|
|
||||||
free (cb);
|
free (cb);
|
||||||
|
|
||||||
return NIS_SUCCESS;
|
return NIS_SUCCESS;
|
||||||
|
Loading…
Reference in New Issue
Block a user