FreeBSDのauditdistdで文書化されていない「proto」コマンドライン引数は何をしますか?

FreeBSDのauditdistdで文書化されていない「proto」コマンドライン引数は何をしますか?

1つあることがわかりますauditdistd(8)FreeBSDで使用できるデーモン。などのいくつかの文書化されたコマンドラインパラメータがあります-c-dここ(リンク))。

文書化されていないコマンドライン引数を処理するコードを偶然見つけたとき、私はそれがどのように機能するかを理解しようとしましたproto

  • 明らかにproto_exec実行時に呼び出され、/usr/sbin/auditdistd proto foo bar baz関数foo bar bazの引数として渡されます。

    /*
     * We are executed from proto to create sandbox.
     */
    if (argc > 1 && strcmp(argv[1], "proto") == 0) {
            argc -= 2;
            argv += 2;
            if (proto_exec(argc, argv) == -1)
                    err(EX_USAGE, "Unable to execute proto");
    }
    

    (望むより/contrib/openbsm/bin/auditdistd/auditdistd.c:main()(関連)詳細については。 )

  • proto_exec機能は次のとおりです。

    int
    proto_exec(int argc, char *argv[])
    {
            struct proto *proto;
            int error;
    
            if (argc == 0) {
                    errno = EINVAL;
                    return (-1);
            }
            TAILQ_FOREACH(proto, &protos, prt_next) {
                    if (strcmp(proto->prt_name, argv[0]) == 0)
                            break;
            }
            if (proto == NULL) {
                    errno = EINVAL;
                    return (-1);
            }
            if (proto->prt_exec == NULL) {
                    errno = EOPNOTSUPP;
                    return (-1);
            }
            error = proto->prt_exec(argc, argv);
            if (error != 0) {
                    errno = error;
                    return (-1);
            }
            /* NOTREACHED */
            return (0);
    }
    

    (望むより/contrib/openbsm/bin/auditdistd/proto.c:proto_exec()(関連)詳細については。 )

    正直なところ、ここで何が起こっているのか理解できません。

  • 変数protosは次のように初期化されます。

    static TAILQ_HEAD(, proto) protos = TAILQ_HEAD_INITIALIZER(protos);
    

    (望むより/contrib/openbsm/bin/auditdistd/proto.c(関連)詳細については。 )

  • /usr/sbin/auditdistd proto foo呼び出されたら、次のように言います。

    auditdistd:プロトタイプを実行できません:無効な引数

このオプションが何であるか、どのように使用するのかご存知ですか?

ベストアンサー1

Auditdistdはサンドボックスを使用します。親プロセスから子プロセスへのメモリリークの発生を防ぐために、分岐(2)操作を実行するだけでなく、 auditdistd バイナリも実行します。新しく実行されたコマンドが子プロセスであることを知らせるために、「proto」パラメータが渡されます。

おすすめ記事