में एक गिट रिपोजिटरी है जिसे सूडो के रूप में पोस्ट-प्राप्त हुक चलाने की आवश्यकता है।सेटयूड के साथ चलने वाला गिट 'पोस्ट-प्राप्त' हुक
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
int main() {
int ret;
ret = setuid(geteuid());
if(!ret) {
fprintf(stderr, "error setting uid %d \n", ret);
}
system("[...command only sudo can access...]");
return 0;
}
geteuid()
post-receive
के मालिक आईडी प्राप्त करता है, तो setuid की कोशिश करता है: द्विआधारी है कि मैं इस परीक्षण करने के लिए तैयार की तरह दिखता है। किसी भी उपयोगकर्ता (सुपर उपयोगकर्ता सहित) के साथ इसे चलाने पर यह स्क्रिप्ट को रूट के रूप में सही ढंग से चलाता है। हालांकि, जब गिट हुक द्वारा ट्रिगर किया जाता है तो सिस्टम यूआईडी सेट करने में विफल रहता है। मैंने chmod u+s post-receive
चलाने का प्रयास किया है मैंने कुछ अन्य कॉन्फ़िगरेशन भी आजमाए हैं, लेकिन मैं विचारों से बाहर हूं। किसी भी कारण से यह सभी मामलों में क्यों काम करेगा जब सिट इसे ट्रिगर करता है?
, मंच उबंटू सर्वर 9.04 (2.6.28-15), git1.6.0.4, जीसीसी संस्करण 4.3.3 (उबंटू 4.3.3-5ubuntu4)
क्या आपने कभी यह पता लगाया है? – Ibrahim
एक मुद्दा यह है कि आप एक त्रुटि संदेश मुद्रित करते हैं लेकिन फिर सिस्टम() कॉल निष्पादित करना जारी रखते हैं। आप सिस्टम() कॉल के परिणाम को अनदेखा करते हैं और फिर सफलता (0) स्थिति से बाहर निकलें। –
@ ब्लेक: "-स- किसी भी उपयोगकर्ता के साथ" बिट अस्पष्ट है - क्या उपयोगकर्ता उस उपयोगकर्ता के रूप में चलने पर सही ढंग से चलता है जब आप इसे दबा रहे हैं? मुझे लगता है कि यह गिट द्वारा चलाए जा रहे पर्यावरण को डुप्लिकेट करने का सबसे नज़दीकी तरीका होगा: 'ssh hostname 'cd/path/to/repo; .git/hooks/post-rece'' – Cascabel