Version19.96

This commit is contained in:
Antonio Cañas Vargas 2019-12-19 01:42:24 +01:00
parent 8e22bf07f2
commit 774c3fb6d0
15 changed files with 113 additions and 87 deletions

View File

@ -60,7 +60,7 @@ static void RSS_WriteExamAnnouncements (FILE *FileRSS,struct Course *Crs);
void RSS_UpdateRSSFileForACrs (struct Course *Crs) void RSS_UpdateRSSFileForACrs (struct Course *Crs)
{ {
char PathRelPublRSSDir[PATH_MAX + 1]; char PathRelPublRSSDir[PATH_MAX + 1];
char PathRelPublRSSFile[PATH_MAX + 1]; char PathRelPublRSSFile[PATH_MAX + 1 + NAME_MAX + 1];
FILE *FileRSS; FILE *FileRSS;
char RSSLink[Cns_MAX_BYTES_WWW + 1]; char RSSLink[Cns_MAX_BYTES_WWW + 1];
struct tm *tm; struct tm *tm;

View File

@ -75,7 +75,7 @@ extern struct Globals Gbl;
static void Acc_ShowFormCheckIfIHaveAccount (const char *Title); static void Acc_ShowFormCheckIfIHaveAccount (const char *Title);
static void Acc_WriteRowEmptyAccount (unsigned NumUsr,const char *ID,struct UsrData *UsrDat); static void Acc_WriteRowEmptyAccount (unsigned NumUsr,const char *ID,struct UsrData *UsrDat);
static void Acc_ShowFormRequestNewAccountWithParams (const char *NewNicknameWithoutArroba, static void Acc_ShowFormRequestNewAccountWithParams (const char NewNicknameWithoutArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1],
const char *NewEmail); const char *NewEmail);
static bool Acc_GetParamsNewAccount (char NewNicknameWithoutArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1], static bool Acc_GetParamsNewAccount (char NewNicknameWithoutArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1],
char *NewEmail, char *NewEmail,
@ -343,7 +343,7 @@ void Acc_ShowFormCreateMyAccount (void)
/************ Show form to create a new account using parameters *************/ /************ Show form to create a new account using parameters *************/
/*****************************************************************************/ /*****************************************************************************/
static void Acc_ShowFormRequestNewAccountWithParams (const char *NewNicknameWithoutArroba, static void Acc_ShowFormRequestNewAccountWithParams (const char NewNicknameWithoutArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1],
const char *NewEmail) const char *NewEmail)
{ {
extern const char *Hlp_PROFILE_SignUp; extern const char *Hlp_PROFILE_SignUp;
@ -632,7 +632,7 @@ static bool Acc_GetParamsNewAccount (char NewNicknameWithoutArroba[Nck_MAX_BYTES
extern const char *Txt_The_nickname_entered_X_is_not_valid_; extern const char *Txt_The_nickname_entered_X_is_not_valid_;
extern const char *Txt_The_email_address_X_had_been_registered_by_another_user; extern const char *Txt_The_email_address_X_had_been_registered_by_another_user;
extern const char *Txt_The_email_address_entered_X_is_not_valid; extern const char *Txt_The_email_address_entered_X_is_not_valid;
char NewNicknameWithArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1]; char NewNicknameWithArroba[1 + Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1];
char NewPlainPassword[Pwd_MAX_BYTES_PLAIN_PASSWORD + 1]; char NewPlainPassword[Pwd_MAX_BYTES_PLAIN_PASSWORD + 1];
bool Error = false; bool Error = false;

View File

@ -492,14 +492,16 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD: En OpenSWAD:
ps2pdf source.ps destination.pdf ps2pdf source.ps destination.pdf
*/ */
#define Log_PLATFORM_VERSION "SWAD 19.95.2 (2019-12-18)" #define Log_PLATFORM_VERSION "SWAD 19.96 (2019-12-19)"
#define CSS_FILE "swad19.95.css" #define CSS_FILE "swad19.95.css"
#define JS_FILE "swad19.91.1.js" #define JS_FILE "swad19.91.1.js"
/* /*
// TODO: Hacer un nuevo rol en los TFG: tutor externo (profesor de áreas no vinculadas con el centro, profesionales de empresas, etc.) // TODO: Hacer un nuevo rol en los TFG: tutor externo (profesor de áreas no vinculadas con el centro, profesionales de empresas, etc.)
// TODO: Impedir la creación y edición de proyectos si no son editables. // TODO: Impedir la creación y edición de proyectos si no son editables.
// TODO: No se puede entrar con DNI '1' suponiendo que no tenga password ¿por qué?
Version 19.95.2: Dec 18, 2019 Buf fixes in swad.sql. (? lines) Version 19.96: Dec 19, 2019 Bug fixes and code refactoring. (249423 lines)
Version 19.95.2: Dec 18, 2019 Bug fixes. (? lines)
1 change necessary in database: 1 change necessary in database:
DROP TABLE IF EXISTS log; DROP TABLE IF EXISTS log;

View File

@ -1553,7 +1553,7 @@ void Exa_GetSummaryAndContentExamAnnouncement (char SummaryStr[Ntf_MAX_BYTES_SUM
long ExaCod,bool GetContent) long ExaCod,bool GetContent)
{ {
extern const char *Txt_hours_ABBREVIATION; extern const char *Txt_hours_ABBREVIATION;
char CrsNameAndDate[Hie_MAX_BYTES_FULL_NAME + (2 + Cns_MAX_BYTES_DATE + 6) + 1]; char CrsNameAndDate[Hie_MAX_BYTES_FULL_NAME + (2 + Cns_MAX_BYTES_DATE + 7) + 1];
char StrExamDate[Cns_MAX_BYTES_DATE + 1]; char StrExamDate[Cns_MAX_BYTES_DATE + 1];
/***** Initializations *****/ /***** Initializations *****/

View File

@ -5078,7 +5078,7 @@ void Brw_CreateDirDownloadTmp (void)
static unsigned NumDir = 0; // When this function is called several times in the same execution of the program, each time a new directory is created static unsigned NumDir = 0; // When this function is called several times in the same execution of the program, each time a new directory is created
// This happens when the trees of assignments and works of several users are being listed // This happens when the trees of assignments and works of several users are being listed
char PathUniqueDirL[PATH_MAX + 1]; char PathUniqueDirL[PATH_MAX + 1];
char PathUniqueDirR[PATH_MAX + 1]; char PathUniqueDirR[PATH_MAX + 1 + NAME_MAX + 1];
/* Example: /var/www/html/swad/tmp/SS/ujCNWsy4ZOdmgMKYBe0sKPAJu6szaZOQlIlJs_QIY */ /* Example: /var/www/html/swad/tmp/SS/ujCNWsy4ZOdmgMKYBe0sKPAJu6szaZOQlIlJs_QIY */
@ -8689,8 +8689,8 @@ void Brw_RenFolderFileBrowser (void)
extern const char *Txt_You_can_not_rename_this_folder; extern const char *Txt_You_can_not_rename_this_folder;
char OldPathInTree[PATH_MAX + 1 + NAME_MAX + 1]; char OldPathInTree[PATH_MAX + 1 + NAME_MAX + 1];
char NewPathInTree[PATH_MAX + 1 + NAME_MAX + 1]; char NewPathInTree[PATH_MAX + 1 + NAME_MAX + 1];
char OldPath[PATH_MAX + 1 + PATH_MAX + 1]; char OldPath[PATH_MAX + 1 + PATH_MAX + 1 + NAME_MAX + 1];
char NewPath[PATH_MAX + 1 + PATH_MAX + 1]; char NewPath[PATH_MAX + 1 + PATH_MAX + 1 + NAME_MAX + 1];
/***** Get parameters related to file browser *****/ /***** Get parameters related to file browser *****/
Brw_GetParAndInitFileBrowser (); Brw_GetParAndInitFileBrowser ();
@ -8852,7 +8852,7 @@ static bool Brw_RcvFileInFileBrw (Brw_UploadType_t UploadType)
char SrcFileName[PATH_MAX + 1]; char SrcFileName[PATH_MAX + 1];
char PathUntilFileName[PATH_MAX + 1]; char PathUntilFileName[PATH_MAX + 1];
char Path[PATH_MAX + 1 + PATH_MAX + 1]; char Path[PATH_MAX + 1 + PATH_MAX + 1];
char PathTmp[PATH_MAX + 1]; char PathTmp[PATH_MAX + 1 + PATH_MAX + 4 + 1];
char PathCompleteInTreeIncludingFile[PATH_MAX + 1 + NAME_MAX + 1]; char PathCompleteInTreeIncludingFile[PATH_MAX + 1 + NAME_MAX + 1];
char MIMEType[Brw_MAX_BYTES_MIME_TYPE + 1]; char MIMEType[Brw_MAX_BYTES_MIME_TYPE + 1];
bool AdminMarks; bool AdminMarks;
@ -9044,7 +9044,7 @@ void Brw_RecLinkFileBrowser (void)
char FileName[NAME_MAX + 1]; char FileName[NAME_MAX + 1];
char Path[PATH_MAX + 1 + PATH_MAX + 1]; char Path[PATH_MAX + 1 + PATH_MAX + 1];
FILE *FileURL; FILE *FileURL;
char PathCompleteInTreeIncludingFile[PATH_MAX + 1 + NAME_MAX + 1]; char PathCompleteInTreeIncludingFile[PATH_MAX + 1 + NAME_MAX + 4 + 1];
long FilCod = -1L; // Code of new file in database long FilCod = -1L; // Code of new file in database
char FileNameToShow[NAME_MAX + 1]; char FileNameToShow[NAME_MAX + 1];
struct FileMetadata FileMetadata; struct FileMetadata FileMetadata;

View File

@ -724,7 +724,7 @@ void Inf_RemoveUsrFromCrsInfoRead (long UsrCod,long CrsCod)
static bool Inf_CheckPage (long CrsCod,Inf_InfoType_t InfoType) static bool Inf_CheckPage (long CrsCod,Inf_InfoType_t InfoType)
{ {
char PathRelDirHTML[PATH_MAX + 1]; char PathRelDirHTML[PATH_MAX + 1];
char PathRelFileHTML[PATH_MAX + 1]; char PathRelFileHTML[PATH_MAX + 1 + 10 + 1];
// TODO !!!!!!!!!!!! If the page is hosted in server ==> it should be created a temporary public directory // TODO !!!!!!!!!!!! If the page is hosted in server ==> it should be created a temporary public directory
// and host the page in a private directory !!!!!!!!!!!!!!!!! // and host the page in a private directory !!!!!!!!!!!!!!!!!
@ -758,7 +758,7 @@ static bool Inf_CheckPage (long CrsCod,Inf_InfoType_t InfoType)
static bool Inf_CheckAndShowPage (void) static bool Inf_CheckAndShowPage (void)
{ {
char PathRelDirHTML[PATH_MAX + 1]; char PathRelDirHTML[PATH_MAX + 1];
char PathRelFileHTML[PATH_MAX + 1]; char PathRelFileHTML[PATH_MAX + 1 + 10 + 1];
char URL[PATH_MAX + 1]; char URL[PATH_MAX + 1];
// TODO !!!!!!!!!!!! If the page is hosted in server ==> it should be created a temporary public directory // TODO !!!!!!!!!!!! If the page is hosted in server ==> it should be created a temporary public directory
@ -821,7 +821,7 @@ static void Inf_BuildPathPage (long CrsCod,Inf_InfoType_t InfoType,char PathDir[
int Inf_WritePageIntoHTMLBuffer (char **HTMLBuffer) int Inf_WritePageIntoHTMLBuffer (char **HTMLBuffer)
{ {
char PathRelDirHTML[PATH_MAX + 1]; char PathRelDirHTML[PATH_MAX + 1];
char PathRelFileHTML[PATH_MAX + 1]; char PathRelFileHTML[PATH_MAX + 1 + 10 + 1];
FILE *FileHTML; FILE *FileHTML;
bool FileExists = false; bool FileExists = false;
size_t Length; size_t Length;
@ -2249,10 +2249,10 @@ void Inf_ReceivePagInfo (void)
struct Param *Param; struct Param *Param;
char SourceFileName[PATH_MAX + 1]; char SourceFileName[PATH_MAX + 1];
char PathRelDirHTML[PATH_MAX + 1]; char PathRelDirHTML[PATH_MAX + 1];
char PathRelFileHTML[PATH_MAX + 1]; char PathRelFileHTML[PATH_MAX + 1 + 10 + 1];
char PathRelFileZIP[PATH_MAX + 1 + NAME_MAX + 1]; char PathRelFileZIP[PATH_MAX + 1 + NAME_MAX + 1];
char MIMEType[Brw_MAX_BYTES_MIME_TYPE + 1]; char MIMEType[Brw_MAX_BYTES_MIME_TYPE + 1];
char StrUnzip[128 + PATH_MAX * 2 + 1]; char StrUnzip[128 + PATH_MAX + 1 + NAME_MAX + 1 + PATH_MAX + 1];
bool WrongType = false; bool WrongType = false;
bool FileIsOK = false; bool FileIsOK = false;

View File

@ -706,7 +706,7 @@ void Mrk_GetNotifMyMarks (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
char FullPathInTreeFromDBMarksTable[PATH_MAX + 1]; char FullPathInTreeFromDBMarksTable[PATH_MAX + 1];
char PathUntilFileName[PATH_MAX + 1]; char PathUntilFileName[PATH_MAX + 1];
char FileName[NAME_MAX + 1]; char FileName[NAME_MAX + 1];
char PathMarks[PATH_MAX + 1]; char PathMarks[PATH_MAX + 1 + Cns_MAX_DECIMAL_DIGITS_LONG + 1 + 3 + 1 + Cns_MAX_DECIMAL_DIGITS_LONG + 1 + PATH_MAX + 1];
char FileNameUsrMarks[PATH_MAX + 1]; char FileNameUsrMarks[PATH_MAX + 1];
FILE *FileUsrMarks; FILE *FileUsrMarks;
size_t SizeOfMyMarks; size_t SizeOfMyMarks;

View File

@ -1521,16 +1521,16 @@ static void Med_ShowJPG (struct Media *Media,
{ {
extern const char *Txt_File_not_found; extern const char *Txt_File_not_found;
char FileNameMedia[NAME_MAX + 1]; char FileNameMedia[NAME_MAX + 1];
char FullPathMediaPriv[PATH_MAX + 1]; char *FullPathMediaPriv;
char *URL; char *URL;
/***** Build private path to JPG *****/ /***** Build private path to JPG *****/
snprintf (FileNameMedia,sizeof (FileNameMedia), snprintf (FileNameMedia,sizeof (FileNameMedia),
"%s.%s", "%s.%s",
Media->Name,Med_Extensions[Med_JPG]); Media->Name,Med_Extensions[Med_JPG]);
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv), if (asprintf (&FullPathMediaPriv,"%s/%s",
"%s/%s", PathMedPriv,FileNameMedia) < 0)
PathMedPriv,FileNameMedia); Lay_NotEnoughMemoryExit ();
/***** Check if private media file exists *****/ /***** Check if private media file exists *****/
if (Fil_CheckIfPathExists (FullPathMediaPriv)) if (Fil_CheckIfPathExists (FullPathMediaPriv))
@ -1551,6 +1551,8 @@ static void Med_ShowJPG (struct Media *Media,
} }
else else
HTM_Txt (Txt_File_not_found); HTM_Txt (Txt_File_not_found);
free (FullPathMediaPriv);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1563,7 +1565,8 @@ static void Med_ShowGIF (struct Media *Media,
{ {
extern const char *Txt_File_not_found; extern const char *Txt_File_not_found;
char FileNameMedia[NAME_MAX + 1]; char FileNameMedia[NAME_MAX + 1];
char FullPathMediaPriv[PATH_MAX + 1]; char *FullPathGIFPriv;
char *FullPathPNGPriv;
char *URL; char *URL;
char *URL_GIF; char *URL_GIF;
char *URL_PNG; char *URL_PNG;
@ -1572,16 +1575,16 @@ static void Med_ShowGIF (struct Media *Media,
snprintf (FileNameMedia,sizeof (FileNameMedia), snprintf (FileNameMedia,sizeof (FileNameMedia),
"%s.%s", "%s.%s",
Media->Name,Med_Extensions[Med_GIF]); Media->Name,Med_Extensions[Med_GIF]);
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv), // The animated GIF image if (asprintf (&FullPathGIFPriv,"%s/%s", // The animated GIF image
"%s/%s", PathMedPriv,FileNameMedia) < 0)
PathMedPriv,FileNameMedia); Lay_NotEnoughMemoryExit ();
/***** Check if private media file exists *****/ /***** Check if private media file exists *****/
if (Fil_CheckIfPathExists (FullPathMediaPriv)) // The animated GIF image if (Fil_CheckIfPathExists (FullPathGIFPriv)) // The animated GIF image
{ {
/***** Create symbolic link from temporary public directory to private file /***** Create symbolic link from temporary public directory to private file
in order to gain access to it for showing/downloading *****/ in order to gain access to it for showing/downloading *****/
Brw_CreateTmpPublicLinkToPrivateFile (FullPathMediaPriv,FileNameMedia); Brw_CreateTmpPublicLinkToPrivateFile (FullPathGIFPriv,FileNameMedia);
/***** Create URL pointing to symbolic link *****/ /***** Create URL pointing to symbolic link *****/
if (asprintf (&URL,"%s/%s/%s", if (asprintf (&URL,"%s/%s/%s",
@ -1596,18 +1599,18 @@ static void Med_ShowGIF (struct Media *Media,
snprintf (FileNameMedia,sizeof (FileNameMedia), snprintf (FileNameMedia,sizeof (FileNameMedia),
"%s.png", "%s.png",
Media->Name); Media->Name);
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv), if (asprintf (&FullPathPNGPriv,"%s/%s",
"%s/%s", PathMedPriv,FileNameMedia) < 0)
PathMedPriv,FileNameMedia); Lay_NotEnoughMemoryExit ();
if (asprintf (&URL_PNG,"%s/%s",URL,FileNameMedia) < 0) // The static PNG image if (asprintf (&URL_PNG,"%s/%s",URL,FileNameMedia) < 0) // The static PNG image
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
/***** Check if private media file exists *****/ /***** Check if private media file exists *****/
if (Fil_CheckIfPathExists (FullPathMediaPriv)) // The static PNG image if (Fil_CheckIfPathExists (FullPathPNGPriv)) // The static PNG image
{ {
/***** Create symbolic link from temporary public directory to private file /***** Create symbolic link from temporary public directory to private file
in order to gain access to it for showing/downloading *****/ in order to gain access to it for showing/downloading *****/
Brw_CreateTmpPublicLinkToPrivateFile (FullPathMediaPriv,FileNameMedia); Brw_CreateTmpPublicLinkToPrivateFile (FullPathPNGPriv,FileNameMedia);
/***** Show static PNG and animated GIF *****/ /***** Show static PNG and animated GIF *****/
HTM_DIV_Begin ("class=\"MED_PLAY\"" HTM_DIV_Begin ("class=\"MED_PLAY\""
@ -1630,6 +1633,8 @@ static void Med_ShowGIF (struct Media *Media,
else else
HTM_Txt (Txt_File_not_found); HTM_Txt (Txt_File_not_found);
free (FullPathPNGPriv);
/***** Free URLs *****/ /***** Free URLs *****/
free (URL_PNG); free (URL_PNG);
free (URL_GIF); free (URL_GIF);
@ -1637,6 +1642,8 @@ static void Med_ShowGIF (struct Media *Media,
} }
else else
HTM_Txt (Txt_File_not_found); HTM_Txt (Txt_File_not_found);
free (FullPathGIFPriv);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1649,16 +1656,16 @@ static void Med_ShowVideo (struct Media *Media,
{ {
extern const char *Txt_File_not_found; extern const char *Txt_File_not_found;
char FileNameMediaPriv[NAME_MAX + 1]; char FileNameMediaPriv[NAME_MAX + 1];
char FullPathMediaPriv[PATH_MAX + 1]; char *FullPathMediaPriv;
char URL_Video[PATH_MAX + 1]; char URL_Video[PATH_MAX + 1];
/***** Build private path to video *****/ /***** Build private path to video *****/
snprintf (FileNameMediaPriv,sizeof (FileNameMediaPriv), snprintf (FileNameMediaPriv,sizeof (FileNameMediaPriv),
"%s.%s", "%s.%s",
Media->Name,Med_Extensions[Media->Type]); Media->Name,Med_Extensions[Media->Type]);
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv), if (asprintf (&FullPathMediaPriv,"%s/%s",
"%s/%s", PathMedPriv,FileNameMediaPriv) < 0)
PathMedPriv,FileNameMediaPriv); Lay_NotEnoughMemoryExit ();
/***** Check if private media file exists *****/ /***** Check if private media file exists *****/
if (Fil_CheckIfPathExists (FullPathMediaPriv)) if (Fil_CheckIfPathExists (FullPathMediaPriv))
@ -1689,6 +1696,8 @@ static void Med_ShowVideo (struct Media *Media,
} }
else else
HTM_Txt (Txt_File_not_found); HTM_Txt (Txt_File_not_found);
free (FullPathMediaPriv);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1824,7 +1833,7 @@ void Med_RemoveMediaFromAllRows (unsigned NumMedia,MYSQL_RES *mysql_res)
void Med_RemoveMedia (long MedCod) void Med_RemoveMedia (long MedCod)
{ {
char PathMedPriv[PATH_MAX + 1]; char PathMedPriv[PATH_MAX + 1];
char FullPathMediaPriv[PATH_MAX + 1]; char *FullPathMediaPriv;
struct Media Media; struct Media Media;
/***** Trivial case *****/ /***** Trivial case *****/
@ -1860,34 +1869,37 @@ void Med_RemoveMedia (long MedCod)
{ {
case Med_JPG: case Med_JPG:
/***** Remove private JPG file *****/ /***** Remove private JPG file *****/
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv), if (asprintf (&FullPathMediaPriv,"%s/%s.%s",
"%s/%s.%s", PathMedPriv,Media.Name,Med_Extensions[Med_JPG]) < 0)
PathMedPriv,Media.Name,Med_Extensions[Med_JPG]); Lay_NotEnoughMemoryExit ();
unlink (FullPathMediaPriv); unlink (FullPathMediaPriv);
free (FullPathMediaPriv);
break; break;
case Med_GIF: case Med_GIF:
/***** Remove private GIF file *****/ /***** Remove private GIF file *****/
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv), if (asprintf (&FullPathMediaPriv,"%s/%s.%s",
"%s/%s.%s", PathMedPriv,Media.Name,Med_Extensions[Med_GIF]) < 0)
PathMedPriv,Media.Name,Med_Extensions[Med_GIF]); Lay_NotEnoughMemoryExit ();
unlink (FullPathMediaPriv); unlink (FullPathMediaPriv);
free (FullPathMediaPriv);
/***** Remove private PNG file *****/ /***** Remove private PNG file *****/
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv), if (asprintf (&FullPathMediaPriv,"%s/%s.png",
"%s/%s.png", PathMedPriv,Media.Name) < 0)
PathMedPriv,Media.Name); Lay_NotEnoughMemoryExit ();
unlink (FullPathMediaPriv); unlink (FullPathMediaPriv);
free (FullPathMediaPriv);
break; break;
case Med_MP4: case Med_MP4:
case Med_WEBM: case Med_WEBM:
case Med_OGG: case Med_OGG:
/***** Remove private video file *****/ /***** Remove private video file *****/
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv), if (asprintf (&FullPathMediaPriv,"%s/%s.%s",
"%s/%s.%s", PathMedPriv,Media.Name,Med_Extensions[Media.Type]) < 0)
PathMedPriv,Media.Name,Med_Extensions[Media.Type]); Lay_NotEnoughMemoryExit ();
unlink (FullPathMediaPriv); unlink (FullPathMediaPriv);
free (FullPathMediaPriv);
break; break;
default: default:

View File

@ -120,7 +120,7 @@ struct Media
}; };
/***** Parameters used in a form to upload an image/video *****/ /***** Parameters used in a form to upload an image/video *****/
#define Med_MAX_BYTES_PARAM_UPLOAD_MEDIA (16 - 1) #define Med_MAX_BYTES_PARAM_UPLOAD_MEDIA (32 - 1)
struct ParamUploadMedia struct ParamUploadMedia
{ {
char Action [Med_MAX_BYTES_PARAM_UPLOAD_MEDIA + 1]; char Action [Med_MAX_BYTES_PARAM_UPLOAD_MEDIA + 1];

View File

@ -1592,42 +1592,54 @@ static bool Msg_CheckIfReceivedMsgIsDeletedForAllItsRecipients (long MsgCod)
static unsigned Msg_GetNumUnreadMsgs (long FilterCrsCod,const char *FilterFromToSubquery) static unsigned Msg_GetNumUnreadMsgs (long FilterCrsCod,const char *FilterFromToSubquery)
{ {
char SubQuery[Msg_MAX_BYTES_MESSAGES_QUERY + 1]; char *SubQuery;
unsigned NumMsgs; unsigned NumMsgs;
/***** Get number of unread messages from database *****/ /***** Get number of unread messages from database *****/
if (FilterCrsCod >= 0) // If origin course selected if (FilterCrsCod >= 0) // If origin course selected
{ {
if (FilterFromToSubquery[0]) if (FilterFromToSubquery[0])
sprintf (SubQuery,"SELECT msg_rcv.MsgCod FROM msg_rcv,msg_snt,usr_data" {
" WHERE msg_rcv.UsrCod=%ld AND msg_rcv.Open='N'" if (asprintf (&SubQuery,"SELECT msg_rcv.MsgCod FROM msg_rcv,msg_snt,usr_data"
" AND msg_rcv.MsgCod=msg_snt.MsgCod" " WHERE msg_rcv.UsrCod=%ld AND msg_rcv.Open='N'"
" AND msg_snt.CrsCod=%ld" " AND msg_rcv.MsgCod=msg_snt.MsgCod"
" AND msg_snt.UsrCod=usr_data.UsrCod%s", " AND msg_snt.CrsCod=%ld"
Gbl.Usrs.Me.UsrDat.UsrCod, " AND msg_snt.UsrCod=usr_data.UsrCod%s",
FilterCrsCod, Gbl.Usrs.Me.UsrDat.UsrCod,
FilterFromToSubquery); FilterCrsCod,
FilterFromToSubquery) < 0)
Lay_NotEnoughMemoryExit ();
}
else else
sprintf (SubQuery,"SELECT msg_rcv.MsgCod FROM msg_rcv,msg_snt" {
" WHERE msg_rcv.UsrCod=%ld AND msg_rcv.Open='N'" if (asprintf (&SubQuery,"SELECT msg_rcv.MsgCod FROM msg_rcv,msg_snt"
" AND msg_rcv.MsgCod=msg_snt.MsgCod" " WHERE msg_rcv.UsrCod=%ld AND msg_rcv.Open='N'"
" AND msg_snt.CrsCod=%ld", " AND msg_rcv.MsgCod=msg_snt.MsgCod"
Gbl.Usrs.Me.UsrDat.UsrCod, " AND msg_snt.CrsCod=%ld",
FilterCrsCod); Gbl.Usrs.Me.UsrDat.UsrCod,
FilterCrsCod) < 0)
Lay_NotEnoughMemoryExit ();
}
} }
else // If no origin course selected else // If no origin course selected
{ {
if (FilterFromToSubquery[0]) if (FilterFromToSubquery[0])
sprintf (SubQuery,"SELECT msg_rcv.MsgCod FROM msg_rcv,msg_snt,usr_data" {
" WHERE msg_rcv.UsrCod=%ld AND msg_rcv.Open='N'" if (asprintf (&SubQuery,"SELECT msg_rcv.MsgCod FROM msg_rcv,msg_snt,usr_data"
" AND msg_rcv.MsgCod=msg_snt.MsgCod" " WHERE msg_rcv.UsrCod=%ld AND msg_rcv.Open='N'"
" AND msg_snt.UsrCod=usr_data.UsrCod%s", " AND msg_rcv.MsgCod=msg_snt.MsgCod"
Gbl.Usrs.Me.UsrDat.UsrCod, " AND msg_snt.UsrCod=usr_data.UsrCod%s",
FilterFromToSubquery); Gbl.Usrs.Me.UsrDat.UsrCod,
FilterFromToSubquery) < 0)
Lay_NotEnoughMemoryExit ();
}
else else
sprintf (SubQuery,"SELECT MsgCod FROM msg_rcv" {
" WHERE UsrCod=%ld AND Open='N'", if (asprintf (&SubQuery,"SELECT MsgCod FROM msg_rcv"
Gbl.Usrs.Me.UsrDat.UsrCod); " WHERE UsrCod=%ld AND Open='N'",
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
}
} }
if (Gbl.Msg.FilterContent[0]) if (Gbl.Msg.FilterContent[0])
@ -1644,6 +1656,8 @@ static unsigned Msg_GetNumUnreadMsgs (long FilterCrsCod,const char *FilterFromTo
"SELECT COUNT(*) FROM (%s) AS T", "SELECT COUNT(*) FROM (%s) AS T",
SubQuery); SubQuery);
free (SubQuery);
return NumMsgs; return NumMsgs;
} }

View File

@ -1587,7 +1587,7 @@ static void Pho_ComputeAveragePhoto (long DegCod,Usr_Sex_t Sex,Rol_Role_t Role,
char PathRelAvgPhoto[PATH_MAX + 1]; char PathRelAvgPhoto[PATH_MAX + 1];
char FileNamePhotoNames[PATH_MAX + 1]; char FileNamePhotoNames[PATH_MAX + 1];
FILE *FilePhotoNames = NULL; // Initialized to avoid warning FILE *FilePhotoNames = NULL; // Initialized to avoid warning
char StrCallToProgram[256]; // Call to photo processing program char StrCallToProgram[3 * (PATH_MAX + 1)]; // Call to photo processing program
int ReturnCode; int ReturnCode;
/* To compute execution time of this function */ /* To compute execution time of this function */
struct timeval tvStartComputingStat; struct timeval tvStartComputingStat;

View File

@ -66,10 +66,8 @@
struct Rep_CurrentTimeUTC struct Rep_CurrentTimeUTC
{ {
char StrDate[10 + 1]; // Example: 2016-10-02 char StrDate[3 * (Cns_MAX_DECIMAL_DIGITS_INT + 1)]; // Example: 2016-10-02
// 1234567890 char StrTime[3 * (Cns_MAX_DECIMAL_DIGITS_INT + 1)]; // Example: 19:03:49
char StrTime[8 + 1]; // Example: 19:03:49
// 12345678
unsigned Date; // Example: 20161002 unsigned Date; // Example: 20161002
unsigned Time; // Example: 190349 unsigned Time; // Example: 190349
}; };
@ -374,8 +372,8 @@ static void Rep_GetCurrentDateTimeUTC (struct Rep_Report *Report)
static void Rep_CreateNewReportFile (struct Rep_Report *Report) static void Rep_CreateNewReportFile (struct Rep_Report *Report)
{ {
char PathUniqueDirL[PATH_MAX + 1]; char PathUniqueDirL[PATH_MAX + 1];
char PathUniqueDirR[PATH_MAX + 1]; char PathUniqueDirR[PATH_MAX + 1 + Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64 + 1];
char PathFileReport[PATH_MAX + 1]; char PathFileReport[PATH_MAX + 1 + Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64 + 1 + NAME_MAX + 1];
char Permalink[128 + char Permalink[128 +
Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64 + Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64 +
NAME_MAX]; NAME_MAX];

View File

@ -9193,7 +9193,7 @@ void Usr_PutSelectorNumColsClassPhoto (void)
/********** Build the relative path of a user from his user's code ***********/ /********** Build the relative path of a user from his user's code ***********/
/*****************************************************************************/ /*****************************************************************************/
void Usr_ConstructPathUsr (long UsrCod,char PathUsr[PATH_MAX + 1]) void Usr_ConstructPathUsr (long UsrCod,char PathUsr[PATH_MAX + 1 + Cns_MAX_DECIMAL_DIGITS_LONG + 1])
{ {
char PathAboveUsr[PATH_MAX + 1]; char PathAboveUsr[PATH_MAX + 1];
@ -9207,7 +9207,7 @@ void Usr_ConstructPathUsr (long UsrCod,char PathUsr[PATH_MAX + 1])
Fil_CreateDirIfNotExists (PathAboveUsr); Fil_CreateDirIfNotExists (PathAboveUsr);
/***** Path for user *****/ /***** Path for user *****/
snprintf (PathUsr,PATH_MAX + 1, snprintf (PathUsr,PATH_MAX + 1 + Cns_MAX_DECIMAL_DIGITS_LONG + 1,
"%s/%ld", "%s/%ld",
PathAboveUsr,UsrCod); PathAboveUsr,UsrCod);
} }

View File

@ -504,7 +504,7 @@ void Usr_SeeStdClassPhotoPrn (void);
void Usr_SeeTchClassPhotoPrn (void); void Usr_SeeTchClassPhotoPrn (void);
void Usr_PutSelectorNumColsClassPhoto (void); void Usr_PutSelectorNumColsClassPhoto (void);
void Usr_ConstructPathUsr (long UsrCod,char PathUsr[PATH_MAX + 1]); void Usr_ConstructPathUsr (long UsrCod,char PathUsr[PATH_MAX + 1 + Cns_MAX_DECIMAL_DIGITS_LONG + 1]);
bool Usr_ChkIfUsrCodExists (long UsrCod); bool Usr_ChkIfUsrCodExists (long UsrCod);
void Usr_ShowWarningNoUsersFound (Rol_Role_t Role); void Usr_ShowWarningNoUsersFound (Rol_Role_t Role);

View File

@ -256,7 +256,7 @@ static void ZIP_CreateDirCompressionUsr (struct UsrData *UsrDat)
char FullNameAndUsrID[NAME_MAX + 1]; char FullNameAndUsrID[NAME_MAX + 1];
char PathFolderUsrInsideCrs[128 + PATH_MAX + NAME_MAX]; char PathFolderUsrInsideCrs[128 + PATH_MAX + NAME_MAX];
char LinkTmpUsr[PATH_MAX + 1]; char LinkTmpUsr[PATH_MAX + 1];
char Link[PATH_MAX + 1]; char Link[PATH_MAX + 1 + Cns_MAX_DECIMAL_DIGITS_UINT + 1];
unsigned NumTry; unsigned NumTry;
bool Success; bool Success;