diff options
author | tenox7 <as@tenoware.com> | 2018-07-08 02:46:53 -0700 |
---|---|---|
committer | tenox7 <as@tenoware.com> | 2018-07-08 02:46:53 -0700 |
commit | fd19e39d3a8a0a1ae9a8f1fda8ea8691c8fb98b3 (patch) | |
tree | 823bcdbafbaa0ec9d79d316664ee4ede03dbbf6c | |
parent | 8151cf64d84122f8148598f7f64b458b69656fd2 (diff) | |
download | wfm-fd19e39d3a8a0a1ae9a8f1fda8ea8691c8fb98b3.tar.gz |
paths in to a struct
-rw-r--r-- | dialogs.c | 45 | ||||
-rw-r--r-- | dir.c | 102 | ||||
-rw-r--r-- | fileio.c | 112 | ||||
-rw-r--r-- | wfm.c | 82 | ||||
-rw-r--r-- | wfm.h | 34 |
5 files changed, 181 insertions, 194 deletions
@@ -45,22 +45,22 @@ void multiprompt_ui(char *m_action) { if(res == cgiFormNotFound) { checkfilename(NULL); - if(stat(phys_filename, &fileinfo)==0) { - fprintf(cgiOut, "<INPUT TYPE=\"HIDDEN\" NAME=\"filename\" VALUE=\"%s\">\n", virt_filename); - fprintf(cgiOut, "<LI TYPE=\"square\"><B>%s</B>", virt_filename); + if(stat(wp.phys_filename, &fileinfo)==0) { + fprintf(cgiOut, "<INPUT TYPE=\"HIDDEN\" NAME=\"filename\" VALUE=\"%s\">\n", wp.virt_filename); + fprintf(cgiOut, "<LI TYPE=\"square\"><B>%s</B>", wp.virt_filename); if(S_ISDIR(fileinfo.st_mode)) - fprintf(cgiOut, " [directory %s]\n", buprintf(du(phys_filename), FALSE)); + fprintf(cgiOut, " [directory %s]\n", buprintf(du(wp.phys_filename), FALSE)); else fprintf(cgiOut, " [file %s]\n", buprintf(fileinfo.st_size, FALSE)); } } else { for(i=0; responses[i]; i++) { checkfilename(responses[i]); - if(stat(phys_filename, &fileinfo)==0) { - fprintf(cgiOut, "<INPUT TYPE=\"HIDDEN\" NAME=\"multiselect_filename\" VALUE=\"%s\">\n", virt_filename); - fprintf(cgiOut, "<LI TYPE=\"square\"><B>%s</B>", virt_filename); + if(stat(wp.phys_filename, &fileinfo)==0) { + fprintf(cgiOut, "<INPUT TYPE=\"HIDDEN\" NAME=\"multiselect_filename\" VALUE=\"%s\">\n", wp.virt_filename); + fprintf(cgiOut, "<LI TYPE=\"square\"><B>%s</B>", wp.virt_filename); if(S_ISDIR(fileinfo.st_mode)) - fprintf(cgiOut, "/ [directory %s]\n", buprintf(du(phys_filename), FALSE)); + fprintf(cgiOut, "/ [directory %s]\n", buprintf(du(wp.phys_filename), FALSE)); else fprintf(cgiOut, " [file %s]\n", buprintf(fileinfo.st_size, FALSE)); } @@ -71,11 +71,11 @@ void multiprompt_ui(char *m_action) { // move needs a destination... if(strcmp(m_action, "move")==0) { - fprintf(cgiOut, "<P>Source: %s<P>Destination: <SELECT NAME=\"destination\">\n", virt_dirname); + fprintf(cgiOut, "<P>Source: %s<P>Destination: <SELECT NAME=\"destination\">\n", wp.virt_dirname); fprintf(cgiOut, "<OPTION VALUE=\"/\">/ - Root Directory</OPTION>\n"); if(cfg.largeset) { - level=re_dir_up(virt_dirname); - re_dir_ui(virt_dirname, level); + level=re_dir_up(wp.virt_dirname); + re_dir_ui(wp.virt_dirname, level); } else { re_dir_ui("/", 1); @@ -96,7 +96,7 @@ void multiprompt_ui(char *m_action) { " </TD></TR>\n" "</TABLE></FORM>\n\n" "</TD></TR></TABLE>\n" - "</BODY>\n</HTML>\n", m_action, virt_dirname, rt.token); + "</BODY>\n</HTML>\n", m_action, wp.virt_dirname, rt.token); cgiStringArrayFree(responses); @@ -138,7 +138,7 @@ void singleprompt_ui(char *m_action) { " Enter new name:<P>\n" " <INPUT TYPE=\"TEXT\" ID=\"inp1\" NAME=\"destination\" SIZE=\"40\" VALUE=\"%s\">\n" " <INPUT TYPE=\"HIDDEN\" NAME=\"filename\" VALUE=\"%s\">\n", - virt_filename, virt_filename, virt_filename); + wp.virt_filename, wp.virt_filename, wp.virt_filename); else if(strcmp(m_action, "mkfile")==0) fprintf(cgiOut, @@ -163,7 +163,7 @@ void singleprompt_ui(char *m_action) { " </TD></TR>\n" "</TABLE></FORM>\n\n" "</TD></TR></TABLE>\n" - "</BODY>\n</HTML>\n", m_action, virt_dirname, rt.token); + "</BODY>\n</HTML>\n", m_action, wp.virt_dirname, rt.token); } @@ -215,7 +215,7 @@ void error(char *msg, ...) { "<TR><TD COLSPAN=3 BGCOLOR=\"#EEEEEE\"> </TD></TR>\n" "</TABLE>\n" "</TD></TR></TABLE>\n</BODY></HTML>\n", - buff, cgiScriptName, virt_dirname, rt.token); + buff, cgiScriptName, wp.virt_dirname, rt.token); } else { cgiHeaderContentType("text/plain"); @@ -269,6 +269,7 @@ void about(void) { "Server: %s<BR>\n" "User Agent: %s<BR>\n" "NAME_MAX: %d<BR>\n" + "PATH_MAX: %d<BR>\n" "JavaScript Level: %d<BR>\n" "Change Control: %s (%s)<BR>\n" " <P>\n" @@ -287,14 +288,14 @@ void about(void) { "<TR><TD COLSPAN=3 BGCOLOR=\"#EEEEEE\"> </TD></TR>\n" "</TABLE>\n" "</TD></TR></TABLE>\n</BODY></HTML>\n", - rt.iconsurl, cfg.tagline, VERSION, __DATE__, __TIME__, __VERSION__, cgiServerSoftware, cgiUserAgent, NAME_MAX, rt.js, + rt.iconsurl, cfg.tagline, VERSION, __DATE__, __TIME__, __VERSION__, cgiServerSoftware, cgiUserAgent, NAME_MAX, PATH_MAX, rt.js, #ifdef WFMGIT "Git" #else "None" #endif , (repo_check()) ? "No Repo Present" : "Repo OK", - cgiScriptName, virt_dirname, rt.token); + cgiScriptName, wp.virt_dirname, rt.token); } @@ -335,11 +336,11 @@ void login_ui(void) { " <INPUT TYPE=\"HIDDEN\" VALUE=\"login\" NAME=\"action\">\n" " <INPUT TYPE=\"HIDDEN\" VALUE=\"%s\" NAME=\"directory\">\n" " <INPUT TYPE=\"SUBMIT\" VALUE=\" %s Login \" NAME=\"login\" ", - cgiScriptName, virt_dirname, (getenv("HTTPS")) ? "SSL" : "Plaintext"); + cgiScriptName, wp.virt_dirname, (getenv("HTTPS")) ? "SSL" : "Plaintext"); if(rt.js>=2) fprintf(cgiOut, "onClick=\"self.location='%s?directory=%s&login=client&rt.token=' + hex_md5('%s:' + hex_md5(document.wfm.username.value + ':' + document.wfm.password.value)); return false;\"", - cgiScriptName, virt_dirname_urlencoded, cgiRemoteAddr); + cgiScriptName, wp.virt_dirname_urlencoded, cgiRemoteAddr); fputs( ">\n" @@ -375,7 +376,7 @@ void edit_ui(void) { bkcolor="background-color:#EEEEEE; color:#000000;"; #endif - input=fopen(phys_filename, "r"); + input=fopen(wp.phys_filename, "r"); if(input==NULL) error("Unable to open file.<BR>%s", strerror(errno)); @@ -442,7 +443,7 @@ void edit_ui(void) { "File Editor: %s\n" "</TD>\n" "<TD BGCOLOR=\"#CCCCCC\" ALIGN=\"RIGHT\">", - cgiScriptName, (strncmp(cgiUserAgent, "Mozilla/4.0 (compatible; MSIE 6", 31)==0) ? "80" : "100", rt.iconsurl, virt_filename); + cgiScriptName, (strncmp(cgiUserAgent, "Mozilla/4.0 (compatible; MSIE 6", 31)==0) ? "80" : "100", rt.iconsurl, wp.virt_filename); #ifndef WFMGIT if(rt.js) fprintf(cgiOut, "<INPUT TYPE=\"button\" ID=\"bakbtn\" onClick=\"chbak()\" VALUE=\"Backup\" STYLE=\"border:none; %s \"> \n", bkcolor); @@ -478,7 +479,7 @@ void edit_ui(void) { "<INPUT TYPE=\"hidden\" NAME=\"rt.token\" VALUE=\"%s\">\n" "<INPUT TYPE=\"hidden\" NAME=\"backup\" VALUE=\"%s\">\n" "</FORM></BODY></HTML>\n", - virt_filename, virt_dirname, rt.token, backup); + wp.virt_filename, wp.virt_dirname, rt.token, backup); free(buff); @@ -58,7 +58,7 @@ void dir_icoinita(void) { void dirlist(void) { ASDIR *direntry; off_t size, totalsize=0; - char highlight[VIRT_FILENAME_SIZE]={0}; + char highlight[sizeof(wp.virt_filename)]={0}; char namepfx[1024], sizepfx[1024], datepfx[1024]; char rtime[64], mtime[64], atime[64]; char *stime; @@ -74,7 +74,7 @@ void dirlist(void) { if(upload_id<1) upload_id=now; // holy shit - cgiFormStringNoNewlines("highlight", highlight, VIRT_FILENAME_SIZE-1); //TODO: urlencode ? + cgiFormStringNoNewlines("highlight", highlight, sizeof(wp.virt_filename)-1); //TODO: urlencode ? cgiFormStringNoNewlines("sortby", sortby, 63); if(strlen(sortby)<4) snprintf(sortby, 63, "name"); @@ -82,13 +82,13 @@ void dirlist(void) { // // Get and Print Directory Entries // - if(strcmp(sortby, "name")==0) nentr=asscandir(phys_dirname, &direntry, namesort); - else if(strcmp(sortby, "rname")==0) nentr=asscandir(phys_dirname, &direntry, rnamesort); - else if(strcmp(sortby, "size")==0) nentr=asscandir(phys_dirname, &direntry, sizesort); - else if(strcmp(sortby, "rsize")==0) nentr=asscandir(phys_dirname, &direntry, rsizesort); - else if(strcmp(sortby, "date")==0) nentr=asscandir(phys_dirname, &direntry, timesort); - else if(strcmp(sortby, "rdate")==0) nentr=asscandir(phys_dirname, &direntry, rtimesort); - else nentr=asscandir(phys_dirname, &direntry, namesort); + if(strcmp(sortby, "name")==0) nentr=asscandir(wp.phys_dirname, &direntry, namesort); + else if(strcmp(sortby, "rname")==0) nentr=asscandir(wp.phys_dirname, &direntry, rnamesort); + else if(strcmp(sortby, "size")==0) nentr=asscandir(wp.phys_dirname, &direntry, sizesort); + else if(strcmp(sortby, "rsize")==0) nentr=asscandir(wp.phys_dirname, &direntry, rsizesort); + else if(strcmp(sortby, "date")==0) nentr=asscandir(wp.phys_dirname, &direntry, timesort); + else if(strcmp(sortby, "rdate")==0) nentr=asscandir(wp.phys_dirname, &direntry, rtimesort); + else nentr=asscandir(wp.phys_dirname, &direntry, namesort); dir_icoinita(); @@ -103,7 +103,7 @@ void dirlist(void) { "<HTML LANG=\"en\">\n" "<HEAD>\n" "<TITLE>%s : %c%s</TITLE>\n", - COPYRIGHT, cfg.tagline, (strlen(virt_dirname)>0) ? ' ' : '/', virt_dirname); + COPYRIGHT, cfg.tagline, (strlen(wp.virt_dirname)>0) ? ' ' : '/', wp.virt_dirname); if(rt.js) fprintf(cgiOut, "<SCRIPT LANGUAGE=\"JavaScript\" TYPE=\"text/javascript\">\n" @@ -193,7 +193,7 @@ void dirlist(void) { " <IMG SRC=\"%s%s\" ALIGN=\"MIDDLE\" ALT=\"WFM\">\n" "%s : %c%s \n" "<TD NOWRAP BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"RIGHT\" STYLE=\"color:#000000; font-weight:bold; white-space:nowrap\">\n", - rt.iconsurl, cfg.favicon, cfg.tagline, (strlen(virt_dirname)>0) ? ' ' : '/', virt_dirname + rt.iconsurl, cfg.favicon, cfg.tagline, (strlen(wp.virt_dirname)>0) ? ' ' : '/', wp.virt_dirname ); @@ -202,12 +202,12 @@ void dirlist(void) { fprintf(cgiOut, "<A HREF=\"%s?action=login&directory=%s\">" " <IMG SRC=\"%s%s.gif\" ALIGN=\"MIDDLE\" BORDER=\"0\" ALT=\"Access\"></A> %s\n", - cgiScriptName, virt_dirname_urlencoded, rt.iconsurl, access_string[rt.access_level], access_string[rt.access_level]); + cgiScriptName, wp.virt_dirname_urlencoded, rt.iconsurl, access_string[rt.access_level], access_string[rt.access_level]); else fprintf(cgiOut, "<A HREF=\"%s?directory=%s\"><IMG SRC=\"%s%s.gif\" BORDER=\"0\" ALIGN=\"MIDDLE\" ALT=\"Access\">" "</A> %s <IMG SRC=\"%suser.gif\" ALIGN=\"MIDDLE\" ALT=\"User\"> %s \n", - cgiScriptName, virt_dirname_urlencoded, rt.iconsurl, access_string[rt.access_level], access_string[rt.access_level], rt.iconsurl, rt.loggedinuser); + cgiScriptName, wp.virt_dirname_urlencoded, rt.iconsurl, access_string[rt.access_level], access_string[rt.access_level], rt.iconsurl, rt.loggedinuser); // about / version fprintf(cgiOut, @@ -216,7 +216,7 @@ void dirlist(void) { "</TD>\n"\ "</TR>\n"\ "</TABLE>\n", - rt.iconsurl, cgiRemoteAddr, cgiScriptName, virt_dirname_urlencoded, rt.token, rt.iconsurl, VERSION); + rt.iconsurl, cgiRemoteAddr, cgiScriptName, wp.virt_dirname_urlencoded, rt.token, rt.iconsurl, VERSION); @@ -233,7 +233,7 @@ void dirlist(void) { "<IMG SRC=\"%sdir_up.gif\" BORDER=0 ALIGN=\"MIDDLE\" WIDTH=\"16\" HEIGHT=\"16\" ALT=\"Dir Up\"> Up" "</A>\n" "</TD>\n", - cgiScriptName, sortby, virt_parent_urlencoded, rt.token, rt.iconsurl); + cgiScriptName, sortby, wp.virt_parent_urlencoded, rt.token, rt.iconsurl); fprintf(cgiOut, "<!-- HOME -->\n" @@ -251,7 +251,7 @@ void dirlist(void) { "<IMG SRC=\"%sreload.gif\" BORDER=0 ALIGN=\"MIDDLE\" ALT=\"Reload\"> Refresh" "</A>\n" "</TD>\n", - cgiScriptName, sortby, virt_dirname_urlencoded, rt.token, rt.iconsurl); + cgiScriptName, sortby, wp.virt_dirname_urlencoded, rt.token, rt.iconsurl); fprintf(cgiOut, "<!-- MULTI DELETE -->\n"\ @@ -276,7 +276,7 @@ void dirlist(void) { "<IMG SRC=\"%smkdir.gif\" BORDER=0 ALIGN=\"MIDDLE\" ALT=\"New Folder\"> New Folder\n" "</A>\n" "</TD>\n", - cgiScriptName, virt_dirname_urlencoded, rt.token, rt.iconsurl); + cgiScriptName, wp.virt_dirname_urlencoded, rt.token, rt.iconsurl); fprintf(cgiOut, @@ -286,7 +286,7 @@ void dirlist(void) { "<IMG SRC=\"%smkfile.gif\" BORDER=0 ALIGN=\"MIDDLE\" ALT=\"New File\"> New File" "</A>\n" "</TD>\n", - cgiScriptName, virt_dirname_urlencoded, rt.token, rt.iconsurl); + cgiScriptName, wp.virt_dirname_urlencoded, rt.token, rt.iconsurl); @@ -301,39 +301,39 @@ void dirlist(void) { "</TD>\n" "</TR>\n" "</TABLE>\n", - virt_dirname, rt.token, upload_id, (rt.access_level==PERM_RW) ? " " : "DISABLED"); + wp.virt_dirname, rt.token, upload_id, (rt.access_level==PERM_RW) ? " " : "DISABLED"); // // SORT BY // 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, 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, virt_dirname_urlencoded, rt.token, ADNIMG); - snprintf(datepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&sortby=date\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Modified</A>", cgiScriptName, virt_dirname_urlencoded, rt.token); + 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(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, 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, 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>", cgiScriptName, virt_dirname_urlencoded, rt.token); + 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(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, 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, 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, virt_dirname_urlencoded, rt.token, ADNIMG); + 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); } 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, 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, 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, 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>", 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); } 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, virt_dirname_urlencoded, rt.token, ADNIMG); - snprintf(sizepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&sortby=size\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Size</A>", cgiScriptName, 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, virt_dirname_urlencoded, rt.token); + 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(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, 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>", cgiScriptName, 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, virt_dirname_urlencoded, rt.token); + 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(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 { - snprintf(namepfx, 1024, " <A HREF=\"%s?directory=%s&token=%s&sortby=name\" STYLE=\"text-decoration: none; color:#FFFFFF;\">Filename</A>", cgiScriptName, 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, 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, virt_dirname_urlencoded, rt.token); + 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>", cgiScriptName, wp.virt_dirname_urlencoded, rt.token); } @@ -444,7 +444,7 @@ void dirlist(void) { "<TD NOWRAP ALIGN=\"RIGHT\"><SPAN TITLE=\"Created:%s\n Modified:%s\n Accessed:%s\n\">%s %s</FONT></SPAN></TD>\n"\ "<TD NOWRAP > </TD>"\ "<TD NOWRAP ALIGN=\"LEFT\">", - cgiScriptName, sortby, (strcmp(virt_dirname, "/")==0) ? "" : virt_dirname_urlencoded, name_urlencoded, rt.token, icon, name, + cgiScriptName, sortby, (strcmp(wp.virt_dirname, "/")==0) ? "" : wp.virt_dirname_urlencoded, name_urlencoded, rt.token, icon, name, buprintf(size, TRUE), rtime, mtime, atime, stime, mtime); // rename @@ -452,14 +452,14 @@ void dirlist(void) { "<A HREF=\"%s?action=rename_prompt&directory=%s&filename=%s&token=%s\" TITLE=\"Rename '%s'\">\n"\ "<IMG SRC=\"%srename.gif\" BORDER=0 WIDTH=16 HEIGHT=16 ALT=\"Rename File\">\n"\ "</A>\n", - cgiScriptName, virt_dirname_urlencoded, name_urlencoded, rt.token, name, rt.iconsurl); + cgiScriptName, wp.virt_dirname_urlencoded, name_urlencoded, rt.token, name, rt.iconsurl); // move fprintf(cgiOut, "\n"\ "<A HREF=\"%s?action=move_prompt&directory=%s&filename=%s&token=%s\" TITLE=\"Move '%s'\">\n"\ "<IMG SRC=\"%smove.gif\" BORDER=0 WIDTH=16 HEIGHT=16 ALT=\"Move File\">\n"\ "</A>\n", - cgiScriptName, virt_dirname_urlencoded, name_urlencoded, rt.token, name, rt.iconsurl); + cgiScriptName, wp.virt_dirname_urlencoded, name_urlencoded, rt.token, name, rt.iconsurl); // delete fprintf(cgiOut, "\n"\ @@ -468,7 +468,7 @@ void dirlist(void) { "</A>\n"\ "</TD>\n"\ "</TR>\n\n\n", - cgiScriptName, virt_dirname_urlencoded, name_urlencoded, rt.token, name, rt.iconsurl); + cgiScriptName, wp.virt_dirname_urlencoded, name_urlencoded, rt.token, name, rt.iconsurl); totalsize+=size; n++; @@ -542,7 +542,7 @@ void dirlist(void) { fprintf(cgiOut, ">\n<TD NOWRAP ALIGN=\"LEFT\"><INPUT TYPE=\"CHECKBOX\" NAME=\"multiselect_filename\" STYLE=\"border: none;\" VALUE=\"%s\">" "<A HREF=\"%s?action=%s&directory=%s&filename=%s&token=%s\" TITLE=\"Open '%s'\">%s %s</A></TD>\n", - name, cgiScriptName, (cfg.edit_by_default && editable) ? "edit" : "sendfile", virt_dirname_urlencoded, name_urlencoded, rt.token, name, icon, name); + name, cgiScriptName, (cfg.edit_by_default && editable) ? "edit" : "sendfile", wp.virt_dirname_urlencoded, name_urlencoded, rt.token, name, icon, name); // size / date @@ -562,7 +562,7 @@ void dirlist(void) { "<A HREF=\"%s?action=rename_prompt&directory=%s&filename=%s&token=%s\" TITLE=\"Rename '%s'\">\n" "<IMG SRC=\"%srename.gif\" BORDER=0 WIDTH=16 HEIGHT=16 ALT=\"Rename File\">\n" "</A>\n", - cgiScriptName, virt_dirname_urlencoded, name_urlencoded, rt.token, name, rt.iconsurl); + cgiScriptName, wp.virt_dirname_urlencoded, name_urlencoded, rt.token, name, rt.iconsurl); // move fprintf(cgiOut, @@ -570,7 +570,7 @@ void dirlist(void) { "<A HREF=\"%s?action=move_prompt&directory=%s&filename=%s&token=%s\" TITLE=\"Move '%s'\">" "<IMG SRC=\"%smove.gif\" BORDER=0 WIDTH=16 HEIGHT=16 ALT=\"Move '%s'\">\n" "</A>\n", - cgiScriptName, virt_dirname_urlencoded, name_urlencoded, rt.token, name, rt.iconsurl, name); + cgiScriptName, wp.virt_dirname_urlencoded, name_urlencoded, rt.token, name, rt.iconsurl, name); // delete fprintf(cgiOut, @@ -579,7 +579,7 @@ void dirlist(void) { "TITLE=\"Remove '%s'\"> \n" "<IMG SRC=\"%sdelete.gif\" BORDER=0 WIDTH=16 HEIGHT=16 ALT=\"Delete File\">\n" "</A>\n", - cgiScriptName, virt_dirname_urlencoded, name_urlencoded, rt.token, name, rt.iconsurl); + cgiScriptName, wp.virt_dirname_urlencoded, name_urlencoded, rt.token, name, rt.iconsurl); // view @@ -589,7 +589,7 @@ void dirlist(void) { "<A HREF=\"%s%s%s/%s\" TITLE=\"Preview '%s' In Browser\">\n" "<IMG SRC=\"%sext.gif\" BORDER=0 WIDTH=16 HEIGHT=16 ALT=\"Preview '%s' In Browser\" >\n" "</A>\n", - cfg.homeurl, (virt_dirname[0]!='/') ? "/" : "", (strcmp(virt_dirname, "/")==0) ? "" : virt_dirname, name, name, rt.iconsurl, name); + cfg.homeurl, (wp.virt_dirname[0]!='/') ? "/" : "", (strcmp(wp.virt_dirname, "/")==0) ? "" : wp.virt_dirname, name, name, rt.iconsurl, name); // edit for text files.. @@ -602,7 +602,7 @@ void dirlist(void) { "</A>\n" "</TD>\n" "</TR>\n\n", - cgiScriptName, virt_dirname_urlencoded, name_urlencoded, rt.token, name, rt.iconsurl); + cgiScriptName, wp.virt_dirname_urlencoded, name_urlencoded, rt.token, name, rt.iconsurl); else fprintf(cgiOut, "\n" @@ -611,7 +611,7 @@ void dirlist(void) { "</A>\n" "</TD>\n" "</TR>\n\n", - cgiScriptName, virt_dirname_urlencoded, name_urlencoded, rt.token, name, rt.iconsurl); + cgiScriptName, wp.virt_dirname_urlencoded, name_urlencoded, rt.token, name, rt.iconsurl); } else { fprintf(cgiOut, @@ -10,20 +10,20 @@ printf( "virt_dirname=%s\n" - "phys_dirname=%s\n" - "virt_filename=%s\n" - "phys_filename=%s\n" - "virt_destination=%s\n" - "phys_destination=%s\n" - // "final_destination=%s\n" + "wp.phys_dirname=%s\n" + "wp.virt_filename=%s\n" + "wp.phys_filename=%s\n" + "wp.virt_destination=%s\n" + "wp.phys_destination=%s\n" + // "wp.final_destination=%s\n" "virt_parent=%s\n", virt_dirname, - phys_dirname, - virt_filename, - phys_filename, - virt_destination, - phys_destination, - // final_destination, + wp.phys_dirname, + wp.virt_filename, + wp.phys_filename, + wp.virt_destination, + wp.phys_destination, + // wp.final_destination, virt_parent ); @@ -43,7 +43,7 @@ void sendfile(void) { checkfilename(NULL); // TODO: 2gb file limit? - in=fopen(phys_filename, "rb"); + in=fopen(wp.phys_filename, "rb"); if(!in) error("Unable to open file.<BR>%s", strerror(errno)); @@ -55,7 +55,7 @@ void sendfile(void) { "Content-Type: application/octet-stream\r\n" "Content-Disposition: attachment; filename=\"%s\"; size=%d\r\n" "Content-Length: %d\r\n\r\n", - virt_filename, size, size + wp.virt_filename, size, size ); blk=sizeof(buff); @@ -99,12 +99,12 @@ void receivefile(void) { if(cgiFormFileOpen("filename", &input) != cgiFormSuccess) error("Unable to access uploaded file."); - output=fopen(phys_filename, "wb"); + output=fopen(wp.phys_filename, "wb"); if(!output) - error("Unable to open file %s for writing.<BR>%s", virt_filename, strerror(errno)); + error("Unable to open file %s for writing.<BR>%s", wp.virt_filename, strerror(errno)); if(flock(fileno(output), LOCK_EX) == -1) - error("Unable to lock file %s.<BR>%s", virt_filename, strerror(errno)); + error("Unable to lock file %s.<BR>%s", wp.virt_filename, strerror(errno)); while(cgiFormFileRead(input, buff, sizeof(buff), &got) == cgiFormSuccess) if(got) @@ -116,7 +116,7 @@ void receivefile(void) { wfm_commit(CHANGE, NULL); - redirect("%s?highlight=%s&directory=%s&rt.token=%s", cgiScriptName, virt_filename_urlencoded, virt_dirname_urlencoded, rt.token); + redirect("%s?highlight=%s&directory=%s&rt.token=%s", cgiScriptName, wp.virt_filename_urlencoded, wp.virt_dirname_urlencoded, rt.token); } @@ -129,7 +129,7 @@ void mkfile(void) { checkfilename(NULL); - output=fopen(phys_filename, "a"); //TODO: should probably give error if file already exists... + output=fopen(wp.phys_filename, "a"); //TODO: should probably give error if file already exists... if(!output) error("Unable to create file.<BR>%s", strerror(errno)); @@ -138,7 +138,7 @@ void mkfile(void) { wfm_commit(CHANGE, NULL); - redirect("%s?highlight=%s&directory=%s&rt.token=%s", cgiScriptName, virt_filename_urlencoded, virt_dirname_urlencoded, rt.token); + redirect("%s?highlight=%s&directory=%s&rt.token=%s", cgiScriptName, wp.virt_filename_urlencoded, wp.virt_dirname_urlencoded, rt.token); } @@ -150,10 +150,10 @@ void newdir(void) { checkfilename(NULL); - if(mkdir(phys_filename, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH )!=0) + if(mkdir(wp.phys_filename, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH )!=0) error("Unable to create directory.<BR>%s", strerror(errno)); - redirect("%s?highlight=%s&directory=%s&rt.token=%s", cgiScriptName, virt_filename_urlencoded, virt_dirname_urlencoded, rt.token); + redirect("%s?highlight=%s&directory=%s&rt.token=%s", cgiScriptName, wp.virt_filename_urlencoded, wp.virt_dirname_urlencoded, rt.token); } @@ -170,7 +170,7 @@ void edit_save(void) { FILE *tempf; #ifndef WFMGIT char backup[4]={0}; - char backup_filename[PHYS_DESTINATION_SIZE]={0}; + char backup_filename[sizeof(wp.phys_dirname)]={0}; regex_t re; regmatch_t pmatch; #endif @@ -197,18 +197,18 @@ void edit_save(void) { if(strcmp(backup, "yes")==0) { regcomp(&re, "\\.(.+)$", REG_EXTENDED|REG_ICASE); - if(regexec(&re, phys_filename, 1, &pmatch, 0)==0) { - if(pmatch.rm_so+4 < PHYS_DESTINATION_SIZE) { - strcpy(backup_filename, phys_filename); + if(regexec(&re, wp.phys_filename, 1, &pmatch, 0)==0) { + if(pmatch.rm_so+4 < sizeof(wp.phys_dirname)) { + strcpy(backup_filename, wp.phys_filename); strcpy(backup_filename+pmatch.rm_so+1, "bak\0"); - if(rename(phys_filename, backup_filename)!=0) - error("Unable to create .bak file.<BR>%s was not modified.<BR>%s", virt_filename, strerror(errno)); + if(rename(wp.phys_filename, backup_filename)!=0) + error("Unable to create .bak file.<BR>%s was not modified.<BR>%s", wp.virt_filename, strerror(errno)); } } } #endif // write to temporary file - snprintf(tempname, sizeof(tempname), "%s/.wfmXXXXXX", phys_dirname); + snprintf(tempname, sizeof(tempname), "%s/.wfmXXXXXX", wp.phys_dirname); tmpfd=mkstemp(tempname); @@ -235,17 +235,17 @@ void edit_save(void) { error("Unable to check temporary file size.<BR>%s<BR>%s", basename(tempname), strerror(errno)); if(tmpstat.st_size != strlen(buff)) - error("Temprary file has a wrong length. Giving up.<BR>%s size=%d, buff len=%d", virt_filename, tmpstat.st_size); + error("Temprary file has a wrong length. Giving up.<BR>%s size=%d, buff len=%d", wp.virt_filename, tmpstat.st_size); // finally rename to desination file - if(rename(tempname, phys_filename)!=0) - error("Unable to rename temp file.<BR>%s - %s<BR>%s<BR>", basename(tempname), virt_filename, strerror(errno)); + if(rename(tempname, wp.phys_filename)!=0) + error("Unable to rename temp file.<BR>%s - %s<BR>%s<BR>", basename(tempname), wp.virt_filename, strerror(errno)); free(buff); wfm_commit(CHANGE, NULL); - redirect("%s?highlight=%s&directory=%s&rt.token=%s", cgiScriptName, virt_filename_urlencoded, virt_dirname_urlencoded, rt.token); + redirect("%s?highlight=%s&directory=%s&rt.token=%s", cgiScriptName, wp.virt_filename_urlencoded, wp.virt_dirname_urlencoded, rt.token); } // @@ -256,7 +256,7 @@ void fileio_re_rmdir(char *dirname) { DIR *dir; struct dirent *direntry; struct stat fileinfo; - char tempfullpath[PHYS_FILENAME_SIZE]={0}; + char tempfullpath[sizeof(wp.phys_filename)]={0}; dir=opendir(dirname); if(!dir) @@ -266,7 +266,7 @@ void fileio_re_rmdir(char *dirname) { direntry=readdir(dir); while(direntry!=0) { if(strncmp(direntry->d_name, ".", 1) && strncmp(direntry->d_name, "..", 2)) { - snprintf(tempfullpath, PHYS_FILENAME_SIZE, "%s/%s", dirname, direntry->d_name); + snprintf(tempfullpath, sizeof(wp.phys_filename), "%s/%s", dirname, direntry->d_name); if(lstat(tempfullpath, &fileinfo)!=0) error("Unable to get file status.<BR>%s", strerror(errno)); @@ -296,14 +296,14 @@ void fileio_re_rmdir(char *dirname) { void fileio_delete(void) { struct stat fileinfo; - if(lstat(phys_filename, &fileinfo)==0) { + if(lstat(wp.phys_filename, &fileinfo)==0) { if(S_ISDIR(fileinfo.st_mode)) { - fileio_re_rmdir(phys_filename); - if(rmdir(phys_filename)!=0) + fileio_re_rmdir(wp.phys_filename); + if(rmdir(wp.phys_filename)!=0) error("Unable to remove directory.<BR>%s", strerror(errno)); } else { - if(unlink(phys_filename)!=0) + if(unlink(wp.phys_filename)!=0) error("Unable to remove file.<BR>%s", strerror(errno)); wfm_commit(DELETE, NULL); @@ -333,7 +333,7 @@ void delete(void) { } } - redirect("%s?directory=%s&rt.token=%s", cgiScriptName, virt_dirname_urlencoded, rt.token); + redirect("%s?directory=%s&rt.token=%s", cgiScriptName, wp.virt_dirname_urlencoded, rt.token); } // @@ -344,13 +344,13 @@ void fileio_move(void) { struct stat fileinfo; // If moving file to a different directory we need to append the original file name to destination - if( stat(phys_destination, &fileinfo)==0 && S_ISDIR(fileinfo.st_mode) ) - snprintf(final_destination, sizeof(final_destination), "%s/%s", phys_destination, virt_filename); + if( stat(wp.phys_destination, &fileinfo)==0 && S_ISDIR(fileinfo.st_mode) ) + snprintf(wp.final_destination, sizeof(wp.final_destination), "%s/%s", wp.phys_destination, wp.virt_filename); else - strncpy(final_destination, phys_destination, sizeof(final_destination)); + strncpy(wp.final_destination, wp.phys_destination, sizeof(wp.final_destination)); - if(rename(phys_filename, final_destination)!=0) - error("Unable to move file. <BR>[%d: %s]<BR>[SRC=%s] [DST=%s]", errno, strerror(errno), phys_filename, final_destination); + if(rename(wp.phys_filename, wp.final_destination)!=0) + error("Unable to move file. <BR>[%d: %s]<BR>[SRC=%s] [DST=%s]", errno, strerror(errno), wp.phys_filename, wp.final_destination); wfm_commit(MOVE, NULL); @@ -379,7 +379,7 @@ void move(void) { } } - redirect("%s?highlight=%s&directory=%s&rt.token=%s", cgiScriptName, url_encode(virt_destination), virt_dirname_urlencoded, rt.token); + redirect("%s?highlight=%s&directory=%s&rt.token=%s", cgiScriptName, url_encode(wp.virt_destination), wp.virt_dirname_urlencoded, rt.token); } @@ -390,7 +390,7 @@ off_t du(char *pdir) { DIR *dir; struct dirent *direntry; struct stat fileinfo; - char child[PHYS_DIRNAME_SIZE]={0}; + char child[sizeof(wp.phys_dirname)]={0}; off_t tot=0; if(lstat(pdir, &fileinfo)==0) @@ -401,7 +401,7 @@ off_t du(char *pdir) { if(dir) { direntry=readdir(dir); while(direntry) { - snprintf(child, PHYS_DIRNAME_SIZE, "%s/%s", pdir, direntry->d_name); + snprintf(child, sizeof(wp.phys_dirname), "%s/%s", pdir, direntry->d_name); if(lstat(child, &fileinfo)==0) { if(S_ISDIR(fileinfo.st_mode)) { if(direntry->d_name[0]=='.' && direntry->d_name[1]=='\0') @@ -430,15 +430,15 @@ off_t du(char *pdir) { void re_dir_ui(char *vdir, int level) { struct dirent **direntry; struct stat fileinfo; - char child[VIRT_DIRNAME_SIZE]={0}; - char phy_child[PHYS_DIRNAME_SIZE]={0}; - char re_phys_dirname[PHYS_DIRNAME_SIZE]={0}; + char child[sizeof(wp.virt_dirname)]={0}; + char phy_child[sizeof(wp.phys_dirname)]={0}; + char re_phys_dirname[sizeof(wp.phys_dirname)]={0}; int n; int nentr, e; - snprintf(re_phys_dirname, PHYS_DIRNAME_SIZE, "%s/%s", cfg.homedir, vdir); + snprintf(re_phys_dirname, sizeof(re_phys_dirname), "%s/%s", cfg.homedir, vdir); - if(strlen(re_phys_dirname)<2 || strlen(re_phys_dirname)>(PHYS_DIRNAME_SIZE-2)) + if(strlen(re_phys_dirname)<2 || strlen(re_phys_dirname)>(sizeof(wp.phys_dirname)-2)) error("Invalid directory name."); if(regexec(&dotdot, re_phys_dirname, 0, 0, 0)==0) error("Invalid directory name."); @@ -447,11 +447,11 @@ void re_dir_ui(char *vdir, int level) { nentr=scandir(re_phys_dirname, &direntry, 0, alphasort); for(e=0; e<nentr; e++) { - snprintf(phy_child, PHYS_DIRNAME_SIZE, "%s/%s/%s", cfg.homedir, vdir, direntry[e]->d_name); + 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, VIRT_DIRNAME_SIZE, "%s/%s", vdir, direntry[e]->d_name); + snprintf(child, sizeof(wp.virt_dirname), "%s/%s", vdir, direntry[e]->d_name); fprintf(cgiOut, "<OPTION VALUE=\"%s\">", child); @@ -475,7 +475,7 @@ void re_dir_ui(char *vdir, int level) { int re_dir_up(char *vdir) { int n,nn,m,len; char **dirs; - char tmp[sizeof(virt_dirname)]={0}; + char tmp[sizeof(wp.virt_dirname)]={0}; strcpy(tmp, vdir); len=strsplit(tmp, &dirs, "/."); @@ -9,7 +9,7 @@ void html_title(char *msg) { HTML_HEADER "<LINK REL=\"icon\" TYPE=\"image/gif\" HREF=\"%s%s\">\n" "<TITLE>%s : %s</TITLE>\n", - rt.iconsurl, cfg.favicon, cfg.tagline, msg); // (strlen(virt_dirname)>0) ? ' ' : '/', TAGLINE, virt_dirname + rt.iconsurl, cfg.favicon, cfg.tagline, msg); // (strlen(wp.virt_dirname)>0) ? ' ' : '/', TAGLINE, wp.virt_dirname } @@ -115,7 +115,7 @@ void login(void) { cgiFormStringNoNewlines("password", password, sizeof(password)); if(strlen(username) && strlen(password)) - redirect("%s?directory=%s&login=server&token=%s", cgiScriptName, virt_dirname_urlencoded, md5hash("%s:%s", cgiRemoteAddr, md5hash("%s:%s", username, password))); // generate MD5 as if it was the client + redirect("%s?directory=%s&login=server&token=%s", cgiScriptName, wp.virt_dirname_urlencoded, md5hash("%s:%s", cgiRemoteAddr, md5hash("%s:%s", username, password))); // generate MD5 as if it was the client else login_ui(); // display actual login page, which normally generates token in JavaScript @@ -177,17 +177,17 @@ void access_check(char *access_string) { // Function can be passed implicit filename or use the global variable // void checkfilename(char *inp_filename) { - char temp_dirname[PHYS_FILENAME_SIZE]={0}; - char temp_filename[VIRT_FILENAME_SIZE]={0}; + char temp_dirname[sizeof(wp.phys_filename)]={0}; + char temp_filename[sizeof(wp.virt_filename)]={0}; char *bname; if(inp_filename && strlen(inp_filename)) { - strncpy(temp_filename, inp_filename, VIRT_FILENAME_SIZE); + strncpy(temp_filename, inp_filename, sizeof(wp.virt_filename)); } - else if(cgiFormFileName("filename", temp_filename, VIRT_FILENAME_SIZE) == cgiFormSuccess) { + else if(cgiFormFileName("filename", temp_filename, sizeof(wp.virt_filename)) == cgiFormSuccess) { } - else if(cgiFormStringNoNewlines("filename", temp_filename, VIRT_FILENAME_SIZE) == cgiFormSuccess) { + else if(cgiFormStringNoNewlines("filename", temp_filename, sizeof(wp.virt_filename)) == cgiFormSuccess) { } else @@ -203,20 +203,20 @@ void checkfilename(char *inp_filename) { else (void) *bname++; - strip(bname, VIRT_FILENAME_SIZE, VALIDCHRS); - strncpy(virt_filename, bname, VIRT_FILENAME_SIZE); - snprintf(phys_filename, PHYS_FILENAME_SIZE, "%s/%s", phys_dirname, virt_filename); + strip(bname, sizeof(wp.virt_filename), VALIDCHRS); + strncpy(wp.virt_filename, bname, sizeof(wp.virt_filename)); + snprintf(wp.phys_filename, sizeof(wp.phys_filename), "%s/%s", wp.phys_dirname, wp.virt_filename); // Do checks - if(!strlen(phys_filename) || strlen(phys_filename)>(PHYS_FILENAME_SIZE-2)) error("Invalid phys_filename lenght [%d]", strlen(phys_filename)); - if(!strlen(virt_filename) || strlen(virt_filename)>(VIRT_FILENAME_SIZE-2)) error("Invalid virt_filename lenght [%d]", strlen(virt_filename)); - if(regexec(&dotdot, phys_filename, 0, 0, 0)==0) error("Double dots in pfilename"); - if(regexec(&dotdot, virt_filename, 0, 0, 0)==0) error("Double dots in vfilename"); + if(!strlen(wp.phys_filename) || strlen(wp.phys_filename)>(sizeof(wp.phys_filename)-2)) error("Invalid wp.phys_filename lenght [%d]", strlen(wp.phys_filename)); + if(!strlen(wp.virt_filename) || strlen(wp.virt_filename)>(sizeof(wp.virt_filename)-2)) error("Invalid wp.virt_filename lenght [%d]", strlen(wp.virt_filename)); + if(regexec(&dotdot, wp.phys_filename, 0, 0, 0)==0) error("Double dots in pfilename"); + if(regexec(&dotdot, wp.virt_filename, 0, 0, 0)==0) error("Double dots in vfilename"); - strncpy(temp_dirname, phys_filename, PHYS_FILENAME_SIZE); + strncpy(temp_dirname, wp.phys_filename, sizeof(wp.phys_filename)); if(strlen(dirname(temp_dirname)) < strlen(cfg.homedir)) error("Invalid directory name."); - virt_filename_urlencoded=url_encode(virt_filename); + wp.virt_filename_urlencoded=url_encode(wp.virt_filename); } // @@ -226,18 +226,18 @@ void checkfilename(char *inp_filename) { void checkdestination(void) { int absolute_destination; - cgiFormStringNoNewlines("destination", virt_destination, VIRT_DESTINATION_SIZE); - strip(virt_destination, VIRT_DESTINATION_SIZE, VALIDCHRS_DIR); + cgiFormStringNoNewlines("destination", wp.virt_destination, sizeof(wp.virt_filename)); + strip(wp.virt_destination, sizeof(wp.virt_filename), VALIDCHRS_DIR); cgiFormInteger("absdst", &absolute_destination, 0); // move operation relies on absolute paths if(absolute_destination) - snprintf(phys_destination, PHYS_DESTINATION_SIZE, "%s/%s", cfg.homedir, virt_destination); + snprintf(wp.phys_destination, sizeof(wp.phys_filename), "%s/%s", cfg.homedir, wp.virt_destination); else - snprintf(phys_destination, PHYS_DESTINATION_SIZE, "%s/%s", phys_dirname, virt_destination); + snprintf(wp.phys_destination, sizeof(wp.phys_filename), "%s/%s", wp.phys_dirname, wp.virt_destination); - if(strlen(phys_destination)<1 || strlen(phys_destination)>(PHYS_DESTINATION_SIZE-2)) error("Invalid phys_destination lenght [%d]", strlen(phys_destination)); - if(strlen(virt_destination)<1 || strlen(virt_destination)>(VIRT_DESTINATION_SIZE-2)) error("Invalid virt_destination lenght [%d]", strlen(virt_destination)); - if(regexec(&dotdot, phys_destination, 0, 0, 0)==0) error("Double dots in pfilename"); - if(regexec(&dotdot, virt_destination, 0, 0, 0)==0) error("Double dots in vfilename"); + if(strlen(wp.phys_destination)<1 || strlen(wp.phys_destination)>(sizeof(wp.phys_filename)-2)) error("Invalid wp.phys_destination lenght [%d]", strlen(wp.phys_destination)); + if(strlen(wp.virt_destination)<1 || strlen(wp.virt_destination)>(sizeof(wp.virt_filename)-2)) error("Invalid wp.virt_destination lenght [%d]", strlen(wp.virt_destination)); + if(regexec(&dotdot, wp.phys_destination, 0, 0, 0)==0) error("Double dots in pfilename"); + if(regexec(&dotdot, wp.virt_destination, 0, 0, 0)==0) error("Double dots in vfilename"); } // @@ -245,26 +245,26 @@ void checkdestination(void) { // Only called by cgiMain during initialization // void checkdirectory(void) { - char temp[VIRT_DIRNAME_SIZE]={0}; + char temp[sizeof(wp.virt_dirname)]={0}; - cgiFormStringNoNewlines("directory", virt_dirname, VIRT_DIRNAME_SIZE); - strip(virt_dirname, VIRT_DIRNAME_SIZE, VALIDCHRS_DIR); - snprintf(phys_dirname, PHYS_DIRNAME_SIZE, "%s/%s", cfg.homedir, virt_dirname); + cgiFormStringNoNewlines("directory", wp.virt_dirname, sizeof(wp.virt_dirname)); + strip(wp.virt_dirname, sizeof(wp.virt_dirname), VALIDCHRS_DIR); + snprintf(wp.phys_dirname, sizeof(wp.phys_dirname), "%s/%s", cfg.homedir, wp.virt_dirname); - if(strlen(phys_dirname)<2 || strlen(phys_dirname)>(PHYS_DIRNAME_SIZE-2)) + if(strlen(wp.phys_dirname)<2 || strlen(wp.phys_dirname)>(sizeof(wp.phys_dirname)-2)) error("Invalid directory name."); - if(regexec(&dotdot, phys_dirname, 0, 0, 0)==0) error("Invalid directory name."); - if(strlen(phys_dirname) < strlen(cfg.homedir)) error("Invalid directory name."); + if(regexec(&dotdot, wp.phys_dirname, 0, 0, 0)==0) error("Invalid directory name."); + if(strlen(wp.phys_dirname) < strlen(cfg.homedir)) error("Invalid directory name."); - if(!strlen(virt_dirname)) strcpy(virt_dirname, "/"); + if(!strlen(wp.virt_dirname)) strcpy(wp.virt_dirname, "/"); - virt_dirname_urlencoded=url_encode(virt_dirname); + wp.virt_dirname_urlencoded=url_encode(wp.virt_dirname); // parent - strncpy(temp, virt_dirname, VIRT_DIRNAME_SIZE); - strncpy(virt_parent, dirname(temp), VIRT_DIRNAME_SIZE); - virt_parent_urlencoded=url_encode(virt_parent); + strncpy(temp, wp.virt_dirname, sizeof(wp.virt_dirname)); + strncpy(wp.virt_parent, dirname(temp), sizeof(wp.virt_dirname)); + wp.virt_parent_urlencoded=url_encode(wp.virt_parent); } @@ -480,6 +480,7 @@ void cfgload(void) { memset(&cfg, 0, sizeof(cfg)); memset(&rt, 0, sizeof(rt)); + memset(&wp, 0, sizeof(wp)); cgiFormStringNoNewlines("token", rt.token, sizeof(rt.token)); snprintf(rt.iconsurl, sizeof(rt.iconsurl), "%s?ea=icon&name=", cgiScriptName); @@ -552,15 +553,6 @@ int cgiMain(void) { fprintf(cgiOut, "Cache-Control: max-age=0, private\r\nExpires: -1\r\n"); - memset(virt_dirname, 0, VIRT_DIRNAME_SIZE); - memset(phys_dirname, 0, PHYS_DIRNAME_SIZE); - memset(virt_filename, 0, VIRT_FILENAME_SIZE); - memset(phys_filename, 0, PHYS_FILENAME_SIZE); - memset(virt_destination, 0, VIRT_DESTINATION_SIZE); - memset(phys_destination, 0, PHYS_DESTINATION_SIZE); - memset(final_destination, 0, PHYS_DESTINATION_SIZE); - memset(virt_parent, 0, VIRT_DIRNAME_SIZE); - cfgload(); @@ -61,7 +61,7 @@ #include "wfmiconres.h" #define VALIDCHRS "an ()[]{}-_.,!@#$%^&=+;" -#define VALIDCHRS_DIR "an ()[]{}-_.,!@#$%^&=+;/" +#define VALIDCHRS_DIR VALIDCHRS "/" #define P1024_1 1024.0f @@ -71,25 +71,19 @@ #define SHM_SIZE 16 -#define VIRT_DIRNAME_SIZE NAME_MAX // around 255 -#define PHYS_DIRNAME_SIZE 1024 -#define VIRT_FILENAME_SIZE NAME_MAX -#define PHYS_FILENAME_SIZE 1280 -#define VIRT_DESTINATION_SIZE NAME_MAX -#define PHYS_DESTINATION_SIZE 1280 - -char virt_dirname[VIRT_DIRNAME_SIZE]; -char *virt_dirname_urlencoded; -char phys_dirname[PHYS_DIRNAME_SIZE]; -char virt_filename[VIRT_FILENAME_SIZE]; -char *virt_filename_urlencoded; -char phys_filename[PHYS_FILENAME_SIZE]; -char virt_destination[VIRT_DESTINATION_SIZE]; -char phys_destination[PHYS_DESTINATION_SIZE]; -char final_destination[PHYS_DESTINATION_SIZE]; -char virt_parent[VIRT_DIRNAME_SIZE]; -char *virt_parent_urlencoded; - +struct wfm_paths { + char virt_dirname[NAME_MAX]; + char *virt_dirname_urlencoded; + char virt_filename[NAME_MAX]; + char *virt_filename_urlencoded; + char virt_destination[NAME_MAX]; + char virt_parent[NAME_MAX]; + char *virt_parent_urlencoded; + char phys_dirname[PATH_MAX]; + char phys_filename[PATH_MAX]; + char phys_destination[PATH_MAX]; + char final_destination[PATH_MAX]; +} wp; regex_t dotdot; |