diff mbox series

[09/11] shadow: merge .inc into .bb

Message ID 20250103104524.4053846-9-alex.kanavin@gmail.com
State Accepted, archived
Commit e7f39f67977a3915290ce26a2a828eecc6dddda4
Headers show
Series [01/11] gettext: update 0.22.5 -> 0.23.1 | expand

Commit Message

Alexander Kanavin Jan. 3, 2025, 10:45 a.m. UTC
From: Alexander Kanavin <alex@linutronix.de>

Signed-off-by: Alexander Kanavin <alex@linutronix.de>
---
 meta/recipes-extended/shadow/shadow.inc       | 224 -----------------
 meta/recipes-extended/shadow/shadow_4.16.0.bb | 225 +++++++++++++++++-
 2 files changed, 224 insertions(+), 225 deletions(-)
 delete mode 100644 meta/recipes-extended/shadow/shadow.inc

Comments

patchtest@automation.yoctoproject.org Jan. 3, 2025, 11:07 a.m. UTC | #1
Thank you for your submission. Patchtest identified one
or more issues with the patch. Please see the log below for
more information:

---
Testing patch /home/patchtest/share/mboxes/09-11-shadow-merge-.inc-into-.bb.patch

FAIL: test lic files chksum modified not mentioned: LIC_FILES_CHKSUM changed without "License-Update:" tag and description in commit message (test_metadata.TestMetadata.test_lic_files_chksum_modified_not_mentioned)

PASS: pretest src uri left files (test_metadata.TestMetadata.pretest_src_uri_left_files)
PASS: test CVE check ignore (test_metadata.TestMetadata.test_cve_check_ignore)
PASS: test Signed-off-by presence (test_mbox.TestMbox.test_signed_off_by_presence)
PASS: test author valid (test_mbox.TestMbox.test_author_valid)
PASS: test commit message presence (test_mbox.TestMbox.test_commit_message_presence)
PASS: test commit message user tags (test_mbox.TestMbox.test_commit_message_user_tags)
PASS: test max line length (test_metadata.TestMetadata.test_max_line_length)
PASS: test mbox format (test_mbox.TestMbox.test_mbox_format)
PASS: test non-AUH upgrade (test_mbox.TestMbox.test_non_auh_upgrade)
PASS: test shortlog format (test_mbox.TestMbox.test_shortlog_format)
PASS: test shortlog length (test_mbox.TestMbox.test_shortlog_length)
PASS: test src uri left files (test_metadata.TestMetadata.test_src_uri_left_files)
PASS: test target mailing list (test_mbox.TestMbox.test_target_mailing_list)

SKIP: pretest pylint: No python related patches, skipping test (test_python_pylint.PyLint.pretest_pylint)
SKIP: test CVE tag format: No new CVE patches introduced (test_patch.TestPatch.test_cve_tag_format)
SKIP: test Signed-off-by presence: No new CVE patches introduced (test_patch.TestPatch.test_signed_off_by_presence)
SKIP: test Upstream-Status presence: No new CVE patches introduced (test_patch.TestPatch.test_upstream_status_presence_format)
SKIP: test bugzilla entry format: No bug ID found (test_mbox.TestMbox.test_bugzilla_entry_format)
SKIP: test lic files chksum presence: No added recipes, skipping test (test_metadata.TestMetadata.test_lic_files_chksum_presence)
SKIP: test license presence: No added recipes, skipping test (test_metadata.TestMetadata.test_license_presence)
SKIP: test pylint: No python related patches, skipping test (test_python_pylint.PyLint.test_pylint)
SKIP: test series merge on head: Merge test is disabled for now (test_mbox.TestMbox.test_series_merge_on_head)
SKIP: test summary presence: No added recipes, skipping test (test_metadata.TestMetadata.test_summary_presence)

---

Please address the issues identified and
submit a new revision of the patch, or alternatively, reply to this
email with an explanation of why the patch should be accepted. If you
believe these results are due to an error in patchtest, please submit a
bug at https://bugzilla.yoctoproject.org/ (use the 'Patchtest' category
under 'Yocto Project Subprojects'). For more information on specific
failures, see: https://wiki.yoctoproject.org/wiki/Patchtest. Thank
you!
diff mbox series

Patch

diff --git a/meta/recipes-extended/shadow/shadow.inc b/meta/recipes-extended/shadow/shadow.inc
deleted file mode 100644
index 6ba5a9c7f1c..00000000000
--- a/meta/recipes-extended/shadow/shadow.inc
+++ /dev/null
@@ -1,224 +0,0 @@ 
-SUMMARY = "Tools to change and administer password and group data"
-HOMEPAGE = "http://github.com/shadow-maint/shadow"
-DESCRIPTION = "${SUMMARY}"
-BUGTRACKER = "http://github.com/shadow-maint/shadow/issues"
-SECTION = "base/utils"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c9a450b7be84eac23e6353efecb60b5b \
-                    file://src/passwd.c;beginline=2;endline=7;md5=67bcf314687820b2f010d4863fce3fc5 \
-                    "
-
-DEPENDS = "virtual/crypt"
-
-GITHUB_BASE_URI = "https://github.com/shadow-maint/shadow/releases"
-SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/${BP}.tar.gz \
-           ${@bb.utils.contains('PACKAGECONFIG', 'pam', '${PAM_SRC_URI}', '', d)} \
-           file://useradd \
-           "
-
-SRC_URI:append:class-target = " \
-           file://login_defs_pam.sed \
-           file://shadow-update-pam-conf.patch \
-           "
-
-SRC_URI:append:class-native = " \
-           file://commonio.c-fix-unexpected-open-failure-in-chroot-env.patch \
-           "
-SRC_URI[sha256sum] = "1744f339e07a2b41056347ddd612839762ff565d7e9494fb049428002fa2e7e0"
-
-# Additional Policy files for PAM
-PAM_SRC_URI = "file://pam.d/chfn \
-               file://pam.d/chpasswd \
-               file://pam.d/chsh \
-               file://pam.d/login \
-               file://pam.d/newusers \
-               file://pam.d/passwd \
-               file://pam.d/su"
-
-inherit autotools gettext github-releases pkgconfig
-
-export CONFIG_SHELL="/bin/sh"
-
-EXTRA_OECONF += " \
-                 --with-group-name-max-length=24 \
-                 --enable-subordinate-ids=yes \
-                 --without-sssd \
-                 ${NSCDOPT}"
-
-CFLAGS:append:libc-musl = " -DLIBBSD_OVERLAY"
-
-NSCDOPT = ""
-NSCDOPT:class-native = "--without-nscd"
-NSCDOPT:class-nativesdk = "--without-nscd"
-NSCDOPT:libc-glibc = "--with-nscd"
-
-PAM_PLUGINS = "libpam-runtime \
-               pam-plugin-faildelay \
-               pam-plugin-securetty \
-               pam-plugin-nologin \
-               pam-plugin-env \
-               pam-plugin-group \
-               pam-plugin-limits \
-               pam-plugin-motd \
-               pam-plugin-mail \
-               pam-plugin-shells \
-               pam-plugin-rootok"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)} \
-                   ${@bb.utils.contains('DISTRO_FEATURES', 'xattr', 'attr', '', d)}"
-PACKAGECONFIG:class-native ??= "${@bb.utils.contains('DISTRO_FEATURES', 'xattr', 'attr', '', d)} libbsd"
-PACKAGECONFIG:class-nativesdk = ""
-PACKAGECONFIG[pam] = "--with-libpam,--without-libpam,libpam,${PAM_PLUGINS}"
-PACKAGECONFIG[attr] = "--with-attr,--without-attr,attr"
-PACKAGECONFIG[acl] = "--with-acl,--without-acl,acl"
-PACKAGECONFIG[audit] = "--with-audit,--without-audit,audit"
-PACKAGECONFIG[selinux] = "--with-selinux,--without-selinux,libselinux libsemanage"
-PACKAGECONFIG[libbsd] = "--with-libbsd,--without-libbsd,libbsd"
-PACKAGECONFIG[logind] = "--enable-logind,--disable-logind,systemd"
-
-RDEPENDS:${PN} = "shadow-securetty \
-                  base-passwd \
-                  util-linux-sulogin"
-RDEPENDS:${PN}:class-native = ""
-RDEPENDS:${PN}:class-nativesdk = ""
-
-do_install() {
-	oe_runmake DESTDIR="${D}" sbindir="${base_sbindir}" usbindir="${sbindir}" install
-
-	# Info dir listing isn't interesting at this point so remove it if it exists.
-	if [ -e "${D}${infodir}/dir" ]; then
-		rm -f ${D}${infodir}/dir
-	fi
-
-	# Enable CREATE_HOME by default.
-	sed -i 's/#CREATE_HOME/CREATE_HOME/g' ${D}${sysconfdir}/login.defs
-
-	# As we are on an embedded system, ensure the users mailbox is in
-	# ~/ not /var/spool/mail by default, as who knows where or how big
-	# /var is. The system MDA will set this later anyway.
-	sed -i 's/MAIL_DIR/#MAIL_DIR/g' ${D}${sysconfdir}/login.defs
-	sed -i 's/#MAIL_FILE/MAIL_FILE/g' ${D}${sysconfdir}/login.defs
-
-	# Disable checking emails.
-	sed -i 's/MAIL_CHECK_ENAB/#MAIL_CHECK_ENAB/g' ${D}${sysconfdir}/login.defs
-
-	# Comment out SU_NAME to work correctly with busybox
-	# See Bug#5359 and Bug#7173
-	sed -i 's:^SU_NAME:#SU_NAME:g' ${D}${sysconfdir}/login.defs
-
-	# Use proper encryption for passwords
-	sed -i 's/^#ENCRYPT_METHOD.*$/ENCRYPT_METHOD SHA512/' ${D}${sysconfdir}/login.defs
-
-	install -d ${D}${sysconfdir}/default
-	install -m 0644 ${UNPACKDIR}/useradd ${D}${sysconfdir}/default
-}
-
-do_install:append() {
-	# Ensure that the image has as a /var/spool/mail dir so shadow can
-	# put mailboxes there if the user reconfigures shadow to its
-	# defaults (see sed below).
-	install -m 0775 -d ${D}${localstatedir}/spool/mail
-	chown root:mail ${D}${localstatedir}/spool/mail
-
-	if [ -e ${UNPACKDIR}/pam.d ]; then
-		install -d ${D}${sysconfdir}/pam.d/
-		install -m 0644 ${UNPACKDIR}/pam.d/* ${D}${sysconfdir}/pam.d/
-		# Remove defaults that are not used when supporting PAM.
-		sed -i -f ${UNPACKDIR}/login_defs_pam.sed ${D}${sysconfdir}/login.defs
-	fi
-
-	install -d ${D}${sbindir} ${D}${base_sbindir} ${D}${base_bindir}
-
-	# Move binaries to the locations we want
-	rm ${D}${sbindir}/vigr
-	ln -sf vipw.${BPN} ${D}${base_sbindir}/vigr
-	if [ "${sbindir}" != "${base_sbindir}" ]; then
-		mv ${D}${sbindir}/vipw ${D}${base_sbindir}/vipw
-	fi
-	if [ "${bindir}" != "${base_bindir}" ]; then
-		mv ${D}${bindir}/login ${D}${base_bindir}/login
-		mv ${D}${bindir}/su ${D}${base_bindir}/su
-	fi
-
-	# Handle link properly after rename, otherwise missing files would
-	# lead rpm failed dependencies.
-	ln -sf newgrp.${BPN} ${D}${bindir}/sg
-
-	# usermod requires the subuid/subgid files to be in place before being
-	# able to use the -v/-V flags otherwise it fails:
-	# usermod: /etc/subuid does not exist, you cannot use the flags -v or -V
-	install -d ${D}${sysconfdir}
-	touch ${D}${sysconfdir}/subuid
-	touch ${D}${sysconfdir}/subgid
-}
-
-# Make executables look for dynamically linked libraries in a custom location, and install
-# the needed libraries there. That way we can use them from sstate
-# in setscene tasks without worrying about the dependency libraries being available.
-do_install:append:class-native() {
-        binaries=$(find ${D}${base_bindir}/ ${D}${base_sbindir}/ ${D}${bindir}/ ${D}${sbindir}/ -executable -type f)
-        chrpath -k -r ${STAGING_DIR_NATIVE}/lib-shadow-deps $binaries
-        mkdir -p ${D}${STAGING_DIR_NATIVE}/lib-shadow-deps/
-        libattr=${@bb.utils.contains('DISTRO_FEATURES', 'xattr', "${STAGING_LIBDIR_NATIVE}/libattr.so.*", '', d)}
-        install $libattr ${STAGING_LIBDIR_NATIVE}/libbsd.so.* ${STAGING_LIBDIR_NATIVE}/libmd.so.* ${D}${STAGING_DIR_NATIVE}/lib-shadow-deps/
-        install ${D}${libdir}/*.so.* ${D}${STAGING_DIR_NATIVE}/lib-shadow-deps/
-}
-
-SYSROOT_DIRS:append:class-native = " ${STAGING_DIR_NATIVE}/lib-shadow-deps/"
-INSANE_SKIP:${PN}:class-native = "already-stripped"
-
-do_install:append:class-nativesdk() {
-	oe_runmake -C ${B}/man DESTDIR="${D}" sbindir="${base_sbindir}" usbindir="${sbindir}" install-man
-}
-
-do_install:append:class-target() {
-	oe_runmake -C ${B}/man DESTDIR="${D}" sbindir="${base_sbindir}" usbindir="${sbindir}" install-man
-}
-
-PACKAGES =+ "${PN}-base"
-FILES:${PN}-base = "\
-    ${base_bindir}/login.shadow \
-    ${base_bindir}/su.shadow \
-    ${bindir}/sg \
-    ${bindir}/newgrp.shadow \
-    ${bindir}/groups.shadow \
-    ${sysconfdir}/pam.d/login \
-    ${sysconfdir}/pam.d/su \
-    ${sysconfdir}/login.defs \
-"
-RDEPENDS:${PN} += "${PN}-base"
-
-inherit update-alternatives
-
-ALTERNATIVE_PRIORITY = "200"
-
-ALTERNATIVE:${PN} = "passwd chfn chsh chpasswd vipw vigr nologin"
-ALTERNATIVE_LINK_NAME[chfn] = "${bindir}/chfn"
-ALTERNATIVE_LINK_NAME[chsh] = "${bindir}/chsh"
-ALTERNATIVE_LINK_NAME[chpasswd] = "${sbindir}/chpasswd"
-ALTERNATIVE_LINK_NAME[vipw] = "${base_sbindir}/vipw"
-ALTERNATIVE_LINK_NAME[vigr] = "${base_sbindir}/vigr"
-ALTERNATIVE_LINK_NAME[nologin] = "${base_sbindir}/nologin"
-
-ALTERNATIVE:${PN}-doc = "chfn.1 chsh.1 groups.1 su.1 nologin.8"
-ALTERNATIVE_LINK_NAME[chfn.1] = "${mandir}/man1/chfn.1"
-ALTERNATIVE_LINK_NAME[chsh.1] = "${mandir}/man1/chsh.1"
-ALTERNATIVE_LINK_NAME[groups.1] = "${mandir}/man1/groups.1"
-ALTERNATIVE_LINK_NAME[su.1] = "${mandir}/man1/su.1"
-ALTERNATIVE_LINK_NAME[nologin.8] = "${mandir}/man8/nologin.8"
-
-ALTERNATIVE:${PN}-base = "newgrp groups login su"
-ALTERNATIVE_LINK_NAME[login] = "${base_bindir}/login"
-ALTERNATIVE_LINK_NAME[su] = "${base_bindir}/su"
-
-PACKAGE_WRITE_DEPS += "shadow-native"
-pkg_postinst:${PN}:class-target () {
-	if [ "x$D" != "x" ]; then
-	  rootarg="--root $D"
-	else
-	  rootarg=""
-	fi
-
-	pwconv $rootarg || exit 1
-	grpconv $rootarg || exit 1
-}
diff --git a/meta/recipes-extended/shadow/shadow_4.16.0.bb b/meta/recipes-extended/shadow/shadow_4.16.0.bb
index e57676c1da3..1fcf82bb01d 100644
--- a/meta/recipes-extended/shadow/shadow_4.16.0.bb
+++ b/meta/recipes-extended/shadow/shadow_4.16.0.bb
@@ -1,4 +1,227 @@ 
-require shadow.inc
+SUMMARY = "Tools to change and administer password and group data"
+HOMEPAGE = "http://github.com/shadow-maint/shadow"
+DESCRIPTION = "${SUMMARY}"
+BUGTRACKER = "http://github.com/shadow-maint/shadow/issues"
+SECTION = "base/utils"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c9a450b7be84eac23e6353efecb60b5b \
+                    file://src/passwd.c;beginline=2;endline=7;md5=67bcf314687820b2f010d4863fce3fc5 \
+                    "
+
+DEPENDS = "virtual/crypt"
+
+GITHUB_BASE_URI = "https://github.com/shadow-maint/shadow/releases"
+SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/${BP}.tar.gz \
+           ${@bb.utils.contains('PACKAGECONFIG', 'pam', '${PAM_SRC_URI}', '', d)} \
+           file://useradd \
+           "
+
+SRC_URI:append:class-target = " \
+           file://login_defs_pam.sed \
+           file://shadow-update-pam-conf.patch \
+           "
+
+SRC_URI:append:class-native = " \
+           file://commonio.c-fix-unexpected-open-failure-in-chroot-env.patch \
+           "
+SRC_URI[sha256sum] = "1744f339e07a2b41056347ddd612839762ff565d7e9494fb049428002fa2e7e0"
+
+# Additional Policy files for PAM
+PAM_SRC_URI = "file://pam.d/chfn \
+               file://pam.d/chpasswd \
+               file://pam.d/chsh \
+               file://pam.d/login \
+               file://pam.d/newusers \
+               file://pam.d/passwd \
+               file://pam.d/su"
+
+inherit autotools gettext github-releases pkgconfig
+
+export CONFIG_SHELL="/bin/sh"
+
+EXTRA_OECONF += " \
+                 --with-group-name-max-length=24 \
+                 --enable-subordinate-ids=yes \
+                 --without-sssd \
+                 ${NSCDOPT}"
+
+CFLAGS:append:libc-musl = " -DLIBBSD_OVERLAY"
+
+NSCDOPT = ""
+NSCDOPT:class-native = "--without-nscd"
+NSCDOPT:class-nativesdk = "--without-nscd"
+NSCDOPT:libc-glibc = "--with-nscd"
+
+PAM_PLUGINS = "libpam-runtime \
+               pam-plugin-faildelay \
+               pam-plugin-securetty \
+               pam-plugin-nologin \
+               pam-plugin-env \
+               pam-plugin-group \
+               pam-plugin-limits \
+               pam-plugin-motd \
+               pam-plugin-mail \
+               pam-plugin-shells \
+               pam-plugin-rootok"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)} \
+                   ${@bb.utils.contains('DISTRO_FEATURES', 'xattr', 'attr', '', d)}"
+PACKAGECONFIG:class-native ??= "${@bb.utils.contains('DISTRO_FEATURES', 'xattr', 'attr', '', d)} libbsd"
+PACKAGECONFIG:class-nativesdk = ""
+PACKAGECONFIG[pam] = "--with-libpam,--without-libpam,libpam,${PAM_PLUGINS}"
+PACKAGECONFIG[attr] = "--with-attr,--without-attr,attr"
+PACKAGECONFIG[acl] = "--with-acl,--without-acl,acl"
+PACKAGECONFIG[audit] = "--with-audit,--without-audit,audit"
+PACKAGECONFIG[selinux] = "--with-selinux,--without-selinux,libselinux libsemanage"
+PACKAGECONFIG[libbsd] = "--with-libbsd,--without-libbsd,libbsd"
+PACKAGECONFIG[logind] = "--enable-logind,--disable-logind,systemd"
+
+RDEPENDS:${PN} = "shadow-securetty \
+                  base-passwd \
+                  util-linux-sulogin"
+RDEPENDS:${PN}:class-native = ""
+RDEPENDS:${PN}:class-nativesdk = ""
+
+do_install() {
+	oe_runmake DESTDIR="${D}" sbindir="${base_sbindir}" usbindir="${sbindir}" install
+
+	# Info dir listing isn't interesting at this point so remove it if it exists.
+	if [ -e "${D}${infodir}/dir" ]; then
+		rm -f ${D}${infodir}/dir
+	fi
+
+	# Enable CREATE_HOME by default.
+	sed -i 's/#CREATE_HOME/CREATE_HOME/g' ${D}${sysconfdir}/login.defs
+
+	# As we are on an embedded system, ensure the users mailbox is in
+	# ~/ not /var/spool/mail by default, as who knows where or how big
+	# /var is. The system MDA will set this later anyway.
+	sed -i 's/MAIL_DIR/#MAIL_DIR/g' ${D}${sysconfdir}/login.defs
+	sed -i 's/#MAIL_FILE/MAIL_FILE/g' ${D}${sysconfdir}/login.defs
+
+	# Disable checking emails.
+	sed -i 's/MAIL_CHECK_ENAB/#MAIL_CHECK_ENAB/g' ${D}${sysconfdir}/login.defs
+
+	# Comment out SU_NAME to work correctly with busybox
+	# See Bug#5359 and Bug#7173
+	sed -i 's:^SU_NAME:#SU_NAME:g' ${D}${sysconfdir}/login.defs
+
+	# Use proper encryption for passwords
+	sed -i 's/^#ENCRYPT_METHOD.*$/ENCRYPT_METHOD SHA512/' ${D}${sysconfdir}/login.defs
+
+	install -d ${D}${sysconfdir}/default
+	install -m 0644 ${UNPACKDIR}/useradd ${D}${sysconfdir}/default
+}
+
+do_install:append() {
+	# Ensure that the image has as a /var/spool/mail dir so shadow can
+	# put mailboxes there if the user reconfigures shadow to its
+	# defaults (see sed below).
+	install -m 0775 -d ${D}${localstatedir}/spool/mail
+	chown root:mail ${D}${localstatedir}/spool/mail
+
+	if [ -e ${UNPACKDIR}/pam.d ]; then
+		install -d ${D}${sysconfdir}/pam.d/
+		install -m 0644 ${UNPACKDIR}/pam.d/* ${D}${sysconfdir}/pam.d/
+		# Remove defaults that are not used when supporting PAM.
+		sed -i -f ${UNPACKDIR}/login_defs_pam.sed ${D}${sysconfdir}/login.defs
+	fi
+
+	install -d ${D}${sbindir} ${D}${base_sbindir} ${D}${base_bindir}
+
+	# Move binaries to the locations we want
+	rm ${D}${sbindir}/vigr
+	ln -sf vipw.${BPN} ${D}${base_sbindir}/vigr
+	if [ "${sbindir}" != "${base_sbindir}" ]; then
+		mv ${D}${sbindir}/vipw ${D}${base_sbindir}/vipw
+	fi
+	if [ "${bindir}" != "${base_bindir}" ]; then
+		mv ${D}${bindir}/login ${D}${base_bindir}/login
+		mv ${D}${bindir}/su ${D}${base_bindir}/su
+	fi
+
+	# Handle link properly after rename, otherwise missing files would
+	# lead rpm failed dependencies.
+	ln -sf newgrp.${BPN} ${D}${bindir}/sg
+
+	# usermod requires the subuid/subgid files to be in place before being
+	# able to use the -v/-V flags otherwise it fails:
+	# usermod: /etc/subuid does not exist, you cannot use the flags -v or -V
+	install -d ${D}${sysconfdir}
+	touch ${D}${sysconfdir}/subuid
+	touch ${D}${sysconfdir}/subgid
+}
+
+# Make executables look for dynamically linked libraries in a custom location, and install
+# the needed libraries there. That way we can use them from sstate
+# in setscene tasks without worrying about the dependency libraries being available.
+do_install:append:class-native() {
+        binaries=$(find ${D}${base_bindir}/ ${D}${base_sbindir}/ ${D}${bindir}/ ${D}${sbindir}/ -executable -type f)
+        chrpath -k -r ${STAGING_DIR_NATIVE}/lib-shadow-deps $binaries
+        mkdir -p ${D}${STAGING_DIR_NATIVE}/lib-shadow-deps/
+        libattr=${@bb.utils.contains('DISTRO_FEATURES', 'xattr', "${STAGING_LIBDIR_NATIVE}/libattr.so.*", '', d)}
+        install $libattr ${STAGING_LIBDIR_NATIVE}/libbsd.so.* ${STAGING_LIBDIR_NATIVE}/libmd.so.* ${D}${STAGING_DIR_NATIVE}/lib-shadow-deps/
+        install ${D}${libdir}/*.so.* ${D}${STAGING_DIR_NATIVE}/lib-shadow-deps/
+}
+
+SYSROOT_DIRS:append:class-native = " ${STAGING_DIR_NATIVE}/lib-shadow-deps/"
+INSANE_SKIP:${PN}:class-native = "already-stripped"
+
+do_install:append:class-nativesdk() {
+	oe_runmake -C ${B}/man DESTDIR="${D}" sbindir="${base_sbindir}" usbindir="${sbindir}" install-man
+}
+
+do_install:append:class-target() {
+	oe_runmake -C ${B}/man DESTDIR="${D}" sbindir="${base_sbindir}" usbindir="${sbindir}" install-man
+}
+
+PACKAGES =+ "${PN}-base"
+FILES:${PN}-base = "\
+    ${base_bindir}/login.shadow \
+    ${base_bindir}/su.shadow \
+    ${bindir}/sg \
+    ${bindir}/newgrp.shadow \
+    ${bindir}/groups.shadow \
+    ${sysconfdir}/pam.d/login \
+    ${sysconfdir}/pam.d/su \
+    ${sysconfdir}/login.defs \
+"
+RDEPENDS:${PN} += "${PN}-base"
+
+inherit update-alternatives
+
+ALTERNATIVE_PRIORITY = "200"
+
+ALTERNATIVE:${PN} = "passwd chfn chsh chpasswd vipw vigr nologin"
+ALTERNATIVE_LINK_NAME[chfn] = "${bindir}/chfn"
+ALTERNATIVE_LINK_NAME[chsh] = "${bindir}/chsh"
+ALTERNATIVE_LINK_NAME[chpasswd] = "${sbindir}/chpasswd"
+ALTERNATIVE_LINK_NAME[vipw] = "${base_sbindir}/vipw"
+ALTERNATIVE_LINK_NAME[vigr] = "${base_sbindir}/vigr"
+ALTERNATIVE_LINK_NAME[nologin] = "${base_sbindir}/nologin"
+
+ALTERNATIVE:${PN}-doc = "chfn.1 chsh.1 groups.1 su.1 nologin.8"
+ALTERNATIVE_LINK_NAME[chfn.1] = "${mandir}/man1/chfn.1"
+ALTERNATIVE_LINK_NAME[chsh.1] = "${mandir}/man1/chsh.1"
+ALTERNATIVE_LINK_NAME[groups.1] = "${mandir}/man1/groups.1"
+ALTERNATIVE_LINK_NAME[su.1] = "${mandir}/man1/su.1"
+ALTERNATIVE_LINK_NAME[nologin.8] = "${mandir}/man8/nologin.8"
+
+ALTERNATIVE:${PN}-base = "newgrp groups login su"
+ALTERNATIVE_LINK_NAME[login] = "${base_bindir}/login"
+ALTERNATIVE_LINK_NAME[su] = "${base_bindir}/su"
+
+PACKAGE_WRITE_DEPS += "shadow-native"
+pkg_postinst:${PN}:class-target () {
+	if [ "x$D" != "x" ]; then
+	  rootarg="--root $D"
+	else
+	  rootarg=""
+	fi
+
+	pwconv $rootarg || exit 1
+	grpconv $rootarg || exit 1
+}
 
 # Build falsely assumes that if --enable-libpam is set, we don't need to link against
 # libcrypt. This breaks chsh.