From 8e1031086d40b9bd3fa255d92cc45573e3afed16 Mon Sep 17 00:00:00 2001 From: Scott Long Date: Sun, 15 Nov 2020 20:24:59 +0000 Subject: [PATCH] Revert the whole getlocalbase() set of changes while a different design is hashed out. --- lib/libutil/Makefile | 5 +- lib/libutil/getlocalbase.3 | 110 ----------------------------- lib/libutil/getlocalbase.c | 89 ----------------------- lib/libutil/libutil.h | 6 -- sbin/nvmecontrol/comnd.c | 2 +- sbin/nvmecontrol/comnd.h | 2 +- sbin/nvmecontrol/nvmecontrol.c | 11 +-- usr.sbin/mailwrapper/mailwrapper.c | 6 +- usr.sbin/pkg/Makefile | 2 +- usr.sbin/pkg/pkg.c | 9 +-- 10 files changed, 11 insertions(+), 231 deletions(-) delete mode 100644 lib/libutil/getlocalbase.3 delete mode 100644 lib/libutil/getlocalbase.c diff --git a/lib/libutil/Makefile b/lib/libutil/Makefile index df3fb622b374..5ea2addd5d34 100644 --- a/lib/libutil/Makefile +++ b/lib/libutil/Makefile @@ -12,8 +12,7 @@ PACKAGE= runtime LIB= util SHLIB_MAJOR= 9 -SRCS= _secure_path.c auth.c expand_number.c flopen.c fparseln.c \ - getlocalbase.c gr_util.c \ +SRCS= _secure_path.c auth.c expand_number.c flopen.c fparseln.c gr_util.c \ hexdump.c humanize_number.c kinfo_getfile.c \ kinfo_getallproc.c kinfo_getproc.c kinfo_getvmmap.c \ kinfo_getvmobject.c kld.c \ @@ -31,7 +30,7 @@ CFLAGS+= -DINET6 CFLAGS+= -I${.CURDIR} -I${SRCTOP}/lib/libc/gen/ -MAN+= expand_number.3 flopen.3 fparseln.3 getlocalbase.3 hexdump.3 \ +MAN+= expand_number.3 flopen.3 fparseln.3 hexdump.3 \ humanize_number.3 kinfo_getallproc.3 kinfo_getfile.3 \ kinfo_getproc.3 kinfo_getvmmap.3 kinfo_getvmobject.3 kld.3 \ login_auth.3 login_cap.3 \ diff --git a/lib/libutil/getlocalbase.3 b/lib/libutil/getlocalbase.3 deleted file mode 100644 index 1c26be485dff..000000000000 --- a/lib/libutil/getlocalbase.3 +++ /dev/null @@ -1,110 +0,0 @@ -.\" -.\" SPDX-License-Identifier: BSD-2-Clause-FreeBSD -.\" -.\" Copyright 2020 Scott Long -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $FreeBSD$ -.\" -.Dd Oct 28, 2020 -.Dt GETLOCALBASE 3 -.Os -.Sh NAME -.Nm getlocalbase -.Nd "return the path to the local software directory" -.Sh LIBRARY -.Lb libutil -.Sh SYNOPSIS -.In libutil.h -.Ft ssize_t -.Fn getlocalbase "char *path" "size_t len" -.Sh DESCRIPTION -The -.Fn getlocalbase -function returns the path to the local software base directory. -Normally this is the -.Pa /usr/local -directory. -First the -.Ev LOCALBASE -environment variable is checked. -If that doesn't exist then the -.Va user.localbase -sysctl is checked. -If that also doesn't exist then the value of the -.Dv _PATH_LOCALBASE -compile-time variable is used. -If that is undefined then the default of -.Pa /usr/local -is used. -.Pp -The -.Fa path -argument points to a caller-supplied buffer to hold the resulting pathname. -The -.Fa len -argument is the length of the caller-supplied buffer. -.Sh IMPLEMENTATION NOTES -Calls to -.Fn getlocalpath -will perform a setugid check on the running binary before checking the -environment. -.Sh RETURN VALUES -If the request completes without error, the size of the string copied into the -buffer, including the terminating NUL, is returned. -If an error occurred or the buffer was too small to hold the string, -.Fn getlocalbase -returns -1 and sets -.Em errno -to indicate the error condition. -.Sh ENVIRONMENT -The -.Fn getlocalbase -library function retrieves the -.Ev LOCALBASE -environment variable. -.Sh ERRORS -The -.Fn getlocalbase -function will fail and set -.Va errno -for the following conditions: -.Bl -tag -width Er -.It Bq Er EINVAL -One of the passed in parameters is NULL or zero. -.It Bq Er ENOMEM -There isn't enough space in the passed in buffer to hold the pathname string. -.El -.Sh SEE ALSO -.Xr env 1 , -.Xr src.conf 5 , -.Xr sysctl 8 -.Sh HISTORY -The -.Nm -library function first appeared in -.Fx 13.0 . -.Sh AUTHORS -This -manual page was written by -.An Scott Long Aq Mt scottl@FreeBSD.org . diff --git a/lib/libutil/getlocalbase.c b/lib/libutil/getlocalbase.c deleted file mode 100644 index 150c05f0b950..000000000000 --- a/lib/libutil/getlocalbase.c +++ /dev/null @@ -1,89 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause - * - * Copyright 2020 Scott Long - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -ssize_t -getlocalbase(char *path, size_t pathlen) -{ - ssize_t tmplen; - const char *tmppath; - - if ((pathlen == 0) || (path == NULL)) { - errno = EINVAL; - return (-1); - } - - /* It's unlikely that the buffer would be this big */ - if (pathlen > SSIZE_MAX) { - errno = ENOMEM; - return (-1); - } - - tmppath = NULL; - tmplen = (size_t)pathlen; - if (issetugid() == 0) - tmppath = getenv("LOCALBASE"); - - if ((tmppath == NULL) && - (sysctlbyname("user.localbase", path, (size_t *)&tmplen, NULL, - 0) == 0)) { - return (tmplen); - } - - if (tmppath == NULL) -#ifdef _PATH_LOCALBASE - tmppath = _PATH_LOCALBASE; -#else - tmppath = "/usr/local"; -#endif - - tmplen = strlcpy(path, tmppath, pathlen); - if ((tmplen < 0) || (tmplen >= (ssize_t)pathlen)) { - errno = ENOMEM; - return (-1); - } - - /* It's unlikely that the buffer would be this big */ - if (tmplen > SSIZE_MAX) { - errno = ENOMEM; - return (-1); - } - - return ((ssize_t)tmplen); -} diff --git a/lib/libutil/libutil.h b/lib/libutil/libutil.h index 1c72f599f7dd..2ac5e975a2d7 100644 --- a/lib/libutil/libutil.h +++ b/lib/libutil/libutil.h @@ -65,11 +65,6 @@ typedef __size_t size_t; #define _SIZE_T_DECLARED #endif -#ifndef _SSIZE_T_DECLARED -typedef __ssize_t ssize_t; -#define _SSIZE_T_DECLARED -#endif - #ifndef _UID_T_DECLARED typedef __uid_t uid_t; #define _UID_T_DECLARED @@ -103,7 +98,6 @@ int flopen(const char *_path, int _flags, ...); int flopenat(int _dirfd, const char *_path, int _flags, ...); int forkpty(int *_amaster, char *_name, struct termios *_termp, struct winsize *_winp); -ssize_t getlocalbase(char *path, size_t pathlen); void hexdump(const void *_ptr, int _length, const char *_hdr, int _flags); int humanize_number(char *_buf, size_t _len, int64_t _number, const char *_suffix, int _scale, int _flags); diff --git a/sbin/nvmecontrol/comnd.c b/sbin/nvmecontrol/comnd.c index 2f0db309bf68..b8c9abc86844 100644 --- a/sbin/nvmecontrol/comnd.c +++ b/sbin/nvmecontrol/comnd.c @@ -287,7 +287,7 @@ arg_parse(int argc, char * const * argv, const struct cmd *f) * Loads all the .so's from the specified directory. */ void -cmd_load_dir(char *dir, cmd_load_cb_t cb, void *argp) +cmd_load_dir(const char *dir __unused, cmd_load_cb_t cb __unused, void *argp __unused) { DIR *d; struct dirent *dent; diff --git a/sbin/nvmecontrol/comnd.h b/sbin/nvmecontrol/comnd.h index 9dedb7a7057d..91c97d4a873f 100644 --- a/sbin/nvmecontrol/comnd.h +++ b/sbin/nvmecontrol/comnd.h @@ -96,7 +96,7 @@ void cmd_register(struct cmd *, struct cmd *); int arg_parse(int argc, char * const *argv, const struct cmd *f); void arg_help(int argc, char * const *argv, const struct cmd *f); void cmd_init(void); -void cmd_load_dir(char *dir, cmd_load_cb_t *cb, void *argp); +void cmd_load_dir(const char *dir, cmd_load_cb_t *cb, void *argp); int cmd_dispatch(int argc, char *argv[], const struct cmd *); #endif /* COMND_H */ diff --git a/sbin/nvmecontrol/nvmecontrol.c b/sbin/nvmecontrol/nvmecontrol.c index 733a475c8721..758822f2e25a 100644 --- a/sbin/nvmecontrol/nvmecontrol.c +++ b/sbin/nvmecontrol/nvmecontrol.c @@ -38,7 +38,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include @@ -179,17 +178,11 @@ get_nsid(int fd, char **ctrlr_str, uint32_t *nsid) int main(int argc, char *argv[]) { - char locallib[MAXPATHLEN]; - size_t len; cmd_init(); - snprintf(locallib, MAXPATHLEN, "/lib/nvmecontrol"); - cmd_load_dir(locallib, NULL, NULL); - if ((len = getlocalbase(locallib, MAXPATHLEN)) > 0) { - strlcat(locallib, "/lib/nvmecontrol", MAXPATHLEN); - cmd_load_dir(locallib, NULL, NULL); - } + cmd_load_dir("/lib/nvmecontrol", NULL, NULL); + cmd_load_dir(_PATH_LOCALBASE "/lib/nvmecontrol", NULL, NULL); cmd_dispatch(argc, argv, NULL); diff --git a/usr.sbin/mailwrapper/mailwrapper.c b/usr.sbin/mailwrapper/mailwrapper.c index 9c92af02533a..8a9ec220a26b 100644 --- a/usr.sbin/mailwrapper/mailwrapper.c +++ b/usr.sbin/mailwrapper/mailwrapper.c @@ -105,10 +105,8 @@ main(int argc, char *argv[], char *envp[]) initarg(&al); addarg(&al, argv[0]); - if ((len = getlocalbase(localmailerconf, MAXPATHLEN)) <= 0) - err(EX_OSERR, "cannot determine local path"); - - strlcat(localmailerconf, "/etc/mail/mailer.conf", MAXPATHLEN); + snprintf(localmailerconf, MAXPATHLEN, "%s/etc/mail/mailer.conf", + getenv("LOCALBASE") ? getenv("LOCALBASE") : _PATH_LOCALBASE); mailerconf = localmailerconf; if ((config = fopen(localmailerconf, "r")) == NULL) diff --git a/usr.sbin/pkg/Makefile b/usr.sbin/pkg/Makefile index 980faafc6b6c..ebfb71c1699b 100644 --- a/usr.sbin/pkg/Makefile +++ b/usr.sbin/pkg/Makefile @@ -25,6 +25,6 @@ MAN= pkg.7 CFLAGS+=-I${SRCTOP}/contrib/libucl/include .PATH: ${SRCTOP}/contrib/libucl/include -LIBADD= archive fetch ucl sbuf crypto ssl util +LIBADD= archive fetch ucl sbuf crypto ssl .include diff --git a/usr.sbin/pkg/pkg.c b/usr.sbin/pkg/pkg.c index 0130e9da83b6..3de789328c37 100644 --- a/usr.sbin/pkg/pkg.c +++ b/usr.sbin/pkg/pkg.c @@ -43,7 +43,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include @@ -1038,7 +1037,6 @@ main(int argc, char *argv[]) { char pkgpath[MAXPATHLEN]; const char *pkgarg; - size_t len; int i; bool bootstrap_only, force, yes; @@ -1047,11 +1045,8 @@ main(int argc, char *argv[]) pkgarg = NULL; yes = false; - if ((len = getlocalbase(pkgpath, MAXPATHLEN)) <= 0) { - fprintf(stderr, "Cannot determine local path\n"); - exit(EXIT_FAILURE); - } - strlcat(pkgpath, "/sbin/pkg", MAXPATHLEN); + snprintf(pkgpath, MAXPATHLEN, "%s/sbin/pkg", + getenv("LOCALBASE") ? getenv("LOCALBASE") : _PATH_LOCALBASE); if (argc > 1 && strcmp(argv[1], "bootstrap") == 0) { bootstrap_only = true;