Explorar el Código

[annex] allow and secure read only annexes

cgars hace 8 años
padre
commit
cf264b6b5d
Se han modificado 1 ficheros con 8 adiciones y 3 borrados
  1. 8 3
      cmd/serv.go

+ 8 - 3
cmd/serv.go

@@ -261,7 +261,7 @@ func runServ(c *cli.Context) error {
 		cmd = []string{verbs[0], verbs[1], repoFullName}
 	} else if isAnnexShell(verb) {
 		repoAbsPath := setting.RepoRootPath + "/" + repoFullName
-		if err := secureGitAnnex(repoAbsPath, requestMode); err != nil {
+		if err := secureGitAnnex(repoAbsPath, user, repo); err != nil {
 			fail("Git annex failed", "Git annex failed: %s", err)
 		}
 		cmd = args
@@ -305,7 +305,7 @@ func runGit(cmd [] string, requestMode models.AccessMode, user *models.User, own
 }
 
 // Make sure git-annex-shell does not make "bad" changes (refectored from repo)
-func secureGitAnnex(path string, requestMode models.AccessMode) error {
+func secureGitAnnex(path string, user *models.User, repo *models.Repository) error {
 	// "If set, disallows running git-shell to handle unknown commands."
 	err := os.Setenv("GIT_ANNEX_SHELL_LIMITED", "True")
 	if err != nil {
@@ -317,7 +317,12 @@ func secureGitAnnex(path string, requestMode models.AccessMode) error {
 	if err != nil {
 		return fmt.Errorf("ERROR: Could set annex shell directory.")
 	}
-	if ! (requestMode > models.ACCESS_MODE_READ) {
+	mode, err := models.AccessLevel(user.ID, repo)
+	if err != nil {
+		fail("Internal error", "Fail to check access: %v", err)
+	}
+
+	if mode < models.ACCESS_MODE_WRITE {
 		err = os.Setenv("GIT_ANNEX_SHELL_READONLY", "True")
 		if err != nil {
 			return fmt.Errorf("ERROR: Could set annex shell to read only.")