Mercurial (hg) não respeitando as configurações padrão da ACL

5

Estou tentando definir um controle de acesso refinado para vários repositórios do Mercurial usando o ACL. Quando eu envio as alterações para o repositório, todos os novos arquivos criados sob /myrepo/.hg/store/data não têm permissões padrão e os usuários não podem acessá-los.

A questão é reproduzível. Suponha que o usuário "myuser" faça parte do grupo www-data. No servidor:

hg init /tmp/test
chown root:root /tmp/test
chmod 770 /tmp/test
setfacl -Rdm g:www-data:rwx /tmp/test
setfacl -Rm g:www-data:rwx /tmp/test

Numa caixa de janelas com o TortoiseHg, defina para usar plink.exe para ssh com chave partilhada:

hg clone ssh://myuser@servername//tmp/test test
#add file test1.txt and commit to test
hg push ssh://myuser@server//tmp/test
cd ..
hg clone ssh://myuser@servername//tmp/test test2  <---FAIL

Voltar no servidor verificando ACL

getfacl /tmp/test/.hg/store/data/test1.txt.i
# file: tmp/test/.hg/store/data/test1.txt.i
# owner: myuser
# group: myuser
user::rw-
group::rw-
other::r--

Portanto, o novo arquivo não foi criado com as permissões padrão que adicionei à pasta pai /tmp/test . Esse problema também acontece quando você executa hg pull no servidor e hg serve no cliente.

Meu /etc/fstab está montando a partição com as opções "padrão, acl". Também touch /tmp/test/test1 cria arquivo com permissões padrão apropriadas conforme o esperado

Editar

  • Versão Mercurial: 2.0.2-1ubuntu1
  • Linux Ubuntu 12.04
por Budric 06.06.2012 / 23:40

2 respostas

2

Veja o que provavelmente está acontecendo:

  • Você está criando um diretório /tmp/test/.hg por meio de 'hg init', presumivelmente sem permissões de grupo devido a umask restritiva
  • Você está configurando recursivamente ACLs, mas não recursivamente definindo bits de permissão tradicionais para corresponder
  • O Mercurial copia os bits de permissão tradicionais em /tmp/test/.hg / ao criar novos arquivos em .hg
  • Assim, os arquivos adicionados recentemente não têm permissões de grupo
  • Por definição, isso mascara todas as entradas de ACL padrão definidas por você

Correção: defina permissões tradicionais apropriadas do Unix em seu repositório.

    
por 11.06.2012 / 23:07
0

Eu não consigo mais reproduzir o erro. Parece que eu errei ao configurar / conduzir o teste.

    
por 11.06.2012 / 23:52

Tags