パスがUnixドメインソケットの最大値を超えているかどうかを確認する


9

オペレーティングシステムは、Unixドメインソケットのパスの長さを制限します。特定のパスがその制限内にあるかどうかを確認するにはどうすればよいですか?

または、言い換えると、LinuxまたはMac OS Xシステムで、Unixドメインソケットのパスの最大許容長を確認するにはどうすればよいですか?

ここでの使用例はSSH多重化です。ControlPathが長すぎると、UNIXドメインソケットが作成されるため、SSH多重化は機能しません。実際にsshセッションを開始してエラーメッセージを探すことなく、有効な制御パスを確認できるようにしたいのですが。

回答:


8

Linuxで、Unixドメインソケットのパスの最大許容長を確認するにはどうすればよいですか

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 2016年

6

Mac OS Xでは、unixmanページによると:

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では、108OS Xではを出力します104

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.