|
| 1 | +diff -u -r ../git-2.8.1/config.c ./config.c |
| 2 | +--- ../git-2.8.1/config.c 2016-04-03 15:07:18.000000000 -0400 |
| 3 | ++++ ./config.c 2016-04-21 18:37:26.707906688 -0400 |
| 4 | +@@ -49,6 +49,25 @@ |
| 5 | + */ |
| 6 | + static struct config_set the_config_set; |
| 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); |
| 30 | +@@ -2125,10 +2147,14 @@ |
| 31 | + in_fd = -1; |
| 32 | + |
| 33 | + if (chmod(get_lock_file_path(lock), st.st_mode & 07777) < 0) { |
| 34 | ++#ifdef __ANDROID__ |
| 35 | ++ termux_warn_once_about_lockfile(); |
| 36 | ++#else |
| 37 | + error("chmod on %s failed: %s", |
| 38 | + get_lock_file_path(lock), strerror(errno)); |
| 39 | + ret = CONFIG_NO_WRITE; |
| 40 | + goto out_free; |
| 41 | ++#endif |
| 42 | + } |
| 43 | + |
| 44 | + if (store.seen == 0) |
| 45 | +@@ -2330,9 +2356,13 @@ |
| 46 | + fstat(fileno(config_file), &st); |
| 47 | + |
| 48 | + if (chmod(get_lock_file_path(lock), st.st_mode & 07777) < 0) { |
| 49 | ++#ifdef __ANDROID__ |
| 50 | ++ termux_warn_once_about_lockfile(); |
| 51 | ++#else |
| 52 | + ret = error("chmod on %s failed: %s", |
| 53 | + get_lock_file_path(lock), strerror(errno)); |
| 54 | + goto out; |
| 55 | ++#endif |
| 56 | + } |
| 57 | + |
| 58 | + while (fgets(buf, sizeof(buf), config_file)) { |
0 commit comments