/** * \brief Function to change VISHNU user password * \fn int resetPassword(UMS_Data::User user, std::string sendmailScriptPath) * \param user The user data structure * \param sendmailScriptPath The path to the script for sending emails * \return raises an exception on error */ int UserServer::resetPassword(UMS_Data::User& user, std::string sendmailScriptPath) { std::string sqlResetPwd; std::string sqlUpdatePwdState; std::string passwordCrypted; std::string pwd; //If the user exists if (exist()) { //if the user is an admin if (isAdmin()) { //if the user whose password will be reset exists if (getAttribut("where userid='"+user.getUserId()+"'").size() != 0) { //generation of a new password pwd = generatePassword(user.getUserId(), user.getUserId()); user.setPassword(pwd.substr(0,PASSWORD_MAX_SIZE)); //to get the password encryptes passwordCrypted = vishnu::cryptPassword(user.getUserId(), user.getPassword()); //The sql code to reset the password sqlResetPwd = "UPDATE users SET pwd='"+passwordCrypted+"' where " "userid='"+user.getUserId()+"';"; //sql code to update the passwordstate sqlUpdatePwdState = "UPDATE users SET passwordstate=0 " "where userid='"+user.getUserId()+"' and pwd='"+passwordCrypted+"';"; //To append the previous sql codes sqlResetPwd.append(sqlUpdatePwdState); //Execution of the sql code on the database mdatabaseVishnu->process( sqlResetPwd.c_str()); //to get the email adress of the user std::string email = getAttribut("where userid='"+user.getUserId()+"'", "email"); user.setEmail(email); //Send email std::string emailBody = getMailContent(user, false); sendMailToUser(user, emailBody, "Vishnu message: password reset", sendmailScriptPath); } // End if the user whose password will be reset exists else { UMSVishnuException e (ERRCODE_UNKNOWN_USERID, "You must use a global VISHNU identifier"); throw e; } } //END if the user is an admin else { UMSVishnuException e (ERRCODE_NO_ADMIN); throw e; } } //END if the user exists else { UMSVishnuException e (ERRCODE_UNKNOWN_USER); throw e; } return 0; }//END: resetPassword(UMS_Data::User user)
/** * \brief Function to get the email content * \param user the user who will receives the email * \param flagAdduser a flag which means that it is uses on adduser function * \return the email content */ std::string UserServer::getMailContent(const UMS_Data::User& user, bool flagAdduser) { std::string content; std::stringstream newline; newline << std::endl; if (flagAdduser) { content.append("Dear "+user.getFirstname()+" "+user.getLastname()+ ","); content.append(newline.str()); content.append("This is respectively your userId and your password generated by vishnu:"); content.append(newline.str()); content.append("userId:"+ user.getUserId()+","); content.append(newline.str()); content.append("password:"******"Dear "+user.getUserId()+","); content.append(newline.str()); content.append("This is your new password: "+user.getPassword()); } return content; }
bool UMSAuthenticator::authenticate(UMS_Data::User& user) { DbFactory factory; Database* databaseVishnu = factory.getDatabaseInstance(); //To encrypt the clear password user.setPassword(vishnu::cryptPassword(user.getUserId(), user.getPassword())); std::string sqlCommand = (boost::format("SELECT numuserid" " FROM users" " WHERE userid='%1%'" " AND pwd='%2%'" " AND users.status<>%3%" )%databaseVishnu->escapeData(user.getUserId()) %databaseVishnu->escapeData(user.getPassword()) %vishnu::STATUS_DELETED).str(); boost::scoped_ptr<DatabaseResult> result(databaseVishnu->getResult(sqlCommand.c_str())); return (result->getFirstElement().size() != 0); }
bool LDAPAuthenticator::authenticate(UMS_Data::User& user) { bool authenticated = false; std::string uri, authlogin, authpassword, ldapbase, authSystemStatus, userid, pwd; DbFactory factory; Database* databaseVishnu = factory.getDatabaseInstance(); std::string sqlCommand = (boost::format("SELECT uri, authlogin, authpassword, ldapbase, authsystem.status, userid, pwd" " FROM ldapauthsystem, authsystem, authaccount, users" " WHERE aclogin='******'" " AND authsystem.authtype=%2%" " AND authaccount.authsystem_authsystemid=authsystem.numauthsystemid" " AND ldapauthsystem.authsystem_authsystemid=authsystem.numauthsystemid" " AND authaccount.users_numuserid=users.numuserid" " AND authsystem.status<>%3%" " AND users.status<>%4%" )%databaseVishnu->escapeData(user.getUserId()) %LDAPTYPE %vishnu::STATUS_DELETED %vishnu::STATUS_DELETED).str(); boost::scoped_ptr<DatabaseResult> result(databaseVishnu->getResult(sqlCommand.c_str())); //If there is no results if (result->getNbTuples() == 0) { UMSVishnuException e (ERRCODE_UNKNOWN_USER, "There is no user-authentication account declared in VISHNU with this identifier"); throw e; } std::vector<std::string> tmp; std::vector<std::string>::iterator ii; for (int i = 0; i < static_cast <int> (result->getNbTuples()); ++i) { tmp.clear(); tmp = result->get(i); ii=tmp.begin(); uri = *ii; authlogin = *(++ii); authpassword = *(++ii); ldapbase = *(++ii); authSystemStatus = *(++ii); userid = *(++ii); pwd = *(++ii); if (vishnu::convertToInt(authSystemStatus) != vishnu::STATUS_ACTIVE) { UMSVishnuException e (ERRCODE_UNKNOWN_AUTH_SYSTEM, "It is locked"); throw e; } try { LDAPProxy ldapPoxy(uri, user.getUserId(), "", user.getPassword()); ldapPoxy.connectLDAP(ldapbase); authenticated = true; user.setUserId(userid); user.setPassword(pwd); break; } catch (UMSVishnuException& e) { if (e.getMsgI() != ERRCODE_UNKNOWN_USER) { throw UMSVishnuException(e); } } catch (SystemException& e) { //If there is a connection problem to LDAP and it is not the last LDAP account to check if ((e.getMsgI() == ERRCODE_AUTHENTERR) && (i == (static_cast <int> (result->getNbTuples())-1))) { throw SystemException(e); } } } return authenticated; }