Sto sperimentando con le funzionalità di Linux per l'applicazione java. Non voglio per aggiungere funzionalità a Interpreter (JVM), così ho provato a scrivere un semplice involucro (con le informazioni di debug stampati a stdout):Funzionalità e Linux e Java
#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);
}
In questo modo, posso vedere che la capacità è fissata per questo eseguibile:
./runner: running with caps = cap_net_bind_service+p
E getcap
mostra
runner = cap_net_bind_service+ip
ho la capacità impostato per essere ereditabile, quindi non ci dovrebbero essere problemi. Tuttavia, java non vuole ancora collegarsi alle porte privilegiate.
sto ottenendo questo errore:
sun/nio/ch/Net.java:-2:in `bind': java.net.SocketException: Permission denied (NativeException)
qualcuno può aiutarmi a risolvere questo?
"java continua a non collegarsi alle porte privilegiate": quale messaggio di errore ricevi? È possibile che l'implementazione JRE esegua il proprio (errato) controllo per 'uid == 0' prima che tenti di collegarsi a una porta privilegiata. –