gpt4 book ai didi

git-shell 在提示时处理的命令不执行任何操作(只是挂起)

转载 作者:太空宇宙 更新时间:2023-11-03 23:33:16 24 4
gpt4 key购买 nike

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

无论如何,我设法让 git> 提示出现,但它似乎没有处理我传入的输入(一旦我输入 enter/exit,然后按回车键)。我希望它打印“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-->`

最佳答案

line 的类型:

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


fprintf(stderr, "git got %s\n", line ) 应该生成一条编译器警告,如下所示:
警告:格式“%s”需要“char *”类型的参数...

忽略此警告并运行代码可能会导致段错误或其他严重崩溃。

试试这个:

fprintf(stderr, "git got %s\n", line.buf );

关于git-shell 在提示时处理的命令不执行任何操作(只是挂起),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10363311/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com