2016-06-20 11:30:35 +02:00
|
|
|
diff -u -r ../git-2.9.0/config.c ./config.c
|
|
|
|
--- ../git-2.9.0/config.c 2016-06-13 15:07:49.000000000 -0400
|
|
|
|
+++ ./config.c 2016-06-19 20:16:44.473791157 -0400
|
2016-04-22 01:32:02 +02:00
|
|
|
@@ -49,6 +49,25 @@
|
|
|
|
*/
|
|
|
|
static struct config_set the_config_set;
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * Protecting the project-specific git configuration file (.git/config) is
|
|
|
|
+ * not possible on a shared file system on Android, which on an unpatched
|
|
|
|
+ * git causes operations such as clone to fail with an error message.
|
|
|
|
+ *
|
|
|
|
+ * For the Termux git package we introduce a warning about the configuration
|
|
|
|
+ * file being unprotected, but proceed in order to allow git repositories
|
|
|
|
+ * to be cloned to shared storage accessible to other apps.
|
|
|
|
+ */
|
|
|
|
+static void termux_warn_once_about_lockfile()
|
|
|
|
+{
|
|
|
|
+ static int already_warned;
|
|
|
|
+ if (!already_warned) {
|
|
|
|
+ warning("Cannot protect .git/config on this file system"
|
|
|
|
+ " - do not store sensitive information here.");
|
|
|
|
+ already_warned = 1;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
static int config_file_fgetc(struct config_source *conf)
|
|
|
|
{
|
|
|
|
return getc_unlocked(conf->u.file);
|
2016-06-20 11:30:35 +02:00
|
|
|
@@ -2123,9 +2142,13 @@
|
2016-04-22 01:32:02 +02:00
|
|
|
in_fd = -1;
|
|
|
|
|
|
|
|
if (chmod(get_lock_file_path(lock), st.st_mode & 07777) < 0) {
|
|
|
|
+#ifdef __ANDROID__
|
|
|
|
+ termux_warn_once_about_lockfile();
|
|
|
|
+#else
|
2016-06-20 11:30:35 +02:00
|
|
|
error_errno("chmod on %s failed", get_lock_file_path(lock));
|
2016-04-22 01:32:02 +02:00
|
|
|
ret = CONFIG_NO_WRITE;
|
|
|
|
goto out_free;
|
|
|
|
+#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
if (store.seen == 0)
|
2016-06-20 11:30:35 +02:00
|
|
|
@@ -2330,9 +2353,13 @@
|
2016-04-22 01:32:02 +02:00
|
|
|
fstat(fileno(config_file), &st);
|
|
|
|
|
|
|
|
if (chmod(get_lock_file_path(lock), st.st_mode & 07777) < 0) {
|
|
|
|
+#ifdef __ANDROID__
|
|
|
|
+ termux_warn_once_about_lockfile();
|
|
|
|
+#else
|
2016-06-20 11:30:35 +02:00
|
|
|
ret = error_errno("chmod on %s failed",
|
|
|
|
get_lock_file_path(lock));
|
2016-04-22 01:32:02 +02:00
|
|
|
goto out;
|
|
|
|
+#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
while (fgets(buf, sizeof(buf), config_file)) {
|