2

我正在尝试在我的远程 linux 服务器上设置一个 git 存储库,以便我可以通过 ssh 连接并以相当安全的方式与几个朋友共享单一登录。我遇到了问题,因为我的 sshd 通过FORCE_COMMANDssh 配置中的 set 调用 duo security(指向'/usr/sbin/login_duo')。我决定解决这个问题;所以我检查了 git 代码并选择了足够的 C 来进行更改(在shell.c中),以便它忽略 /usr/sbin/login_duo 调用和run_shell()创建正常 git-shell 提示符的调用。(我现在很确定这不是正确的解决方案,因为我不希望git clone调用以 shell 结束,但这个问题似乎仍然有效)

无论如何,我设法让git>提示出现,但它似乎没有处理我传入的输入(一旦我输入了输入/退出然后点击返回)。我希望它打印“git got x”,但它只是坐在那里。有任何想法吗?

            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 回答