[Bug 297712] share/mk: MK_INSTALL_AS_USER=yes leaves directory group empty when make runs as root

[email protected]
Newsgroups gmane.os.freebsd.bugs
Message-ID <[email protected]/bugzilla/>
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297712

            Bug ID: 297712
           Summary: share/mk: MK_INSTALL_AS_USER=yes leaves directory
                    group empty when make runs as root
           Product: Base System
           Version: CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Many People
          Priority: ---
         Component: bin
          Assignee: [email protected]
          Reporter: [email protected]

A regression in share/mk/bsd.dirs.mk causes directory installation to fail when
MK_INSTALL_AS_USER=yes and make runs as root.

  The problem was introduced by commit
541e6e2d516b6c9d3681b24464e9ef53c1f2579a:

 
https://cgit.freebsd.org/src/commit/?id=541e6e2d516b6c9d3681b24464e9ef53c1f2579a

  That commit changed bsd.dirs.mk to use _uid and _gid whenever
MK_INSTALL_AS_USER is enabled:

  .if ${MK_INSTALL_AS_USER} == "yes"
  ${dir}_OWN?=  ${_uid}
  ${dir}_GRP?=  ${_gid}
  .else
  ${dir}_OWN?=  root
  ${dir}_GRP?=  wheel
  .endif

  However, bsd.init.mk initializes _uid unconditionally but initializes _gid
only when _uid is nonzero:

  _uid!=        id -u

  .if ${_uid} != 0
  _gid!=        id -g
  ...
  .endif

  Consequently, when make runs as root, _uid is 0 while _gid remains undefined.
Directory installation then invokes install(1)
  with an empty group argument.

  I reproduced this with security/unix-selfauth-helper under poudriere on
FreeBSD 16.0-CURRENT, OSVERSION 1600020. The upstream
  Makefile sets:

  MK_INSTALL_AS_USER=yes
  DIRS+=        BINDIR

  The staging phase fails as follows:

  installing DIRS BINDIR
  install -d -m 0755 -o 0 -g
/wrkdirs/usr/ports/security/unix-selfauth-helper/work/stage/usr/local/libexec
  usage: install [-bCcpSsUv] [-f flags] [-g group] ...
  *** Error code 64

  The same port built successfully before the cited bsd.dirs.mk change. This is
not specific to the port: any Makefile combining
  MK_INSTALL_AS_USER=yes, DIRS, and a root-run installation can encounter it.

  Expected behavior:

  When installation runs as root, directory ownership should default to
root:wheel, as it did before the cited commit. When
  installation runs as a non-root user, _uid and _gid should continue to select
that user’s ownership.

  A consistent one-line correction would make the bsd.dirs.mk condition match
the existing logic in bsd.init.mk:

  diff --git a/share/mk/bsd.dirs.mk b/share/mk/bsd.dirs.mk
  --- a/share/mk/bsd.dirs.mk
  +++ b/share/mk/bsd.dirs.mk
  @@ -12,7 +12,7 @@ DIRS?=
   .    if defined(${dir}) && !empty(${dir})
   # Set default permissions for a directory
   ${dir}_MODE?=        0755
  -.if ${MK_INSTALL_AS_USER} == "yes"
  +.if ${MK_INSTALL_AS_USER} == "yes" && ${_uid} != 0
   ${dir}_OWN?= ${_uid}
   ${dir}_GRP?= ${_gid}
   .else

  This preserves install-as-user ownership for non-root builds while restoring
root:wheel defaults for root-run builds.

-- 
You are receiving this mail because:
You are the assignee for the bug.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.