Verifique se um caminho excede o máximo para o soquete de domínio Unix


9

Os sistemas operacionais limitam o comprimento de um caminho de um soquete de domínio Unix. Como posso verificar se um caminho específico está dentro desse limite?

Ou, em outras palavras, como posso verificar o comprimento máximo permitido de um caminho de um soquete de domínio Unix, em um sistema Linux ou Mac OS X?

Meu caso de uso aqui é para multiplexação SSH: se o ControlPath for muito longo, a multiplexação SSH não funcionará, pois cria soquetes de domínio unix. Quero poder verificar um caminho de controle válido sem ter que realmente iniciar uma sessão ssh e procurar a mensagem de erro.

Respostas:


8

como posso verificar o comprimento máximo permitido de um caminho de um soquete de domínio Unix, em um Linux

No Linux, esse comprimento é geralmente definido como 108.

É definido pela UNIX_PATH_MAXvariável no /usr/include/linux/un.harquivo de cabeçalho:

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

#define UNIX_PATH_MAX   108

Você pode encontrar mais informações aqui:


Existe uma razão pela qual os endereços de caminho de soquete Unix são mais limitados do que PATH_MAX?
CMCDragonkai

6

No Mac OS X, de acordo com a unixpágina do 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];
       };

Aqui está um programa que é compilado no Linux e no OS X que gera o comprimento máximo do caminho de um soquete de domínio 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;
}

No Linux, ele gera 108e no OS X, ele gera 104.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.