Change separator to allow ':' in filenames. Signed-off-by: Ladislav Michl <la...@linux-mips.org> --- Changes since v1: - bail out when old perm file format is found (Note that if packets are pulled from ipkg repository, running 'ptxdist clean root' will not help)
rules/post/image_cpio.make | 2 +- rules/post/image_ext2.make | 2 +- rules/post/image_jffs2.make | 2 +- rules/post/image_squashfs.make | 2 +- rules/post/image_tgz.make | 6 +++--- rules/post/image_ubi.make | 2 +- rules/post/ptxd_make_image_common.make | 2 +- scripts/lib/ptxd_lib_dopermissions.awk | 2 +- scripts/lib/ptxd_make_image_fix_permissions.sh | 6 ++++-- scripts/lib/ptxd_make_xpkg_common.sh | 1 + scripts/lib/ptxd_make_xpkg_pkg.sh | 9 ++++++--- scripts/libptxdist.sh | 11 +++++++++++ 12 files changed, 32 insertions(+), 15 deletions(-) diff --git a/rules/post/image_cpio.make b/rules/post/image_cpio.make index 573faee..200b283 100644 --- a/rules/post/image_cpio.make +++ b/rules/post/image_cpio.make @@ -15,7 +15,7 @@ $(IMAGEDIR)/root.cpio: $(STATEDIR)/image_working_dir @echo -n "Creating '$(notdir $(@))' from working dir..." @cd $(image/work_dir) && \ ( \ - awk -F: $(DOPERMISSIONS) $(image/permissions) && \ + awk $(DOPERMISSIONS) $(image/permissions) && \ echo "find . | cpio --quiet -H newc -o > '$(@)'" \ ) | $(FAKEROOT) -- @echo "done." diff --git a/rules/post/image_ext2.make b/rules/post/image_ext2.make index 3e3423b..0dbcafd 100644 --- a/rules/post/image_ext2.make +++ b/rules/post/image_ext2.make @@ -15,7 +15,7 @@ ifdef PTXCONF_IMAGE_EXT2 $(IMAGEDIR)/root.ext2: $(STATEDIR)/image_working_dir @echo -n "Creating root.ext2 from working dir..." @cd $(image/work_dir); \ - (awk -F: $(DOPERMISSIONS) $(image/permissions) && \ + (awk $(DOPERMISSIONS) $(image/permissions) && \ ( \ echo -n "$(PTXCONF_SYSROOT_HOST)/bin/genext2fs "; \ echo -n "-b $(PTXCONF_IMAGE_EXT2_SIZE) "; \ diff --git a/rules/post/image_jffs2.make b/rules/post/image_jffs2.make index 5e448f5..7f12883 100644 --- a/rules/post/image_jffs2.make +++ b/rules/post/image_jffs2.make @@ -17,7 +17,7 @@ $(IMAGEDIR)/root.jffs2: $(STATEDIR)/image_working_dir $(STATEDIR)/host-mtd-utils @echo -n "(--eraseblock=$(PTXCONF_IMAGE_JFFS2_BLOCKSIZE) " @echo "$(call remove_quotes,$(PTXCONF_IMAGE_JFFS2_EXTRA_ARGS)))" @cd $(image/work_dir); \ - (awk -F: $(DOPERMISSIONS) $(image/permissions) && \ + (awk $(DOPERMISSIONS) $(image/permissions) && \ ( \ echo -n "$(PTXCONF_SYSROOT_HOST)/sbin/mkfs.jffs2 "; \ echo -n "-d $(image/work_dir) "; \ diff --git a/rules/post/image_squashfs.make b/rules/post/image_squashfs.make index 6d02255..69dc721 100644 --- a/rules/post/image_squashfs.make +++ b/rules/post/image_squashfs.make @@ -19,7 +19,7 @@ ifdef PTXCONF_IMAGE_SQUASHFS $(IMAGEDIR)/root.squashfs: $(STATEDIR)/image_working_dir $(STATEDIR)/host-squashfs-tools.install.post @echo -n "Creating root.squashfs from working dir..." @cd $(image/work_dir); \ - (awk -F: $(DOPERMISSIONS) $(image/permissions) && \ + (awk $(DOPERMISSIONS) $(image/permissions) && \ ( \ echo -n "$(PTXCONF_SYSROOT_HOST)/sbin/mksquashfs "; \ echo -n "$(image/work_dir) "; \ diff --git a/rules/post/image_tgz.make b/rules/post/image_tgz.make index 57f69f4..bace4da 100644 --- a/rules/post/image_tgz.make +++ b/rules/post/image_tgz.make @@ -18,10 +18,10 @@ endif $(IMAGEDIR)/root.tgz: $(STATEDIR)/image_working_dir @echo -n 'Creating root.tgz from working dir$(if $(IMAGE_TGZ_LABEL), with label "$(IMAGE_TGZ_LABEL)",)... ' - @cd $(image/work_dir); \ - (awk -F: $(DOPERMISSIONS) $(image/permissions) && \ + @cd $(image/work_dir); \ + (awk $(DOPERMISSIONS) $(image/permissions) && \ ( echo -n "tar ${IMAGE_TGZ_LABEL_ARGS} -zcf "; \ - echo -n "$@ ." ) \ + echo -n "$@ ." ) \ ) | $(FAKEROOT) -- @echo "done." endif diff --git a/rules/post/image_ubi.make b/rules/post/image_ubi.make index edfae1d..17321dc 100644 --- a/rules/post/image_ubi.make +++ b/rules/post/image_ubi.make @@ -22,7 +22,7 @@ $(IMAGEDIR)/root.ubifs: $(STATEDIR)/image_working_dir $(STATEDIR)/host-mtd-utils @echo -n "-e $(PTXCONF_IMAGE_UBIFS_LEB_SIZE) -c $(PTXCONF_IMAGE_UBIFS_ROOT_MAX_LEB_COUNT) " @echo -n "$(PTXCONF_IMAGE_UBIFS_EXTRA_ARGS))" @cd $(image/work_dir); \ - (awk -F: $(DOPERMISSIONS) $(image/permissions) && \ + (awk $(DOPERMISSIONS) $(image/permissions) && \ ( \ echo -n "$(PTXCONF_SYSROOT_HOST)/sbin/mkfs.ubifs "; \ echo -n "-d $(image/work_dir) "; \ diff --git a/rules/post/ptxd_make_image_common.make b/rules/post/ptxd_make_image_common.make index 7ccb501..0f274bf 100644 --- a/rules/post/ptxd_make_image_common.make +++ b/rules/post/ptxd_make_image_common.make @@ -8,7 +8,7 @@ # see the README file. # -DOPERMISSIONS := '{ \ +DOPERMISSIONS := '{ FS = "\x1F"; \ if ($$1 == "f") \ printf("chmod %s \".%s\"; chown %s.%s \".%s\";\n", $$5, $$2, $$3, $$4, $$2); \ if ($$1 == "n") \ diff --git a/scripts/lib/ptxd_lib_dopermissions.awk b/scripts/lib/ptxd_lib_dopermissions.awk index 336948c..3596121 100755 --- a/scripts/lib/ptxd_lib_dopermissions.awk +++ b/scripts/lib/ptxd_lib_dopermissions.awk @@ -1,7 +1,7 @@ #!/usr/bin/awk -f BEGIN { - FS = ":"; + FS = "\x1F"; } $1 ~ "f" { diff --git a/scripts/lib/ptxd_make_image_fix_permissions.sh b/scripts/lib/ptxd_make_image_fix_permissions.sh index 0a1e807..c5ebf7e 100644 --- a/scripts/lib/ptxd_make_image_fix_permissions.sh +++ b/scripts/lib/ptxd_make_image_fix_permissions.sh @@ -32,10 +32,12 @@ export -f ptxd_make_image_fix_permissions_generate ptxd_make_image_fix_permissions_check() { local workdir="${1}" local ifs_orig="${IFS}" - IFS=":" + IFS="\x1F" + + ptxd_check_obsolete_perm "${ptxd_reply_perm_files[@]}" # just care about dev-nodes, for now - egrep -h "^[n]:" "${ptxd_reply_perm_files[@]}" | + egrep -h "^[n]${IFS}" "${ptxd_reply_perm_files[@]}" | while read kind file uid_should gid_should prm_should type major_should minor_should; do local fixup=false file="${workdir}/${file#/}" diff --git a/scripts/lib/ptxd_make_xpkg_common.sh b/scripts/lib/ptxd_make_xpkg_common.sh index 279348f..c539ba4 100644 --- a/scripts/lib/ptxd_make_xpkg_common.sh +++ b/scripts/lib/ptxd_make_xpkg_common.sh @@ -19,6 +19,7 @@ # $1: permissions file # ptxd_dopermissions() { + ptxd_check_obsolete_perm "${@}" gawk -f "${PTXDIST_LIB_DIR}/ptxd_lib_dopermissions.awk" "${@}" } export -f ptxd_dopermissions diff --git a/scripts/lib/ptxd_make_xpkg_pkg.sh b/scripts/lib/ptxd_make_xpkg_pkg.sh index 9cb2784..f7e1a53 100644 --- a/scripts/lib/ptxd_make_xpkg_pkg.sh +++ b/scripts/lib/ptxd_make_xpkg_pkg.sh @@ -191,6 +191,7 @@ ptxd_install_setup_src() { export -f ptxd_install_setup_src ptxd_install_dir() { + local sep="\x1F" local dir="$1" local usr="$2" local grp="$3" @@ -210,7 +211,7 @@ install directory: install -m "${mod_nfs}" -d "${ndirs[@]/%/${dir}}" && install -m "${mod}" -o "${usr}" -g "${grp}" -d "${pdirs[@]/%/${dir}}" && - echo "f:${dir}:${usr}:${grp}:${mod}" >> "${pkg_xpkg_perms}" || + echo -e "f${sep}${dir}${sep}${usr}${sep}${grp}${sep}${mod}" >> "${pkg_xpkg_perms}" || ptxd_install_error "install_dir failed!" } export -f ptxd_install_dir @@ -285,6 +286,7 @@ export -f ptxd_install_file_strip ptxd_install_file_impl() { + local sep="\x1F" local src="$1" local dst="$2" local usr="$3" @@ -350,7 +352,7 @@ Usually, just remove the 6th parameter and everything works fine. # now change to requested user and group chown "${usr}:${grp}" "${pdirs[@]/%/${dst}}" && - echo "f:${dst}:${usr}:${grp}:${mod}" >> "${pkg_xpkg_perms}" + echo -e "f${sep}${dst}${sep}${usr}${sep}${grp}${sep}${mod}" >> "${pkg_xpkg_perms}" } export -f ptxd_install_file_impl @@ -392,6 +394,7 @@ install link: export -f ptxd_install_ln ptxd_install_mknod() { + local sep="\x1F" local dst="$1" local usr="$2" local grp="$3" @@ -421,7 +424,7 @@ install device node: done && chown "${usr}:${grp}" "${pdirs[@]/%/${dst}}" && - echo "n:${dst}:${usr}:${grp}:${mod}:${type}:${major}:${minor}" >> "${pkg_xpkg_perms}" + echo -e "n${sep}${dst}${sep}${usr}${sep}${grp}${sep}${mod}${sep}${type}${sep}${major}${sep}${minor}" >> "${pkg_xpkg_perms}" } export -f ptxd_install_mknod diff --git a/scripts/libptxdist.sh b/scripts/libptxdist.sh index 7d158b7..be66e00 100644 --- a/scripts/libptxdist.sh +++ b/scripts/libptxdist.sh @@ -827,6 +827,17 @@ ptxd_lib_sysroot() { } export -f ptxd_lib_sysroot +# +# perm file separator changed to allow ':' in filenames +# +# $1: perm file path +# +ptxd_check_obsolete_perm() { + if ! grep -q -P "\x1F" "${1}"; then + ptxd_bailout "obsolete perm file detected, please run 'ptxdist clean root'" + fi +} +export -f ptxd_check_obsolete_perm # # split ipkg filename into it's parts -- 2.1.4 _______________________________________________ ptxdist mailing list ptxdist@pengutronix.de