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

Reply via email to