aboutsummaryrefslogtreecommitdiffstats
path: root/meta-oe/recipes-devtools/android-tools/android-tools/preserve-ownership.patch
blob: 5c90397194d07d1278027da21c60708e27431631 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
From aa669312a380611d280d126cb509fa282080707e Mon Sep 17 00:00:00 2001
From: Markus Mayer <mmayer@mmayer.net>
Date: Wed, 7 Sep 2016 12:58:47 +0300
Subject: [PATCH] android-tools: add recipe from AOSP tag android-5.1.1_r37

Description: add -o argument to preserve ownership

See also https://android-review.googlesource.com/#/c/100312/

Upstream-Status: Inappropriate

---
 ext4_utils/make_ext4fs.c      |  6 ++++++
 ext4_utils/make_ext4fs_main.c | 10 ++++++++--
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/ext4_utils/make_ext4fs.c b/ext4_utils/make_ext4fs.c
index 2f89ae8a..cc41d623 100644
--- a/ext4_utils/make_ext4fs.c
+++ b/ext4_utils/make_ext4fs.c
@@ -68,6 +68,8 @@
 
 #endif
 
+int preserve_owner = 0;
+
 /* TODO: Not implemented:
    Allocating blocks in the same block group as the file inode
    Hash or binary tree directories
@@ -186,6 +188,10 @@ static u32 build_directory_structure(const char *full_path, const char *dir_path
 		} else {
 			dentries[i].mtime = fixed_time;
 		}
+		if (preserve_owner) {
+			dentries[i].uid = stat.st_uid;
+			dentries[i].gid = stat.st_gid;
+		}
 		uint64_t capabilities;
 		if (fs_config_func != NULL) {
 #ifdef ANDROID
diff --git a/ext4_utils/make_ext4fs_main.c b/ext4_utils/make_ext4fs_main.c
index a6c5f616..7af0dddf 100644
--- a/ext4_utils/make_ext4fs_main.c
+++ b/ext4_utils/make_ext4fs_main.c
@@ -48,13 +48,15 @@ struct selabel_handle;
 extern struct fs_info info;
 
 
+extern int preserve_owner;
+
 static void usage(char *path)
 {
 	fprintf(stderr, "%s [ -l <len> ] [ -j <journal size> ] [ -b <block_size> ]\n", basename(path));
 	fprintf(stderr, "    [ -g <blocks per group> ] [ -i <inodes> ] [ -I <inode size> ]\n");
 	fprintf(stderr, "    [ -L <label> ] [ -f ] [ -a <android mountpoint> ]\n");
 	fprintf(stderr, "    [ -S file_contexts ] [ -C fs_config ] [ -T timestamp ]\n");
-	fprintf(stderr, "    [ -z | -s ] [ -w ] [ -c ] [ -J ] [ -v ] [ -B <block_list_file> ]\n");
+	fprintf(stderr, "    [ -z | -s ] [ -w ] [ -c ] [ -J ] [ -o ] [ -v ] [ -B <block_list_file> ]\n");
 	fprintf(stderr, "    <filename> [<directory>]\n");
 }
 
@@ -80,7 +82,7 @@ int main(int argc, char **argv)
 	struct selinux_opt seopts[] = { { SELABEL_OPT_PATH, "" } };
 #endif
 
-	while ((opt = getopt(argc, argv, "l:j:b:g:i:I:L:a:S:T:C:B:fwzJsctv")) != -1) {
+	while ((opt = getopt(argc, argv, "l:j:b:g:i:I:L:a:S:T:C:B:fwzJsctov")) != -1) {
 		switch (opt) {
 		case 'l':
 			info.len = parse_num(optarg);
@@ -143,6 +145,10 @@ int main(int argc, char **argv)
 			}
 #endif
 			break;
+		case 'o':
+			preserve_owner = 1;
+			printf("Warning: Enabling 'preserve ownership', this is an unofficial feature!\n");
+			break;
 		case 'v':
 			verbose = 1;
 			break;