aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dir.c76
-rw-r--r--fileio.c7
-rw-r--r--wfm.c27
-rw-r--r--wfm.h21
4 files changed, 67 insertions, 64 deletions
diff --git a/dir.c b/dir.c
index 7616fa7..fcd971f 100644
--- a/dir.c
+++ b/dir.c
@@ -1,8 +1,9 @@
#include "wfm.h"
-char DIRIMG[256], AUPIMG[256], ADNIMG[256], GENIMG[256], NEWIMG[256], ZIPIMG[256];
-char IMGIMG[256], OFFIMG[256], PDFIMG[256];
-char TXTIMG[256], EXEIMG[256], MEDIMG[257], ISOIMG[256], LNKIMG[256];
+//char ICO_FAV[256];
+char ICO_DIR[256], ICO_AUP[256], ICO_ADN[256], ICO_GEN[256], ICO_NEW[256], ICO_ZIP[256];
+char ICO_IMG[256], ICO_OFF[256], ICO_PDF[256];
+char ICO_TXT[256], ICO_EXE[256], ICO_MED[257], ICO_ISO[256], ICO_LNK[256];
regex_t reg_zip, reg_img, reg_pdf, reg_exe, reg_txt, reg_off, reg_med, reg_iso;
char M_HR[]="<FONT COLOR=\"#000000\" STYLE=\"font-weight:bold;\">(Last Hour)";
@@ -23,20 +24,21 @@ char tHL_COLOR[]="FFD700";
static const char *access_string[]={ "none", "readonly", "readwrite" };
void dir_icoinita(void) {
- snprintf(DIRIMG, sizeof(DIRIMG), "<IMG SRC=\"%sdir.gif\" ALT=\"Dir\" ALIGN=\"MIDDLE\" BORDER=\"0\">", rt.iconsurl);
- snprintf(LNKIMG, sizeof(LNKIMG), "<IMG SRC=\"%slnk.gif\" ALT=\"Symlink\" ALIGN=\"MIDDLE\" BORDER=\"0\">", rt.iconsurl);
- snprintf(AUPIMG, sizeof(AUPIMG), "<IMG SRC=\"%saup.gif\" ALT=\"Up\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"7\" HEIGHT=\"4\">", rt.iconsurl);
- snprintf(ADNIMG, sizeof(ADNIMG), "<IMG SRC=\"%sadn.gif\" ALT=\"Down\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"7\" HEIGHT=\"4\">", rt.iconsurl);
- snprintf(GENIMG, sizeof(GENIMG), "<IMG SRC=\"%sgen.gif\" ALT=\"Unknown\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"16\" HEIGHT=\"16\">", rt.iconsurl);
- snprintf(NEWIMG, sizeof(NEWIMG), "<IMG SRC=\"%sarr.gif\" ALT=\"New\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"16\" HEIGHT=\"16\">", rt.iconsurl);
- snprintf(ZIPIMG, sizeof(ZIPIMG), "<IMG SRC=\"%szip.gif\" ALT=\"Archive\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"16\" HEIGHT=\"16\">", rt.iconsurl);
- snprintf(IMGIMG, sizeof(IMGIMG), "<IMG SRC=\"%simg.gif\" ALT=\"Image\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"16\" HEIGHT=\"16\">", rt.iconsurl);
- snprintf(OFFIMG, sizeof(OFFIMG), "<IMG SRC=\"%soff.gif\" ALT=\"Office File\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"16\" HEIGHT=\"16\">", rt.iconsurl);
- snprintf(PDFIMG, sizeof(PDFIMG), "<IMG SRC=\"%spdf.gif\" ALT=\"PDF\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"16\" HEIGHT=\"16\">", rt.iconsurl);
- snprintf(TXTIMG, sizeof(TXTIMG), "<IMG SRC=\"%stxt.gif\" ALT=\"Text\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"16\" HEIGHT=\"16\">", rt.iconsurl);
- snprintf(EXEIMG, sizeof(EXEIMG), "<IMG SRC=\"%sexe.gif\" ALT=\"Exec\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"16\" HEIGHT=\"16\">", rt.iconsurl);
- snprintf(MEDIMG, sizeof(MEDIMG), "<IMG SRC=\"%smed.gif\" ALT=\"Multimedia\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"16\" HEIGHT=\"16\">", rt.iconsurl);
- snprintf(ISOIMG, sizeof(ISOIMG), "<IMG SRC=\"%siso.gif\" ALT=\"Disk Image\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"16\" HEIGHT=\"16\">", rt.iconsurl);
+ //snprintf(ICO_FAV, sizeof(ICO_FAV), "<IMG SRC=\"%s%s\" ALT=\"Favicon\" ALIGN=\"MIDDLE\" BORDER=\"0\">", rt.iconsurl, rt.favicon);
+ snprintf(ICO_DIR, sizeof(ICO_DIR), "<IMG SRC=\"%sdir.gif\" ALT=\"Dir\" ALIGN=\"MIDDLE\" BORDER=\"0\">", rt.iconsurl);
+ snprintf(ICO_LNK, sizeof(ICO_LNK), "<IMG SRC=\"%slnk.gif\" ALT=\"Symlink\" ALIGN=\"MIDDLE\" BORDER=\"0\">", rt.iconsurl);
+ snprintf(ICO_AUP, sizeof(ICO_AUP), "<IMG SRC=\"%saup.gif\" ALT=\"Up\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"7\" HEIGHT=\"4\">", rt.iconsurl);
+ snprintf(ICO_ADN, sizeof(ICO_ADN), "<IMG SRC=\"%sadn.gif\" ALT=\"Down\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"7\" HEIGHT=\"4\">", rt.iconsurl);
+ snprintf(ICO_GEN, sizeof(ICO_GEN), "<IMG SRC=\"%sgen.gif\" ALT=\"Unknown\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"16\" HEIGHT=\"16\">", rt.iconsurl);
+ snprintf(ICO_NEW, sizeof(ICO_NEW), "<IMG SRC=\"%sarr.gif\" ALT=\"New\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"16\" HEIGHT=\"16\">", rt.iconsurl);
+ snprintf(ICO_ZIP, sizeof(ICO_ZIP), "<IMG SRC=\"%szip.gif\" ALT=\"Archive\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"16\" HEIGHT=\"16\">", rt.iconsurl);
+ snprintf(ICO_IMG, sizeof(ICO_IMG), "<IMG SRC=\"%simg.gif\" ALT=\"Image\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"16\" HEIGHT=\"16\">", rt.iconsurl);
+ snprintf(ICO_OFF, sizeof(ICO_OFF), "<IMG SRC=\"%soff.gif\" ALT=\"Office File\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"16\" HEIGHT=\"16\">", rt.iconsurl);
+ snprintf(ICO_PDF, sizeof(ICO_PDF), "<IMG SRC=\"%spdf.gif\" ALT=\"PDF\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"16\" HEIGHT=\"16\">", rt.iconsurl);
+ snprintf(ICO_TXT, sizeof(ICO_TXT), "<IMG SRC=\"%stxt.gif\" ALT=\"Text\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"16\" HEIGHT=\"16\">", rt.iconsurl);
+ snprintf(ICO_EXE, sizeof(ICO_EXE), "<IMG SRC=\"%sexe.gif\" ALT=\"Exec\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"16\" HEIGHT=\"16\">", rt.iconsurl);
+ snprintf(ICO_MED, sizeof(ICO_MED), "<IMG SRC=\"%smed.gif\" ALT=\"Multimedia\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"16\" HEIGHT=\"16\">", rt.iconsurl);
+ snprintf(ICO_ISO, sizeof(ICO_ISO), "<IMG SRC=\"%siso.gif\" ALT=\"Disk Image\" ALIGN=\"MIDDLE\" BORDER=\"0\" WIDTH=\"16\" HEIGHT=\"16\">", rt.iconsurl);
if(
regcomp(&reg_zip, "\\.(zip|rar|tar|gz|tgz|z|arj|bz|tbz|7z|xz)$", REG_EXTENDED | REG_ICASE)!=0 ||
@@ -45,8 +47,8 @@ void dir_icoinita(void) {
regcomp(&reg_iso, "\\.(iso|flp|img|nrg|dmg)$", REG_EXTENDED | REG_ICASE)!=0 ||
regcomp(&reg_med, "\\.(mp3|mp4|vaw|mov|avi|ivr|mkv)$", REG_EXTENDED | REG_ICASE)!=0 ||
regcomp(&reg_pdf, "\\.(pdf|ps|eps|ai)$", REG_EXTENDED | REG_ICASE)!=0 ||
- regcomp(&reg_txt, "\\.(txt|asc|nfo|me|log|htm|html|shtml|js|jsp|php|xml|dtd|css|bas|c|h|cpp|cmd|bat|sh|ksh|awk|reg|log|bak|cfg|py|json|yaml|url)$", REG_EXTENDED | REG_ICASE)!=0 ||
- regcomp(&reg_exe, "\\.(exe|com|pif)$", REG_EXTENDED | REG_ICASE)!=0
+ regcomp(&reg_exe, "\\.(exe|com|pif)$", REG_EXTENDED | REG_ICASE)!=0 ||
+ regcomp(&reg_txt, "\\.(txt|asc|nfo|me|md|log|htm|html|shtml|js|jsp|php|xml|dtd|css|bas|c|h|cpp|cmd|bat|sh|ksh|awk|reg|log|bak|cfg|conf|py|json|yaml|url|lnk|desktop)$", REG_EXTENDED | REG_ICASE)!=0
) error("Unable to compile regex.");
}
@@ -315,26 +317,26 @@ void dirlist(void) {
//
if(strcmp(sortby, "size")==0) {
snprintf(namepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=name\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Filename</A>", cgiScriptName, wp.virt_dirname_urlencoded, rt.token);
- snprintf(sizepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=rsize\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Size</A>&nbsp;%s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, ADNIMG);
+ snprintf(sizepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=rsize\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Size</A>&nbsp;%s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, ICO_ADN);
snprintf(datepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=date\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Modified</A>", cgiScriptName, wp.virt_dirname_urlencoded, rt.token);
} else if(strcmp(sortby, "rsize")==0) {
snprintf(namepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=name\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Filename</A>", cgiScriptName, wp.virt_dirname_urlencoded, rt.token);
- snprintf(sizepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=size\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Size</A>&nbsp;%s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, AUPIMG);
+ snprintf(sizepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=size\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Size</A>&nbsp;%s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, ICO_AUP);
snprintf(datepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=date\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Modified</A>", cgiScriptName, wp.virt_dirname_urlencoded, rt.token);
} else if(strcmp(sortby, "date")==0) {
snprintf(namepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=name\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Filename</A>", cgiScriptName, wp.virt_dirname_urlencoded, rt.token);
snprintf(sizepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=size\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Size</A>", cgiScriptName, wp.virt_dirname_urlencoded, rt.token);
- snprintf(datepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=rdate\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Modified</A>&nbsp;%s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, ADNIMG);
+ snprintf(datepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=rdate\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Modified</A>&nbsp;%s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, ICO_ADN);
} else if(strcmp(sortby, "rdate")==0) {
snprintf(namepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=name\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Filename</A>", cgiScriptName, wp.virt_dirname_urlencoded, rt.token);
snprintf(sizepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=size\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Size</A>", cgiScriptName, wp.virt_dirname_urlencoded, rt.token);
- snprintf(datepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=date\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Modified</A>&nbsp;%s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, AUPIMG);
+ snprintf(datepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=date\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Modified</A>&nbsp;%s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, ICO_AUP);
} else if(strcmp(sortby, "name")==0) {
- snprintf(namepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=rname\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Filename</A>&nbsp;%s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, ADNIMG);
+ snprintf(namepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=rname\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Filename</A>&nbsp;%s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, ICO_ADN);
snprintf(sizepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=size\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Size</A>", cgiScriptName, wp.virt_dirname_urlencoded, rt.token);
snprintf(datepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=date\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Modified</A>", cgiScriptName, wp.virt_dirname_urlencoded, rt.token);
} else if(strcmp(sortby, "rname")==0) {
- snprintf(namepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=name\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Filename</A>&nbsp;%s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, AUPIMG);
+ snprintf(namepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=name\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Filename</A>&nbsp;%s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, ICO_AUP);
snprintf(sizepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=size\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Size</A>", cgiScriptName, wp.virt_dirname_urlencoded, rt.token);
snprintf(datepfx, 1024, "&nbsp;<A HREF=\"%s?directory=%s&amp;token=%s&amp;sortby=date\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Modified</A>", cgiScriptName, wp.virt_dirname_urlencoded, rt.token);
} else {
@@ -412,11 +414,11 @@ void dirlist(void) {
if(strcmp(highlight, name)==0) {
- icon=NEWIMG;
+ icon=ICO_NEW;
linecolor=tHIGH_COLOR;
}
else {
- icon=DIRIMG;
+ icon=ICO_DIR;
if(rt.js) {
linecolor=tNORMAL_COLOR;
}
@@ -507,20 +509,20 @@ void dirlist(void) {
else if(now-direntry[e].mtime < 365*24*3600) stime=M_YR;
else stime=M_OLD;
- if(regexec(&reg_zip, name, 0, 0, 0)==0) { icon=ZIPIMG; editable=0; }
- else if(regexec(&reg_img, name, 0, 0, 0)==0) { icon=IMGIMG; editable=0; }
- else if(regexec(&reg_off, name, 0, 0, 0)==0) { icon=OFFIMG; editable=0; }
- else if(regexec(&reg_pdf, name, 0, 0, 0)==0) { icon=PDFIMG; editable=0; }
- else if(regexec(&reg_txt, name, 0, 0, 0)==0) { icon=TXTIMG; editable=1; }
- else if(regexec(&reg_exe, name, 0, 0, 0)==0) { icon=EXEIMG; editable=0; }
- else if(regexec(&reg_med, name, 0, 0, 0)==0) { icon=MEDIMG; editable=0; }
- else if(regexec(&reg_iso, name, 0, 0, 0)==0) { icon=ISOIMG; editable=0; }
- else { icon=GENIMG; editable=0; }
+ if(regexec(&reg_zip, name, 0, 0, 0)==0) { icon=ICO_ZIP; editable=0; }
+ else if(regexec(&reg_img, name, 0, 0, 0)==0) { icon=ICO_IMG; editable=0; }
+ else if(regexec(&reg_off, name, 0, 0, 0)==0) { icon=ICO_OFF; editable=0; }
+ else if(regexec(&reg_pdf, name, 0, 0, 0)==0) { icon=ICO_PDF; editable=0; }
+ else if(regexec(&reg_txt, name, 0, 0, 0)==0) { icon=ICO_TXT; editable=1; }
+ else if(regexec(&reg_exe, name, 0, 0, 0)==0) { icon=ICO_EXE; editable=0; }
+ else if(regexec(&reg_med, name, 0, 0, 0)==0) { icon=ICO_MED; editable=0; }
+ else if(regexec(&reg_iso, name, 0, 0, 0)==0) { icon=ICO_ISO; editable=0; }
+ else { icon=ICO_GEN; editable=0; }
if(cfg.edit_any_file) { editable=1; }
if(strcmp(highlight, name)==0) {
- icon=NEWIMG;
+ icon=ICO_NEW;
linecolor=tHIGH_COLOR;
}
else {
diff --git a/fileio.c b/fileio.c
index 122539a..66c726c 100644
--- a/fileio.c
+++ b/fileio.c
@@ -165,7 +165,7 @@ void edit_save(void) {
int size=0;
int tmpfd;
char *buff;
- char tempname[64]={0};
+ char tempname[4096]={0};
//FILE *output;
FILE *tempf;
#ifndef WFMGIT
@@ -428,7 +428,7 @@ off_t du(char *pdir) {
void re_dir_ui(char *vdir, int level) {
struct dirent **direntry;
struct stat fileinfo;
- char child[sizeof(wp.virt_dirname)]={0};
+ char child[sizeof(wp.virt_dirname)+2]={0};
char phy_child[sizeof(wp.phys_dirname)]={0};
char re_phys_dirname[sizeof(wp.phys_dirname)]={0};
int n;
@@ -448,8 +448,7 @@ void re_dir_ui(char *vdir, int level) {
snprintf(phy_child, sizeof(phy_child), "%s/%s/%s", cfg.homedir, vdir, direntry[e]->d_name);
if((direntry[e]->d_name[0]!='.') && (lstat(phy_child, &fileinfo)==0) && S_ISDIR(fileinfo.st_mode)) {
-
- snprintf(child, sizeof(wp.virt_dirname), "%s/%s", vdir, direntry[e]->d_name);
+ snprintf(child, sizeof(child), "%s/%s", vdir, direntry[e]->d_name);
fprintf(cgiOut, "<OPTION VALUE=\"%s\">", child);
diff --git a/wfm.c b/wfm.c
index a2da6d9..53130a8 100644
--- a/wfm.c
+++ b/wfm.c
@@ -169,8 +169,8 @@ void access_check(char *access_string) {
rt.access_level=PERM_RW;
rt.access_as_user=1;
+ snprintf(rt.loggedinuser, sizeof(rt.loggedinuser), "%s", getenv("REMOTE_USER") );
rt.auth_method=AUTH_HT;
- strncpy(rt.loggedinuser, getenv("REMOTE_USER"), sizeof(rt.loggedinuser));
}
}
}
@@ -187,7 +187,7 @@ void checkfilename(char *inp_filename) {
char *bname;
if(inp_filename && strlen(inp_filename)) {
- strncpy(temp_filename, inp_filename, sizeof(wp.virt_filename));
+ snprintf(temp_filename, sizeof(temp_filename), "%s", inp_filename);
}
else if(cgiFormFileName("filename", temp_filename, sizeof(wp.virt_filename)) == cgiFormSuccess) {
@@ -209,7 +209,7 @@ void checkfilename(char *inp_filename) {
(void) *bname++;
strip(bname, sizeof(wp.virt_filename), VALIDCHRS);
- strncpy(wp.virt_filename, bname, sizeof(wp.virt_filename));
+ snprintf(wp.virt_filename, sizeof(wp.virt_filename), "%s", bname);
wp.virt_filename_urlencoded=url_encode(wp.virt_filename);
snprintf(wp.phys_filename, sizeof(wp.phys_filename), "%s/%s", wp.phys_dirname, wp.virt_filename);
@@ -219,8 +219,9 @@ void checkfilename(char *inp_filename) {
if(strstr(wp.phys_filename, "..")) error("Double dots in pfilename");
if(strstr(wp.virt_filename, "..")) error("Double dots in vfilename");
- strncpy(temp_dirname, wp.phys_filename, sizeof(wp.phys_filename));
- if(strlen(dirname(temp_dirname)) < strlen(cfg.homedir)) error("Basename path too short");
+ snprintf(temp_dirname, sizeof(temp_dirname), "%s", wp.phys_filename);
+ if(strlen(dirname(temp_dirname)) < strlen(cfg.homedir))
+ error("Basename path too short");
}
//
@@ -235,9 +236,9 @@ void checkdestination(void) {
cgiFormInteger("absdst", &absolute_destination, 0); // move operation relies on absolute paths, rename does not
if(absolute_destination)
- snprintf(wp.phys_destination, sizeof(wp.phys_filename), "%s/%s", cfg.homedir, wp.virt_destination);
+ snprintf(wp.phys_destination, sizeof(wp.phys_destination), "%s/%s", cfg.homedir, wp.virt_destination);
else
- snprintf(wp.phys_destination, sizeof(wp.phys_filename), "%s/%s", wp.phys_dirname, wp.virt_destination);
+ snprintf(wp.phys_destination, sizeof(wp.phys_destination), "%s/%s", wp.phys_dirname, wp.virt_destination);
if(strlen(wp.phys_destination)<1 || strlen(wp.phys_destination)>(sizeof(wp.phys_filename)-2)) error("Invalid pdestination lenght [%d]", strlen(wp.phys_destination));
if(strlen(wp.virt_destination)<1 || strlen(wp.virt_destination)>(sizeof(wp.virt_filename)-2)) error("Invalid vdestination lenght [%d]", strlen(wp.virt_destination));
@@ -261,7 +262,7 @@ void checkdirectory(void) {
wp.virt_dirname_urlencoded=url_encode(wp.virt_dirname);
// parent
- strncpy(temp, wp.virt_dirname, sizeof(wp.virt_dirname));
+ strncpy(temp, wp.virt_dirname, sizeof(temp));
strncpy(wp.virt_parent, dirname(temp), sizeof(wp.virt_dirname));
wp.virt_parent_urlencoded=url_encode(wp.virt_parent);
@@ -282,7 +283,7 @@ void checkdirectory(void) {
if(strlen(real) > sizeof(wp.phys_dirname)-2)
error("Resolved path too long");
- strncpy(wp.phys_dirname, real, sizeof(wp.phys_dirname));
+ snprintf(wp.phys_dirname, sizeof(wp.phys_dirname), "%s", real);
free(real);
}
@@ -526,10 +527,10 @@ void cfgload(void) {
while(fgets(cfgline, sizeof(cfgline), cfgfile)) {
if((*cfgline==';')||(*cfgline=='/')||(*cfgline=='#')||(*cfgline=='\n')) continue;
- else if(strncmp(cfgline, c_homedir, strlen(c_homedir))==0) strncpy(cfg.homedir, cfgline+strlen(c_homedir), sizeof(cfg.homedir));
- else if(strncmp(cfgline, c_homeurl, strlen(c_homeurl))==0) strncpy(cfg.homeurl, cfgline+strlen(c_homeurl), sizeof(cfg.homeurl));
- else if(strncmp(cfgline, c_tagline, strlen(c_tagline))==0) strncpy(cfg.tagline, cfgline+strlen(c_tagline), sizeof(cfg.tagline));
- else if(strncmp(cfgline, c_favicon, strlen(c_favicon))==0) strncpy(cfg.favicon, cfgline+strlen(c_favicon), sizeof(cfg.favicon));
+ else if(strncmp(cfgline, c_homedir, strlen(c_homedir))==0) snprintf(cfg.homedir, sizeof(cfg.homedir), "%s", cfgline+strlen(c_homedir));
+ else if(strncmp(cfgline, c_homeurl, strlen(c_homeurl))==0) snprintf(cfg.homeurl, sizeof(cfg.homeurl), "%s", cfgline+strlen(c_homeurl));
+ else if(strncmp(cfgline, c_tagline, strlen(c_tagline))==0) snprintf(cfg.tagline, sizeof(cfg.tagline), "%s", cfgline+strlen(c_tagline));
+ else if(strncmp(cfgline, c_favicon, strlen(c_favicon))==0) snprintf(cfg.favicon, sizeof(cfg.favicon), "%s", cfgline+strlen(c_favicon));
else if(strncmp(cfgline, c_editdef, strlen(c_editdef))==0) cfg.edit_by_default=1;
else if(strncmp(cfgline, c_editany, strlen(c_editany))==0) cfg.edit_any_file=1;
else if(strncmp(cfgline, c_largeset, strlen(c_largeset))==0) cfg.largeset=1;
diff --git a/wfm.h b/wfm.h
index 5c4f0de..1a603d3 100644
--- a/wfm.h
+++ b/wfm.h
@@ -1,6 +1,7 @@
-#define VERSION "1.4.0"
+#define VERSION "1.4.1"
#define COPYRIGHT "<!-- WFM Version " VERSION ", Mountain View, CA, " __DATE__ " [" __TIME__ "] -->\n" \
- "<!-- Copyright (c) 1994-2018 by Antoni Sawicki -->\n"
+ "<!-- Copyright (c) 1994-2018 by Antoni Sawicki -->\n" \
+ "<!-- Copyright (c) 2019 by Google LLC -->\n"
#define FONT_SIZE "12px"
@@ -75,12 +76,12 @@ struct wfm_paths {
char virt_filename[NAME_MAX];
char *virt_filename_urlencoded;
char virt_destination[NAME_MAX];
- char virt_parent[NAME_MAX];
+ char virt_parent[1024];
char *virt_parent_urlencoded;
- char phys_dirname[PATH_MAX];
- char phys_filename[PATH_MAX];
- char phys_destination[PATH_MAX];
- char final_destination[PATH_MAX];
+ char phys_dirname[2048];
+ char phys_filename[4096];
+ char phys_destination[4096];
+ char final_destination[8192];
} wp;
struct config_struct {
@@ -89,7 +90,7 @@ struct config_struct {
int edit_any_file;
int recursive_du;
int largeset;
- char homedir[1024];
+ char homedir[PATH_MAX];
char homeurl[1024];
char tagline[1024];
char favicon[1024];
@@ -97,7 +98,7 @@ struct config_struct {
struct runtime_struct {
char token[256];
- char iconsurl[1024];
+ char iconsurl[64];
char loggedinuser[64];
int access_level;
int access_as_user;
@@ -114,7 +115,7 @@ enum { CHANGE, DELETE, MOVE };
enum { AUTH_NONE, AUTH_IP, AUTH_MD5, AUTH_HT };
typedef struct asdir_ {
- char name[NAME_MAX];
+ char name[1024];
mode_t type;
off_t size;
time_t atime, mtime, rtime;