case OTP_RC_AUTH_ERR: return RLM_MODULE_REJECT;
case OTP_RC_MAXTRIES: return RLM_MODULE_USERLOCK;
case OTP_RC_NEXTPASSCODE: return RLM_MODULE_USERLOCK;
+ case OTP_RC_IPIN: return RLM_MODULE_REJECT;
case OTP_RC_SERVICE_ERR: return RLM_MODULE_FAIL;
default: return RLM_MODULE_FAIL;
}
otp_request.pwe.pwe = pwe;
/* otp_pwe_present() (done by caller) guarantees that both of these exist */
- cvp = pairfind(request->packet->vps, pwattr[pwe - 1]);
- rvp = pairfind(request->packet->vps, pwattr[pwe]);
+ cvp = pairfind(request->packet->vps, pwattr[pwe - 1]->attr, pwattr[pwe - 1]->vendor);
+ rvp = pairfind(request->packet->vps, pwattr[pwe]->attr, pwattr[pwe]->vendor);
/* this is just to quiet Coverity */
if (!rvp || !cvp)
return RLM_MODULE_REJECT;
if (!fdp || fdp->fd == -1)
return -1;
- if ((rc = otp_write(fdp, (const char *) request, sizeof(*request))) != 0) {
- if (rc == EPIPE)
+ if ((rc = otp_write(fdp, (const char *) request, sizeof(*request))) != sizeof(*request)) { if (rc == 0)
goto retry; /* otpd disconnect */ /*TODO: pause */
else
return -1;
while (nleft) {
if ((nwrote = write(fdp->fd, &buf[len - nleft], nleft)) == -1) {
- if (errno == EINTR || errno == EPIPE) {
+ if (errno == EINTR) {
continue;
} else {
(void) radlog(L_ERR, "rlm_otp: %s: write to otpd: %s",