cycf 2022-07-19 00:57 采纳率: 70.6%
浏览 41
已结题

C++回调函数,参数获取和保存

问题遇到的现象和发生背景

是为了获得私钥数据,使用接口nc_server_ssh_set_hostkey_clb,其是父函数,np2srv_hostkey_cb是回调函数,np2srv_hostkey_cb这个回调函数的参数是作为返回值,有个问题是,回调函数的参数,为什么在调用的时候,有些参数没找到声明,是直接在参数中就定义和声明了吗?另一个问题是,回调函数中可以获得 char **privkey_data这个数据,但是在回调调用完后,不就释放了吗?那我获得的这个私钥数据保存在哪啊?

问题相关代码,请勿粘贴截图

nc_server_ssh_set_hostkey_clb(np2srv_hostkey_cb, NULL, NULL);

nc_server_ssh_set_hostkey_clb(int (*hostkey_clb)(const char *name, void *user_data, char **privkey_path,
char **privkey_data, NC_SSH_KEY_TYPE *privkey_type), void *user_data, void (*free_user_data)(void *user_data))
{
if (!hostkey_clb) {
ERRARG("hostkey_clb");
return;
}

server_opts.hostkey_clb = hostkey_clb;
server_opts.hostkey_data = user_data;
server_opts.hostkey_data_free = free_user_data;

}

int
np2srv_hostkey_cb(const char *name, void *UNUSED(user_data), char **UNUSED(privkey_path), char **privkey_data,
NC_SSH_KEY_TYPE *privkey_type)
{
sr_session_ctx_t *sr_sess;
char *xpath;
sr_data_t *data = NULL;
int r, rc = -1;

r = sr_session_start(np2srv.sr_conn, SR_DS_RUNNING, &sr_sess);
if (r != SR_ERR_OK) {
    return -1;
}

/* get hostkey data from sysrepo */
if (asprintf(&xpath, "/ietf-keystore:keystore/asymmetric-keys/asymmetric-key[name='%s']", name) == -1) {
    EMEM;
    goto cleanup;
}
r = sr_get_subtree(sr_sess, xpath, 0, &data);
free(xpath);
if (r != SR_ERR_OK) {
    goto cleanup;
} else if (!data) {
    ERR("Hostkey \"%s\" not found.", name);
    goto cleanup;
}

/* parse private key values */
if (np2srv_sr_get_privkey(data->tree, privkey_data, privkey_type)) {
    goto cleanup;
}

/* success */
rc = 0;

cleanup:
sr_release_data(data);
sr_session_stop(sr_sess);
return rc;
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 7月27日
    • 创建了问题 7月19日

    悬赏问题

    • ¥15 做一个简单项目,用Python分析共享单车的数据
    • ¥20 在使用CESM2.2.0模型进行case.submit过程中出现如下错误(关键词-Map)
    • ¥15 有办法改变通过wifi进入的网站的设置吗
    • ¥15 所以到底怎么算!算到凌晨五点都算不出来!
    • ¥15 label_studio
    • ¥15 请教如何phython发邮件
    • ¥15 linux系统安装问题
    • ¥15 路径规划如何采用矢量法让他们尽量在一个方向
    • ¥15 crypto 一道rsa解密题
    • ¥15 survIDINRI已将生存时间转为数值变量,仍错误 Time variable is not numeric。