我目前尝试在Objective-C中扩展libssh2包装器。SSH键盘交互式身份验证
我试图实施libssh2_userauth_keyboard_interactive
方法。我的问题是响应回调。
我发现在网络上此实现绕过“真正的”互动性和使用的实际密码进行身份验证可能:
int error = libssh2_userauth_keyboard_interactive(session, [username UTF8String], &kbdCallback);
static void kbdCallback (const char *name, int name_len, const char *instruction, int instruction_len, int num_prompts, const LIBSSH2_USERAUTH_KBDINT_PROMPT *prompts, LIBSSH2_USERAUTH_KBDINT_RESPONSE *responses, void **abstract)
{
responses[0].text = (char *)[password UTF8String]; // resp. (char *)[@"test" UTF8String]
responses[0].length = strlen([password UTF8String]); // resp. (char *)[@"test" UTF8String]
}
我的一个问题是对static void
中访问实例变量password
调用和我的另一个问题是,当我尝试调用该方法时,我得到了SIGABRT(我使用了一个固定字符串来测试它是否有效)。
有没有可能让这个工作?
朱利安
更换
其实我不能通过任何上下文函数指针。当我改变传递的参数时,我得到了第一行的警告(对应于我上面的代码):'不兼容的指针类型传递'。 'SIABRT'也发生在第一行。 –
@Julian你可能不得不做一些不愉快的事情,比如在等待回调时将用户名和密码存储在'static'变量中。另外,你可以说当参数崩溃时,什么参数的值被传递给'libssh2_userauth_keyboard_interactive'? –