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.

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:


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.