Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 14 Nov 2020 15:17:35 -0700
From:      Scott Long <scottl@samsco.org>
To:        Gordon Bergling <gbe@freebsd.org>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org
Subject:   Re: svn commit: r367686 - head/lib/libutil
Message-ID:  <1E5A94AC-6072-462F-98EF-072B09484E3C@samsco.org>
In-Reply-To: <X7BSAOXjCWJIPCPh@lion.0xfce3.net>
References:  <202011141757.0AEHvo1m098201@repo.freebsd.org> <X7AlWq2I8ftSwZil@lion.0xfce3.net> <2236AF89-1624-46B1-A170-7C7B5B4BB5E6@samsco.org> <X7BSAOXjCWJIPCPh@lion.0xfce3.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Another oversight on my part.  I have a fix, it=E2=80=99s trivial, but =
I=E2=80=99m running a few more tests to be sure this time.

Scott


> On Nov 14, 2020, at 2:54 PM, Gordon Bergling <gbe@freebsd.org> wrote:
>=20
> Hi Scott,
>=20
> after r367689 the build was fixed, but on arm64 I get the following =
error,
> when I try to 'pkg upgrade':
>=20
> $ doas pkg upgrade
> Cannot determine local path
> $
>=20
> Is this error somehow related to this change?
>=20
> --Gordon
>=20
> On Sat, Nov 14, 2020 at 11:44:29AM -0700, Scott Long wrote:
>> Hi,
>>=20
>> Yeah, I=E2=80=99m working on a fix, sorry.  I made a last minute =
change that I thought I
>> had tested, but apparently hadn=E2=80=99t.
>>=20
>> Scott
>>=20
>>=20
>>> On Nov 14, 2020, at 11:43 AM, Gordon Bergling <gbe@freebsd.org> =
wrote:
>>>=20
>>> Hi Scott,
>>>=20
>>> this somehow breaks the build.
>>>=20
>>> =
---------------------------------------------------------------------
>>> =3D=3D=3D> lib/msun (obj,all,install)
>>> /tank/nfs_public/tiny/src/lib/libutil/getlocalbase.c:69:30: error: =
comparison of integers of different signs: 'size_t' (aka 'unsigned =
long') and 'ssize_t' (aka 'long') [-Werror,-Wsign-compare]
>>>       if ((tmplen < 0) || (tmplen >=3D (ssize_t)pathlen)) {
>>>                            ~~~~~~ ^  ~~~~~~~~~~~~~~~~
>>> 1 error generated.
>>> --- getlocalbase.o ---
>>> *** [getlocalbase.o] Error code 1
>>> =
.....................................................................
>>>=20
>>> Got this on arm64 with the following src.conf:
>>>=20
>>> WITH_MALLOC_PRODUCTION=3D1
>>> WITH_EXTRA_TCP_STACKS=3D1
>>> WITH_BEARSSL=3D1
>>> WITH_PIE=3D1
>>> WITH_RETPOLINE=3D1
>>>=20
>>> --Gordon
>>>=20
>>> On Sat, Nov 14, 2020 at 05:57:50PM +0000, Scott Long wrote:
>>>> Author: scottl
>>>> Date: Sat Nov 14 17:57:50 2020
>>>> New Revision: 367686
>>>> URL: https://svnweb.freebsd.org/changeset/base/367686
>>>>=20
>>>> Log:
>>>> Add the library function getlocalbase and its manual page.  This =
helps to
>>>> unify the retrieval of the various ways that the local software =
base directory,
>>>> typically "/usr/local", is expressed in the system.
>>>>=20
>>>> Reviewed by:	se
>>>> Differential Revision:	https://reviews.freebsd.org/D27022
>>>>=20
>>>> Added:
>>>> head/lib/libutil/getlocalbase.3   (contents, props changed)
>>>> head/lib/libutil/getlocalbase.c   (contents, props changed)
>>>> Modified:
>>>> head/lib/libutil/Makefile
>>>> head/lib/libutil/libutil.h
>>>>=20
>>>> Modified: head/lib/libutil/Makefile
>>>> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
>>>> --- head/lib/libutil/Makefile	Sat Nov 14 15:44:28 2020	=
(r367685)
>>>> +++ head/lib/libutil/Makefile	Sat Nov 14 17:57:50 2020	=
(r367686)
>>>> @@ -12,7 +12,8 @@ PACKAGE=3D	runtime
>>>> LIB=3D	util
>>>> SHLIB_MAJOR=3D 9
>>>>=20
>>>> -SRCS=3D	_secure_path.c auth.c expand_number.c flopen.c =
fparseln.c gr_util.c \
>>>> +SRCS=3D	_secure_path.c auth.c expand_number.c flopen.c =
fparseln.c \
>>>> +	getlocalbase.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 \
>>>> @@ -30,7 +31,7 @@ CFLAGS+=3D -DINET6
>>>>=20
>>>> CFLAGS+=3D -I${.CURDIR} -I${SRCTOP}/lib/libc/gen/
>>>>=20
>>>> -MAN+=3D	expand_number.3 flopen.3 fparseln.3 hexdump.3 \
>>>> +MAN+=3D	expand_number.3 flopen.3 fparseln.3 getlocalbase.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 \
>>>>=20
>>>> Added: head/lib/libutil/getlocalbase.3
>>>> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
>>>> --- /dev/null	00:00:00 1970	(empty, because file is newly =
added)
>>>> +++ head/lib/libutil/getlocalbase.3	Sat Nov 14 17:57:50 2020	=
(r367686)
>>>> @@ -0,0 +1,110 @@
>>>> +.\"
>>>> +.\" 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 .
>>>>=20
>>>> Added: head/lib/libutil/getlocalbase.c
>>>> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
>>>> --- /dev/null	00:00:00 1970	(empty, because file is newly =
added)
>>>> +++ head/lib/libutil/getlocalbase.c	Sat Nov 14 17:57:50 2020	=
(r367686)
>>>> @@ -0,0 +1,75 @@
>>>> +/*-
>>>> + * SPDX-License-Identifier: BSD-2-Clause
>>>> + *
>>>> + * Copyright 2020 Scott Long <scottl@freebsd.org>
>>>> + *
>>>> + * 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 <sys/cdefs.h>
>>>> +__FBSDID("$FreeBSD$");
>>>> +
>>>> +#include <sys/types.h>
>>>> +#include <sys/errno.h>
>>>> +#include <sys/sysctl.h>
>>>> +#include <stdlib.h>
>>>> +#include <paths.h>
>>>> +#include <libutil.h>
>>>> +#include <string.h>
>>>> +#include <unistd.h>
>>>> +
>>>> +ssize_t
>>>> +getlocalbase(char *path, size_t pathlen)
>>>> +{
>>>> +	size_t tmplen;
>>>> +	const char *tmppath;
>>>> +
>>>> +	if ((pathlen =3D=3D 0) || (path =3D=3D NULL)) {
>>>> +		errno =3D EINVAL;
>>>> +		return (-1);
>>>> +	}
>>>> +
>>>> +	tmppath =3D NULL;
>>>> +	tmplen =3D pathlen;
>>>> +	if (issetugid() =3D=3D 0)
>>>> +		tmppath =3D getenv("LOCALBASE");
>>>> +
>>>> +	if ((tmppath =3D=3D NULL) &&
>>>> +	    (sysctlbyname("user.localbase", path, &tmplen, NULL, 0) =3D=3D=
 0)) {
>>>> +		return (tmplen);
>>>> +	}
>>>> +
>>>> +	if (tmppath =3D=3D NULL)
>>>> +#ifdef _PATH_LOCALBASE
>>>> +		tmppath =3D _PATH_LOCALBASE;
>>>> +#else
>>>> +		tmppath =3D "/usr/local";
>>>> +#endif
>>>> +
>>>> +	tmplen =3D strlcpy(path, tmppath, pathlen);
>>>> +	if ((tmplen < 0) || (tmplen >=3D (ssize_t)pathlen)) {
>>>> +		errno =3D ENOMEM;
>>>> +		tmplen =3D -1;
>>>> +	}
>>>> +
>>>> +	return (tmplen);
>>>> +}
>>>>=20
>>>> Modified: head/lib/libutil/libutil.h
>>>> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
>>>> --- head/lib/libutil/libutil.h	Sat Nov 14 15:44:28 2020	=
(r367685)
>>>> +++ head/lib/libutil/libutil.h	Sat Nov 14 17:57:50 2020	=
(r367686)
>>>> @@ -98,6 +98,7 @@ 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);
>>>> _______________________________________________
>>>> svn-src-head@freebsd.org mailing list
>>>> https://lists.freebsd.org/mailman/listinfo/svn-src-head
>>>> To unsubscribe, send any mail to =
"svn-src-head-unsubscribe@freebsd.org"
>>>=20
>>> --=20
>>=20
>=20
> --=20




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1E5A94AC-6072-462F-98EF-072B09484E3C>