[FileZilla Server]登入驗證 By Discuz
我在幾天前有提到有個構想打算用 discuz 來進行 filezilla 的登入判別
然後我總算把他喬出來了,其實都只改一部份的 source 而已
全部都只要改 Permission.cpp 而已
Find
Find
先來說說這樣作會有什麼問題好了,因為我會把帳號丟入 m_UsersList 串列,而這串列除非去 Interface 更新帳號 或 你重啟服務,要不然他一直都會在
也就是你就算把他排除可以登入的群組或者在 Discuz 刪掉他,只要他之前有登入過,在下次這清單重建前他一直都會在
好處是他登入過系統就不需要再過去論壇那邊作重新驗證的動作!
然後我總算把他喬出來了,其實都只改一部份的 source 而已
全部都只要改 Permission.cpp 而已
Find
BOOL CPermissions::CheckUserLogin(LPCTSTR username, LPCTSTR pass, CUser &userdata, BOOL noPasswordCheck /*=FALSE*/)
Before LINE, Add
typedef bool(*pMyverify)(const char* uid, const char* pw); pMyverify Myverify = NULL; HINSTANCE MyverifyDLL = NULL;
Find
if (!GetUser(username, user)) return FALSE; if (noPasswordCheck || user.password == hash || user.password == _T("")) { userdata = user; return TRUE; }Repleace
if (GetUser(username, user)) if (noPasswordCheck || user.password == hash || user.password == _T("")) { userdata = user; return TRUE; } //-------------------------------------- // MODIFICATION //-------------------------------------- if(wcslen(username) > 5) { if (MyverifyDLL == NULL) { MyverifyDLL = LoadLibrary(L"MyVerify.dll"); Myverify = (pMyverify)GetProcAddress(MyverifyDLL, "VerifyByDiscuz"); } const char* usr = ConvToNetwork(username); const char* pwd = ConvToNetwork(hash); bool result = Myverify(usr, pwd); delete [] pwd; delete [] usr; if(result) { user.user = username; user.password = hash; user.group = "group1"; for (t_GroupsList::iterator groupiter = m_GroupsList.begin(); groupiter != m_GroupsList.end(); groupiter++) { if (groupiter->group == user.group) { user.pOwner = &(*groupiter); break; } } std::vector<t_directory>::iterator iter; for (iter = user.pOwner->permissions.begin(); iter != user.pOwner->permissions.end(); iter++) { if (iter->bIsHome) { user.homedir = iter->dir; break; } } user.PrepareAliasMap(); userdata = user; m_UsersList.push_back(user); return TRUE; } } //--------------------------------------其中 MyVerify.dll 是我另外作出來的一個 dll 檔,而裡面有個函數 VerifyByDiscuz 則是連到我之前作出來的 php 去判別是否允許登入,這 dll 之後有機會再提怎作!
先來說說這樣作會有什麼問題好了,因為我會把帳號丟入 m_UsersList 串列,而這串列除非去 Interface 更新帳號 或 你重啟服務,要不然他一直都會在
也就是你就算把他排除可以登入的群組或者在 Discuz 刪掉他,只要他之前有登入過,在下次這清單重建前他一直都會在
好處是他登入過系統就不需要再過去論壇那邊作重新驗證的動作!
留言
張貼留言