From 4fc0a2791eec3d9fc45dadc7f4677fccf24d25f6 Mon Sep 17 00:00:00 2001 From: Mariusz Zaborski Date: Sat, 17 Feb 2018 12:22:29 +0000 Subject: [PATCH] Introduce channel flags in libcasper. Instead of passing flags (which describe a type of nvlist) every send/recv we remember them in channel. It's enough for use to extract them only during unwrap. This simplify use of Casper. Reviewed by: bruffer@, bcr@ (both man page) Differential Revision: https://reviews.freebsd.org/D14196 (man page) --- lib/libcasper/libcasper/Makefile | 2 +- lib/libcasper/libcasper/libcasper.3 | 30 +++++----- lib/libcasper/libcasper/libcasper.c | 57 +++++++++++++------ lib/libcasper/libcasper/libcasper.h | 46 ++++++++++++--- lib/libcasper/libcasper/libcasper_impl.h | 1 + lib/libcasper/libcasper/libcasper_service.c | 2 + lib/libcasper/libcasper/libcasper_service.h | 5 +- lib/libcasper/libcasper/service.c | 29 ++++++++-- lib/libcasper/services/cap_dns/Makefile | 2 +- lib/libcasper/services/cap_dns/cap_dns.c | 8 +-- lib/libcasper/services/cap_grp/Makefile | 2 +- lib/libcasper/services/cap_grp/cap_grp.c | 8 +-- lib/libcasper/services/cap_pwd/Makefile | 2 +- lib/libcasper/services/cap_pwd/cap_pwd.c | 6 +- lib/libcasper/services/cap_random/Makefile | 2 +- .../services/cap_random/cap_random.c | 2 +- lib/libcasper/services/cap_sysctl/Makefile | 2 +- .../services/cap_sysctl/cap_sysctl.c | 2 +- lib/libcasper/services/cap_syslog/Makefile | 2 +- .../services/cap_syslog/cap_syslog.c | 8 +-- 20 files changed, 143 insertions(+), 75 deletions(-) diff --git a/lib/libcasper/libcasper/Makefile b/lib/libcasper/libcasper/Makefile index 65d8271da788..7df70ab5d668 100644 --- a/lib/libcasper/libcasper/Makefile +++ b/lib/libcasper/libcasper/Makefile @@ -8,7 +8,7 @@ PACKAGE=casper .if ${MK_CASPER} != "no" SHLIB= casper -SHLIB_MAJOR= 0 +SHLIB_MAJOR= 1 SRCS= libcasper.c SRCS+= libcasper_impl.c diff --git a/lib/libcasper/libcasper/libcasper.3 b/lib/libcasper/libcasper/libcasper.3 index 9b99a7cc2a71..d26fa55468d7 100644 --- a/lib/libcasper/libcasper/libcasper.3 +++ b/lib/libcasper/libcasper/libcasper.3 @@ -27,7 +27,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 5, 2018 +.Dd February 17, 2018 .Dt LIBCASPER 3 .Os .Sh NAME @@ -53,9 +53,9 @@ .Ft "cap_channel_t *" .Fn cap_init "void" .Ft "cap_channel_t *" -.Fn cap_wrap "int sock" +.Fn cap_wrap "int sock" "int flags" .Ft "int" -.Fn cap_unwrap "cap_channel_t *chan" +.Fn cap_unwrap "cap_channel_t *chan" "int *flags" .Ft "int" .Fn cap_sock "const cap_channel_t *chan" .Ft "cap_channel_t *" @@ -69,9 +69,9 @@ .Ft "int" .Fn cap_send_nvlist "const cap_channel_t *chan" "const nvlist_t *nvl" .Ft "nvlist_t *" -.Fn cap_recv_nvlist "const cap_channel_t *chan" "int flags" +.Fn cap_recv_nvlist "const cap_channel_t *chan" .Ft "nvlist_t *" -.Fn cap_xfer_nvlist "const cap_channel_t *chan" "nvlist_t *nvl" "int flags" +.Fn cap_xfer_nvlist "const cap_channel_t *chan" "nvlist_t *nvl" .Ft "cap_channel_t *" .Fn cap_service_open "const cap_channel_t *chan" "const char *name" .Sh DESCRIPTION @@ -105,6 +105,14 @@ or send over domain socket as a regular file descriptor and has to be represented as .Vt cap_channel_t again. +The +.Fa flags +argument defines the channel behavior. +The supported flags are: +.Bl -ohang -offset indent +.It CASPER_NO_UNIQ +The communication between process and casper uses no unique version of nvlist. +.El .Pp The .Fn cap_unwrap @@ -164,23 +172,11 @@ Most services should provide higher level API. The .Fn cap_recv_nvlist function receives the given nvlist over the given capability. -The -.Fa flags -argument defines what type the top nvlist is expected to be. -If the nvlist flags do not match the flags passed to -.Fn cap_recv_nvlist , -the nvlist will not be returned. .Pp The .Fn cap_xfer_nvlist function sends the given nvlist, destroys it and receives new nvlist in response over the given capability. -The -.Fa flags -argument defines what type the top nvlist is expected to be. -If the nvlist flags do not match the flags passed to -.Fn cap_xfer_nvlist , -the nvlist will not be returned. It does not matter if the function succeeds or fails, the nvlist given for sending will always be destroyed once the function returns. .Pp diff --git a/lib/libcasper/libcasper/libcasper.c b/lib/libcasper/libcasper/libcasper.c index 7f5ad453cd68..8640015d0e36 100644 --- a/lib/libcasper/libcasper/libcasper.c +++ b/lib/libcasper/libcasper/libcasper.c @@ -48,6 +48,8 @@ __FBSDID("$FreeBSD$"); #include "libcasper.h" #include "libcasper_impl.h" +#define CASPER_VALID_FLAGS (CASPER_NO_UNIQ) + /* * Structure describing communication channel between two separated processes. */ @@ -62,6 +64,8 @@ struct cap_channel { int cch_sock; /* Process descriptor for casper. */ int cch_pd; + /* Flags to communicate with casper. */ + int cch_flags; }; static bool @@ -74,6 +78,13 @@ cap_add_pd(cap_channel_t *chan, int pd) return (true); } +int +cap_channel_flags(const cap_channel_t *chan) +{ + + return (chan->cch_flags); +} + cap_channel_t * cap_init(void) { @@ -96,7 +107,7 @@ cap_init(void) } else if (pid > 0) { /* Child. */ close(sock[1]); - chan = cap_wrap(sock[0]); + chan = cap_wrap(sock[0], 0); if (chan == NULL) { serrno = errno; close(sock[0]); @@ -118,17 +129,21 @@ cap_init(void) } cap_channel_t * -cap_wrap(int sock) +cap_wrap(int sock, int flags) { cap_channel_t *chan; if (!fd_is_valid(sock)) return (NULL); + if ((flags & CASPER_VALID_FLAGS) != flags) + return (NULL); + chan = malloc(sizeof(*chan)); if (chan != NULL) { chan->cch_sock = sock; chan->cch_pd = -1; + chan->cch_flags = flags; chan->cch_magic = CAP_CHANNEL_MAGIC; } @@ -136,7 +151,7 @@ cap_wrap(int sock) } int -cap_unwrap(cap_channel_t *chan) +cap_unwrap(cap_channel_t *chan, int *flags) { int sock; @@ -146,6 +161,8 @@ cap_unwrap(cap_channel_t *chan) sock = chan->cch_sock; if (chan->cch_pd != -1) close(chan->cch_pd); + if (flags != NULL) + *flags = chan->cch_flags; chan->cch_magic = 0; free(chan); @@ -162,9 +179,9 @@ cap_clone(const cap_channel_t *chan) assert(chan != NULL); assert(chan->cch_magic == CAP_CHANNEL_MAGIC); - nvl = nvlist_create(0); + nvl = nvlist_create(channel_nvlist_flags(chan)); nvlist_add_string(nvl, "cmd", "clone"); - nvl = cap_xfer_nvlist(chan, nvl, 0); + nvl = cap_xfer_nvlist(chan, nvl); if (nvl == NULL) return (NULL); if (nvlist_get_number(nvl, "error") != 0) { @@ -174,7 +191,7 @@ cap_clone(const cap_channel_t *chan) } newsock = nvlist_take_descriptor(nvl, "sock"); nvlist_destroy(nvl); - newchan = cap_wrap(newsock); + newchan = cap_wrap(newsock, chan->cch_flags); if (newchan == NULL) { int serrno; @@ -216,10 +233,10 @@ cap_limit_set(const cap_channel_t *chan, nvlist_t *limits) nvlist_t *nvlmsg; int error; - nvlmsg = nvlist_create(0); + nvlmsg = nvlist_create(channel_nvlist_flags(chan)); nvlist_add_string(nvlmsg, "cmd", "limit_set"); nvlist_add_nvlist(nvlmsg, "limits", limits); - nvlmsg = cap_xfer_nvlist(chan, nvlmsg, 0); + nvlmsg = cap_xfer_nvlist(chan, nvlmsg); if (nvlmsg == NULL) { nvlist_destroy(limits); return (-1); @@ -240,9 +257,9 @@ cap_limit_get(const cap_channel_t *chan, nvlist_t **limitsp) nvlist_t *nvlmsg; int error; - nvlmsg = nvlist_create(0); + nvlmsg = nvlist_create(channel_nvlist_flags(chan)); nvlist_add_string(nvlmsg, "cmd", "limit_get"); - nvlmsg = cap_xfer_nvlist(chan, nvlmsg, 0); + nvlmsg = cap_xfer_nvlist(chan, nvlmsg); if (nvlmsg == NULL) return (-1); error = (int)nvlist_get_number(nvlmsg, "error"); @@ -270,23 +287,25 @@ cap_send_nvlist(const cap_channel_t *chan, const nvlist_t *nvl) } nvlist_t * -cap_recv_nvlist(const cap_channel_t *chan, int flags) +cap_recv_nvlist(const cap_channel_t *chan) { assert(chan != NULL); assert(chan->cch_magic == CAP_CHANNEL_MAGIC); - return (nvlist_recv(chan->cch_sock, flags)); + return (nvlist_recv(chan->cch_sock, + channel_nvlist_flags(chan))); } nvlist_t * -cap_xfer_nvlist(const cap_channel_t *chan, nvlist_t *nvl, int flags) +cap_xfer_nvlist(const cap_channel_t *chan, nvlist_t *nvl) { assert(chan != NULL); assert(chan->cch_magic == CAP_CHANNEL_MAGIC); - return (nvlist_xfer(chan->cch_sock, nvl, flags)); + return (nvlist_xfer(chan->cch_sock, nvl, + channel_nvlist_flags(chan))); } cap_channel_t * @@ -295,13 +314,14 @@ cap_service_open(const cap_channel_t *chan, const char *name) cap_channel_t *newchan; nvlist_t *nvl; int sock, error; + int flags; sock = -1; - nvl = nvlist_create(0); + nvl = nvlist_create(channel_nvlist_flags(chan)); nvlist_add_string(nvl, "cmd", "open"); nvlist_add_string(nvl, "service", name); - nvl = cap_xfer_nvlist(chan, nvl, 0); + nvl = cap_xfer_nvlist(chan, nvl); if (nvl == NULL) return (NULL); error = (int)nvlist_get_number(nvl, "error"); @@ -311,10 +331,11 @@ cap_service_open(const cap_channel_t *chan, const char *name) return (NULL); } sock = nvlist_take_descriptor(nvl, "chanfd"); + flags = nvlist_take_number(nvl, "chanflags"); assert(sock >= 0); nvlist_destroy(nvl); nvl = NULL; - newchan = cap_wrap(sock); + newchan = cap_wrap(sock, flags); if (newchan == NULL) goto fail; return (newchan); @@ -332,7 +353,7 @@ cap_service_limit(const cap_channel_t *chan, const char * const *names, nvlist_t *limits; unsigned int i; - limits = nvlist_create(0); + limits = nvlist_create(channel_nvlist_flags(chan)); for (i = 0; i < nnames; i++) nvlist_add_null(limits, names[i]); return (cap_limit_set(chan, limits)); diff --git a/lib/libcasper/libcasper/libcasper.h b/lib/libcasper/libcasper/libcasper.h index 6e1bfdbafff0..81d65f5618ea 100644 --- a/lib/libcasper/libcasper/libcasper.h +++ b/lib/libcasper/libcasper/libcasper.h @@ -45,6 +45,8 @@ #include #include +#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 diff --git a/lib/libcasper/libcasper/libcasper_impl.h b/lib/libcasper/libcasper/libcasper_impl.h index 4ccf55730b0b..11e43f083977 100644 --- a/lib/libcasper/libcasper/libcasper_impl.h +++ b/lib/libcasper/libcasper/libcasper_impl.h @@ -54,6 +54,7 @@ void service_message(struct service *service, struct service_connection *sconn); void service_start(struct service *service, int sock, int procfd); const char *service_name(struct service *service); +int service_get_channel_flags(struct service *service); /* Private service connection functions. */ struct service_connection *service_connection_add(struct service *service, diff --git a/lib/libcasper/libcasper/libcasper_service.c b/lib/libcasper/libcasper/libcasper_service.c index 51a7ffa2f784..1291e58bac17 100644 --- a/lib/libcasper/libcasper/libcasper_service.c +++ b/lib/libcasper/libcasper/libcasper_service.c @@ -201,6 +201,8 @@ casper_command(const char *cmd, const nvlist_t *limits, nvlist_t *nvlin, nvlist_destroy(nvl); nvlist_move_descriptor(nvlout, "chanfd", chanfd); + nvlist_add_number(nvlout, "chanflags", + service_get_channel_flags(casserv->cs_service)); return (0); } diff --git a/lib/libcasper/libcasper/libcasper_service.h b/lib/libcasper/libcasper/libcasper_service.h index c221664e3dae..c0ebfa4571a5 100644 --- a/lib/libcasper/libcasper/libcasper_service.h +++ b/lib/libcasper/libcasper/libcasper_service.h @@ -42,8 +42,9 @@ struct nvlist; typedef struct nvlist nvlist_t; #endif -#define CASPER_SERVICE_STDIO 0x00000001 -#define CASPER_SERVICE_FD 0x00000002 +#define CASPER_SERVICE_STDIO 0x00000001 +#define CASPER_SERVICE_FD 0x00000002 +#define CASPER_SERVICE_NO_UNIQ_LIMITS 0x00000004 typedef int service_limit_func_t(const nvlist_t *, const nvlist_t *); typedef int service_command_func_t(const char *cmd, const nvlist_t *, diff --git a/lib/libcasper/libcasper/service.c b/lib/libcasper/libcasper/service.c index df070e754212..0830a4ba7bc4 100644 --- a/lib/libcasper/libcasper/service.c +++ b/lib/libcasper/libcasper/service.c @@ -136,7 +136,8 @@ service_connection_add(struct service *service, int sock, sconn = malloc(sizeof(*sconn)); if (sconn == NULL) return (NULL); - sconn->sc_chan = cap_wrap(sock); + sconn->sc_chan = cap_wrap(sock, + service_get_channel_flags(service)); if (sconn->sc_chan == NULL) { serrno = errno; free(sconn); @@ -149,7 +150,7 @@ service_connection_add(struct service *service, int sock, sconn->sc_limits = nvlist_clone(limits); if (sconn->sc_limits == NULL) { serrno = errno; - (void)cap_unwrap(sconn->sc_chan); + (void)cap_unwrap(sconn->sc_chan, NULL); free(sconn); errno = serrno; return (NULL); @@ -266,16 +267,20 @@ service_message(struct service *service, struct service_connection *sconn) { nvlist_t *nvlin, *nvlout; const char *cmd; - int error; + int error, flags; - nvlin = cap_recv_nvlist(service_connection_get_chan(sconn), 0); + flags = 0; + if ((service->s_flags & CASPER_SERVICE_NO_UNIQ_LIMITS) != 0) + flags = NV_FLAG_NO_UNIQUE; + + nvlin = cap_recv_nvlist(service_connection_get_chan(sconn)); if (nvlin == NULL) { service_connection_remove(service, sconn); return; } error = EDOOFUS; - nvlout = nvlist_create(0); + nvlout = nvlist_create(flags); cmd = nvlist_get_string(nvlin, "cmd"); if (strcmp(cmd, "limit_set") == 0) { @@ -343,6 +348,20 @@ service_name(struct service *service) return (service->s_name); } +int +service_get_channel_flags(struct service *service) +{ + int flags; + + assert(service->s_magic == SERVICE_MAGIC); + flags = 0; + + if ((service->s_flags & CASPER_SERVICE_NO_UNIQ_LIMITS) != 0) + flags |= CASPER_NO_UNIQ; + + return (flags); +} + static void stdnull(void) { diff --git a/lib/libcasper/services/cap_dns/Makefile b/lib/libcasper/services/cap_dns/Makefile index 2d0bc95f2a8c..eebe1d000c9c 100644 --- a/lib/libcasper/services/cap_dns/Makefile +++ b/lib/libcasper/services/cap_dns/Makefile @@ -6,7 +6,7 @@ SHLIBDIR?= /lib/casper PACKAGE=libcasper -SHLIB_MAJOR= 0 +SHLIB_MAJOR= 1 INCSDIR?= ${INCLUDEDIR}/casper .if ${MK_CASPER} != "no" diff --git a/lib/libcasper/services/cap_dns/cap_dns.c b/lib/libcasper/services/cap_dns/cap_dns.c index ce10c9f13329..6f8de34713d8 100644 --- a/lib/libcasper/services/cap_dns/cap_dns.c +++ b/lib/libcasper/services/cap_dns/cap_dns.c @@ -139,7 +139,7 @@ cap_gethostbyname2(cap_channel_t *chan, const char *name, int type) nvlist_add_string(nvl, "cmd", "gethostbyname"); nvlist_add_number(nvl, "family", (uint64_t)type); nvlist_add_string(nvl, "name", name); - nvl = cap_xfer_nvlist(chan, nvl, 0); + nvl = cap_xfer_nvlist(chan, nvl); if (nvl == NULL) { h_errno = NO_RECOVERY; return (NULL); @@ -166,7 +166,7 @@ cap_gethostbyaddr(cap_channel_t *chan, const void *addr, socklen_t len, nvlist_add_string(nvl, "cmd", "gethostbyaddr"); nvlist_add_binary(nvl, "addr", addr, (size_t)len); nvlist_add_number(nvl, "family", (uint64_t)type); - nvl = cap_xfer_nvlist(chan, nvl, 0); + nvl = cap_xfer_nvlist(chan, nvl); if (nvl == NULL) { h_errno = NO_RECOVERY; return (NULL); @@ -242,7 +242,7 @@ cap_getaddrinfo(cap_channel_t *chan, const char *hostname, const char *servname, nvlist_add_number(nvl, "hints.ai_protocol", (uint64_t)hints->ai_protocol); } - nvl = cap_xfer_nvlist(chan, nvl, 0); + nvl = cap_xfer_nvlist(chan, nvl); if (nvl == NULL) return (EAI_MEMORY); if (nvlist_get_number(nvl, "error") != 0) { @@ -292,7 +292,7 @@ cap_getnameinfo(cap_channel_t *chan, const struct sockaddr *sa, socklen_t salen, nvlist_add_number(nvl, "servlen", (uint64_t)servlen); nvlist_add_binary(nvl, "sa", sa, (size_t)salen); nvlist_add_number(nvl, "flags", (uint64_t)flags); - nvl = cap_xfer_nvlist(chan, nvl, 0); + nvl = cap_xfer_nvlist(chan, nvl); if (nvl == NULL) return (EAI_MEMORY); if (nvlist_get_number(nvl, "error") != 0) { diff --git a/lib/libcasper/services/cap_grp/Makefile b/lib/libcasper/services/cap_grp/Makefile index 6fd96aae5430..f44d880dee45 100644 --- a/lib/libcasper/services/cap_grp/Makefile +++ b/lib/libcasper/services/cap_grp/Makefile @@ -6,7 +6,7 @@ SHLIBDIR?= /lib/casper PACKAGE=libcasper -SHLIB_MAJOR= 0 +SHLIB_MAJOR= 1 INCSDIR?= ${INCLUDEDIR}/casper .if ${MK_CASPER} != "no" diff --git a/lib/libcasper/services/cap_grp/cap_grp.c b/lib/libcasper/services/cap_grp/cap_grp.c index af9cb2766f11..56f16afbfd50 100644 --- a/lib/libcasper/services/cap_grp/cap_grp.c +++ b/lib/libcasper/services/cap_grp/cap_grp.c @@ -197,7 +197,7 @@ cap_getgrcommon_r(cap_channel_t *chan, const char *cmd, const char *name, } else { abort(); } - nvl = cap_xfer_nvlist(chan, nvl, 0); + nvl = cap_xfer_nvlist(chan, nvl); if (nvl == NULL) { assert(errno != 0); *result = NULL; @@ -321,7 +321,7 @@ cap_setgroupent(cap_channel_t *chan, int stayopen) nvl = nvlist_create(0); nvlist_add_string(nvl, "cmd", "setgroupent"); nvlist_add_bool(nvl, "stayopen", stayopen != 0); - nvl = cap_xfer_nvlist(chan, nvl, 0); + nvl = cap_xfer_nvlist(chan, nvl); if (nvl == NULL) return (0); if (nvlist_get_number(nvl, "error") != 0) { @@ -341,7 +341,7 @@ cap_setgrent(cap_channel_t *chan) nvl = nvlist_create(0); nvlist_add_string(nvl, "cmd", "setgrent"); - nvl = cap_xfer_nvlist(chan, nvl, 0); + nvl = cap_xfer_nvlist(chan, nvl); if (nvl == NULL) return (0); if (nvlist_get_number(nvl, "error") != 0) { @@ -362,7 +362,7 @@ cap_endgrent(cap_channel_t *chan) nvl = nvlist_create(0); nvlist_add_string(nvl, "cmd", "endgrent"); /* Ignore any errors, we have no way to report them. */ - nvlist_destroy(cap_xfer_nvlist(chan, nvl, 0)); + nvlist_destroy(cap_xfer_nvlist(chan, nvl)); } int diff --git a/lib/libcasper/services/cap_pwd/Makefile b/lib/libcasper/services/cap_pwd/Makefile index be4ae89181c7..1537bf25e736 100644 --- a/lib/libcasper/services/cap_pwd/Makefile +++ b/lib/libcasper/services/cap_pwd/Makefile @@ -6,7 +6,7 @@ SHLIBDIR?= /lib/casper PACKAGE=libcasper -SHLIB_MAJOR= 0 +SHLIB_MAJOR= 1 INCSDIR?= ${INCLUDEDIR}/casper .if ${MK_CASPER} != "no" diff --git a/lib/libcasper/services/cap_pwd/cap_pwd.c b/lib/libcasper/services/cap_pwd/cap_pwd.c index 923e39774101..b7bcf356a4cc 100644 --- a/lib/libcasper/services/cap_pwd/cap_pwd.c +++ b/lib/libcasper/services/cap_pwd/cap_pwd.c @@ -157,7 +157,7 @@ cap_getpwcommon_r(cap_channel_t *chan, const char *cmd, const char *login, } else { abort(); } - nvl = cap_xfer_nvlist(chan, nvl, 0); + nvl = cap_xfer_nvlist(chan, nvl); if (nvl == NULL) { assert(errno != 0); *result = NULL; @@ -281,7 +281,7 @@ cap_setpassent(cap_channel_t *chan, int stayopen) nvl = nvlist_create(0); nvlist_add_string(nvl, "cmd", "setpassent"); nvlist_add_bool(nvl, "stayopen", stayopen != 0); - nvl = cap_xfer_nvlist(chan, nvl, 0); + nvl = cap_xfer_nvlist(chan, nvl); if (nvl == NULL) return (0); if (nvlist_get_number(nvl, "error") != 0) { @@ -302,7 +302,7 @@ cap_set_end_pwent(cap_channel_t *chan, const char *cmd) nvl = nvlist_create(0); nvlist_add_string(nvl, "cmd", cmd); /* Ignore any errors, we have no way to report them. */ - nvlist_destroy(cap_xfer_nvlist(chan, nvl, 0)); + nvlist_destroy(cap_xfer_nvlist(chan, nvl)); } void diff --git a/lib/libcasper/services/cap_random/Makefile b/lib/libcasper/services/cap_random/Makefile index 97eb8c411c3c..77f222f3202b 100644 --- a/lib/libcasper/services/cap_random/Makefile +++ b/lib/libcasper/services/cap_random/Makefile @@ -6,7 +6,7 @@ SHLIBDIR?= /lib/casper PACKAGE=libcasper -SHLIB_MAJOR= 0 +SHLIB_MAJOR= 1 INCSDIR?= ${INCLUDEDIR}/casper .if ${MK_CASPER} != "no" diff --git a/lib/libcasper/services/cap_random/cap_random.c b/lib/libcasper/services/cap_random/cap_random.c index 7016f3d784e3..c524ba8beab6 100644 --- a/lib/libcasper/services/cap_random/cap_random.c +++ b/lib/libcasper/services/cap_random/cap_random.c @@ -63,7 +63,7 @@ cap_random_buf(cap_channel_t *chan, void *buf, size_t nbytes) nvlist_add_string(nvl, "cmd", "generate"); nvlist_add_number(nvl, "size", (uint64_t)(left > MAXSIZE ? MAXSIZE : left)); - nvl = cap_xfer_nvlist(chan, nvl, 0); + nvl = cap_xfer_nvlist(chan, nvl); if (nvl == NULL) return (-1); if (nvlist_get_number(nvl, "error") != 0) { diff --git a/lib/libcasper/services/cap_sysctl/Makefile b/lib/libcasper/services/cap_sysctl/Makefile index 14f2bd60cf97..8eed58e3b0bd 100644 --- a/lib/libcasper/services/cap_sysctl/Makefile +++ b/lib/libcasper/services/cap_sysctl/Makefile @@ -6,7 +6,7 @@ SHLIBDIR?= /lib/casper PACKAGE=libcasper -SHLIB_MAJOR= 0 +SHLIB_MAJOR= 1 INCSDIR?= ${INCLUDEDIR}/casper .if ${MK_CASPER} != "no" diff --git a/lib/libcasper/services/cap_sysctl/cap_sysctl.c b/lib/libcasper/services/cap_sysctl/cap_sysctl.c index f173879fbd9d..c07e599890c9 100644 --- a/lib/libcasper/services/cap_sysctl/cap_sysctl.c +++ b/lib/libcasper/services/cap_sysctl/cap_sysctl.c @@ -71,7 +71,7 @@ cap_sysctlbyname(cap_channel_t *chan, const char *name, void *oldp, nvlist_add_number(nvl, "oldlen", (uint64_t)*oldlenp); if (newp != NULL) nvlist_add_binary(nvl, "newp", newp, newlen); - nvl = cap_xfer_nvlist(chan, nvl, 0); + nvl = cap_xfer_nvlist(chan, nvl); if (nvl == NULL) return (-1); if (nvlist_get_number(nvl, "error") != 0) { diff --git a/lib/libcasper/services/cap_syslog/Makefile b/lib/libcasper/services/cap_syslog/Makefile index 8cd66b285da6..5a37f7c25851 100644 --- a/lib/libcasper/services/cap_syslog/Makefile +++ b/lib/libcasper/services/cap_syslog/Makefile @@ -6,7 +6,7 @@ SHLIBDIR?= /lib/casper PACKAGE=libcasper -SHLIB_MAJOR= 0 +SHLIB_MAJOR= 1 INCSDIR?= ${INCLUDEDIR}/casper .if ${MK_CASPER} != "no" diff --git a/lib/libcasper/services/cap_syslog/cap_syslog.c b/lib/libcasper/services/cap_syslog/cap_syslog.c index 0ce46a7a7f01..129e80945dd0 100644 --- a/lib/libcasper/services/cap_syslog/cap_syslog.c +++ b/lib/libcasper/services/cap_syslog/cap_syslog.c @@ -69,7 +69,7 @@ cap_vsyslog(cap_channel_t *chan, int priority, const char *fmt, va_list ap) nvlist_add_string(nvl, "cmd", "vsyslog"); nvlist_add_number(nvl, "priority", priority); nvlist_add_string(nvl, "message", message); - nvl = cap_xfer_nvlist(chan, nvl, 0); + nvl = cap_xfer_nvlist(chan, nvl); if (nvl == NULL) { return; } @@ -88,7 +88,7 @@ cap_openlog(cap_channel_t *chan, const char *ident, int logopt, int facility) } nvlist_add_number(nvl, "logopt", logopt); nvlist_add_number(nvl, "facility", facility); - nvl = cap_xfer_nvlist(chan, nvl, 0); + nvl = cap_xfer_nvlist(chan, nvl); if (nvl == NULL) { return; } @@ -102,7 +102,7 @@ cap_closelog(cap_channel_t *chan) nvl = nvlist_create(0); nvlist_add_string(nvl, "cmd", "closelog"); - nvl = cap_xfer_nvlist(chan, nvl, 0); + nvl = cap_xfer_nvlist(chan, nvl); if (nvl == NULL) { return; } @@ -118,7 +118,7 @@ cap_setlogmask(cap_channel_t *chan, int maskpri) nvl = nvlist_create(0); nvlist_add_string(nvl, "cmd", "setlogmask"); nvlist_add_number(nvl, "maskpri", maskpri); - nvl = cap_xfer_nvlist(chan, nvl, 0); + nvl = cap_xfer_nvlist(chan, nvl); omask = nvlist_get_number(nvl, "omask"); nvlist_destroy(nvl);