2012-05-24 14 views
10

Wiem, że to było już wielokrotnie zadawane, ale uważam, że moja sytuacja jest inna.Zmiana pre-revprop SVN nie działa

Próbuję dodać haczyk przedrewolucyjnej zmiany do naszego repozytorium SVN, aby umożliwić wprowadzanie zmian w dzienniku komunikatów.

Przed Dodałem plik pre-revprop-change ja otrzymuję ten błąd:

$ 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 

Nie ma problemu, pomyślałem. Dodam:

$ 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 

Tak więc, zgodnie ze wszystkim, co przeczytałem na SO, to powinno być wszystko, co potrzebne, aby to działało. Ale gdy próbuję ponownie edytować wiadomość dziennika, wciąż pojawia się błąd (inny jeden ten czas):

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

Istnieje kilka punktów do uwaga:

1) repozytorium jest hostowany na serwerze SELinux (rdzeń 10 Fedory). Być może jest coś, co muszę zrobić w odniesieniu do tych uprawnień? Oto uprawnienia se haka:

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

2) Repozytorium jest dostępne za pośrednictwem protokołu WebDAV (uwaga https:// w nazwie repozytorium). Czy jest coś, co muszę skonfigurować po stronie WebDAV, aby umożliwić zmiany przed zmianą?

Odpowiedz

8

Po kilku godzinach prób, znalazłem odpowiedź. I, jak się wydaje, nie ma nigdzie indziej w Internecie, opublikuję go tutaj ...

Problem został spowodowany przez SELinux (nie ma tam niespodzianki). Wygląda na to, że Apache (/usr/sbin/httpd) nie miał wymaganych uprawnień do uruchomienia skryptu przechwytującego z wyżej wymienionymi uprawnieniami SE. Aby zmusić go do wykonania, uprawnienia SELinux musiały zostać zmienione z

$ chcon -t httpd_exec_t pre-revprop-change 

(po raz pierwszy spróbował zmieniając go do httpd_sys_script_exec_t, ale to nie wystarczy, aby uzyskać skrypt do wykonania. Ale z typem httpd_exec_t to działało.)

Ostatnie pytanie: czy to bezpieczne?

+1

Czy jest to bezpieczne, zależy od standardów „zabezpieczyć” :) ... ale tak, SELinux może powodować pewne subtelne problemy, które mogą być zdiagnozowane przez włączenie logowania. – 0xC0000022L

+0

Dzięki. Tak, nie sądzę, że nasz serwer ma być hack-centralny, ale chciałem tylko upewnić się, że nie otworzyłem jeszcze ogromnej dziury w bezpieczeństwie! Czy wiesz, dlaczego używanie '' httpd_sys_script_exec_t' nie działało? Z dokumentacji wynika, że ​​powinna ona ... –

+0

Myślałbym również, że to powinno zadziałać. Nie mam pojęcia, dlaczego musi to być 'httpd_exec_t' zamiast' httpd_sys_script_exec_t'. Ale możliwe jest, że SELinux jest w jakiś sposób w stanie odróżnić skrypty, których wyniki trafiają do Apache od tych, które trafiają gdzie indziej.Ty używasz Apache a nie 'svnserve' (nawet jeśli Apache może go proxy), prawda? – 0xC0000022L

1

Miał podobną rzecz na CentOS. Problem polegał prawdopodobnie na buforowaniu, ponieważ kiedy edytowałem plik, a potem go zmieniłem, zaczęło działać.

Więc jeśli ktoś ma podobny problem, po prostu spróbuj:

touch hooks/pre-revprop-change 
Powiązane problemy