diff options
-rw-r--r-- | dir.c | 76 | ||||
-rw-r--r-- | fileio.c | 7 | ||||
-rw-r--r-- | wfm.c | 27 | ||||
-rw-r--r-- | wfm.h | 21 |
4 files changed, 67 insertions, 64 deletions
@@ -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(®_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(®_iso, "\\.(iso|flp|img|nrg|dmg)$", REG_EXTENDED | REG_ICASE)!=0 || regcomp(®_med, "\\.(mp3|mp4|vaw|mov|avi|ivr|mkv)$", REG_EXTENDED | REG_ICASE)!=0 || regcomp(®_pdf, "\\.(pdf|ps|eps|ai)$", REG_EXTENDED | REG_ICASE)!=0 || - regcomp(®_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(®_exe, "\\.(exe|com|pif)$", REG_EXTENDED | REG_ICASE)!=0 + regcomp(®_exe, "\\.(exe|com|pif)$", REG_EXTENDED | REG_ICASE)!=0 || + regcomp(®_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, " <A HREF=\"%s?directory=%s&token=%s&sortby=name\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Filename</A>", cgiScriptName, wp.virt_dirname_urlencoded, rt.token); - snprintf(sizepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&sortby=rsize\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Size</A> %s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, ADNIMG); + snprintf(sizepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&sortby=rsize\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Size</A> %s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, ICO_ADN); snprintf(datepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&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, " <A HREF=\"%s?directory=%s&token=%s&sortby=name\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Filename</A>", cgiScriptName, wp.virt_dirname_urlencoded, rt.token); - snprintf(sizepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&sortby=size\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Size</A> %s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, AUPIMG); + snprintf(sizepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&sortby=size\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Size</A> %s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, ICO_AUP); snprintf(datepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&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, " <A HREF=\"%s?directory=%s&token=%s&sortby=name\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Filename</A>", cgiScriptName, wp.virt_dirname_urlencoded, rt.token); snprintf(sizepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&sortby=size\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Size</A>", cgiScriptName, wp.virt_dirname_urlencoded, rt.token); - snprintf(datepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&sortby=rdate\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Modified</A> %s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, ADNIMG); + snprintf(datepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&sortby=rdate\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Modified</A> %s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, ICO_ADN); } else if(strcmp(sortby, "rdate")==0) { snprintf(namepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&sortby=name\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Filename</A>", cgiScriptName, wp.virt_dirname_urlencoded, rt.token); snprintf(sizepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&sortby=size\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Size</A>", cgiScriptName, wp.virt_dirname_urlencoded, rt.token); - snprintf(datepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&sortby=date\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Modified</A> %s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, AUPIMG); + snprintf(datepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&sortby=date\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Modified</A> %s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, ICO_AUP); } else if(strcmp(sortby, "name")==0) { - snprintf(namepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&sortby=rname\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Filename</A> %s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, ADNIMG); + snprintf(namepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&sortby=rname\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Filename</A> %s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, ICO_ADN); snprintf(sizepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&sortby=size\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Size</A>", cgiScriptName, wp.virt_dirname_urlencoded, rt.token); snprintf(datepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&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, " <A HREF=\"%s?directory=%s&token=%s&sortby=name\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Filename</A> %s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, AUPIMG); + snprintf(namepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&sortby=name\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Filename</A> %s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token, ICO_AUP); snprintf(sizepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&sortby=size\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Size</A>", cgiScriptName, wp.virt_dirname_urlencoded, rt.token); snprintf(datepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&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(®_zip, name, 0, 0, 0)==0) { icon=ZIPIMG; editable=0; } - else if(regexec(®_img, name, 0, 0, 0)==0) { icon=IMGIMG; editable=0; } - else if(regexec(®_off, name, 0, 0, 0)==0) { icon=OFFIMG; editable=0; } - else if(regexec(®_pdf, name, 0, 0, 0)==0) { icon=PDFIMG; editable=0; } - else if(regexec(®_txt, name, 0, 0, 0)==0) { icon=TXTIMG; editable=1; } - else if(regexec(®_exe, name, 0, 0, 0)==0) { icon=EXEIMG; editable=0; } - else if(regexec(®_med, name, 0, 0, 0)==0) { icon=MEDIMG; editable=0; } - else if(regexec(®_iso, name, 0, 0, 0)==0) { icon=ISOIMG; editable=0; } - else { icon=GENIMG; editable=0; } + if(regexec(®_zip, name, 0, 0, 0)==0) { icon=ICO_ZIP; editable=0; } + else if(regexec(®_img, name, 0, 0, 0)==0) { icon=ICO_IMG; editable=0; } + else if(regexec(®_off, name, 0, 0, 0)==0) { icon=ICO_OFF; editable=0; } + else if(regexec(®_pdf, name, 0, 0, 0)==0) { icon=ICO_PDF; editable=0; } + else if(regexec(®_txt, name, 0, 0, 0)==0) { icon=ICO_TXT; editable=1; } + else if(regexec(®_exe, name, 0, 0, 0)==0) { icon=ICO_EXE; editable=0; } + else if(regexec(®_med, name, 0, 0, 0)==0) { icon=ICO_MED; editable=0; } + else if(regexec(®_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 { @@ -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); @@ -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; @@ -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; |