diff --git a/sql/swad.sql b/sql/swad.sql index 7167e237..52abd972 100644 --- a/sql/swad.sql +++ b/sql/swad.sql @@ -682,7 +682,7 @@ CREATE TABLE IF NOT EXISTS log_recent ( -- CREATE TABLE IF NOT EXISTS log_search ( LogCod INT NOT NULL, - SearchStr VARCHAR(255) NOT NULL, + SearchStr VARCHAR(2047) NOT NULL, UNIQUE INDEX(LogCod)); -- -- Table log_ws: stores the log of calls to web service from plugins diff --git a/swad_changelog.h b/swad_changelog.h index 043db1ec..417960bf 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -207,14 +207,19 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 16.155.16 (2017-03-12)" +#define Log_PLATFORM_VERSION "SWAD 16.155.17 (2017-03-12)" #define CSS_FILE "swad16.147.css" #define JS_FILE "swad16.144.js" // Number of lines (includes comments but not blank lines) has been got with the following command: // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1 /* - Version 16.155.16:Mar 11, 2017 Adjusting size of database fields. (216746 lines) + Version 16.155.17:Mar 11, 2017 Adjusting size of database fields. (216755 lines) + 2 changes necessary in database: +ALTER TABLE log_search CHANGE COLUMN SearchStr SearchStr VARCHAR(2047) NOT NULL; +ALTER TABLE sessions CHANGE COLUMN SearchString SearchStr VARCHAR(2047) NOT NULL DEFAULT ''; + + Version 16.155.16:Mar 11, 2017 Adjusting size of database fields. (216749 lines) 1 change necessary in database: ALTER TABLE log_comments CHANGE COLUMN Comments Comments TEXT NOT NULL; diff --git a/swad_database.c b/swad_database.c index 5fb3802c..4bc4ee4e 100644 --- a/swad_database.c +++ b/swad_database.c @@ -1349,13 +1349,13 @@ mysql> DESCRIBE log_banners; /***** Table log_comments *****/ /* mysql> DESCRIBE log_comments; -+----------+--------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+-------+ -| LogCod | int(11) | NO | PRI | NULL | | -| Comments | varchar(255) | NO | | NULL | | -+----------+--------------+------+-----+---------+-------+ -2 rows in set (0.00 sec) ++----------+---------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++----------+---------+------+-----+---------+-------+ +| LogCod | int(11) | NO | PRI | NULL | | +| Comments | text | NO | | NULL | | ++----------+---------+------+-----+---------+-------+ +2 rows in set (0,00 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS log_comments (" "LogCod INT NOT NULL," @@ -1386,28 +1386,28 @@ mysql> DESCRIBE log_full; */ // TODO: Change NtfCod and LogCod from INT to BIGINT in database tables. DB_CreateTable ("CREATE TABLE IF NOT EXISTS log (" - "LogCod INT NOT NULL AUTO_INCREMENT," - "ActCod INT NOT NULL DEFAULT -1," - "CtyCod INT NOT NULL DEFAULT -1," - "InsCod INT NOT NULL DEFAULT -1," - "CtrCod INT NOT NULL DEFAULT -1," - "DegCod INT NOT NULL DEFAULT -1," - "CrsCod INT NOT NULL DEFAULT -1," - "UsrCod INT NOT NULL DEFAULT -1," - "Role TINYINT NOT NULL," - "ClickTime DATETIME NOT NULL," - "TimeToGenerate INT NOT NULL," - "TimeToSend INT NOT NULL," - "IP CHAR(15) NOT NULL," - "UNIQUE INDEX(LogCod)," - "INDEX(ActCod)," - "INDEX(CtyCod)," - "INDEX(InsCod)," - "INDEX(CtrCod)," - "INDEX(DegCod)," - "INDEX(CrsCod)," - "INDEX(UsrCod)," - "INDEX(ClickTime,Role))"); + "LogCod INT NOT NULL AUTO_INCREMENT," + "ActCod INT NOT NULL DEFAULT -1," + "CtyCod INT NOT NULL DEFAULT -1," + "InsCod INT NOT NULL DEFAULT -1," + "CtrCod INT NOT NULL DEFAULT -1," + "DegCod INT NOT NULL DEFAULT -1," + "CrsCod INT NOT NULL DEFAULT -1," + "UsrCod INT NOT NULL DEFAULT -1," + "Role TINYINT NOT NULL," + "ClickTime DATETIME NOT NULL," + "TimeToGenerate INT NOT NULL," + "TimeToSend INT NOT NULL," + "IP CHAR(15) NOT NULL," // Cns_MAX_CHARS_IP + "UNIQUE INDEX(LogCod)," + "INDEX(ActCod)," + "INDEX(CtyCod)," + "INDEX(InsCod)," + "INDEX(CtrCod)," + "INDEX(DegCod)," + "INDEX(CrsCod)," + "INDEX(UsrCod)," + "INDEX(ClickTime,Role))"); /***** Table log_recent *****/ /* @@ -1433,44 +1433,44 @@ mysql> DESCRIBE log_recent; */ // TODO: Change NtfCod and LogCod from INT to BIGINT in database tables. DB_CreateTable ("CREATE TABLE IF NOT EXISTS log_recent (" - "LogCod INT NOT NULL," - "ActCod INT NOT NULL DEFAULT -1," - "CtyCod INT NOT NULL DEFAULT -1," - "InsCod INT NOT NULL DEFAULT -1," - "CtrCod INT NOT NULL DEFAULT -1," - "DegCod INT NOT NULL DEFAULT -1," - "CrsCod INT NOT NULL DEFAULT -1," - "UsrCod INT NOT NULL DEFAULT -1," - "Role TINYINT NOT NULL," - "ClickTime DATETIME NOT NULL," - "TimeToGenerate INT NOT NULL," - "TimeToSend INT NOT NULL," - "IP CHAR(15) NOT NULL," - "UNIQUE INDEX(LogCod)," - "INDEX(ActCod)," - "INDEX(CtyCod)," - "INDEX(InsCod)," - "INDEX(CtrCod)," - "INDEX(DegCod)," - "INDEX(CrsCod)," - "INDEX(UsrCod)," - "INDEX(ClickTime,Role))"); + "LogCod INT NOT NULL," + "ActCod INT NOT NULL DEFAULT -1," + "CtyCod INT NOT NULL DEFAULT -1," + "InsCod INT NOT NULL DEFAULT -1," + "CtrCod INT NOT NULL DEFAULT -1," + "DegCod INT NOT NULL DEFAULT -1," + "CrsCod INT NOT NULL DEFAULT -1," + "UsrCod INT NOT NULL DEFAULT -1," + "Role TINYINT NOT NULL," + "ClickTime DATETIME NOT NULL," + "TimeToGenerate INT NOT NULL," + "TimeToSend INT NOT NULL," + "IP CHAR(15) NOT NULL," // Cns_MAX_CHARS_IP + "UNIQUE INDEX(LogCod)," + "INDEX(ActCod)," + "INDEX(CtyCod)," + "INDEX(InsCod)," + "INDEX(CtrCod)," + "INDEX(DegCod)," + "INDEX(CrsCod)," + "INDEX(UsrCod)," + "INDEX(ClickTime,Role))"); /***** Table log_search *****/ /* mysql> DESCRIBE log_search; -+-----------+--------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+-----------+--------------+------+-----+---------+-------+ -| LogCod | int(11) | NO | PRI | NULL | | -| SearchStr | varchar(255) | NO | | NULL | | -+-----------+--------------+------+-----+---------+-------+ ++-----------+---------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-----------+---------------+------+-----+---------+-------+ +| LogCod | int(11) | NO | PRI | NULL | | +| SearchStr | varchar(2047) | NO | | NULL | | ++-----------+---------------+------+-----+---------+-------+ 2 rows in set (0,00 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS log_search (" - "LogCod INT NOT NULL," - "SearchStr VARCHAR(255) NOT NULL," - "UNIQUE INDEX(LogCod))"); + "LogCod INT NOT NULL," + "SearchStr VARCHAR(2047) NOT NULL," // Sch_MAX_BYTES_STRING_TO_FIND + "UNIQUE INDEX(LogCod))"); /***** Table log_ws *****/ /* @@ -1877,29 +1877,29 @@ mysql> DESCRIBE plugins; /***** Table sessions *****/ /* mysql> DESCRIBE sessions; -+----------------+--------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+----------------+--------------+------+-----+---------+-------+ -| SessionId | char(43) | NO | PRI | NULL | | -| UsrCod | int(11) | NO | MUL | NULL | | -| Password | char(86) | NO | | NULL | | -| Role | tinyint(4) | NO | | 0 | | -| CtyCod | int(11) | NO | | -1 | | -| InsCod | int(11) | NO | | -1 | | -| CtrCod | int(11) | NO | | -1 | | -| DegCod | int(11) | NO | | -1 | | -| CrsCod | int(11) | NO | | -1 | | -| LastTime | datetime | NO | | NULL | | -| LastRefresh | datetime | NO | | NULL | | -| FirstPubCod | bigint(20) | NO | | 0 | | -| LastPubCod | bigint(20) | NO | | 0 | | -| LastPageMsgRcv | int(11) | NO | | 1 | | -| LastPageMsgSnt | int(11) | NO | | 1 | | -| WhatToSearch | tinyint(4) | NO | | 0 | | -| SearchString | varchar(255) | NO | | | | -| SideCols | tinyint(4) | NO | | 3 | | -+----------------+--------------+------+-----+---------+-------+ -18 rows in set (1,06 sec) ++----------------+---------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++----------------+---------------+------+-----+---------+-------+ +| SessionId | char(43) | NO | PRI | NULL | | +| UsrCod | int(11) | NO | MUL | NULL | | +| Password | char(86) | NO | | NULL | | +| Role | tinyint(4) | NO | | 0 | | +| CtyCod | int(11) | NO | | -1 | | +| InsCod | int(11) | NO | | -1 | | +| CtrCod | int(11) | NO | | -1 | | +| DegCod | int(11) | NO | | -1 | | +| CrsCod | int(11) | NO | | -1 | | +| LastTime | datetime | NO | | NULL | | +| LastRefresh | datetime | NO | | NULL | | +| FirstPubCod | bigint(20) | NO | | 0 | | +| LastPubCod | bigint(20) | NO | | 0 | | +| LastPageMsgRcv | int(11) | NO | | 1 | | +| LastPageMsgSnt | int(11) | NO | | 1 | | +| WhatToSearch | tinyint(4) | NO | | 0 | | +| SearchStr | varchar(2047) | NO | | | | +| SideCols | tinyint(4) | NO | | 3 | | ++----------------+---------------+------+-----+---------+-------+ +18 rows in set (0,00 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS sessions (" "SessionId CHAR(43) NOT NULL," @@ -1918,7 +1918,7 @@ mysql> DESCRIBE sessions; "LastPageMsgRcv INT NOT NULL DEFAULT 1," "LastPageMsgSnt INT NOT NULL DEFAULT 1," "WhatToSearch TINYINT NOT NULL DEFAULT 0," - "SearchString VARCHAR(255) NOT NULL DEFAULT ''," + "SearchStr VARCHAR(2047) NOT NULL DEFAULT ''," // Sch_MAX_BYTES_STRING_TO_FIND "SideCols TINYINT NOT NULL DEFAULT 3," "UNIQUE INDEX(SessionId)," "INDEX(UsrCod))"); diff --git a/swad_search.c b/swad_search.c index 89df9f18..cabaf172 100644 --- a/swad_search.c +++ b/swad_search.c @@ -64,7 +64,7 @@ extern struct Globals Gbl; static void Sch_PutFormToSearchWithWhatToSearchAndScope (Act_Action_t Action,Sco_Scope_t DefaultScope); static bool Sch_CheckIfIHavePermissionToSearch (Sch_WhatToSearch_t WhatToSearch); -static void Sch_GetParamSearch (char *SearchStr,size_t MaxLength); +static void Sch_GetParamSearch (void); static void Sch_SearchInDB (void); static unsigned Sch_SearchCountriesInDB (const char *RangeQuery); static unsigned Sch_SearchInstitutionsInDB (const char *RangeQuery); @@ -405,10 +405,10 @@ void Sch_GetParamWhatToSearch (void) /*********************** Get string from search form *************************/ /*****************************************************************************/ -static void Sch_GetParamSearch (char *SearchStr,size_t MaxLength) +static void Sch_GetParamSearch (void) { /***** Get string to search *****/ - Par_GetParToText ("Search",SearchStr,MaxLength); + Par_GetParToText ("Search",Gbl.Search.Str,Sch_MAX_BYTES_STRING_TO_FIND); } /*****************************************************************************/ @@ -421,7 +421,7 @@ void Sch_GetParamsSearch (void) Sch_GetParamWhatToSearch (); /***** Get search string *****/ - Sch_GetParamSearch (Gbl.Search.Str,sizeof (Gbl.Search.Str) - 1); + Sch_GetParamSearch (); /***** Save my search in order to show it in current session *****/ if (Gbl.Usrs.Me.Logged) @@ -1297,7 +1297,7 @@ bool Sch_BuildSearchQuery (char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1], LengthTotal += LengthWord; if (LengthWord > MaxLengthWord) MaxLengthWord = LengthWord; - if (strlen (SearchQuery) + LengthWord + 512 > + if (strlen (SearchQuery) + 128 + LengthWord > Sch_MAX_BYTES_SEARCH_QUERY) // Prevent string overflow break; if (NumWords) @@ -1341,7 +1341,9 @@ bool Sch_BuildSearchQuery (char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1], static void Sch_SaveLastSearchIntoSession (void) { - char Query[512]; + char Query[256 + + Sch_MAX_BYTES_STRING_TO_FIND + + Ses_LENGTH_SESSION_ID]; if (Gbl.Usrs.Me.Logged) { @@ -1349,7 +1351,7 @@ static void Sch_SaveLastSearchIntoSession (void) Gbl.Search.WhatToSearch = Sch_WHAT_TO_SEARCH_DEFAULT; /***** Save last search in session *****/ - sprintf (Query,"UPDATE sessions SET WhatToSearch='%u',SearchString='%s'" + sprintf (Query,"UPDATE sessions SET WhatToSearch='%u',SearchStr='%s'" " WHERE SessionId='%s'", (unsigned) Gbl.Search.WhatToSearch, Gbl.Search.Str, @@ -1359,8 +1361,7 @@ static void Sch_SaveLastSearchIntoSession (void) /***** Update my last type of search *****/ // WhatToSearch is stored in usr_last for next time I log in // In other existing sessions distinct to this, WhatToSearch will remain unchanged - sprintf (Query,"UPDATE usr_last SET WhatToSearch='%u'" - " WHERE UsrCod='%ld'", + sprintf (Query,"UPDATE usr_last SET WhatToSearch='%u' WHERE UsrCod='%ld'", (unsigned) Gbl.Search.WhatToSearch, Gbl.Usrs.Me.UsrDat.UsrCod); DB_QueryUPDATE (Query,"can not update type of search in user's last data"); diff --git a/swad_search.h b/swad_search.h index b8eff09a..9d6e369f 100644 --- a/swad_search.h +++ b/swad_search.h @@ -39,7 +39,7 @@ #define Sch_MAX_CHARS_SEARCH_WORD (128 - 1) // 127 #define Sch_MAX_BYTES_SEARCH_WORD ((Sch_MAX_CHARS_SEARCH_WORD - 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047 -#define Sch_MAX_BYTES_SEARCH_QUERY (Sch_MAX_WORDS_IN_SEARCH * Sch_MAX_BYTES_SEARCH_WORD) +#define Sch_MAX_BYTES_SEARCH_QUERY (Sch_MAX_WORDS_IN_SEARCH * (128 + Sch_MAX_BYTES_SEARCH_WORD)) /*****************************************************************************/ /******************************** Public types *******************************/ diff --git a/swad_session.c b/swad_session.c index 1fcdbdb2..f80bd936 100644 --- a/swad_session.c +++ b/swad_session.c @@ -274,7 +274,7 @@ bool Ses_GetSessionData (void) /***** Query data of session from database *****/ sprintf (Query,"SELECT UsrCod,Password,Role," "CtyCod,InsCod,CtrCod,DegCod,CrsCod," - "WhatToSearch,SearchString" + "WhatToSearch,SearchStr" " FROM sessions WHERE SessionId='%s'", Gbl.Session.Id); diff --git a/swad_statistic.c b/swad_statistic.c index 1337bec7..ca434dae 100644 --- a/swad_statistic.c +++ b/swad_statistic.c @@ -270,7 +270,8 @@ void Sta_GetRemoteAddr (void) void Sta_LogAccess (const char *Comments) { extern struct Act_Actions Act_Actions[Act_NUM_ACTIONS]; - char Query[Sta_MAX_BYTES_QUERY_LOG + 1]; + char Query[Sta_MAX_BYTES_QUERY_LOG + + Sch_MAX_BYTES_STRING_TO_FIND + 1]; long LogCod; Rol_Role_t RoleToStore = (Gbl.Action.Act == ActLogOut) ? Gbl.Usrs.Me.LoggedRoleBeforeCloseSession : Gbl.Usrs.Me.LoggedRole;