Compruebe si una ruta supera el máximo para el socket de dominio Unix

9

Los sistemas operativos limitan la longitud de una ruta de un socket de dominio Unix. ¿Cómo puedo verificar si una ruta en particular está dentro de ese límite?

O, para decirlo de otra manera, ¿cómo puedo verificar la longitud máxima permitida de una ruta de un socket de dominio Unix, en un sistema Linux o Mac OS X?

Mi caso de uso aquí es para la multiplexación SSH: si ControlPath es demasiado largo, entonces la multiplexación SSH no funcionará, ya que crea un socket de dominio unix. Quiero poder verificar una ruta de control válida sin tener que iniciar realmente una sesión ssh y buscar el mensaje de error.

Lorin Hochstein
fuente

Respuestas:

8

¿Cómo puedo verificar la longitud máxima permitida de una ruta de un socket de dominio Unix, en un Linux

En Linux, esta longitud generalmente se define como 108.

Está definido por la UNIX_PATH_MAXvariable en el /usr/include/linux/un.harchivo de encabezado:

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

#define UNIX_PATH_MAX   108

Puede encontrar más información aquí:

krisFR
fuente
¿Hay alguna razón por la cual las direcciones de ruta de socket de Unix son más limitadas que PATH_MAX?
CMCDragonkai
6

En Mac OS X, según la unixpágina de 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];
       };

Aquí hay un programa que compila tanto en Linux como en OS X que generará la longitud máxima de la ruta de un socket de dominio 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;
}

En Linux, emite 108, y en OS X, emite 104.

Lorin Hochstein
fuente