diff options
author | Junio C Hamano <junkio@cox.net> | 2005-10-27 00:15:24 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-10-27 00:15:24 -0700 |
commit | c1aaa5d9ea4a148a964f8c4d6de8bc65f1dc44fd (patch) | |
tree | 196fedc0bea0ee34dc3f807bb444cfcf5fb947dc /init-db.c | |
parent | Merge branch 'lt-dense' (diff) | |
parent | Test in git-init-db if the filemode can be trusted (diff) | |
download | tgif-c1aaa5d9ea4a148a964f8c4d6de8bc65f1dc44fd.tar.xz |
Merge branch 'js-fat'
Diffstat (limited to 'init-db.c')
-rw-r--r-- | init-db.c | 37 |
1 files changed, 37 insertions, 0 deletions
@@ -196,6 +196,43 @@ static void create_default_files(const char *git_dir, } path[len] = 0; copy_templates(path, len, template_path); + + /* + * Find out if we can trust the executable bit. + */ + safe_create_dir(path); + strcpy(path + len, "config"); + if (access(path, R_OK) < 0) { + static const char contents[] = + "#\n" + "# This is the config file\n" + "#\n" + "\n" + "; core variables\n" + "[core]\n" + " ; Don't trust file modes\n" + " filemode = false\n" + "\n"; + FILE *config = fopen(path, "w"); + struct stat st; + + if (!config) + die("Can not write to %s?", path); + + fwrite(contents, sizeof(contents)-1, 1, config); + + fclose(config); + + if (!lstat(path, &st)) { + struct stat st2; + if (!chmod(path, st.st_mode ^ S_IXUSR) && + !lstat(path, &st2) && + st.st_mode != st2.st_mode) + unlink(path); + else + fprintf(stderr, "Ignoring file modes\n"); + } + } } static const char init_db_usage[] = |