• # Décomposer exécutable en lanceur + bibliothèque

    Posté par . En réponse au message POSIX capabilities / ouvrir port tcp <=1024. Évalué à 2.

    Une idée que je n'ai pas testée.

    Le lanceur pourrait ressembler à ça: (à compiler avec -std=c99 -ldl -o run-with-cap-net-bind-service)

    #include <dlfcn.h>
    typedef int (*FuncPtr)(/* ... */);
    int main(int argc, char *argv[])
    {
     const char *libpath = ...; /* à récupérer dans argv */
     void *lib = dlopen(libpath);
     if (lib == NULL)
     abort();
     FuncPtr libmain = (FuncPtr)dlsym(lib, "libmain");
     if (libmain == NULL)
     abort();
     return libmain(/* ... *);
    }
    
    

    Ce programme reçoit la capability cap_net_bind_service et éventuellement quelques restrictions (chgrp, chmod g+x, ...).
    L'utilisateur crée son code et le compile avec l'option -shared.
    Ex: gcc -shared ... -o libmain.so
    NB: le point d'entrée devient:

    int libmain(/* même signature que ci-dessus, cf. FuncPtr */)
    {
    }
    
    

    Pour lancer le tout: ./run-with-cap-net-bind-service libmain.so ...