2012-05-24 13 views
10

So che questo è stato chiesto molte volte prima, ma credo che la mia situazione sia diversa.SVN hook pre-revprop-change not working

Sto tentando di aggiungere un hook pre-rev-change-change al nostro repository SVN per abilitare le modifiche da apportare ai messaggi di registro.

Prima ho aggiunto il file pre-revprop-change stavo ottenendo questo errore:

$ svn propset -r 557 --revprop svn:log "New message!" https://myserver/repos/myrepo 
svn: DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent 
svn: At least one property change failed; repository is unchanged 
svn: Error setting property 'log': 
Repository has not been enabled to accept revision propchanges; 
ask the administrator to create a pre-revprop-change hook 

Nessun problema, ho pensato. Io aggiungo:

$ cd /var/www/svn/myrepo/hooks 

$ # Create the simplest hook possible 
$ echo '#!/bin/sh' > pre-revprop-change 
$ echo 'exit 0' >> pre-revprop-change 

$ # Check that it looks correct 
$ cat pre-revprop-change 
#!/bin/sh 
exit 0 

$ # Looks good, now make it executable 
$ chmod a+x pre-revprop-change 

$ # Check the permissions 
$ ls -al pre-revprop-change 
-rwxr-xr-x 1 apache apache 17 2012-05-24 12:05 pre-revprop-change 

$ # Run it, to make sure it runs, and check the error code 
$ ./pre-revprop-change 
$ echo $? 
0 

Quindi, in base a tutto il resto che ho letto su SO, che dovrebbe essere tutto quello che serve per farlo funzionare. Ma, quando si tenta di modificare nuovamente il messaggio di log, ho ancora un errore (uno diverso questa volta):

$ svn propset -r 557 --revprop svn:log "New message!" https://myserver/repos/myrepo 
svn: DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent 
svn: At least one property change failed; repository is unchanged 
svn: Error setting property 'log': 
Revprop change blocked by pre-revprop-change hook (exit code 255) with no output. 

ci sono alcuni punti da notare:

1) Il repository è ospitato su un server SELinux (core 10 di Fedora). Forse c'è qualcosa che devo fare riguardo a quei permessi? Ecco le autorizzazioni SE del gancio:

$ ls -alZ pre-revprop-change 
-rwxr-xr-x apache apache unconfined_u:object_r:httpd_sys_content_rw_t:s0 pre-revprop-change 

2) Il repository si accede tramite WebDAV (notare il https:// nel nome repository). C'è qualcosa che ho bisogno di configurare sul lato WebDAV per consentire modifiche pre-rev-change-change?

risposta

8

Dopo diverse ore di tentativi, ho trovato la risposta. E, visto che non sembra esistere da nessun'altra parte su Internet, lo posterò qui ...

Il problema è stato causato da SELinux (nessuna grande sorpresa lì). Sembra che Apache (/usr/sbin/httpd) non disponga delle autorizzazioni necessarie per eseguire lo script di hook con le autorizzazioni SE summenzionate. Per farlo da eseguire, le autorizzazioni SELinux dovevano essere cambiate con

$ chcon -t httpd_exec_t pre-revprop-change 

(ho provato a cambiarlo con httpd_sys_script_exec_t, ma questo non era sufficiente per ottenere lo script da eseguire. Ma con il tipo httpd_exec_t ha funzionato.)

Domanda finale: è una cosa sicura da fare?

+1

Se questo è sicuro dipende dalle vostre norme di "garantire" :) ... ma sì, SELinux può causare alcuni problemi sottili, che possono essere diagnosticato abilitando la registrazione, però. – 0xC0000022L

+0

Grazie. Sì, non credo che il nostro server sarà hackerante, ma volevo solo assicurarmi di non aver aperto un enorme buco di sicurezza! Sai perché usare 'httpd_sys_script_exec_t' non ha funzionato? Sembra dalla documentazione che dovrebbe avere ... –

+0

Avrei pensato anche che questo avrebbe dovuto funzionare. Non ho idea del motivo per cui deve essere "httpd_exec_t" invece di "httpd_sys_script_exec_t". Ma è possibile che SELinux sia in qualche modo in grado di distinguere gli script il cui output va ad Apache da quelli dove va altrove.Tu dove usi Apache e non 'svnserve' (anche se Apache può farlo da proxy), giusto? – 0xC0000022L

1

Aveva una cosa simile su CentOS. Il problema era probabilmente da qualche parte nel caching come quando ho modificato il file e poi lo ho cambiato, ha iniziato a funzionare.

Quindi, se qualcuno ha un problema simile semplicemente provare:

touch hooks/pre-revprop-change