Commit c02c541e86ab0a00bfa00cfe311ad98d536355c3

Stefan Sperling 2019-03-29T12:55:46

scan for git repository before applying unveil(2)

diff --git a/got/got.c b/got/got.c
index e083023..cef2aab 100644
--- a/got/got.c
+++ b/got/got.c
@@ -376,14 +376,14 @@ cmd_checkout(int argc, char *argv[])
 	} else
 		usage_checkout();
 
-	error = apply_unveil(repo_path, 0, worktree_path);
-	if (error)
-		goto done;
-
 	error = got_repo_open(&repo, repo_path);
 	if (error != NULL)
 		goto done;
 
+	error = apply_unveil(got_repo_get_path(repo), 0, worktree_path);
+	if (error)
+		goto done;
+
 	error = got_ref_open(&head_ref, repo, GOT_REF_HEAD);
 	if (error != NULL)
 		goto done;
@@ -878,15 +878,15 @@ cmd_log(int argc, char *argv[])
 		goto done;
 	}
 
-	error = apply_unveil(repo_path, 1,
-	    worktree ? got_worktree_get_root_path(worktree) : NULL);
-	if (error)
-		goto done;
-
 	error = got_repo_open(&repo, repo_path);
 	if (error != NULL)
 		goto done;
 
+	error = apply_unveil(got_repo_get_path(repo), 1,
+	    worktree ? got_worktree_get_root_path(worktree) : NULL);
+	if (error)
+		goto done;
+
 	if (start_commit == NULL) {
 		struct got_reference *head_ref;
 		error = got_ref_open(&head_ref, repo, GOT_REF_HEAD);
@@ -1137,16 +1137,16 @@ cmd_diff(int argc, char *argv[])
 			return got_error_from_errno();
 	}
 
-	error = apply_unveil(repo_path, 1,
-	    worktree ? got_worktree_get_root_path(worktree) : NULL);
-	if (error)
-		goto done;
-
 	error = got_repo_open(&repo, repo_path);
 	free(repo_path);
 	if (error != NULL)
 		goto done;
 
+	error = apply_unveil(got_repo_get_path(repo), 1,
+	    worktree ? got_worktree_get_root_path(worktree) : NULL);
+	if (error)
+		goto done;
+
 	if (worktree) {
 		struct print_diff_arg arg;
 		char *id_str;
@@ -1298,14 +1298,14 @@ cmd_blame(int argc, char *argv[])
 		}
 	}
 
-	error = apply_unveil(repo_path, 1, NULL);
-	if (error)
-		goto done;
-
 	error = got_repo_open(&repo, repo_path);
 	if (error != NULL)
 		goto done;
 
+	error = apply_unveil(got_repo_get_path(repo), 1, NULL);
+	if (error)
+		goto done;
+
 	if (worktree) {
 		const char *prefix = got_worktree_get_path_prefix(worktree);
 		char *p, *worktree_subdir = cwd +
@@ -1525,14 +1525,14 @@ cmd_tree(int argc, char *argv[])
 		}
 	}
 
-	error = apply_unveil(repo_path, 1, NULL);
-	if (error)
-		goto done;
-
 	error = got_repo_open(&repo, repo_path);
 	if (error != NULL)
 		goto done;
 
+	error = apply_unveil(got_repo_get_path(repo), 1, NULL);
+	if (error)
+		goto done;
+
 	if (path == NULL) {
 		if (worktree) {
 			char *p, *worktree_subdir = cwd +
@@ -1823,15 +1823,15 @@ cmd_ref(int argc, char *argv[])
 		}
 	}
 
-	error = apply_unveil(repo_path, do_list,
-	    worktree ? got_worktree_get_root_path(worktree) : NULL);
-	if (error)
-		goto done;
-
 	error = got_repo_open(&repo, repo_path);
 	if (error != NULL)
 		goto done;
 
+	error = apply_unveil(got_repo_get_path(repo), do_list,
+	    worktree ? got_worktree_get_root_path(worktree) : NULL);
+	if (error)
+		goto done;
+
 	if (do_list)
 		error = list_refs(repo);
 	else if (delref)
diff --git a/tog/tog.c b/tog/tog.c
index 6a5d797..059eaa8 100644
--- a/tog/tog.c
+++ b/tog/tog.c
@@ -1897,15 +1897,15 @@ cmd_log(int argc, char *argv[])
 
 	init_curses();
 
-	error = apply_unveil(repo_path,
-	    worktree ? got_worktree_get_root_path(worktree) : NULL);
-	if (error)
-		goto done;
-
 	error = got_repo_open(&repo, repo_path);
 	if (error != NULL)
 		goto done;
 
+	error = apply_unveil(got_repo_get_path(repo),
+	    worktree ? got_worktree_get_root_path(worktree) : NULL);
+	if (error)
+		goto done;
+
 	if (start_commit == NULL)
 		error = get_head_commit_id(&start_id, repo);
 	else
@@ -2500,12 +2500,11 @@ cmd_diff(int argc, char *argv[])
 
 	init_curses();
 
-	error = apply_unveil(repo_path, NULL);
+	error = got_repo_open(&repo, repo_path);
 	if (error)
 		goto done;
 
-	error = got_repo_open(&repo, repo_path);
-	free(repo_path);
+	error = apply_unveil(got_repo_get_path(repo), NULL);
 	if (error)
 		goto done;
 
@@ -2531,6 +2530,7 @@ cmd_diff(int argc, char *argv[])
 		goto done;
 	error = view_loop(view);
 done:
+	free(repo_path);
 	got_repo_close(repo);
 	got_ref_list_free(&refs);
 	return error;
@@ -3243,14 +3243,14 @@ cmd_blame(int argc, char *argv[])
 
 	init_curses();
 
-	error = apply_unveil(repo_path, NULL);
-	if (error)
-		goto done;
-
 	error = got_repo_open(&repo, repo_path);
 	if (error != NULL)
 		goto done;
 
+	error = apply_unveil(got_repo_get_path(repo), NULL);
+	if (error)
+		goto done;
+
 	if (worktree) {
 		const char *prefix = got_worktree_get_path_prefix(worktree);
 		char *p, *worktree_subdir = cwd +
@@ -3910,14 +3910,14 @@ cmd_tree(int argc, char *argv[])
 
 	init_curses();
 
-	error = apply_unveil(repo_path, NULL);
-	if (error)
-		goto done;
-
 	error = got_repo_open(&repo, repo_path);
 	if (error != NULL)
 		goto done;
 
+	error = apply_unveil(got_repo_get_path(repo), NULL);
+	if (error)
+		goto done;
+
 	if (commit_id_arg == NULL)
 		error = get_head_commit_id(&commit_id, repo);
 	else