问题遇到的现象和发生背景
是为了获得私钥数据,使用接口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;
}