mirror of
https://git.rtems.org/rtems-libbsd/
synced 2025-10-14 09:45:42 +08:00
Update to FreeBSD head 2018-04-01
Git mirror commit 8dfb1ccc26d1cea7e2529303003ff61f9f1784c4. Update #3472.
This commit is contained in:
@@ -409,6 +409,8 @@ int __sys_futimens(int fd, const struct timespec *times) __hidden;
|
||||
int __sys_utimensat(int fd, const char *path,
|
||||
const struct timespec *times, int flag) __hidden;
|
||||
|
||||
__size_t __arc4_sysctl(unsigned char *, __size_t);
|
||||
|
||||
/* execve() with PATH processing to implement posix_spawnp() */
|
||||
int _execvpe(const char *, char * const *, char * const *);
|
||||
|
||||
|
@@ -126,26 +126,36 @@ getnameinfo(const struct sockaddr *sa, socklen_t salen,
|
||||
afd = find_afd(sa->sa_family);
|
||||
if (afd == NULL)
|
||||
return (EAI_FAMILY);
|
||||
/*
|
||||
* getnameinfo() accepts an salen of sizeof(struct sockaddr_storage)
|
||||
* at maximum as shown in RFC 4038 Sec.6.2.3.
|
||||
*/
|
||||
if (salen > sizeof(struct sockaddr_storage))
|
||||
return (EAI_FAMILY);
|
||||
|
||||
switch (sa->sa_family) {
|
||||
case PF_LOCAL:
|
||||
/*
|
||||
* PF_LOCAL uses variable sa->sa_len depending on the
|
||||
* PF_LOCAL uses variable salen depending on the
|
||||
* content length of sun_path. Require 1 byte in
|
||||
* sun_path at least.
|
||||
*/
|
||||
if (salen > afd->a_socklen ||
|
||||
salen <= afd->a_socklen -
|
||||
if (salen <= afd->a_socklen -
|
||||
sizeofmember(struct sockaddr_un, sun_path))
|
||||
return (EAI_FAIL);
|
||||
return (EAI_FAMILY);
|
||||
else if (salen > afd->a_socklen)
|
||||
salen = afd->a_socklen;
|
||||
break;
|
||||
case PF_LINK:
|
||||
if (salen <= afd->a_socklen -
|
||||
sizeofmember(struct sockaddr_dl, sdl_data))
|
||||
return (EAI_FAIL);
|
||||
return (EAI_FAMILY);
|
||||
break;
|
||||
default:
|
||||
if (salen != afd->a_socklen)
|
||||
return (EAI_FAIL);
|
||||
if (salen < afd->a_socklen)
|
||||
return (EAI_FAMILY);
|
||||
else
|
||||
salen = afd->a_socklen;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -519,7 +529,7 @@ getnameinfo_un(const struct afd *afd,
|
||||
if (serv != NULL && servlen > 0)
|
||||
*serv = '\0';
|
||||
if (host != NULL && hostlen > 0) {
|
||||
pathlen = sa->sa_len - afd->a_off;
|
||||
pathlen = salen - afd->a_off;
|
||||
|
||||
if (pathlen + 1 > hostlen) {
|
||||
*host = '\0';
|
||||
|
@@ -70,7 +70,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include "rpc_com.h"
|
||||
#include "mt_misc.h"
|
||||
|
||||
#define su_data(xprt) ((struct svc_dg_data *)(xprt->xp_p2))
|
||||
#define su_data(xprt) ((struct svc_dg_data *)((xprt)->xp_p2))
|
||||
#define rpc_buffer(xprt) ((xprt)->xp_p1)
|
||||
|
||||
#ifndef MAX
|
||||
|
@@ -45,6 +45,8 @@
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define CASPER_NO_UNIQ 0x00000001
|
||||
|
||||
#ifndef _NVLIST_T_DECLARED
|
||||
#define _NVLIST_T_DECLARED
|
||||
struct nvlist;
|
||||
@@ -62,12 +64,36 @@ typedef struct cap_channel cap_channel_t;
|
||||
#else
|
||||
struct cap_channel {
|
||||
int cch_fd;
|
||||
int cch_flags;
|
||||
};
|
||||
typedef struct cap_channel cap_channel_t;
|
||||
#define CASPER_SUPPORT (0)
|
||||
#endif /* ! WITH_CASPER */
|
||||
#endif /* ! _CAP_CHANNEL_T_DECLARED */
|
||||
|
||||
#ifdef WITH_CASPER
|
||||
int cap_channel_flags(const cap_channel_t *chan);
|
||||
#else
|
||||
static inline int
|
||||
cap_channel_flags(const cap_channel_t *chan)
|
||||
{
|
||||
|
||||
return (chan->cch_flags);
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline int
|
||||
channel_nvlist_flags(const cap_channel_t *chan)
|
||||
{
|
||||
int flags;
|
||||
|
||||
flags = 0;
|
||||
if ((cap_channel_flags(chan) & CASPER_NO_UNIQ) != 0)
|
||||
flags |= NV_FLAG_NO_UNIQUE;
|
||||
|
||||
return (flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* The functions opens unrestricted communication channel to Casper.
|
||||
*/
|
||||
@@ -103,16 +129,17 @@ int cap_service_limit(const cap_channel_t *chan,
|
||||
* The function creates cap_channel_t based on the given socket.
|
||||
*/
|
||||
#ifdef WITH_CASPER
|
||||
cap_channel_t *cap_wrap(int sock);
|
||||
cap_channel_t *cap_wrap(int sock, int flags);
|
||||
#else
|
||||
static inline cap_channel_t *
|
||||
cap_wrap(int sock)
|
||||
cap_wrap(int sock, int flags)
|
||||
{
|
||||
cap_channel_t *chan;
|
||||
|
||||
chan = cap_init();
|
||||
if (chan != NULL) {
|
||||
chan->cch_fd = sock;
|
||||
chan->cch_flags = flags;
|
||||
}
|
||||
return (chan);
|
||||
}
|
||||
@@ -122,7 +149,7 @@ cap_wrap(int sock)
|
||||
* The function returns communication socket and frees cap_channel_t.
|
||||
*/
|
||||
#ifdef WITH_CASPER
|
||||
int cap_unwrap(cap_channel_t *chan);
|
||||
int cap_unwrap(cap_channel_t *chan, int *flags);
|
||||
#else
|
||||
static inline int
|
||||
cap_unwrap(cap_channel_t *chan)
|
||||
@@ -160,6 +187,7 @@ cap_clone(const cap_channel_t *chan)
|
||||
newchan = NULL;
|
||||
}
|
||||
}
|
||||
newchan->cch_flags = chan->cch_flags;
|
||||
|
||||
return (newchan);
|
||||
}
|
||||
@@ -212,7 +240,7 @@ static inline int
|
||||
cap_limit_get(const cap_channel_t *chan __unused, nvlist_t **limitsp)
|
||||
{
|
||||
|
||||
*limitsp = nvlist_create(0);
|
||||
*limitsp = nvlist_create(channel_nvlist_flags(chan));
|
||||
return (0);
|
||||
}
|
||||
#endif
|
||||
@@ -230,9 +258,9 @@ int cap_send_nvlist(const cap_channel_t *chan, const nvlist_t *nvl);
|
||||
* Function receives nvlist over the given capability.
|
||||
*/
|
||||
#ifdef WITH_CASPER
|
||||
nvlist_t *cap_recv_nvlist(const cap_channel_t *chan, int flags);
|
||||
nvlist_t *cap_recv_nvlist(const cap_channel_t *chan);
|
||||
#else
|
||||
#define cap_recv_nvlist(chan, flags) (nvlist_create(flags))
|
||||
#define cap_recv_nvlist(chan) (nvlist_create(chan->cch_flags))
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -240,14 +268,14 @@ nvlist_t *cap_recv_nvlist(const cap_channel_t *chan, int flags);
|
||||
* response over the given capability.
|
||||
*/
|
||||
#ifdef WITH_CASPER
|
||||
nvlist_t *cap_xfer_nvlist(const cap_channel_t *chan, nvlist_t *nvl, int flags);
|
||||
nvlist_t *cap_xfer_nvlist(const cap_channel_t *chan, nvlist_t *nvl);
|
||||
#else
|
||||
static inline nvlist_t *
|
||||
cap_xfer_nvlist(const cap_channel_t *chan __unused, nvlist_t *nvl, int flags)
|
||||
cap_xfer_nvlist(const cap_channel_t *chan, nvlist_t *nvl)
|
||||
{
|
||||
|
||||
nvlist_destroy(nvl);
|
||||
return (nvlist_create(flags));
|
||||
return (nvlist_create(channel_nvlist_flags(chan)));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
Reference in New Issue
Block a user