当最大天数<1时,pam_acct_mgmt segfaulting到期前的天数警告

时间:2014-01-14 19:27:23

标签: c segmentation-fault pam

我正在编写一个非常简单的PAM身份验证函数,如下所示。

 int authenticate(char* user, char* pass)
 {
    int value = pam_start("passwd", user, &conv, &pamh);
    if (value == PAM_SUCCESS)
    {
       reply = (struct pam_response*)malloc(sizeof(struct pam_response));
       reply[0].resp = pass;
       reply[0].resp_retcode = 0;
       value = pam_authenticate(pamh, 0);
       if (value == PAM_SUCCESS)
       {
          // This call is seg faulting.
          value = pam_acct_mgmt(pamh, 0);
          return value;
       }
       else
          printf("Failed on Authentication\n");
    }
  }

  pam_end(pamh, value);
  return value;
}

conv定义如下:

int nullConv(int num_msg, const struct pam_message** msg, struct pam_response** resp,
    void* appdata_ptr)
{
   *resp = reply;
   return PAM_SUCCESS;
}
static struct pam_conv conv = { nullConv, NULL };

这是一个非常简单的功能,大部分时间都可以使用。我正在开发一个Linux机器。当我弄乱用户帐户时,请说bob并使用Maximum number of days between password change使Number of days of warning before password expires小于#chage -M 28 bob

#chage -W 29 bob

pam_acct_mgmt

应用程序在调用#chage -M 30 bob时出错。如果我更改它以使最大数量大于警告前的数字,我的应用程序将按预期运行。

{{1}}。现在我很好,用户可以登录。

1 个答案:

答案 0 :(得分:0)

我找到了以下帖子: https://serverfault.com/questions/249671/switch-on-pam-debugging-to-syslog 并遵循公认的解决方案。我在/var/log/debug.log文件中找到的结果显示pam_tally(system-auth:auth): unknown option: reset

我所指的PAM /etc/pam.d/system-auth文件中的一行是一行

account required pam_tally.so reset

当我删除reset选项时,一切正常。

顺便说一下,pam_vsyslog有一个严重的错误。这是一个简单的strcmp