问题描述
我一直在尝试为第二因素验证实施自定义PAM。自定义 PAM 需要读取选定的因子(整数)并将其传递给程序。下面的代码在 SUDO 和 SU 中工作正常,但我收到“连接被主机端口 22 关闭”尝试使用 SSH 时出错。谁能帮我解决这个问题。
static char *request_pass(pam_handle_t *pamh,int echocode,PAM_CONST char *prompt)
{
// Query user for verification code
PAM_CONST struct pam_message msg = { .msg_style = PAM_PROMPT_ECHO_ON,.msg = prompt };
PAM_CONST struct pam_message *msgs = &msg;
// PAM_CONST struct pam_message msg;
struct pam_conv conv = {re,NULL};
struct pam_response *resp = NULL;
int retval = re(1,&msgs,&resp,"");
return "";
}
int re(int nummsg,PAM_CONST struct pam_message **msg,struct pam_response **resp,void *appdata_ptr)
{
*resp = malloc(sizeof(struct pam_response));
assert(*resp);
(*resp)->resp = calloc(1024,1);
printf("%s^^ ",msg[0]->msg);
fflush(stdout);
assert(fgets((*resp)->resp,1024,stdin));
char *ret = NULL;
ret = (*resp)->resp;
// Deallocate temporary storage
if (*resp)
{
if (!ret)
{
free((*resp)->resp);
}
free(*resp);
}
factorselect = atoi(ret);
return PAM_SUCCESS;
}
char *
s_prompt(void *arg,const char *prompt,char *buf,size_t bufsz)
{
char *p = NULL;
if (pam_prompt((pam_handle_t *)arg,PAM_PROMPT_ECHO_ON,&p,"%s",prompt) != PAM_SUCCESS || p == NULL) {
return (NULL);
}
strncpy(buf,p,bufsz);
free(p);
return (buf);
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)