问题描述
我的代码使用Pam库进行用户身份验证。登录失败时。我需要以特定格式打印syslog消息,而不是libpam库的pam_vsyslog函数中的当前syslog格式。
Below are deFinitions : in file pam_ext.h
extern void PAM_FORMAT((printf,3,0)) PAM_NONNULL((3))
pam_kniwx_vsyslog (const pam_handle_t *pamh,int priority,const char *fmt,va_list args);
extern void PAM_FORMAT((printf,4)) PAM_NONNULL((3))
pam_kniwx_syslog (const pam_handle_t *pamh,...);
Implementation: libpam/libpam/pam_syslog.c
pam_kniwx_vsyslog (const pam_handle_t *pamh,va_list args)
{
char *msgbuf2 = NULL;
int save_errno = errno;
errno = save_errno;
if (vasprintf (&msgbuf2,fmt,args) < 0)
{
syslog (LOG_AUTHPRIV|LOG_ERR,"vasprintf: %m");
_pam_drop (msgbuf1);
return;
}
errno = save_errno;
syslog (LOG_AUTHPRIV|priority,"%s",msgbuf2);
_pam_drop (msgbuf2);
}
void
pam_kniwx_syslog (const pam_handle_t *pamh,...)
{
va_list args;
va_start (args,fmt);
pam_kniwx_vsyslog (pamh,priority,args);
va_end (args);
}
如果身份验证失败,我想从libpam / modules / pam_unix / support.c函数调用pam_kniwx_syslog:
pam_kniwx_syslog(pamh,LOG_NOTICE,"authentication failure; "
"logname=%s uid=%d euid=%d "
tty=%s ruser=%s rhost=%s "
"%s%s",new->name,new->uid,new->euid,tty ? (const char *)tty : "",ruser ? (const char *)ruser : "",rhost ? (const char *)rhost : "",new->user && new->user[0] != '\0')
? " user=" : "",new->user
);
有了此更改,当我编译代码时,尽管有定义和头文件包含,但我似乎还是遇到了未定义的引用。
/usr/src/debug/libpam/1.3.0-r5/libpam-1.3.0/modules/pam_unix/../../../../../../../../libpam/modules/pam_unix/support.c:850: undefined reference to `pam_kniwx_syslog'
collect2: error: ld returned 1 exit status
Makefile:799: recipe for target 'pam_unix.la' Failed
make[3]: *** [pam_unix.la] Error 1
make[3]: Leaving directory
非常感谢您提供解决此问题的帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)