From 0a27f3f0957a16bc899452cbecf14d1417f381a7 Mon Sep 17 00:00:00 2001 From: luoliangyi <87842688@qq.com> Date: Mon, 12 Dec 2022 10:32:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AF=86=E7=A0=81=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E9=9C=80=E8=A6=81=E4=BD=BF=E7=94=A8=E6=97=A7=E5=AF=86?= =?UTF-8?q?=E7=A0=81=E8=BF=9B=E8=A1=8C=E7=A1=AE=E8=AE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/HGPdtToolDb/HGPdtToolDb.cpp | 4 +- db/HGPdtToolDb/HGPdtToolDb.h | 2 +- db/HGPdtToolDb/HGPdtToolDbImpl.cpp | 58 ++++++++++++++++++++------ db/HGPdtToolDb/HGPdtToolDbImpl.hpp | 2 +- db/HGPdtToolDbTest/HGPdtToolDbTest.cpp | 6 +-- 5 files changed, 52 insertions(+), 20 deletions(-) diff --git a/db/HGPdtToolDb/HGPdtToolDb.cpp b/db/HGPdtToolDb/HGPdtToolDb.cpp index 504de18..987f07e 100644 --- a/db/HGPdtToolDb/HGPdtToolDb.cpp +++ b/db/HGPdtToolDb/HGPdtToolDb.cpp @@ -111,7 +111,7 @@ HGResult HGAPI HGPdtToolDb_SetPassword(HGPdtToolDbUserMgr userMgr, const HGChar* return userMgrImpl->SetPassword(userName, pwd); } -HGResult HGAPI HGPdtToolDb_ModifyPassword(HGPdtToolDbUserMgr userMgr, const HGChar* newPwd) +HGResult HGAPI HGPdtToolDb_ModifyPassword(HGPdtToolDbUserMgr userMgr, const HGChar* oldPwd, const HGChar* newPwd) { if (NULL == userMgr) { @@ -119,7 +119,7 @@ HGResult HGAPI HGPdtToolDb_ModifyPassword(HGPdtToolDbUserMgr userMgr, const HGCh } HGPdtToolDbUserMgrImpl* userMgrImpl = (HGPdtToolDbUserMgrImpl*)userMgr; - return userMgrImpl->ModifyPassword(newPwd); + return userMgrImpl->ModifyPassword(oldPwd, newPwd); } HGResult HGAPI HGPdtToolDb_Export(HGPdtToolDbUserMgr userMgr, const HGChar* xlsPath) diff --git a/db/HGPdtToolDb/HGPdtToolDb.h b/db/HGPdtToolDb/HGPdtToolDb.h index 5e9d96b..7f647e9 100644 --- a/db/HGPdtToolDb/HGPdtToolDb.h +++ b/db/HGPdtToolDb/HGPdtToolDb.h @@ -123,7 +123,7 @@ HGEXPORT HGResult HGAPI HGPdtToolDb_DestroyUser(HGPdtToolDbUserMgr userMgr, cons HGEXPORT HGResult HGAPI HGPdtToolDb_SetPassword(HGPdtToolDbUserMgr userMgr, const HGChar* userName, const HGChar* pwd); /* 修改本账户的密码 */ -HGEXPORT HGResult HGAPI HGPdtToolDb_ModifyPassword(HGPdtToolDbUserMgr userMgr, const HGChar* newPwd); +HGEXPORT HGResult HGAPI HGPdtToolDb_ModifyPassword(HGPdtToolDbUserMgr userMgr, const HGChar* oldPwd, const HGChar* newPwd); /* 导出所有设备测试信息到XLS文件,需要管理员账户才能调用 */ HGEXPORT HGResult HGAPI HGPdtToolDb_Export(HGPdtToolDbUserMgr userMgr, const HGChar *xlsPath); diff --git a/db/HGPdtToolDb/HGPdtToolDbImpl.cpp b/db/HGPdtToolDb/HGPdtToolDbImpl.cpp index 0e4f686..3efe4bd 100644 --- a/db/HGPdtToolDb/HGPdtToolDbImpl.cpp +++ b/db/HGPdtToolDb/HGPdtToolDbImpl.cpp @@ -305,17 +305,9 @@ HGResult HGPdtToolDbUserMgrImpl::CreateUser(const HGChar* userName, const HGChar } char sqlCmd[1024] = {0}; - sprintf(sqlCmd, "create user '%s'@'%%' identified by '%s';", userName, defPwd); + sprintf(sqlCmd, "grant all privileges on huago_production_tool.* to '%s'@'%%' identified by '%s';", userName, defPwd); int ret = mysql_query(m_sql, sqlCmd); - if (0 != ret) - { - return HGBASE_ERR_FAIL; - } - - sprintf(sqlCmd, "grant all privileges on huago_production_tool.* to '%s'@'%%' with grant option;", userName); - ret = mysql_query(m_sql, sqlCmd); - assert(0 == ret); - return HGBASE_ERR_OK; + return (0 == ret) ? HGBASE_ERR_OK : HGBASE_ERR_FAIL; } HGResult HGPdtToolDbUserMgrImpl::DestroyUser(const HGChar* userName) @@ -373,21 +365,61 @@ HGResult HGPdtToolDbUserMgrImpl::SetPassword(const HGChar* userName, const HGCha return (0 == ret) ? HGBASE_ERR_OK : HGBASE_ERR_FAIL; } -HGResult HGPdtToolDbUserMgrImpl::ModifyPassword(const HGChar* newPwd) +HGResult HGPdtToolDbUserMgrImpl::ModifyPassword(const HGChar* oldPwd, const HGChar* newPwd) { if (NULL == m_sql) { return HGBASE_ERR_FAIL; } - if (NULL == newPwd || 0 == *newPwd) + if (NULL == oldPwd || 0 == *oldPwd || NULL == newPwd || 0 == *newPwd) { return HGBASE_ERR_INVALIDARG; } + std::string oldAuthStr; char sqlCmd[1024] = { 0 }; - sprintf(sqlCmd, "set password for '%s'@'%%' = password('%s');", m_userName.c_str(), newPwd); + sprintf(sqlCmd, "select authentication_string from mysql.user where user = '%s' and host = '%%';", m_userName.c_str()); int ret = mysql_query(m_sql, sqlCmd); + if (0 == ret) + { + MYSQL_RES* sqlRes = mysql_use_result(m_sql); + if (NULL != sqlRes) + { + MYSQL_ROW row = mysql_fetch_row(sqlRes); + assert(NULL != row[0]); + oldAuthStr = row[0]; + mysql_free_result(sqlRes); + } + } + + if (oldAuthStr.empty()) + { + return HGBASE_ERR_FAIL; + } + + std::string oldAuthStr2; + sprintf(sqlCmd, "select password('%s');", oldPwd); + ret = mysql_query(m_sql, sqlCmd); + if (0 == ret) + { + MYSQL_RES* sqlRes = mysql_use_result(m_sql); + if (NULL != sqlRes) + { + MYSQL_ROW row = mysql_fetch_row(sqlRes); + assert(NULL != row[0]); + oldAuthStr2 = row[0]; + mysql_free_result(sqlRes); + } + } + + if (0 != strcmp(oldAuthStr.c_str(), oldAuthStr2.c_str())) + { + return HGBASE_ERR_FAIL; + } + + sprintf(sqlCmd, "set password for '%s'@'%%' = password('%s');", m_userName.c_str(), newPwd); + ret = mysql_query(m_sql, sqlCmd); return (0 == ret) ? HGBASE_ERR_OK : HGBASE_ERR_FAIL; } diff --git a/db/HGPdtToolDb/HGPdtToolDbImpl.hpp b/db/HGPdtToolDb/HGPdtToolDbImpl.hpp index a160b0a..ce8bd9d 100644 --- a/db/HGPdtToolDb/HGPdtToolDbImpl.hpp +++ b/db/HGPdtToolDb/HGPdtToolDbImpl.hpp @@ -23,7 +23,7 @@ public: HGResult CreateUser(const HGChar* userName, const HGChar* defPwd); HGResult DestroyUser(const HGChar* userName); HGResult SetPassword(const HGChar* userName, const HGChar* pwd); - HGResult ModifyPassword(const HGChar* newPwd); + HGResult ModifyPassword(const HGChar* oldPwd, const HGChar* newPwd); HGResult Export(const HGChar* xlsPath); HGResult GetConfig(const HGChar *key, HGChar *value, HGUInt maxLen); HGResult SetConfig(const HGChar* key, const HGChar *value); diff --git a/db/HGPdtToolDbTest/HGPdtToolDbTest.cpp b/db/HGPdtToolDbTest/HGPdtToolDbTest.cpp index fdfe3a5..aced5ee 100644 --- a/db/HGPdtToolDbTest/HGPdtToolDbTest.cpp +++ b/db/HGPdtToolDbTest/HGPdtToolDbTest.cpp @@ -5,7 +5,7 @@ int main() { HGPdtToolDbUserMgr userMgr = NULL; - HGPdtToolDb_CreateUserMgr("192.168.1.70", 3306, "root", "123456", &userMgr); + HGPdtToolDb_CreateUserMgr("127.0.0.1", 3306, "root", "123456", &userMgr); if (NULL != userMgr) { HGChar* name[256]; @@ -14,8 +14,8 @@ int main() //HGPdtToolDb_DestroyUser(userMgr, "huago"); - HGPdtToolDb_CreateUser(userMgr, "huago", "huago"); - //HGPdtToolDb_ModifyPassword(userMgr, "654321"); + //HGPdtToolDb_CreateUser(userMgr, "huago", "huago"); + HGPdtToolDb_ModifyPassword(userMgr, "12345", "123456"); //HGPdtToolDb_SetPassword(userMgr, "huago", "qqq"); HGPdtToolDbDevice device = NULL;