Unix etki alanı soketi için bir yolun maksimum değeri aştığını kontrol edin


9

İşletim sistemleri, bir Unix etki alanı soketinin yolunun uzunluğunu sınırlar. Belirli bir yolun bu sınır dahilinde olup olmadığını nasıl kontrol edebilirim?

Veya başka bir deyişle, bir Linux veya Mac OS X sisteminde Unix etki alanı soketinin izin verilen maksimum uzunluğunu nasıl kontrol edebilirim?

Buradaki kullanım durumum SSH çoğullama içindir: ControlPath çok uzunsa, SSH çoğullama bir unix etki alanı soketi oluşturduğundan çalışmaz. Aslında bir ssh oturumu başlatmak ve hata iletisini aramak zorunda kalmadan geçerli bir denetim yolunu denetlemek istiyorum.

Yanıtlar:


8

Linux'ta bir Unix etki alanı soketinin izin verilen maksimum uzunluğunu nasıl kontrol edebilirim?

Linux'ta bu uzunluk genellikle 108 olarak tanımlanır.

Başlık dosyasındaki UNIX_PATH_MAXdeğişken tarafından tanımlanır /usr/include/linux/un.h:

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

#define UNIX_PATH_MAX   108

Daha fazla bilgiyi burada bulabilirsiniz:


Unix soket yolu adreslerinin PATH_MAX'tan daha sınırlı olmasının bir nedeni var mı?
CMCDragonkai

6

Mac OS X'te, unixMan sayfasına göre:

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 ve OS X üzerinde bir unix etki alanı soketinin yolunun maksimum uzunluğunu çıkaracak bir program.

#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'ta, çıktılar 108ve OS X'te çıktılar 104.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.