aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Kaspar [Dee'Kej] <dkaspar@redhat.com>2016-08-08 17:22:27 +0200
committerDavid Kaspar [Dee'Kej] <dkaspar@redhat.com>2016-08-09 14:43:32 +0200
commit3b8b51640dfd51702382972087dd7f41219fba7d (patch)
treeb4e63e245762326a2dd293a87a84a0d962d41a14
parentd39b9feebd08ce67db69b2aab34ea6d0e3c3ec12 (diff)
downloadinitscripts-3b8b51640dfd51702382972087dd7f41219fba7d.tar
initscripts-3b8b51640dfd51702382972087dd7f41219fba7d.tar.gz
initscripts-3b8b51640dfd51702382972087dd7f41219fba7d.tar.bz2
initscripts-3b8b51640dfd51702382972087dd7f41219fba7d.tar.xz
initscripts-3b8b51640dfd51702382972087dd7f41219fba7d.zip
Skip modifying of existing folders in systemd/fedora-import-state script
Resolves: #1347436
-rwxr-xr-xsystemd/fedora-import-state34
1 files changed, 31 insertions, 3 deletions
diff --git a/systemd/fedora-import-state b/systemd/fedora-import-state
index 5ad29d41..c34ad0f8 100755
--- a/systemd/fedora-import-state
+++ b/systemd/fedora-import-state
@@ -1,11 +1,39 @@
#!/bin/bash
# fedora-import-state: import state files from initramfs (e.g. network config)
-# copy state into root
+# Copy state into root folder:
+# ============================
cd /run/initramfs/state
-find . -mindepth 1 -maxdepth 1 -exec cp -av -t / {} \;
-# run restorecon on the copied files
+IFS_backup=$IFS
+IFS=$'\n' # Process find's results line by line
+
+dirs_found=$(find . -type d)
+
+for dir in $dirs_found; do
+ pushd "$dir" > /dev/null
+
+ # Remove initial '.' char from the find's result:
+ dest_dir="${dir/\./}"
+
+ # Create destination folder if it does not exist (with the same rights):
+ if ! [[ -d "$dest_dir" ]]; then
+ mkdir -p "$dest_dir"
+ chmod --reference="$PWD" "$dest_dir"
+ chown --reference="$PWD" "$dest_dir"
+ fi
+
+ # Copy all files that are not directory:
+ find . -mindepth 1 -maxdepth 1 -not -type d -exec cp -av -t "$dest_dir" {} \; > /dev/null
+
+ popd > /dev/null
+done
+
+IFS=$IFS_backup
+
+
+# Run restorecon on the copied files:
+# ===================================
if [ -e /sys/fs/selinux/enforce -a -x /usr/sbin/restorecon ]; then
find . -mindepth 1 -print0 | { cd / && xargs --null restorecon -iF; }
fi