Skip to contentSkip to conversation

Laurentiu Palcu : update-rc.d: check also that symlinks are valid

oe-commits Martin Jansa 2 participants 2 messages Jan 17, 2013 1 message not in the archive

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): 20130116125428.8B76B1036C@opal

#1 lore raw
Quoted 10 lines · On Wed, Jan 16, 2013 at 12:54:28PM +0000, [email protected] wrote:
Module: openembedded-core.git
Branch: master
Commit: 4b63e73422ea25aba1bde0beddb02bc04948e13c
URL:    http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=4b63e73422ea25aba1bde0beddb02bc04948e13c
Author: Laurentiu Palcu <[email protected]>
Date:   Wed Jan 16 13:58:55 2013 +0200

update-rc.d: check also that symlinks are valid

now every update-rc.d call on target fails with /usr/sbin/update-rc.d: line 151: [: argument expected

Quoted 110 lines

Running:

update-rc.d -r /path/to/target/rootfs basename defaults

at do_rootfs time in package postinstall stage, when /path/to/target/rootfs/etc/init.d/basename is a symlink and points to some path on target (for example: /etc/init.d/basename.some_package), would fail and the postinstall execution would be postponed for first boot, on target.

This patch adds the posibility to verify whether the file the symlink points to actually exists in the target rootfs.

[YOCTO #3716]

---

 .../update-rc.d/check-if-symlinks-are-valid.patch  |   53 ++++++++++++++++++++
 meta/recipes-core/update-rc.d/update-rc.d_0.7.bb   |    6 ++-
 2 files changed, 57 insertions(+), 2 deletions(-)
meta/recipes-core/update-rc.d/update-rc.d/check-if-symlinks-are-valid.patch new file +53 -0
new file mode 100644
index 0000000..4476e91
@@ -0,0 +1,53 @@
+Check if symlinks are valid
+
+When using root option and $initd/$bn is a symlink, the script would fail because
+the symlink points to a path on target. For example:
+
+/path/to/target/rootfs/etc/init.d/syslog -> /etc/init.d/syslog.busybox
+
+Hence, [ -f /path/to/target/rootfs/etc/init.d/syslog ] condition would return
+false.
+
+This patch adds the posibility to check whether the file the symlink points to
+actually exists in rootfs path and then continue.
+
+Upstream-Status: Pending
+
+Signed-off-by: Laurentiu Palcu <[email protected]> 
+
+Index: git/update-rc.d
+===================================================================
+--- git.orig/update-rc.d	2013-01-16 12:12:58.349814356 +0200
++++ git/update-rc.d	2013-01-16 13:02:42.490864939 +0200
+@@ -147,13 +147,29 @@
+ bn=$1
+ shift
+ 
++sn=$initd/$bn
++if [ -L "$sn" -a -n $root ]; then
++	readlink=$(which readlink)
++
++	if [ -n $readlink ]; then
++		sn=$($readlink "$sn")
++		case "$sn" in
++			/*) sn=${root}${sn} ;;
++			*)  sn=$initd/$sn ;;
++		esac
++	else
++		echo "update-rc.d: readlink tool not present, cannot check whether \
++				$sn symlink points to a valid file." >&2
++	fi
++fi
++
+ if [ $1 != "remove" ]; then
+-	if [ ! -f "$initd/$bn" ]; then
++	if [ ! -f "$sn" ]; then
+ 		echo "update-rc.d: $initd/$bn: file does not exist" >&2
+ 		exit 1
+ 	fi
+ else
+-	if [ -f "$initd/$bn" ]; then
++	if [ -f "$sn" ]; then
+ 		if [ $force -eq 1 ]; then
+ 			echo "update-rc.d: $initd/$bn exists during rc.d purge (continuing)" >&2
+ 		else
meta/recipes-core/update-rc.d/update-rc.d_0.7.bb +4 -2
index 0aac5fa..bfcbd97 100644
@@ -5,13 +5,15 @@ SECTION = "base"
 LICENSE = "GPLv2+"
 LIC_FILES_CHKSUM = "file://update-rc.d;beginline=5;endline=15;md5=148a48321b10eb37c1fa3ee02b940a75"
 
-PR = "r4"
+PR = "r5"
 
 # Revision corresponding to tag update-rc.d_0.7
 SRCREV = "eca680ddf28d024954895f59a241a622dd575c11"
 
 SRC_URI = "git://github.com/philb/update-rc.d.git;protocol=git \
-           file://add-verbose.patch;"
+           file://add-verbose.patch \
+           file://check-if-symlinks-are-valid.patch \
+          "
 
 S = "${WORKDIR}/git"
 

_______________________________________________
Openembedded-commits mailing list
[email protected]
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-commits

Signature · 1 line
Martin 'JaMa' Jansa     jabber: [email protected]
#2 lore raw
Quoted 6 lines · Martin Jansa
Quoted 5 lines · On Wed, Jan 16, 2013 at 12:54:28PM +0000, [email protected] wrote:
Module: openembedded-core.git
Branch: master
Commit: 4b63e73422ea25aba1bde0beddb02bc04948e13c
URL:    http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=4b63e73422ea25aba1bde0beddb02bc04948e13c
Quoted 8 lines
Quoted 5 lines
Author: Laurentiu Palcu <[email protected]>
Date:   Wed Jan 16 13:58:55 2013 +0200

update-rc.d: check also that symlinks are valid

now every update-rc.d call on target fails with /usr/sbin/update-rc.d: line 151: [: argument expected

Addressed. Sent a patch for that. I guess I never tested when root was not set... :(

Thanks,
Laurentiu

Quoted 112 lines
Quoted 111 lines

Running:

update-rc.d -r /path/to/target/rootfs basename defaults

at do_rootfs time in package postinstall stage, when /path/to/target/rootfs/etc/init.d/basename is a symlink and points to some path on target (for example: /etc/init.d/basename.some_package), would fail and the postinstall execution would be postponed for first boot, on target.

This patch adds the posibility to verify whether the file the symlink points to actually exists in the target rootfs.

[YOCTO #3716]

---

 .../update-rc.d/check-if-symlinks-are-valid.patch  |   53 ++++++++++++++++++++
 meta/recipes-core/update-rc.d/update-rc.d_0.7.bb   |    6 ++-
 2 files changed, 57 insertions(+), 2 deletions(-)
meta/recipes-core/update-rc.d/update-rc.d/check-if-symlinks-are-valid.patch new file +53 -0
new file mode 100644
index 0000000..4476e91
@@ -0,0 +1,53 @@
+Check if symlinks are valid
+
+When using root option and $initd/$bn is a symlink, the script would fail because
+the symlink points to a path on target. For example:
+
+/path/to/target/rootfs/etc/init.d/syslog -> /etc/init.d/syslog.busybox
+
+Hence, [ -f /path/to/target/rootfs/etc/init.d/syslog ] condition would return
+false.
+
+This patch adds the posibility to check whether the file the symlink points to
+actually exists in rootfs path and then continue.
+
+Upstream-Status: Pending
+
+Signed-off-by: Laurentiu Palcu <[email protected]> 
+
+Index: git/update-rc.d
+===================================================================
+--- git.orig/update-rc.d	2013-01-16 12:12:58.349814356 +0200
++++ git/update-rc.d	2013-01-16 13:02:42.490864939 +0200
+@@ -147,13 +147,29 @@
+ bn=$1
+ shift
+ 
++sn=$initd/$bn
++if [ -L "$sn" -a -n $root ]; then
++	readlink=$(which readlink)
++
++	if [ -n $readlink ]; then
++		sn=$($readlink "$sn")
++		case "$sn" in
++			/*) sn=${root}${sn} ;;
++			*)  sn=$initd/$sn ;;
++		esac
++	else
++		echo "update-rc.d: readlink tool not present, cannot check whether \
++				$sn symlink points to a valid file." >&2
++	fi
++fi
++
+ if [ $1 != "remove" ]; then
+-	if [ ! -f "$initd/$bn" ]; then
++	if [ ! -f "$sn" ]; then
+ 		echo "update-rc.d: $initd/$bn: file does not exist" >&2
+ 		exit 1
+ 	fi
+ else
+-	if [ -f "$initd/$bn" ]; then
++	if [ -f "$sn" ]; then
+ 		if [ $force -eq 1 ]; then
+ 			echo "update-rc.d: $initd/$bn exists during rc.d purge (continuing)" >&2
+ 		else
meta/recipes-core/update-rc.d/update-rc.d_0.7.bb +4 -2
index 0aac5fa..bfcbd97 100644
@@ -5,13 +5,15 @@ SECTION = "base"
 LICENSE = "GPLv2+"
 LIC_FILES_CHKSUM = "file://update-rc.d;beginline=5;endline=15;md5=148a48321b10eb37c1fa3ee02b940a75"
 
-PR = "r4"
+PR = "r5"
 
 # Revision corresponding to tag update-rc.d_0.7
 SRCREV = "eca680ddf28d024954895f59a241a622dd575c11"
 
 SRC_URI = "git://github.com/philb/update-rc.d.git;protocol=git \
-           file://add-verbose.patch;"
+           file://add-verbose.patch \
+           file://check-if-symlinks-are-valid.patch \
+          "
 
 S = "${WORKDIR}/git"
 

_______________________________________________
Openembedded-commits mailing list
[email protected]
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-commits