Перевірте, чи перевищує шлях максимум для сокета домену Unix


9

Операційні системи обмежують довжину шляху розетки домену Unix. Як я можу перевірити, чи певний шлях знаходиться в межах цієї межі?

Або, кажучи іншим способом, як я можу перевірити максимально дозволену довжину шляху розетки домену Unix в системі Linux або Mac OS X?

Мій випадок використання тут стосується мультиплексування SSH: якщо ControlPath занадто довгий, то SSH мультиплексування не працюватиме, оскільки він створює розетки домену unix. Я хочу мати змогу перевірити правильний шлях керування без фактичного початку сеансу ssh і шукати повідомлення про помилку.

Відповіді:


8

як я можу перевірити максимальну дозволену довжину шляху розетки домену Unix в Linux

В Linux ця довжина зазвичай визначається як 108.

Він визначається UNIX_PATH_MAXзмінною у /usr/include/linux/un.hфайлі заголовка:

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

#define UNIX_PATH_MAX   108

Ви можете знайти додаткову інформацію тут:


Чи є причина, чому адреси шляху для сокетів Unix більш обмежені, ніж PATH_MAX?
CMCDragonkai

6

На Mac OS X, відповідно до unixсторінки 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];
       };

Ось програма, яка компілює як Linux, так і OS X, яка виведе максимальну довжину шляху сокета домену 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;
}

В Linux він виводить 108, а в OS X - виводить 104.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.