Periksa apakah jalur melebihi maksimum untuk soket domain Unix

9

Sistem operasi membatasi panjang jalur soket domain Unix. Bagaimana saya bisa mengecek apakah jalur tertentu berada dalam batas itu?

Atau, dengan kata lain, bagaimana saya bisa memeriksa panjang maksimum lintasan dari soket domain Unix, pada sistem Linux atau Mac OS X?

Kasing penggunaan saya di sini adalah untuk multiplexing SSH: jika ControlPath terlalu panjang, maka multiplexing SSH tidak akan berfungsi karena ia membuat soket domain unix. Saya ingin dapat memeriksa jalur kontrol yang valid tanpa harus benar-benar memulai sesi ssh dan mencari pesan kesalahan.

Lorin Hochstein
sumber

Jawaban:

8

bagaimana cara memeriksa panjang maksimum yang diizinkan dari jalur soket domain Unix, di Linux

Di Linux, panjang ini biasanya didefinisikan sebagai 108.

Itu didefinisikan oleh UNIX_PATH_MAXvariabel dalam /usr/include/linux/un.hfile header:

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

#define UNIX_PATH_MAX   108

Anda dapat menemukan info lebih lanjut di sini:

KRFFR
sumber
Apakah ada alasan mengapa alamat jalur soket Unix lebih terbatas daripada PATH_MAX?
CMCDragonkai
6

Di Mac OS X, Menurut unixhalaman manual:

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

Berikut adalah program yang mengkompilasi pada Linux dan OS X yang akan menampilkan panjang maksimum jalur soket domain 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;
}

Di Linux, output 108, dan pada OS X, output 104.

Lorin Hochstein
sumber