Commit | Line | Data |
---|---|---|
3e3c72a3 FF |
1 | diff -u -r ../git-2.16.0/config.c ./config.c |
2 | --- ../git-2.16.0/config.c 2018-01-17 22:49:47.000000000 +0000 | |
3 | +++ ./config.c 2018-01-20 21:49:42.940523576 +0000 | |
ae5ed3b8 FF |
4 | @@ -73,6 +73,25 @@ |
5 | static int pack_compression_seen; | |
6 | static int zlib_compression_seen; | |
11c62dd2 FF |
7 | |
8 | +/* | |
9 | + * Protecting the project-specific git configuration file (.git/config) is | |
10 | + * not possible on a shared file system on Android, which on an unpatched | |
11 | + * git causes operations such as clone to fail with an error message. | |
12 | + * | |
13 | + * For the Termux git package we introduce a warning about the configuration | |
14 | + * file being unprotected, but proceed in order to allow git repositories | |
15 | + * to be cloned to shared storage accessible to other apps. | |
16 | + */ | |
17 | +static void termux_warn_once_about_lockfile() | |
18 | +{ | |
19 | + static int already_warned; | |
20 | + if (!already_warned) { | |
21 | + warning("Cannot protect .git/config on this file system" | |
22 | + " - do not store sensitive information here."); | |
23 | + already_warned = 1; | |
24 | + } | |
25 | +} | |
26 | + | |
27 | static int config_file_fgetc(struct config_source *conf) | |
28 | { | |
29 | return getc_unlocked(conf->u.file); | |
3e3c72a3 | 30 | @@ -2608,9 +2627,13 @@ |
11c62dd2 FF |
31 | in_fd = -1; |
32 | ||
ae5ed3b8 | 33 | if (chmod(get_lock_file_path(&lock), st.st_mode & 07777) < 0) { |
11c62dd2 FF |
34 | +#ifdef __ANDROID__ |
35 | + termux_warn_once_about_lockfile(); | |
36 | +#else | |
ae5ed3b8 | 37 | error_errno("chmod on %s failed", get_lock_file_path(&lock)); |
11c62dd2 FF |
38 | ret = CONFIG_NO_WRITE; |
39 | goto out_free; | |
40 | +#endif | |
41 | } | |
42 | ||
43 | if (store.seen == 0) | |
3e3c72a3 | 44 | @@ -2810,9 +2833,13 @@ |
ae5ed3b8 | 45 | } |
11c62dd2 | 46 | |
3e3c72a3 | 47 | if (chmod(get_lock_file_path(&lock), st.st_mode & 07777) < 0) { |
11c62dd2 FF |
48 | +#ifdef __ANDROID__ |
49 | + termux_warn_once_about_lockfile(); | |
50 | +#else | |
40c3588b | 51 | ret = error_errno("chmod on %s failed", |
3e3c72a3 | 52 | get_lock_file_path(&lock)); |
11c62dd2 FF |
53 | goto out; |
54 | +#endif | |
55 | } | |
56 | ||
57 | while (fgets(buf, sizeof(buf), config_file)) { |