空のホスト名 (sethostname)

空のホスト名 (sethostname)

sethostname関係のない理由で、システムコールを使用してLinuxシステムのホスト名を空の文字列に設定したいと思います。

#include <unistd.h>

int main()
{
    sethostname("", 0);
    return 0;
}

原則として動作しますが、a.) 空のホスト名が SUSv2 および POSIX.1 と互換性があるか、 b.) 空のホスト名を設定すると、現在予期しない否定的な副作用が発生する可能性があるかどうか疑問に思います。

答え1

一部のプログラムでは混乱を招く可能性があり、他のプログラムで解析しようとすると問題が発生する可能性があります。

たとえば、私が試したシステムでは、出力は次uname -aのようになりました。

Linux  2.6.42-amd64 #1 SMP ...

ここで、ホスト名は2つのスペースの間になければなりません。プログラムがデフォルトでawkが実行する方法、つまり連続した空白を1つとして扱う方法で解析しようとすると、最終的に間違ったフィールドが選択されます。もちろん、uname -m構文解析の代わりに、または他の選択肢を使用することもできますがuname -a、他のプログラムにも同じことが当てはまります。

rsyslog空の文字列をプレースホルダに置き換えて、この問題を回避してください。

Jan 15 18:28:14 localhost-empty-hostname kernel: [32741563.144045]...

これは問題を引き起こすべきではありませんが、きれいではありません。

(まあ、少なくともDebianでは、hostnameコマンドが空のホスト名を受け入れないので、誰かがこれがサポートされている構成だとは思わないようです。カーネルがこれを許可するという事実に少し驚きましたが、おそらくそうではありません。の一部を除いて内部で使用してください。)

関連情報