2012-05-24 25 views
10

Sé que esto se ha preguntado muchas veces, pero creo que mi situación es diferente.SVN hook pre-revprop-change no funciona

Estoy tratando de agregar un gancho de cambio previo al cambio a nuestro repositorio SVN para permitir que se realicen cambios en los mensajes de registro.

antes de agregar el archivo pre-revprop-change que estaba recibiendo este error:

$ 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 

No hay problema, pensé. Voy a añadir:

$ 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 

Así, de acuerdo con todo lo que he leído en SO, que debería ser todo lo que necesito para hacer que funcione. Sin embargo, cuando intento editar el mensaje de registro de nuevo, sigo teniendo un error (una diferente esta vez):

$ 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. 

Hay algunos puntos a tener en cuenta:

1) El repositorio está alojado en un servidor SELinux (núcleo 10 de Fedora). Quizás hay algo que tengo que hacer con respecto a esos permisos? Aquí son los permisos SE de la gancho:

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

2) se accede a la repositorio a través de WebDAV (nótese el https:// en el nombre repositorio). ¿Hay algo que deba configurar en el lado de WebDAV para permitir cambios previos al cambio de reventa?

Respuesta

8

Después de varias horas de intentos, he encontrado la respuesta. Y, como no parece existir en ningún otro lado en Internet, lo publicaré aquí ...

El problema fue causado por SELinux (no es una gran sorpresa). Parece que apache (/usr/sbin/httpd) no tenía los permisos necesarios para ejecutar el script hook con los permisos SE anteriormente mencionados. Para conseguir que se ejecute, los permisos de SELinux necesarios que han de cambiarse

$ chcon -t httpd_exec_t pre-revprop-change 

(probé por primera vez cambiándolo a httpd_sys_script_exec_t, pero esto no fue suficiente para obtener la secuencia de comandos para ejecutar. Pero con el tipo httpd_exec_t funcionó.)

Pregunta final: ¿es seguro hacerlo?

+1

Si esto es seguro depende de sus normas de "seguro" :) ... pero sí, SELinux puede causar algunos problemas sutiles, que pueden ser diagnosticados al permitir el registro, sin embargo. – 0xC0000022L

+0

Gracias. Sí, no creo que nuestro servidor sea pirata central, ¡pero solo quería asegurarme de no haber abierto un gran agujero de seguridad! ¿Sabes por qué no funciona el 'httpd_sys_script_exec_t'? Parece de la documentación que debería tener ... –

+0

También pensé que esto debería haber funcionado. No tengo idea de por qué tiene que ser 'httpd_exec_t' en lugar de' httpd_sys_script_exec_t'. Pero es posible que SELinux de alguna manera sea capaz de distinguir los guiones cuyo resultado va a Apache de aquellos a los que va en otro lugar.Usaste Apache y no 'svnserve' (aunque Apache puede hacerlo), ¿verdad? – 0xC0000022L

1

Tenía algo similar en CentOS. El problema probablemente fue en algún lugar del almacenamiento en caché, ya que cuando edité el archivo y luego lo cambié, comenzó a funcionar.

Así que si alguien tiene un problema similar simplemente tratar:

touch hooks/pre-revprop-change