Sprawdź, czy ścieżka nie przekracza maksimum dla gniazda domeny Unix

9

Systemy operacyjne ograniczają długość ścieżki gniazda domeny Uniksa. Jak mogę sprawdzić, czy dana ścieżka mieści się w tym limicie?

Lub, inaczej mówiąc, w jaki sposób mogę sprawdzić maksymalną dozwoloną długość ścieżki gniazda domeny Unix w systemie Linux lub Mac OS X?

Mój przypadek użycia dotyczy tutaj multipleksowania SSH: jeśli ControlPath jest zbyt długi, wówczas multipleksowanie SSH nie będzie działać, ponieważ tworzy gniazda domeny unix. Chcę móc sprawdzić poprawną ścieżkę sterowania bez konieczności rozpoczynania sesji ssh i szukania komunikatu o błędzie.

Lorin Hochstein
źródło

Odpowiedzi:

8

jak mogę sprawdzić maksymalną dozwoloną długość ścieżki gniazda domeny systemu Unix w systemie Linux

W systemie Linux długość ta jest zwykle definiowana jako 108.

Jest zdefiniowany przez UNIX_PATH_MAXzmienną w /usr/include/linux/un.hpliku nagłówkowym:

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

#define UNIX_PATH_MAX   108

Więcej informacji można znaleźć tutaj:

krisFR
źródło
Czy istnieje powód, dla którego adresy ścieżek gniazd uniksowych są bardziej ograniczone niż PATH_MAX?
CMCDragonkai
6

W systemie Mac OS X, zgodnie ze unixstroną podręcznika :

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

Oto program, który kompiluje się zarówno w systemie Linux, jak i OS X, który wyświetli maksymalną długość ścieżki gniazda domeny 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;
}

W systemie Linux generuje dane 108, a w systemie OS X - dane wyjściowe 104.

Lorin Hochstein
źródło