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

9

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

Ou, em outras palavras, como posso verificar o tamanho 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 um sockets de domínio unix. Eu quero ser capaz de verificar um caminho de controle válido sem precisar iniciar uma sessão ssh e procurar a mensagem de erro.

    
por Lorin Hochstein 01.11.2014 / 20:18

2 respostas

8

how can I check the maximum permitted length of a path of a Unix domain socket, on a Linux

No Linux, esse comprimento é geralmente definido como 108.

Ele é definido pela variável UNIX_PATH_MAX no arquivo de cabeçalho /usr/include/linux/un.h :

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

#define UNIX_PATH_MAX   108

Você pode encontrar mais informações aqui:

por 02.11.2014 / 03:18
5

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

Aqui está um programa que compila tanto no Linux quanto no OS X, que produzirá o tamanho 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 108 e, no OS X, gera 104 .

    
por 02.11.2014 / 03:32