ตรวจสอบว่าเส้นทางเกินขนาดสูงสุดสำหรับซ็อกเก็ตโดเมน Unix หรือไม่


9

ระบบปฏิบัติการจำกัดความยาวของเส้นทางของซ็อกเก็ตโดเมน Unix ฉันจะตรวจสอบว่าเส้นทางใดเส้นทางหนึ่งอยู่ภายในขีด จำกัด นั้นได้อย่างไร

หรือเพื่อใช้อีกวิธีฉันจะตรวจสอบความยาวสูงสุดที่อนุญาตของพา ธ ของซ็อกเก็ตโดเมน Unix บนระบบ Linux หรือ Mac OS X ได้อย่างไร

กรณีการใช้งานของฉันที่นี่สำหรับการทำ Multiplexing SSH: ถ้า ControlPath ยาวเกินไปการทำ Multiplex SSH จะไม่ทำงานเนื่องจากจะสร้างซ็อกเก็ตโดเมน unix ฉันต้องการตรวจสอบเส้นทางการควบคุมที่ถูกต้องโดยไม่ต้องเริ่มเซสชัน ssh และค้นหาข้อความแสดงข้อผิดพลาด

คำตอบ:


8

ฉันจะตรวจสอบความยาวสูงสุดที่อนุญาตของพา ธ ของซ็อกเก็ตโดเมน Unix บน Linux ได้อย่างไร

บน Linux ความยาวนี้มักถูกกำหนดเป็น 108

มันถูกกำหนดโดยUNIX_PATH_MAXตัวแปรใน/usr/include/linux/un.hไฟล์ส่วนหัว:

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

#define UNIX_PATH_MAX   108

คุณสามารถหาข้อมูลเพิ่มเติมได้ที่นี่:


มีเหตุผลที่อยู่ซ็อกเก็ตเส้นทาง Unix มี จำกัด มากกว่า PATH_MAX หรือไม่?
CMCDragonkai

6

บน Mac OS X ตาม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];
       };

ต่อไปนี้เป็นโปรแกรมที่รวบรวมทั้ง Linux และ OS X ที่จะส่งออกความยาวสูงสุดของเส้นทางของซ็อกเก็ตโดเมน 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;
}

บน Linux มันจะออกผลลัพธ์108และบน OS X 104มันจะออกผลลัพธ์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.