【问题标题】:SSH Keyboard Interactive authenticationSSH 键盘交互认证
【发布时间】:2012-10-07 22:04:19
【问题描述】:

我目前尝试在 Objective-C 中扩展 libssh2 Wrapper。

我正在尝试实现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(我使用固定字符串来测试它是否有效) .

有没有可能让它工作?!

朱利安

【问题讨论】:

    标签: objective-c ios authentication libssh2


    【解决方案1】:

    kbdCallback 实际上不是一个方法,它是一个函数 - 你可以告诉几种方法 - 它前面没有 -+,返回类型周围没有括号,而且方法也不能static。所以,由于它是一个函数而不是一个方法,所以没有与之关联的对象,也没有self指针;因此您无法直接访问任何实例变量。我想有几种方法可以解决这个问题;您可以拥有对象的静态实例,该函数可以从中获取密码,或者如果有某种方法可以传递要在回调中使用的上下文指针,您也许可以以这种方式传递对象。

    关于您的SIGABRT,您能否说出具体发生在哪一行,以及您使用的参数的值是什么?从你的问题看不清楚。

    【讨论】:

    • 实际上我不能将任何上下文指针传递给函数。当我更改传递的参数时,我在第一行收到警告(对应于我上面的代码):incompatible pointer types passingSIABRT 也出现在第一行。
    • @Julian 你可能不得不做一些不愉快的事情,比如在等待回调时将用户名和密码存储在static 变量中。另外,你能说一下当 libssh2_userauth_keyboard_interactive 崩溃时,参数的值是什么?
    【解决方案2】:

    http://comments.gmane.org/gmane.network.ssh.libssh2.devel/4163

    原因: Win32 下 malloc-in-EXE-free-in-DLL。
    修复: 使用自定义的 free/malloc/realloc 函数。在下面添加

    static void *my_alloc(size_t count, void **abstract)            {   return malloc(count);}
    static void my_free(void *ptr, void **abstract)                 {   free(ptr);}
    static void *my_realloc(void *ptr, size_t count, void **abstract){  return realloc(ptr, count);}
    

    然后替换

    libssh2_session_init();
    

    libssh2_session_init_ex(my_alloc, my_free, my_realloc, NULL);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-21
      • 2017-12-10
      • 2022-01-21
      • 2011-01-16
      • 2021-08-19
      • 2020-11-06
      • 2011-03-16
      • 1970-01-01
      相关资源
      最近更新 更多