在pam_syslog.c中添加新功能

问题描述

我的代码使用Pam库进行用户身份验证。登录失败时。我需要以特定格式打印syslog消息,而不是libpam库的pam_vsyslog函数中的当前syslog格式。

我打算编写一个函数,以我需要的格式编写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 (将#修改为@)