From bb2ea5b26f984bec4aecc5cb590d03794f0548b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Thu, 31 Mar 2016 19:04:13 +0200 Subject: [PATCH] Version 15.169.3 --- swad_changelog.h | 3 +- swad_parameter.c | 113 +++++++++++++++-------------------------------- 2 files changed, 37 insertions(+), 79 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index 1b3ef8a6..bb019d02 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -138,13 +138,14 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 15.169.2 (2016-03-31)" +#define Log_PLATFORM_VERSION "SWAD 15.169.3 (2016-03-31)" #define CSS_FILE "swad15.165.5.css" #define JS_FILE "swad15.131.3.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 15.169.3: Mar 31, 2016 Code refactoring in list of parameters. (197271 lines) Version 15.169.2: Mar 31, 2016 Code refactoring in list of parameters. Not finished. (197298 lines) Version 15.169.1: Mar 31, 2016 Code refactoring in list of parameters. (197298 lines) Version 15.169: Mar 31, 2016 When content is data, all parameters are retrieved in a list. (197306 lines) diff --git a/swad_parameter.c b/swad_parameter.c index 8f279312..b61c8dd7 100644 --- a/swad_parameter.c +++ b/swad_parameter.c @@ -67,6 +67,8 @@ static bool Par_ReadTmpFileUntilDelimitStr (const char *BoundaryStr,unsigned Len static int Par_ReadTmpFileUntilQuote (void); static int Par_ReadTmpFileUntilReturn (void); +static bool Par_CheckIsParamCanBeUsedInGETMethod (const char *ParamName); + /*****************************************************************************/ /*** Read all parameters passed to this CGI and store for later processing ***/ /*****************************************************************************/ @@ -301,20 +303,6 @@ static void Par_CreateListOfParamsFromTmpFile (void) int Ch; char StrAux[Par_MAX_BYTES_STR_AUX+1]; - - - char Aux[1024*1024]; - unsigned long i; - rewind (Gbl.F.Tmp); // !!!!!!!!!!!!!!! - for (i=0; iName.Length = CurPos - 1 - Param->Name.Start; -/* - sprintf (Gbl.Message,"Param->Name.Start = %ld Param->Name.Length = %ld", - Param->Name.Start,Param->Name.Length); - Lay_ShowAlert (Lay_INFO,Gbl.Message); // !!!!!!!!!!!!!!!!!!! -*/ + /* Check if last character read after parameter name is a quote */ if (Ch != (int) '\"') break; // '\"' @@ -543,23 +527,12 @@ unsigned Par_GetParameter (tParamType ParamType,const char *ParamName, bool ParamFound = false; unsigned ParamNameLength; - char Ch; - ParamValue[0] = '\0'; // By default, the value of the parameter will be an empty string /***** Only some selected parameters can be passed by GET method *****/ if (Gbl.Params.GetMethod) - if (strcmp (ParamName,"cty") && // To enter directly to a country - strcmp (ParamName,"ins") && // To enter directly to an institution - strcmp (ParamName,"ctr") && // To enter directly to a centre - strcmp (ParamName,"deg") && // To enter directly to a degree - strcmp (ParamName,"crs") && // To enter directly to a course - // strcmp (ParamName,"CrsCod") && // To enter directly to a course (allowed for compatibility with old links, to be removed in 2016) - strcmp (ParamName,"usr") && // To enter directly to a user - strcmp (ParamName,"act") && // To execute directly an action (allowed only for fully public actions) - strcmp (ParamName,"ses") && // To use an open session when redirecting from one language to another - strcmp (ParamName,"key")) // To verify an email address - return 0; // Return no-parameters-found when method is GET and parameter name is not one of these + if (!Par_CheckIsParamCanBeUsedInGETMethod (ParamName)) + return 0; // Return no-parameters-found ParamNameLength = strlen (ParamName); @@ -575,24 +548,8 @@ unsigned Par_GetParameter (tParamType ParamType,const char *ParamName, Param != NULL && !ParamFound; Param = Param->Next) { - if (Gbl.ContentReceivedByCGI == Act_CONTENT_DATA) - { - sprintf (Gbl.Message,"ParamName = %s Param->Name.Length = %lu", - ParamName,Param->Name.Length); - Lay_ShowAlert (Lay_INFO,Gbl.Message); // Remove !!!!!!!!!!! - } - if (Param->Name.Length == ParamNameLength) { - - - if (Gbl.ContentReceivedByCGI == Act_CONTENT_DATA) - { - sprintf (Gbl.Message,"Param->Name.Length == ParamNameLength = %lu",Param->Name.Length); - Lay_ShowAlert (Lay_INFO,Gbl.Message); // Remove !!!!!!!!!!! - } - - // The current element in the list has the length of the searched parameter // Check if the name of the parameter is the same switch (Gbl.ContentReceivedByCGI) @@ -603,35 +560,11 @@ unsigned Par_GetParameter (tParamType ParamType,const char *ParamName, break; case Act_CONTENT_DATA: fseek (Gbl.F.Tmp,Param->Name.Start,SEEK_SET); - - sprintf (Gbl.Message,"Param->Name.Start = %lu", - Param->Name.Start); - Lay_ShowAlert (Lay_INFO,Gbl.Message); // Remove !!!!!!!!!!! - for (i = 0, ParamFound = true; i < Param->Name.Length && ParamFound; i++) - { - sprintf (Gbl.Message,"ParamName[%u] = %c", - i,ParamName[i]); - Lay_ShowAlert (Lay_INFO,Gbl.Message); // Remove !!!!!!!!!!! - - Ch = (char) fgetc (Gbl.F.Tmp); - - sprintf (Gbl.Message,"(char) fgetc (Gbl.F.Tmp) = %c", - Ch); - Lay_ShowAlert (Lay_INFO,Gbl.Message); // Remove !!!!!!!!!!! - - // if (ParamName[i] != (char) fgetc (Gbl.F.Tmp)) - if (ParamName[i] != Ch) + if (ParamName[i] != (char) fgetc (Gbl.F.Tmp)) ParamFound = false; - } - - if (ParamFound) - { - sprintf (Gbl.Message,"Found! ParamName = %s",ParamName); - Lay_ShowAlert (Lay_INFO,Gbl.Message); // Remove !!!!!!!!!!! - } break; } @@ -677,11 +610,6 @@ unsigned Par_GetParameter (tParamType ParamType,const char *ParamName, fseek (Gbl.F.Tmp,Param->Value.Start,SEEK_SET); if (fread (PtrDst,sizeof (char),Param->Value.Length,Gbl.F.Tmp) != Param->Value.Length) Lay_ShowErrorAndExit ("Error while getting value of parameter."); - - sprintf (Gbl.Message,"ParamName = %s Param->Value.Start = %lu Param->Value.Length = %lu", - ParamName,Param->Value.Start,Param->Value.Length); - Lay_ShowAlert (Lay_INFO,Gbl.Message); // Remove !!!!!!!!!!! - break; } BytesAlreadyCopied += Param->Value.Length; @@ -697,6 +625,35 @@ unsigned Par_GetParameter (tParamType ParamType,const char *ParamName, return NumTimes; } +/*****************************************************************************/ +/*************** Check if parameter can be used in GET method ****************/ +/*****************************************************************************/ + +static bool Par_CheckIsParamCanBeUsedInGETMethod (const char *ParamName) + { + static const char *ValidParamsInGETMethod[] = + { + "cty", // To enter directly to a country + "ins", // To enter directly to an institution + "ctr", // To enter directly to a centre + "deg", // To enter directly to a degree + "crs", // To enter directly to a course + "usr", // To enter directly to a user + "act", // To execute directly an action (allowed only for fully public actions) + "ses", // To use an open session when redirecting from one language to another + "key", // To verify an email address + }; +#define NUM_VALID_PARAMS (sizeof (ValidParamsInGETMethod) / sizeof (ValidParamsInGETMethod[0])) + unsigned i; + + for (i = 0; + i < NUM_VALID_PARAMS; + i++) + if (!strcmp (ParamName,ValidParamsInGETMethod[i])) + return true; + return false; + } + /*****************************************************************************/ /****************** Get the parameters sent to this CGI **********************/ /*****************************************************************************/