Überprüfen Sie, ob ein Pfad das Maximum für den Unix-Domain-Socket überschreitet

9

Betriebssysteme begrenzen die Länge eines Pfads eines Unix-Domain-Sockets. Wie kann ich überprüfen, ob ein bestimmter Pfad innerhalb dieser Grenze liegt?

Oder anders ausgedrückt: Wie kann ich die maximal zulässige Länge eines Pfads eines Unix-Domain-Sockets auf einem Linux- oder Mac OS X-System überprüfen?

Mein Anwendungsfall hier ist das SSH-Multiplexing: Wenn der ControlPath zu lang ist, funktioniert das SSH-Multiplexing nicht, da Unix-Domain-Sockets erstellt werden. Ich möchte in der Lage sein, nach einem gültigen Steuerpfad zu suchen, ohne tatsächlich eine SSH-Sitzung starten und nach der Fehlermeldung suchen zu müssen.

Lorin Hochstein
quelle

Antworten:

8

Wie kann ich die maximal zulässige Länge eines Pfads eines Unix-Domain-Sockets unter Linux überprüfen?

Unter Linux wird diese Länge normalerweise als 108 definiert.

Es wird durch die UNIX_PATH_MAXVariable in der /usr/include/linux/un.hHeader-Datei definiert:

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

#define UNIX_PATH_MAX   108

Weitere Informationen finden Sie hier:

krisFR
quelle
Gibt es einen Grund, warum Unix-Socket-Pfadadressen eingeschränkter sind als PATH_MAX?
CMCDragonkai
6

Unter Mac OS X laut unixManpage:

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

Hier ist ein Programm, das sowohl unter Linux als auch unter OS X kompiliert wird und die maximale Länge des Pfads eines Unix-Domain-Sockets ausgibt.

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

Unter Linux wird ausgegeben 108, und unter OS X wird ausgegeben 104.

Lorin Hochstein
quelle