2012-05-24 17 views
10

काम नहीं कर रहा है मुझे पता है कि इससे पहले कई बार पूछा गया है, लेकिन मेरा मानना ​​है कि मेरी स्थिति अलग है।एसवीएन हुक प्री-रेप्रप्रॉप-चेंज

मैं लॉग इन संदेशों में किए गए परिवर्तनों को सक्षम करने के लिए हमारे एसवीएन भंडार में प्री-रेप्रप्रॉप-चेंज हुक जोड़ने की कोशिश कर रहा हूं।

इससे पहले कि मैं pre-revprop-change फ़ाइल जोड़ी मैं इस त्रुटि हो रही थी:

$ 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 

कोई बात नहीं, मैंने सोचा। मैं इसे जोड़ देंगे:

$ 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 

तो, सब कुछ के अनुसार मैं इतने पर पढ़ा है, वह सब मैं यह काम करने की जरूरत है होना चाहिए।

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

ध्यान देने लायक कुछ अंक हैं:

1) भंडार लेकिन, जब मैं फिर से लॉग संदेश संपादित करने का प्रयास, मैं अभी भी (एक अलग से एक इस समय) कोई त्रुटि मिलती है एक SELinux सर्वर (फेडोरा कोर 10) पर होस्ट किया गया है। शायद कुछ ऐसी चीज है जो मुझे उन अनुमतियों के संबंध में करने की ज़रूरत है?

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

2) भंडार WebDAV (ध्यान दें भंडार नाम पर https://) के माध्यम से एक्सेस किया जा रहा है: यहाँ हुक के एसई अनुमतियाँ हैं। क्या पूर्व-सुधार-परिवर्तन परिवर्तनों की अनुमति देने के लिए मुझे कुछ ऐसा है जो मुझे WebDAV पक्ष पर सेट करने की आवश्यकता है?

उत्तर

8

कोशिश करने के कई घंटों के बाद, मुझे जवाब मिल गया। और, जैसा कि यह इंटरनेट पर कहीं और मौजूद नहीं प्रतीत होता है, मैं इसे यहां पोस्ट करूंगा ...

समस्या SELinux (कोई आश्चर्यजनक आश्चर्य नहीं) के कारण हुई थी। ऐसा लगता है कि अपाचे (/usr/sbin/httpd) में पहले उल्लिखित एसई अनुमतियों के साथ हुक स्क्रिप्ट चलाने के लिए आवश्यक अनुमतियां नहीं थीं। यह निष्पादित करने के लिए प्राप्त करने के लिए, SELinux अनुमतियों को

$ chcon -t httpd_exec_t pre-revprop-change 

साथ परिवर्तित किया जाना (मैं पहली बार httpd_sys_script_exec_t में बदलने की कोशिश की है, लेकिन इस पर अमल करने स्क्रिप्ट प्राप्त करने के लिए पर्याप्त नहीं था। लेकिन httpd_exec_t प्रकार के साथ यह काम किया।)

अंतिम प्रश्न: क्या यह एक सुरक्षित काम है?

+1

क्या यह सुरक्षित है "सुरक्षित" :) ... लेकिन कुछ सूक्ष्म समस्याओं हाँ, SELinux पैदा कर सकता है, जो हो सकता है के अपने मानकों पर निर्भर करता है हालांकि लॉगिंग सक्षम करके निदान किया गया। – 0xC0000022L

+0

धन्यवाद। हाँ, मुझे नहीं लगता कि हमारा सर्वर हैक-सेंट्रल होने वाला है, लेकिन मैं बस यह सुनिश्चित करना चाहता था कि मैंने अभी तक एक विशाल सुरक्षा छेद खोला नहीं है! क्या आप जानते हैं कि 'httpd_sys_script_exec_t' का उपयोग क्यों नहीं किया गया? ऐसा प्रलेखन से लगता है कि यह होना चाहिए ... –

+0

मैंने सोचा होगा कि यह काम करना चाहिए था। कोई विचार नहीं है कि यह 'httpd_sys_script_exec_t' के बजाय' httpd_exec_t' क्यों होना चाहिए। लेकिन यह संभव है कि SELinux किसी भी तरह से स्क्रिप्ट को अलग करने में सक्षम है जिसका उत्पादन अपाचे से जाता है जहां यह कहीं और जाता है।आप अपाचे का उपयोग करते हैं और 'svnserve' नहीं (भले ही अपाचे इसे प्रॉक्सी कर सकता है), है ना? – 0xC0000022L

1

CentOS पर एक समान बात थी। समस्या शायद कैशिंग में कहीं थी जब मैंने फ़ाइल संपादित की और फिर इसे वापस बदल दिया, यह काम करना शुरू कर दिया।

तो अगर किसी को भी एक ऐसी ही समस्या है बस कोशिश:

touch hooks/pre-revprop-change