From 26428c46a9950aed35f521259f59245cb19c91a3 Mon Sep 17 00:00:00 2001 From: cris Date: Tue, 1 Mar 2011 09:32:55 +0000 Subject: [PATCH] Patch level : 10.0 Files correlati : authoriz.exe Ricompilazione Demo : [ ] Commento : Corretta gestione abilitazione moduli, anni ed utenti con codici generati da chiave o da sito git-svn-id: svn://10.65.10.50/branches/R_10_00@21725 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- server/authoriz.cpp | 116 ++++++++++++++++++++++++++++++-------------- 1 file changed, 79 insertions(+), 37 deletions(-) diff --git a/server/authoriz.cpp b/server/authoriz.cpp index 5be75713f..70843afbd 100755 --- a/server/authoriz.cpp +++ b/server/authoriz.cpp @@ -158,12 +158,18 @@ protected: void AddNumber(TXmlItem& tr, int n) const; wxString DescribeModule(int m) const; + wxString ModuleCode(int m) const; bool KeyIsGood(const wxString& key, const wxString& gar) const; void InitModules(); wxString GetModulesFilename() const; - wxString Garble(unsigned short n, const wxDateTime& date) const; - wxString GarbleMD5(unsigned short n, const wxDateTime& date) const; + + wxString GarbleMD5(const char* str, const wxDateTime& date) const; + wxString GarbleMD5(int n, const wxDateTime& date) const; + + void GarbleModule(unsigned short n, const wxDateTime& date, wxString& g1, wxString& g2) const; + void GarbleYear(int n, const wxDateTime& date, wxString& g1, wxString& g2) const; + void GarbleUsers(int n, const wxDateTime& date, wxString& g1, wxString& g2) const; public: bool IsMagicName(wxString& strFilename) const; @@ -206,33 +212,64 @@ void TAuthorizationServer::InitModules() } } -wxString TAuthorizationServer::Garble(unsigned short n, const wxDateTime& date) const +wxString TAuthorizationServer::GarbleMD5(const char* str, const wxDateTime& date) const +{ + const long nANSIdate = date.GetYear()*10000 + (date.GetMonth()+1)*100 + date.GetDay(); + wxString chiaro; chiaro.Printf("%8ld%d%s", nANSIdate, m_Dongle.Number(), str); + + unsigned char* buffer = (unsigned char*)chiaro.c_str(); + const wxString cifrato = wxMD5Checksum::GetMD5(buffer, chiaro.Len()); + return cifrato.Right(8); +} + +wxString TAuthorizationServer::GarbleMD5(int n, const wxDateTime& date) const +{ + char str[16]; wxSprintf(str, "%d", n); + return GarbleMD5(str, date); +} + +void TAuthorizationServer::GarbleYear(int y, const wxDateTime& date, + wxString& g1, wxString& g2) const { const long val = date2julian(date); unsigned short data[4]; data[0] = m_Dongle.Number(); - data[1] = n; - data[2] = (unsigned short)(val >> 16); + data[1] = (unsigned short)(val >> 16); + data[2] = y; data[3] = (unsigned short)(val & 0xFFFF); m_Dongle.garble(data); - return wxString::Format("%04X%04X", data[0], data[1]); + g1.Printf("%04X%04X", data[0], data[1]); + g2 = GarbleMD5(y, date); } -wxString TAuthorizationServer::GarbleMD5(unsigned short n, const wxDateTime& date) const +void TAuthorizationServer::GarbleUsers(int u, const wxDateTime& date, + wxString& g1, wxString& g2) const { - const long nANSIdate = date.GetYear()*10000 + (date.GetMonth()+1)*100 + date.GetDay(); + const long val = date2julian(date); + unsigned short data[4]; + data[0] = u; + data[1] = (unsigned short)(val >> 16); + data[2] = m_Dongle.Number(); + data[3] = (unsigned short)(val & 0xFFFF); + m_Dongle.garble(data); + g1.Printf("%04X%04X", data[0], data[1]); + g2 = GarbleMD5(u, date); +} - wxString strModule; - wxTextFile txt(GetModulesFilename()); - if (txt.Open()) - strModule = txt.GetLine(n).Left(2).Upper(); - - wxString chiaro; chiaro.Printf("%8ld%d%s", nANSIdate, m_Dongle.Number(), strModule); - - unsigned char* buffer = (unsigned char*)chiaro.c_str(); - const wxString cifrato = wxMD5Checksum::GetMD5(buffer, chiaro.Len()); - return cifrato.Right(8); +void TAuthorizationServer::GarbleModule(unsigned short m, const wxDateTime& date, + wxString& g1, wxString& g2) const +{ + const long val = date2julian(date); + + unsigned short data[4]; + data[0] = m_Dongle.Number(); + data[1] = (unsigned short)(val >> 16); + data[2] = m; + data[3] = (unsigned short)(val & 0xFFFF); + m_Dongle.garble(data); + g1.Printf("%04X%04X", data[0], data[1]); + g2 = GarbleMD5(ModuleCode(m), date); } // Implementare almeno queste due funzioni pure virtuali @@ -272,16 +309,20 @@ wxString TAuthorizationServer::GetModulesFilename() const wxString TAuthorizationServer::DescribeModule(int m) const { - const wxString strAut = GetModulesFilename(); - wxFileInputStream aut(strAut); - wxString line; - for (int nModule = 0; !aut.Eof(); nModule++) - { - aut >> line; - if (nModule == m) - return line.Mid(3).Trim(); - } - return line; // Should never happen! + wxString strModule; + wxTextFile txt(GetModulesFilename()); + if (txt.Open()) + strModule = txt.GetLine(m).Mid(3); + return strModule; +} + +wxString TAuthorizationServer::ModuleCode(int m) const +{ + wxString strModule; + wxTextFile txt(GetModulesFilename()); + if (txt.Open()) + strModule = txt.GetLine(m).Left(2).Upper(); + return strModule; } void TAuthorizationServer::AddNumber(TXmlItem& tr, int n) const @@ -407,7 +448,7 @@ void TAuthorizationServer::GenerateModules(wxString& strFilename) if (line.IsEmpty()) break; - const wxString strCode = line.Left(2); + const wxString strCode = line.Left(2).Lower(); const wxString strDesc = line.Mid(3); if (nModule > 0 && strCode != "xx" && !strDesc.IsEmpty()) { @@ -513,7 +554,8 @@ void TAuthorizationServer::GenerateFile(wxString& strFilename) TXmlItem html; TXmlItem& body = CreatePageBody(html); TXmlItem& form = body.AddChild("form"); - form.SetAttr("action", "activate"); form.SetAttr("method", "post"); + form.SetAttr("action", "activate"); + form.SetAttr("method", "post"); TXmlItem& table = form.AddChild("center").AddChild("table"); table.SetAttr("width", "70%").SetAttr("border", "1"); @@ -545,6 +587,7 @@ void TAuthorizationServer::GenerateFile(wxString& strFilename) TXmlItem& submit = tr3.AddChild("td").AddChild("input"); submit.SetAttr("type", "submit"); submit.SetAttr("value", "Confirm Activation"); + submit.SetAttr("title", wxString::Format("Activate module %d", nModule)); strFilename = GetTempFilename(); html.Save(strFilename); @@ -621,7 +664,6 @@ void TAuthorizationServer::GenerateFile(wxString& strFilename) } else if (strName == "maxusers") { -// const int nModule = atoi(strArgs); TXmlItem html; TXmlItem& body = CreatePageBody(html); TXmlItem& form = body.AddChild("form"); @@ -712,8 +754,8 @@ void TAuthorizationServer::ProcessFormCommand(wxString cmd, wxSocketBase& outs) const int nModule = hashArgs.GetInt("module"); const wxDateTime date = hashArgs.GetDate("date"); const wxString key = hashArgs.Get("key"); - const wxString gar1 = Garble(nModule, date); - const wxString gar2 = GarbleMD5(nModule, date); + wxString gar1, gar2; + GarbleModule(nModule, date, gar1, gar2); if (KeyIsGood(key, gar1) || KeyIsGood(key, gar2)) ProcessModuleActivation(nModule, true, outs); else @@ -729,8 +771,8 @@ void TAuthorizationServer::ProcessFormCommand(wxString cmd, wxSocketBase& outs) const int year = hashArgs.GetInt("year"); const wxDateTime date = hashArgs.GetDate("date"); const wxString key = hashArgs.Get("key"); - const wxString gar1 = Garble(year, date); - const wxString gar2 = GarbleMD5(year, date); + wxString gar1, gar2; + GarbleYear(year, date, gar1, gar2); if (KeyIsGood(key, gar1) || KeyIsGood(key, gar2)) { m_Dongle.set_year_assist(year); @@ -747,8 +789,8 @@ void TAuthorizationServer::ProcessFormCommand(wxString cmd, wxSocketBase& outs) const int users = atoi(hashArgs.Get("users")); const wxDateTime date = hashArgs.GetDate("date"); const wxString key = hashArgs.Get("key"); - const wxString gar1 = Garble(users, date); - const wxString gar2 = GarbleMD5(users, date); + wxString gar1, gar2; + GarbleUsers(users, date, gar1, gar2); if (KeyIsGood(key, gar1) || KeyIsGood(key, gar2)) { m_Dongle.set_max_users(users);