Vérifiez si un chemin dépasse le maximum pour le socket de domaine Unix

9

Les systèmes d'exploitation limitent la longueur du chemin d'un socket de domaine Unix. Comment puis-je vérifier si un chemin particulier est dans cette limite?

Ou, pour le dire autrement, comment puis-je vérifier la longueur maximale autorisée d'un chemin d'un socket de domaine Unix, sur un système Linux ou Mac OS X?

Mon cas d'utilisation est ici pour le multiplexage SSH: si le ControlPath est trop long, le multiplexage SSH ne fonctionnera pas car il crée des sockets de domaine Unix. Je veux pouvoir vérifier un chemin de contrôle valide sans avoir à démarrer réellement une session ssh et rechercher le message d'erreur.

Lorin Hochstein
la source

Réponses:

8

comment puis-je vérifier la longueur maximale autorisée d'un chemin d'un socket de domaine Unix, sur un Linux

Sous Linux, cette longueur est généralement définie comme 108.

Il est défini par la UNIX_PATH_MAXvariable du /usr/include/linux/un.hfichier d' en- tête:

cat /usr/include/linux/un.h | grep "define UNIX_PATH_MAX"

#define UNIX_PATH_MAX   108

Vous pouvez trouver plus d'informations ici:

krisFR
la source
Y a-t-il une raison pour laquelle les adresses de chemin de socket Unix sont plus limitées que PATH_MAX?
CMCDragonkai
6

Sous Mac OS X, selon la unixpage de manuel:

UNIX-domain addresses are variable-length filesystem pathnames of at most
104 characters.  The include file <sys/un.h> defines this address:

       struct sockaddr_un {
               u_char  sun_len;
               u_char  sun_family;
               char    sun_path[104];
       };

Voici un programme qui compile à la fois sur Linux et OS X qui affichera la longueur maximale du chemin d'un socket de domaine Unix.

#include <sys/un.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
    struct sockaddr_un s;
    printf("%lu\n", sizeof(s.sun_path));
    return 0;
}

Sous Linux, il émet 108, et OS X, il sort 104.

Lorin Hochstein
la source