int rsPamAuthRequest (rsComm_t *rsComm, pamAuthRequestInp_t *pamAuthRequestInp, pamAuthRequestOut_t **pamAuthRequestOut) { rodsServerHost_t *rodsServerHost; int status; status = getAndConnRcatHost(rsComm, MASTER_RCAT, rsComm->clientUser.rodsZone, &rodsServerHost); if (status < 0) { return(status); } if (rodsServerHost->localFlag == LOCAL_HOST) { #ifdef RODS_CAT status = _rsPamAuthRequest(rsComm, pamAuthRequestInp, pamAuthRequestOut); #else status = SYS_NO_RCAT_SERVER_ERR; #endif } else { #ifdef USE_SSL /* protect the PAM plain text password by using an SSL connection to the remote ICAT */ status = sslStart(rodsServerHost->conn); if (status) { rodsLog(LOG_NOTICE, "rsPamAuthRequest: could not establish SSL connection, status %d", status); return(status); } #else rodsLog(LOG_ERROR, "iRODS doesn't include SSL support, required for PAM authentication."); return SSL_NOT_BUILT_INTO_SERVER; #endif /* USE_SSL */ status = rcPamAuthRequest(rodsServerHost->conn, pamAuthRequestInp, pamAuthRequestOut); #ifdef USE_SSL sslEnd(rodsServerHost->conn); #endif rcDisconnect(rodsServerHost->conn); rodsServerHost->conn = NULL; if (status < 0) { rodsLog(LOG_NOTICE, "rsPamAuthRequest: rcPamAuthRequest to remote server failed, status %d", status); } } return (status); }
int rsPamAuthRequest( rsComm_t *rsComm, pamAuthRequestInp_t *pamAuthRequestInp, pamAuthRequestOut_t **pamAuthRequestOut ) { rodsServerHost_t *rodsServerHost; int status; status = getAndConnRcatHost( rsComm, MASTER_RCAT, (const char*)rsComm->clientUser.rodsZone, &rodsServerHost ); if ( status < 0 ) { return status; } if ( rodsServerHost->localFlag == LOCAL_HOST ) { #ifdef RODS_CAT status = _rsPamAuthRequest( rsComm, pamAuthRequestInp, pamAuthRequestOut ); #else status = SYS_NO_RCAT_SERVER_ERR; #endif } else { /* protect the PAM plain text password by using an SSL connection to the remote ICAT */ status = sslStart( rodsServerHost->conn ); if ( status ) { rodsLog( LOG_NOTICE, "rsPamAuthRequest: could not establish SSL connection, status %d", status ); return status; } status = rcPamAuthRequest( rodsServerHost->conn, pamAuthRequestInp, pamAuthRequestOut ); sslEnd( rodsServerHost->conn ); rcDisconnect( rodsServerHost->conn ); rodsServerHost->conn = NULL; if ( status < 0 ) { rodsLog( LOG_NOTICE, "rsPamAuthRequest: rcPamAuthRequest to remote server failed, status %d", status ); } } return status; }