2

リモートLinuxサーバーにgitリポジトリを設定して、ssh経由で接続し、シングルログインを数人の友人とかなり安全な方法で共有できるようにしようとしています。FORCE_COMMANDsshdがsshconfig (を指す)のsetを介してduo securityを呼び出すため、問題が発生しています'/usr/sbin/login_duo'。私はこれを回避することにしました。そこで、gitコードをチェックアウトし、(shell.cで)変更を加えるのに十分なCを取得して、/ usr / sbin/login_duo呼び出しとrun_shell()通常のgit-shellプロンプトを作成する呼び出しを無視するようにしました。git clone(呼び出しがシェルで終わるとは思わないので、これは正しい解決策ではないと確信していますが、この質問はまだ有効なようです)

とにかく、git>プロンプトを表示することができましたが、渡した入力を処理していないようです(Enter / Exitと入力して、Returnキーを押した後)。「gitgotx」と表示されると思いますが、そこにあります。何か案は?

            fprintf(stderr, "git> ");
            if (strbuf_getline(&line, stdin, '\n') == EOF) {
                    fprintf(stderr, "\n");
                    strbuf_release(&line);
                    break;
            }
            fprintf(stderr, "git got %s\n", line );

例:

egwor@mars:~/projects/test$ git clone ssh://git@localhost/home/git/repo1
Cloning into repo1...
git@localhost's password: 
login_duo ignored <-- where I split off and call the shell function
git> exit
<--hangs-->`
4

1 に答える 1

2

lineタイプは次のとおりです。

struct strbuf {
    size_t alloc;
    size_t len;
    char *buf;
};


fprintf(stderr, "git got %s\n", line )次の行に沿ってコンパイラ警告を生成する必要があります。
warning: format ‘%s’ expects argument of type ‘char *’...

この警告を無視してコードを実行すると、seg-fault やその他の不具合が発生する可能性があります。

代わりにこれを試してください:

fprintf(stderr, "git got %s\n", line.buf );
于 2012-04-28T14:44:26.007 に答える