2010-06-14 22 views
6

मैं जावा एप्लिकेशन के लिए लिनक्स क्षमताओं के साथ प्रयोग कर रहा हूं। मैं (JVM) दुभाषिया के लिए क्षमताओं को जोड़ने के लिए नहीं करना चाहते, तो मैं (stdout में मुद्रित डिबगिंग जानकारी के साथ) एक सरल आवरण लिखने का प्रयास किया:क्षमताओं और लिनक्स और जावा

#include <stdio.h> 
#include <stdlib.h> 
#include <sys/capability.h> 
#include <unistd.h> 

int main(int argc, char *argv[]){ 
     cap_t cap = cap_get_proc(); 

     if (!cap) { 
       perror("cap_get_proc"); 
       exit(1); 
     } 
     printf("%s: running with caps %s\n", argv[0], cap_to_text(cap, NULL)); 

     return execlp("/usr/bin/java", "-server", "-jar", "project.jar", (char *)NULL); 
} 

इस तरह, मैं देख सकता हूँ कि क्षमता इस के लिए निर्धारित है निष्पादन:

./runner: running with caps = cap_net_bind_service+p 

और getcap

runner = cap_net_bind_service+ip 

से पता चलता मैं क्षमता दाय बनाने के लिए सेट है, तो कोई समस्या नहीं होनी चाहिए। हालांकि, जावा अभी भी विशेषाधिकार प्राप्त बंदरगाहों से जुड़ना नहीं चाहता है।

sun/nio/ch/Net.java:-2:in `bind': java.net.SocketException: Permission denied (NativeException) 

कोई इस को हल करने मेरी मदद कर सकते:

मैं यह त्रुटि मिल रहा है?

+0

"जावा अभी भी विशेषाधिकार प्राप्त बंदरगाहों से जुड़ना नहीं चाहता": आपको क्या त्रुटि संदेश मिलता है? यह संभव है कि आपके जेआरई कार्यान्वयन को एक विशेषाधिकार प्राप्त बंदरगाह से जुड़ने का प्रयास करने से पहले 'uid == 0' के लिए अपनी (गलत) जांच करें। –

उत्तर

1

1024 से ऊपर पोर्ट का उपयोग करने का प्रयास करें, या रूट के रूप में चलाएं।

+1

1024 से नीचे पोर्ट्स विशेषाधिकार प्राप्त हैं और केवल रूट द्वारा ही पहुंचा जा सकता है। –

0

कोई अपडेट?

आपको अपाचे कॉमन्स-डेमन जेएसवीसी प्रोजेक्ट में कुछ जवाब मिल सकते हैं: "... जावा अनुप्रयोगों को यूनिक्स पर अधिक आसानी से चलाने के लिए पुस्तकालयों और अनुप्रयोगों का सेट।"

वे क्षमताओं का उपयोग करता, भले ही वे उपयोगकर्ता जो एक पोर्टेबिलिटी कारणों मुझे लगता है के लिए आवेदन करने, चयन करने के लिए अनुमति नहीं है।

संबंधित मुद्दे