Controlla se un percorso supera il massimo per il socket del dominio Unix


9

I sistemi operativi limitano la lunghezza di un percorso di un socket di dominio Unix. Come posso verificare se un determinato percorso rientra in quel limite?

Oppure, per dirla in altro modo, come posso verificare la lunghezza massima consentita di un percorso di un socket di dominio Unix, su un sistema Linux o Mac OS X?

Il mio caso d'uso qui è per il multiplexing SSH: se ControlPath è troppo lungo, allora il multiplexing SSH non funzionerà poiché crea un socket di dominio unix. Voglio essere in grado di verificare un percorso di controllo valido senza dover effettivamente avviare una sessione ssh e cercare il messaggio di errore.

Risposte:


8

come posso verificare la lunghezza massima consentita di un percorso di un socket di dominio Unix, su un Linux

Su Linux, questa lunghezza è generalmente definita come 108.

È definito dalla UNIX_PATH_MAXvariabile nel /usr/include/linux/un.hfile di intestazione:

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

#define UNIX_PATH_MAX   108

Puoi trovare ulteriori informazioni qui:


C'è un motivo per cui gli indirizzi del percorso socket Unix sono più limitati rispetto a PATH_MAX?
CMCDragonkai,

6

Su Mac OS X, secondo la unixpagina man:

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];
       };

Ecco un programma che viene compilato sia su Linux che su OS X che genererà la lunghezza massima del percorso di un socket di dominio 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;
}

Su Linux, emette 108e su OS X, emette 104.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.