मैं जावा एप्लिकेशन के लिए लिनक्स क्षमताओं के साथ प्रयोग कर रहा हूं। मैं (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)
कोई इस को हल करने मेरी मदद कर सकते:
मैं यह त्रुटि मिल रहा है?
"जावा अभी भी विशेषाधिकार प्राप्त बंदरगाहों से जुड़ना नहीं चाहता": आपको क्या त्रुटि संदेश मिलता है? यह संभव है कि आपके जेआरई कार्यान्वयन को एक विशेषाधिकार प्राप्त बंदरगाह से जुड़ने का प्रयास करने से पहले 'uid == 0' के लिए अपनी (गलत) जांच करें। –