aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortenox <as@tenoware.com>2016-08-21 00:55:07 -0700
committertenox <as@tenoware.com>2016-08-21 00:55:07 -0700
commitd7cbff722b4b12e2017802543a4f8936386b2744 (patch)
treeb18aae24a02ef606ef0cd5fc545f4d9094c9dbe6
parent3a39aee0e25f1e8f9e7b93de96981ec292edcdf4 (diff)
downloadwfm-d7cbff722b4b12e2017802543a4f8936386b2744.tar.gz
JavaScript dependency fixes
-rw-r--r--dialogs.c100
-rw-r--r--dir.c222
-rw-r--r--fileio.c27
-rw-r--r--wfm.c77
-rw-r--r--wfm.h2
5 files changed, 248 insertions, 180 deletions
diff --git a/dialogs.c b/dialogs.c
index abe61cb..5fbcf4c 100644
--- a/dialogs.c
+++ b/dialogs.c
@@ -70,7 +70,7 @@ void multiprompt_ui(char *m_action) {
// move needs a destination...
if(strcmp(m_action, "move")==0) {
- fprintf(cgiOut, "<P>Destination: <SELECT NAME=\"destination\"><OPTION VALUE=\"/\">/ - Root Directory</OPTION>\n");
+ fprintf(cgiOut, "<P>Source: %s<P>Destination: <SELECT NAME=\"destination\"><OPTION VALUE=\"/\">/ - Root Directory</OPTION>\n", virt_dirname);
re_dir_ui("/", 1);
fprintf(cgiOut, "</SELECT>\n<INPUT TYPE=\"HIDDEN\" NAME=\"absdst\" VALUE=\"1\">\n<P>\n");
}
@@ -83,12 +83,12 @@ void multiprompt_ui(char *m_action) {
" <INPUT TYPE=\"HIDDEN\" NAME=\"directory\" VALUE=\"%s\">\n"
" <INPUT TYPE=\"HIDDEN\" NAME=\"token\" VALUE=\"%s\">\n"
" <INPUT TYPE=\"SUBMIT\" VALUE=\" OK \" NAME=\"OK\">\n"
- " <INPUT TYPE=\"BUTTON\" VALUE=\" Cancel \" onClick=\"self.location='?directory=%s&amp;token=%s'; return true;\">\n"
+ " <INPUT TYPE=\"SUBMIT\" VALUE=\" Cancel \" NAME=\"noop\">\n"
" </CENTER><BR>\n"
" </TD></TR>\n"
"</TABLE></FORM>\n\n"
"</TD></TR></TABLE>\n"
- "</BODY>\n</HTML>\n", m_action, virt_dirname, token, virt_dirname, token);
+ "</BODY>\n</HTML>\n", m_action, virt_dirname, token);
cgiStringArrayFree(responses);
@@ -114,13 +114,14 @@ void singleprompt_ui(char *m_action) {
fprintf(cgiOut,
"</HEAD>\n"
"<!-- Single Prompt -->\n"
- "<BODY ONLOAD=\"document.wfm.inp1.focus();\" BGCOLOR=\"#FFFFFF\">\n"
+ "<BODY %s BGCOLOR=\"#FFFFFF\">\n"
"<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 CLASS=\"twh\"><TR><TD VALIGN=\"MIDDLE\" ALIGN=\"CENTER\">\n"
"<FORM NAME=\"wfm\" ACTION=\"%s\" METHOD=\"POST\" ENCTYPE=\"multipart/form-data\">\n\n"
"<TABLE WIDTH=\"400\" BGCOLOR=\"#F0F0F0\" BORDER=0 CELLSPACING=0 CELLPADDING=1 CLASS=\"tbr\">\n"
" <TR><TD COLSPAN=2 BGCOLOR=\"#004080\"><FONT COLOR=\"#FFFFFF\">&nbsp; %s</FONT></TD></TR>\n"
" <TR><TD WIDTH=30>&nbsp;</TD><TD>\n"
- " &nbsp;<BR>\n", cgiScriptName, M_action);
+ " &nbsp;<BR>\n",
+ (js) ? "ONLOAD=\"document.wfm.inp1.focus();\"" : "", cgiScriptName, M_action);
if(strcmp(m_action, "move")==0)
@@ -149,12 +150,12 @@ void singleprompt_ui(char *m_action) {
" <INPUT TYPE=\"HIDDEN\" NAME=\"directory\" VALUE=\"%s\">\n"
" <INPUT TYPE=\"HIDDEN\" NAME=\"token\" VALUE=\"%s\">\n"
" <INPUT TYPE=\"SUBMIT\" VALUE=\" OK \" NAME=\"OK\">\n"
- " <INPUT TYPE=\"BUTTON\" VALUE=\" Cancel \" onClick=\"self.location='?directory=%s&amp;token=%s'; return true;\">\n"
+ " <INPUT TYPE=\"SUBMIT\" VALUE=\" Cancel \" NAME=\"noop\">\n"
" </CENTER><BR>\n"
" </TD></TR>\n"
"</TABLE></FORM>\n\n"
"</TD></TR></TABLE>\n"
- "</BODY>\n</HTML>\n", m_action, virt_dirname, token, virt_dirname, token);
+ "</BODY>\n</HTML>\n", m_action, virt_dirname, token);
}
@@ -198,12 +199,15 @@ void error(char *msg, ...) {
"</TD>\n"
"</TR>\n"
"<TR><TD COLSPAN=3 ALIGN=\"CENTER\" BGCOLOR=\"#EEEEEE\">\n"
- "<INPUT TYPE=\"BUTTON\" VALUE=\" OK \" onClick=\"self.location='?directory=%s&amp;token=%s'; return true;\">\n"
- "</TD></TR>\n"
+ "<FORM ACTION=\"%s\" METHOD=\"POST\" ENCTYPE=\"multipart/form-data\">\n"
+ "<INPUT TYPE=\"SUBMIT\" VALUE=\" OK \" NAME=\"noop\">\n"
+ "<INPUT TYPE=\"HIDDEN\" NAME=\"directory\" VALUE=\"%s\">\n"
+ "<INPUT TYPE=\"HIDDEN\" NAME=\"token\" VALUE=\"%s\">\n"
+ "</FORM>\n</TD></TR>\n"
"<TR><TD COLSPAN=3 BGCOLOR=\"#EEEEEE\">&nbsp;</TD></TR>\n"
"</TABLE>\n"
"</TD></TR></TABLE>\n</BODY></HTML>\n",
- buff, virt_dirname, token);
+ buff, cgiScriptName, virt_dirname, token);
}
else {
cgiHeaderContentType("text/plain");
@@ -251,6 +255,8 @@ void about(void) {
"WFM: %s (build %s / %s)<BR>\n"
"GCC: %s<BR>\n"
"Server: %s<BR>\n"
+ "User Agent: %s<BR>\n"
+ "JavaScript Supported: %s<BR>\n"
"<img src=\"http://www.w3.org/Icons/valid-html401\" alt=\"Valid HTML 4.01 Transitional\">\n"
"&nbsp;<P>\n"
"&nbsp;<P>\n"
@@ -260,12 +266,15 @@ void about(void) {
"</TD>\n"
"</TR>\n"
"<TR><TD COLSPAN=3 ALIGN=\"CENTER\" BGCOLOR=\"#EEEEEE\">\n"
- "<INPUT TYPE=\"BUTTON\" VALUE=\" OK \" onClick=\"self.location='?directory=%s&amp;token=%s'; return true;\">\n"
- "</TD></TR>\n"
+ "<FORM ACTION=\"%s\" METHOD=\"POST\" ENCTYPE=\"multipart/form-data\">\n"
+ "<INPUT TYPE=\"SUBMIT\" VALUE=\" OK \" NAME=\"noop\">\n"
+ "<INPUT TYPE=\"HIDDEN\" NAME=\"directory\" VALUE=\"%s\">\n"
+ "<INPUT TYPE=\"HIDDEN\" NAME=\"token\" VALUE=\"%s\">\n"
+ "</FORM>\n</TD></TR>\n"
"<TR><TD COLSPAN=3 BGCOLOR=\"#EEEEEE\">&nbsp;</TD></TR>\n"
"</TABLE>\n"
"</TD></TR></TABLE>\n</BODY></HTML>\n",
- ICONSURL, TAGLINE, VERSION, __DATE__, __TIME__, __VERSION__, cgiServerSoftware, virt_dirname, token);
+ ICONSURL, TAGLINE, VERSION, __DATE__, __TIME__, __VERSION__, cgiServerSoftware, cgiUserAgent, (js) ? "Yes" : "No", cgiScriptName, virt_dirname, token);
}
@@ -276,18 +285,22 @@ void about(void) {
void login_ui(void) {
cgiHeaderContentType("text/html");
html_title("Login");
- fprintf(cgiOut,
+
+ if(js) fputs(
"<SCRIPT LANGUAGE=\"JavaScript\" TYPE=\"text/javascript\">\n<!--\n"
"var hexcase=0;function hex_md5(a){return rstr2hex(rstr_md5(str2rstr_utf8(a)))}function hex_hmac_md5(a,b){return rstr2hex(rstr_hmac_md5(str2rstr_utf8(a),str2rstr_utf8(b)))}function md5_vm_test(){return hex_md5(\"abc\").toLowerCase()==\"900150983cd24fb0d6963f7d28e17f72\"}function rstr_md5(a){return binl2rstr(binl_md5(rstr2binl(a),a.length*8))}function rstr_hmac_md5(c,f){var e=rstr2binl(c);if(e.length>16){e=binl_md5(e,c.length*8)}var a=Array(16),d=Array(16);for(var b=0;b<16;b++){a[b]=e[b]^909522486;d[b]=e[b]^1549556828}var g=binl_md5(a.concat(rstr2binl(f)),512+f.length*8);return binl2rstr(binl_md5(d.concat(g),512+128))}function rstr2hex(c){try{hexcase}catch(g){hexcase=0}var f=hexcase?\"0123456789ABCDEF\":\"0123456789abcdef\";var b=\"\";var a;for(var d=0;d<c.length;d++){a=c.charCodeAt(d);b+=f.charAt((a>>>4)&15)+f.charAt(a&15)}return b}function str2rstr_utf8(c){var b=\"\";var d=-1;var a,e;while(++d<c.length){a=c.charCodeAt(d);e=d+1<c.length?c.charCodeAt(d+1):0;if(55296<=a&&a<=56319&&56320<=e&&e<=57343){a=65536+((a&1023)<<10)+(e&1023);d++}if(a<=127){b+=String.fromCharCode(a)}else{if(a<=2047){b+=String.fromCharCode(192|((a>>>6)&31),128|(a&63))}else{if(a<=65535){b+=String.fromCharCode(224|((a>>>12)&15),128|((a>>>6)&63),128|(a&63))}else{if(a<=2097151){b+=String.fromCharCode(240|((a>>>18)&7),128|((a>>>12)&63),128|((a>>>6)&63),128|(a&63))}}}}}return b}function rstr2binl(b){var a=Array(b.length>>2);for(var c=0;c<a.length;c++){a[c]=0}for(var c=0;c<b.length*8;c+=8){a[c>>5]|=(b.charCodeAt(c/8)&255)<<(c%%32)}return a}function binl2rstr(b){var a=\"\";for(var c=0;c<b.length*32;c+=8){a+=String.fromCharCode((b[c>>5]>>>(c%%32))&255)}return a}function binl_md5(p,k){p[k>>5]|=128<<((k)%%32);p[(((k+64)>>>9)<<4)+14]=k;var o=1732584193;var n=-271733879;var m=-1732584194;var l=271733878;for(var g=0;g<p.length;g+=16){var j=o;var h=n;var f=m;var e=l;o=md5_ff(o,n,m,l,p[g+0],7,-680876936);l=md5_ff(l,o,n,m,p[g+1],12,-389564586);m=md5_ff(m,l,o,n,p[g+2],17,606105819);n=md5_ff(n,m,l,o,p[g+3],22,-1044525330);o=md5_ff(o,n,m,l,p[g+4],7,-176418897);l=md5_ff(l,o,n,m,p[g+5],12,1200080426);m=md5_ff(m,l,o,n,p[g+6],17,-1473231341);n=md5_ff(n,m,l,o,p[g+7],22,-45705983);o=md5_ff(o,n,m,l,p[g+8],7,1770035416);l=md5_ff(l,o,n,m,p[g+9],12,-1958414417);m=md5_ff(m,l,o,n,p[g+10],17,-42063);n=md5_ff(n,m,l,o,p[g+11],22,-1990404162);o=md5_ff(o,n,m,l,p[g+12],7,1804603682);l=md5_ff(l,o,n,m,p[g+13],12,-40341101);m=md5_ff(m,l,o,n,p[g+14],17,-1502002290);n=md5_ff(n,m,l,o,p[g+15],22,1236535329);o=md5_gg(o,n,m,l,p[g+1],5,-165796510);l=md5_gg(l,o,n,m,p[g+6],9,-1069501632);m=md5_gg(m,l,o,n,p[g+11],14,643717713);n=md5_gg(n,m,l,o,p[g+0],20,-373897302);o=md5_gg(o,n,m,l,p[g+5],5,-701558691);l=md5_gg(l,o,n,m,p[g+10],9,38016083);m=md5_gg(m,l,o,n,p[g+15],14,-660478335);n=md5_gg(n,m,l,o,p[g+4],20,-405537848);o=md5_gg(o,n,m,l,p[g+9],5,568446438);l=md5_gg(l,o,n,m,p[g+14],9,-1019803690);m=md5_gg(m,l,o,n,p[g+3],14,-187363961);n=md5_gg(n,m,l,o,p[g+8],20,1163531501);o=md5_gg(o,n,m,l,p[g+13],5,-1444681467);l=md5_gg(l,o,n,m,p[g+2],9,-51403784);m=md5_gg(m,l,o,n,p[g+7],14,1735328473);n=md5_gg(n,m,l,o,p[g+12],20,-1926607734);o=md5_hh(o,n,m,l,p[g+5],4,-378558);l=md5_hh(l,o,n,m,p[g+8],11,-2022574463);m=md5_hh(m,l,o,n,p[g+11],16,1839030562);n=md5_hh(n,m,l,o,p[g+14],23,-35309556);o=md5_hh(o,n,m,l,p[g+1],4,-1530992060);l=md5_hh(l,o,n,m,p[g+4],11,1272893353);m=md5_hh(m,l,o,n,p[g+7],16,-155497632);n=md5_hh(n,m,l,o,p[g+10],23,-1094730640);o=md5_hh(o,n,m,l,p[g+13],4,681279174);l=md5_hh(l,o,n,m,p[g+0],11,-358537222);m=md5_hh(m,l,o,n,p[g+3],16,-722521979);n=md5_hh(n,m,l,o,p[g+6],23,76029189);o=md5_hh(o,n,m,l,p[g+9],4,-640364487);l=md5_hh(l,o,n,m,p[g+12],11,-421815835);m=md5_hh(m,l,o,n,p[g+15],16,530742520);n=md5_hh(n,m,l,o,p[g+2],23,-995338651);o=md5_ii(o,n,m,l,p[g+0],6,-198630844);l=md5_ii(l,o,n,m,p[g+7],10,1126891415);m=md5_ii(m,l,o,n,p[g+14],15,-1416354905);n=md5_ii(n,m,l,o,p[g+5],21,-57434055);o=md5_ii(o,n,m,l,p[g+12],6,1700485571);l=md5_ii(l,o,n,m,p[g+3],10,-1894986606);m=md5_ii(m,l,o,n,p[g+10],15,-1051523);n=md5_ii(n,m,l,o,p[g+1],21,-2054922799);o=md5_ii(o,n,m,l,p[g+8],6,1873313359);l=md5_ii(l,o,n,m,p[g+15],10,-30611744);m=md5_ii(m,l,o,n,p[g+6],15,-1560198380);n=md5_ii(n,m,l,o,p[g+13],21,1309151649);o=md5_ii(o,n,m,l,p[g+4],6,-145523070);l=md5_ii(l,o,n,m,p[g+11],10,-1120210379);m=md5_ii(m,l,o,n,p[g+2],15,718787259);n=md5_ii(n,m,l,o,p[g+9],21,-343485551);o=safe_add(o,j);n=safe_add(n,h);m=safe_add(m,f);l=safe_add(l,e)}return Array(o,n,m,l)}function md5_cmn(h,e,d,c,g,f){return safe_add(bit_rol(safe_add(safe_add(e,h),safe_add(c,f)),g),d)}function md5_ff(g,f,k,j,e,i,h){return md5_cmn((f&k)|((~f)&j),g,f,e,i,h)}function md5_gg(g,f,k,j,e,i,h){return md5_cmn((f&j)|(k&(~j)),g,f,e,i,h)}function md5_hh(g,f,k,j,e,i,h){return md5_cmn(f^k^j,g,f,e,i,h)}function md5_ii(g,f,k,j,e,i,h){return md5_cmn(k^(f|(~j)),g,f,e,i,h)}function safe_add(a,d){var c=(a&65535)+(d&65535);var b=(a>>16)+(d>>16)+(c>>16);return(b<<16)|(c&65535)}function bit_rol(a,b){return(a<<b)|(a>>>(32-b))};"
- "\n//-->\n</SCRIPT>\n");
+ "\n//-->\n</SCRIPT>\n", cgiOut);
- fprintf(cgiOut,
- "</HEAD>\n"
- "<BODY ONLOAD=\"document.wfm.username.focus(); document.wfm.Login.value='MD5 Login';\" BGCOLOR=\"#FFFFFF\">\n"
- "<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 CLASS=\"twh\"><TR><TD VALIGN=\"MIDDLE\" ALIGN=\"CENTER\">\n"
- "<FORM NAME=\"wfm\" ACTION=\"%s\" METHOD=\"POST\" ENCTYPE=\"multipart/form-data\">\n\n", cgiScriptName);
+ fputs("</HEAD>\n", cgiOut);
- fprintf(cgiOut,
+ if(js)
+ fputs("<BODY ONLOAD=\"document.wfm.username.focus(); document.wfm.Login.value='MD5 Login';\" BGCOLOR=\"#FFFFFF\">\n", cgiOut);
+ else
+ fputs("<BODY BGCOLOR=\"#FFFFFF\">\n", cgiOut);
+
+ fprintf(cgiOut,
+ "<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 CLASS=\"twh\"><TR><TD VALIGN=\"MIDDLE\" ALIGN=\"CENTER\">\n"
+ "<FORM NAME=\"wfm\" ACTION=\"%s\" METHOD=\"POST\" ENCTYPE=\"multipart/form-data\">\n"
"<TABLE WIDTH=\"400\" BGCOLOR=\"#F0F0F0\" BORDER=0 CELLSPACING=0 CELLPADDING=1 CLASS=\"tbr\">\n"
" <TR><TD COLSPAN=2 BGCOLOR=\"#004080\"><FONT COLOR=\"#FFFFFF\">&nbsp; Authentication Required</FONT></TD></TR>\n"
" <TR><TD WIDTH=30>&nbsp;</TD><TD>\n"
@@ -301,13 +314,20 @@ void login_ui(void) {
" <P><CENTER>\n"
" <INPUT TYPE=\"HIDDEN\" VALUE=\"login\" NAME=\"action\">\n"
" <INPUT TYPE=\"HIDDEN\" VALUE=\"%s\" NAME=\"directory\">\n"
- " <INPUT TYPE=\"SUBMIT\" VALUE=\" %s Login \" NAME=\"Login\" "
- "onClick=\"self.location='?directory=%s&amp;login=client&amp;token=' + hex_md5('%s:' + document.wfm.username.value + ':' + document.wfm.password.value); return false;\" >\n"
+ " <INPUT TYPE=\"SUBMIT\" VALUE=\" %s Login \" NAME=\"Login\" ",
+ cgiScriptName, virt_dirname, (getenv("HTTPS")) ? "SSL" : "UNSECURE");
+
+ if(js) fprintf(cgiOut,
+ "onClick=\"self.location='%s?directory=%s&amp;login=client&amp;token=' + hex_md5('%s:' + document.wfm.username.value + ':' + document.wfm.password.value); return false;\"",
+ cgiScriptName, virt_dirname, cgiRemoteAddr);
+
+ fputs(
+ ">\n"
" </CENTER><BR>\n"
" </TD></TR>\n"
"</TABLE></FORM>\n\n"
"</TD></TR></TABLE>\n"
- "</BODY>\n</HTML>\n", virt_dirname, (getenv("HTTPS")) ? "SSL" : "UNSECURE", virt_dirname, cgiRemoteAddr);
+ "</BODY>\n</HTML>\n", cgiOut);
}
@@ -347,6 +367,9 @@ void edit_ui(void) {
size=ftell(input);
fseek(input, 0, SEEK_SET);
+ if(size>=5*1024*1024)
+ error("The file is too large for online editing.<BR>");
+
buff=(char *) malloc(size+1);
if(buff==NULL)
error("Unable to allocate memory.");
@@ -359,7 +382,7 @@ void edit_ui(void) {
cgiHeaderContentType("text/html");
html_title("Editor");
- fprintf(cgiOut,
+ if (js) fprintf(cgiOut,
"<SCRIPT LANGUAGE=\"JavaScript\" TYPE=\"text/javascript\">\n"
"<!--\n"
"function chwrap() { \n"
@@ -385,28 +408,35 @@ void edit_ui(void) {
" } \n"
"} \n"
"//-->\n"
- "</SCRIPT>\n"
+ "</SCRIPT>\n");
+
+ fprintf(cgiOut,
"<STYLE TYPE=\"text/css\"><!-- \n"
"html, body, table, textarea, form { box-sizing: border-box; width:100%%; height:100%%; margin:0px; padding:0px; } \n"
"--></STYLE>\n"
"</HEAD>\n"
"<BODY>\n"
- "<FORM NAME=\"EDITOR\" ACTION=\"?action=edit_save\" METHOD=\"POST\" ENCTYPE=\"multipart/form-data\" STYLE=\"height:100%%;\">\n"
+ "<FORM NAME=\"EDITOR\" ACTION=\"%s?action=edit_save\" METHOD=\"POST\" ENCTYPE=\"multipart/form-data\" STYLE=\"height:100%%;\">\n"
"<TABLE BGCOLOR=\"#EEEEEE\" BORDER=0 CELLSPACING=0 CELLPADDING=5 STYLE=\"height:100%%;\">\n"
"<TR STYLE=\"height:1%%;\">\n"
"<TD ALIGN=\"LEFT\" VALIGN=\"MIDDLE\" BGCOLOR=\"#CCCCCC\">\n"
"<IMG SRC=\"%sedit.gif\" BORDER=0 ALIGN=\"MIDDLE\" ALT=\"EDIT\">\n"
"File Editor: %s\n"
"</TD>\n"
- "<TD BGCOLOR=\"#CCCCCC\" ALIGN=\"RIGHT\">"
+ "<TD BGCOLOR=\"#CCCCCC\" ALIGN=\"RIGHT\">",
+ cgiScriptName, ICONSURL, virt_filename);
+
+ if(js) fprintf(cgiOut,
"<INPUT TYPE=\"button\" ID=\"bakbtn\" onClick=\"chbak()\" VALUE=\"Backup\" STYLE=\"border:none; %s \"> \n"
- "<INPUT TYPE=\"button\" ID=\"wrapbtn\" onClick=\"chwrap()\" VALUE=\"Wrap\" STYLE=\"border:none; background-color:#404040; color:#FFFFFF;\">\n"
+ "<INPUT TYPE=\"button\" ID=\"wrapbtn\" onClick=\"chwrap()\" VALUE=\"Wrap\" STYLE=\"border:none; background-color:#404040; color:#FFFFFF;\">\n",
+ bkcolor);
+
+ fprintf(cgiOut,
"</TD>\n"
"</TR>\n"
"<TR STYLE=\"height:99%%;\">\n"
"<TD COLSPAN=2 ALIGN=\"CENTER\" VALIGN=\"MIDDLE\" STYLE=\"height:100%%;\">\n"
- "<TEXTAREA COLS=\"80\" ROWS=\"24\" NAME=\"content\" STYLE=\"resize:none;\">",
- ICONSURL, virt_filename, bkcolor);
+ "<TEXTAREA COLS=\"120\" ROWS=\"24\" NAME=\"content\" STYLE=\"resize:none;\">");
cgiHtmlEscapeData(buff, size);
@@ -416,19 +446,19 @@ void edit_ui(void) {
"</TR>\n"
"<TR>\n"
"<TD COLSPAN=2 ALIGN=\"RIGHT\" VALIGN=\"MIDDLE\">\n"
- "<INPUT TYPE=\"SUBMIT\" VALUE=\"Save\" onClick=\"document.EDITOR.size.value=document.EDITOR.content.value.length+1; return true;\">&nbsp;\n"
- "<INPUT TYPE=\"BUTTON\" VALUE=\"Cancel\" onClick=\"self.location='?directory=%s&amp;token=%s'; return true;\">\n"
+ "<INPUT TYPE=\"SUBMIT\" VALUE=\"Save\" >\n"//onClick=\"document.EDITOR.size.value=document.EDITOR.content.value.length+1; return true;\">&nbsp;\n"
+ "<INPUT TYPE=\"SUBMIT\" VALUE=\"Cancel\" NAME=\"noop\">\n"
"</TD>\n"
"</TR>\n"
"</TABLE>\n"
"<INPUT TYPE=\"hidden\" NAME=\"action\" VALUE=\"edit_save\">\n"
"<INPUT TYPE=\"hidden\" NAME=\"filename\" VALUE=\"%s\">\n"
- "<INPUT TYPE=\"hidden\" NAME=\"size\" VALUE=\"%d\">\n"
+// "<INPUT TYPE=\"hidden\" NAME=\"size\" VALUE=\"%d\">\n"
"<INPUT TYPE=\"hidden\" NAME=\"directory\" VALUE=\"%s\">\n"
"<INPUT TYPE=\"hidden\" NAME=\"token\" VALUE=\"%s\">\n"
"<INPUT TYPE=\"hidden\" NAME=\"backup\" VALUE=\"%s\">\n"
"</FORM></BODY></HTML>\n",
- virt_dirname, token, virt_filename, size, virt_dirname, token, backup);
+ virt_filename, virt_dirname, token, backup);
free(buff);
diff --git a/dir.c b/dir.c
index 2a0dffb..bcbe75e 100644
--- a/dir.c
+++ b/dir.c
@@ -97,49 +97,56 @@ void dirlist(void) {
"\n%s"
"<HTML>"
"<HEAD>\n"
- "<TITLE>%s : %c%s</TITLE>\n"
+ "<TITLE>%s : %c%s</TITLE>\n",
+ copyright, TAGLINE, (strlen(virt_dirname)>0) ? ' ' : '/', virt_dirname);
+
+
+ if(js) fprintf(cgiOut,
"<SCRIPT LANGUAGE=\"JavaScript\" TYPE=\"text/javascript\">\n"
- "<!--\n"
- " function checkUncheckAll(checkAllState, cbGroup) {\n"
- " if(cbGroup.length > 0) {\n"
- " for (i = 0; i < cbGroup.length; i++) {\n"
- " cbGroup[i].checked = checkAllState.checked;\n"
- " }\n"
- " }\n"
- " else {\n"
- " cbGroup.checked = checkAllState.checked;\n"
+ "<!-- \n"
+ "function checkUncheckAll(checkAllState, cbGroup) {\n"
+ " if(cbGroup.length > 0) {\n"
+ " for (i = 0; i < cbGroup.length; i++) {\n"
+ " cbGroup[i].checked = checkAllState.checked;\n"
" }\n"
" }\n"
+ " else {\n"
+ " cbGroup.checked = checkAllState.checked;\n"
+ " }\n"
+ "}\n"
"\n"
- " function xmlhttpPost(strURL) {\n"
- " var xmlHttpReq = false;\n"
- " var self = this;\n"
- " var method = \"GET\";\n"
- "\n"
- " if (window.XMLHttpRequest) {\n"
- " self.xmlHttpReq = new XMLHttpRequest();\n"
- " }\n"
- " else if (window.ActiveXObject) {\n"
- " self.xmlHttpReq = new ActiveXObject(\"Microsoft.XMLHTTP\");\n"
+ "function xmlhttpPost(strURL) {\n"
+ " var xmlHttpReq = false;\n"
+ " var self = this;\n"
+ " var method = \"GET\";\n"
+ " \n"
+ " if (window.XMLHttpRequest) {\n"
+ " self.xmlHttpReq = new XMLHttpRequest();\n"
" }\n"
- " if (self.xmlHttpReq != null) {\n"
- " self.xmlHttpReq.open(method, strURL, true);\n"
- " self.xmlHttpReq.onreadystatechange = function () {\n"
- " if (self.xmlHttpReq.readyState == 4) {\n"
- " var result = document.getElementById(\"Upload_Status\");\n"
- " result.value = self.xmlHttpReq.responseText;\n"
- " }\n"
+ " else if (window.ActiveXObject) {\n"
+ " self.xmlHttpReq = new ActiveXObject(\"Microsoft.XMLHTTP\");\n"
+ "}\n"
+ "if (self.xmlHttpReq != null) {\n"
+ " self.xmlHttpReq.open(method, strURL, true);\n"
+ " self.xmlHttpReq.onreadystatechange = function () {\n"
+ " if (self.xmlHttpReq.readyState == 4) {\n"
+ " var result = document.getElementById(\"Upload_Status\");\n"
+ " result.value = self.xmlHttpReq.responseText;\n"
" }\n"
- " self.xmlHttpReq.send(null);\n"
" }\n"
+ " self.xmlHttpReq.send(null);\n"
" }\n"
+ "}\n"
"\n"
- " function start() {\n"
- " setInterval('xmlhttpPost(\"%s?ea=upstat&upload_id=%s\");', \"100\");\n"
- " }\n"
+ "function start() {\n"
+ " setInterval('xmlhttpPost(\"%s?ea=upstat&upload_id=%s\");', 250);\n"
+ "}\n"
"\n"
"//-->\n"
- "</SCRIPT>\n"
+ "</SCRIPT>\n",
+ cgiScriptName, "1234");
+
+ fprintf(cgiOut,
"<STYLE TYPE=\"text/css\">\n"
"<!--\n"
"A:link {text-decoration: none; color:#0000CE; } \n"
@@ -159,8 +166,8 @@ void dirlist(void) {
"<LINK REL=\"icon\" TYPE=\"image/gif\" HREF=\"%s%s\">\n"
"</HEAD>\n"
"<BODY BGCOLOR=\"#FFFFFF\">\n"
- "<FORM ACTION=\"%s\" METHOD=\"POST\" ENCTYPE=\"multipart/form-data\" onsubmit=\"start()\">\n",
- copyright, TAGLINE, (strlen(virt_dirname)>0) ? ' ' : '/', virt_dirname, cgiScriptName, "1234", ICONSURL, FAVICON, cgiScriptName);
+ "<FORM ACTION=\"%s\" METHOD=\"POST\" ENCTYPE=\"multipart/form-data\" %s>\n",
+ ICONSURL, FAVICON, cgiScriptName, (js) ? "onsubmit=\"start()\"" : "");
@@ -172,10 +179,10 @@ void dirlist(void) {
"<!-- TITLE --> \n"
"<TABLE WIDTH=\"100%%\" BGCOLOR=\"#FFFFFF\" CELLPADDING=\"0\" CELLSPACING=\"0\" BORDER=\"0\" STYLE=\"height:28px;\">\n"
"<TR>\n"
- "<TD WIDTH=\"100%%\" BGCOLOR=\"#0072c6\" VALIGN=\"MIDDLE\" ALIGN=\"LEFT\" STYLE=\"color:#FFFFFF; font-weight:bold;\">\n"
+ "<TD NOWRAP WIDTH=\"100%%\" BGCOLOR=\"#0072c6\" VALIGN=\"MIDDLE\" ALIGN=\"LEFT\" STYLE=\"color:#FFFFFF; font-weight:bold;\">\n"
"&nbsp;<IMG SRC=\"%s%s\" ALIGN=\"MIDDLE\" ALT=\"WFM\">\n"
"%s : %c%s \n"
- "<TD BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"RIGHT\" STYLE=\"color:#000000; font-weight:bold; white-space:nowrap\">\n"
+ "<TD NOWRAP BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"RIGHT\" STYLE=\"color:#000000; font-weight:bold; white-space:nowrap\">\n"
,
ICONSURL, FAVICON, TAGLINE, (strlen(virt_dirname)>0) ? ' ' : '/', virt_dirname
);
@@ -184,7 +191,7 @@ void dirlist(void) {
// lock / unlock
if(!access_as_user && users_defined)
fprintf(cgiOut,
- "<A HREF=\"%s?action=login&amp;directory=%s\">"\
+ "<A HREF=\"%s?action=login&amp;directory=%s\">"
"&nbsp;<IMG SRC=\"%s%s.gif\" ALIGN=\"MIDDLE\" BORDER=\"0\" ALT=\"Access\"></A>&nbsp;%s\n",
cgiScriptName, virt_dirname, ICONSURL, access_string[access_level], access_string[access_level]);
else
@@ -195,9 +202,9 @@ void dirlist(void) {
// about / version
fprintf(cgiOut,
- "</TD><TD BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"RIGHT\" STYLE=\"color:#000000; font-weight:bold; white-space:nowrap\">"
- "&nbsp;<IMG SRC=\"%snet.gif\" ALIGN=\"MIDDLE\" ALT=\"Client IP\">&nbsp;%s&nbsp;</TD>"
- "<TD BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"RIGHT\" STYLE=\"color:#000000; font-weight:bold; white-space:nowrap\">"
+ //"</TD><TD NOWRAP BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"RIGHT\" STYLE=\"color:#000000; font-weight:bold; white-space:nowrap\">"
+ "&nbsp;<IMG SRC=\"%snet.gif\" ALIGN=\"MIDDLE\" ALT=\"Client IP\">&nbsp;%s&nbsp;"//</TD>"
+ //"<TD NOWRAP BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"RIGHT\" STYLE=\"color:#000000; font-weight:bold; white-space:nowrap\">"
"<A HREF=\"%s?action=about&amp;directory=%s&amp;token=%s\"><IMG BORDER=\"0\" SRC=\"%sver.gif\" ALIGN=\"MIDDLE\" ALT=\"Version\"></A>&nbsp;v%s&nbsp;"
"</TD>\n"\
"</TR>\n"\
@@ -215,7 +222,7 @@ void dirlist(void) {
"<TABLE WIDTH=\"100%%\" BGCOLOR=\"#FFFFFF\" CELLPADDING=\"0\" CELLSPACING=\"0\" BORDER=\"0\" STYLE=\"height:28px;\">\n"\
"<TR>\n"\
"<!-- DIR-UP -->\n"\
- "<TD BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"CENTER\">\n"\
+ "<TD NOWRAP BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"CENTER\">\n"\
"<A HREF=\"%s?sortby=%s&amp;directory=%s&amp;token=%s\">\n"\
"<IMG SRC=\"%sdir_up.gif\" BORDER=0 ALIGN=\"MIDDLE\" WIDTH=\"16\" HEIGHT=\"16\" ALT=\"Dir Up\">&nbsp;Up\n"\
"</A>\n"\
@@ -224,7 +231,7 @@ void dirlist(void) {
fprintf(cgiOut,
"<!-- HOME -->\n"\
- "<TD BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"CENTER\">\n"\
+ "<TD NOWRAP BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"CENTER\">\n"\
"<A HREF=\"%s?sortby=%s&amp;directory=/&amp;token=%s\">\n"\
"<IMG SRC=\"%shome.gif\" BORDER=0 ALIGN=\"MIDDLE\" WIDTH=\"16\" HEIGHT=\"16\" ALT=\"Home\">&nbsp;Home\n"\
"</A>\n"\
@@ -233,7 +240,7 @@ void dirlist(void) {
fprintf(cgiOut,
"<!-- RELOAD -->\n"\
- "<TD BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"CENTER\">\n"\
+ "<TD NOWRAP BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"CENTER\">\n"\
"<A HREF=\"%s?sortby=%s&amp;directory=%s&amp;token=%s\">\n"\
"<IMG SRC=\"%sreload.gif\" BORDER=0 ALIGN=\"MIDDLE\" ALT=\"Reload\">&nbsp;Refresh\n"\
"</A>\n"\
@@ -242,23 +249,23 @@ void dirlist(void) {
fprintf(cgiOut,
"<!-- MULTI DELETE -->\n"\
- "<TD BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"CENTER\">\n"\
+ "<TD NOWRAP BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"CENTER\">\n"\
"<INPUT TYPE=\"IMAGE\" SRC=\"%sdelete.gif\" STYLE=\"border: none; padding: 0px; vertical-align:middle;\" ALT=\"Delete\" ALIGN=\"MIDDLE\" NAME=\"multi_delete_prompt\" VALUE=\"Delete\">\n"
- "<INPUT TYPE=\"SUBMIT\" CLASS=\"hovout\" NAME=\"multi_delete_prompt\" VALUE=\"Delete\" onMouseOver=\"this.className='hovin';\" onMouseOut=\"this.className='hovout';\">\n"
+ "<INPUT TYPE=\"SUBMIT\" CLASS=\"hovout\" NAME=\"multi_delete_prompt\" VALUE=\"Delete\" %s>\n"
"</TD>\n",
- ICONSURL);
+ ICONSURL, (js) ? "onMouseOver=\"this.className='hovin';\" onMouseOut=\"this.className='hovout';\"" : "");
fprintf(cgiOut,
"<!-- MULTI MOVE -->\n"\
- "<TD BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"CENTER\">\n"\
+ "<TD NOWRAP BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"CENTER\">\n"\
"<INPUT TYPE=\"IMAGE\" SRC=\"%smove.gif\" STYLE=\"border: none; padding: 0px; vertical-align:middle; \" ALT=\"Move\" ALIGN=\"MIDDLE\" NAME=\"multi_move_prompt\" VALUE=\"Move\">\n"
- "<INPUT TYPE=\"SUBMIT\" CLASS=\"hovout\" NAME=\"multi_move_prompt\" VALUE=\"Move\" onMouseOver=\"this.className='hovin';\" onMouseOut=\"this.className='hovout';\">\n"
+ "<INPUT TYPE=\"SUBMIT\" CLASS=\"hovout\" NAME=\"multi_move_prompt\" VALUE=\"Move\" %s>\n"
"</TD>\n",
- ICONSURL);
+ ICONSURL, (js) ? "onMouseOver=\"this.className='hovin';\" onMouseOut=\"this.className='hovout';\"" : "");
fprintf(cgiOut,
"<!-- NEWDIR -->\n"\
- "<TD BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"CENTER\">\n"\
+ "<TD NOWRAP BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"CENTER\">\n"\
"<A HREF=\"%s?action=mkdir_prompt&amp;directory=%s&amp;token=%s\" >\n"\
"<IMG SRC=\"%smkdir.gif\" BORDER=0 ALIGN=\"MIDDLE\" ALT=\"New Folder\">&nbsp;New Folder\n"\
"</A>\n"\
@@ -268,7 +275,7 @@ void dirlist(void) {
fprintf(cgiOut,
"<!-- NEWFILE -->\n"\
- "<TD BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"CENTER\">\n"\
+ "<TD NOWRAP BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"CENTER\">\n"\
"<A HREF=\"%s?action=mkfile_prompt&amp;directory=%s&amp;token=%s\" >\n"\
"<IMG SRC=\"%smkfile.gif\" BORDER=0 ALIGN=\"MIDDLE\" ALT=\"New File\">&nbsp;New File\n"\
"</A>\n"\
@@ -279,7 +286,7 @@ void dirlist(void) {
fprintf(cgiOut,
"<!-- UPLOAD -->\n"\
- "<TD BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"CENTER\">\n"
+ "<TD NOWRAP BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"CENTER\">\n"
"<INPUT TYPE=\"hidden\" NAME=\"directory\" VALUE=\"%s\">\n"
"<INPUT TYPE=\"hidden\" NAME=\"token\" VALUE=\"%s\">\n"
"<INPUT TYPE=\"hidden\" NAME=\"upload_id\" VALUE=\"%s\">\n"
@@ -326,34 +333,38 @@ void dirlist(void) {
// SORTBY ROW + dir files display
fprintf(cgiOut,
- "<!-- MAIN FILE TABLE --> \n"\
- "<TABLE WIDTH=\"100%%\" BGCOLOR=\"#FFFFFF\" CELLPADDING=0 CELLSPACING=0 BORDER=0 >\n"\
- "<!-- SORTBY LINE -->\n"\
- "<TR BGCOLOR=\"#FFFFFF\" >\n"\
- "<TD ALIGN=\"left\" WIDTH=\"50%%\" BGCOLOR=\"#A0A0A0\">\n"\
- "<FONT COLOR=\"#FFFFFF\">\n"\
- "<INPUT TYPE=\"CHECKBOX\" NAME=\"CHECKALL\" STYLE=\"padding: 0px; border: none;\" ONCLICK=\"checkUncheckAll(this, multiselect_filename);\">\n"
- "%s\n"\
- "</FONT>\n"\
- "</TD>\n"\
- "<TD ALIGN=\"right\" BGCOLOR=\"#A0A0A0\">\n"\
- "<FONT COLOR=\"#FFFFFF\">\n"\
- "%s\n"\
- "</FONT>\n"\
- "</TD>\n"\
- "<TD ALIGN=\"right\" BGCOLOR=\"#A0A0A0\">\n"\
- "<FONT COLOR=\"#FFFFFF\">\n"\
- "%s\n"\
- "</FONT>\n"\
- "</TD>\n"\
- "<TD ALIGN=\"right\" BGCOLOR=\"#A0A0A0\">\n"\
- "&nbsp;"\
- "</TD>"\
- "<TD ALIGN=\"left\" BGCOLOR=\"#A0A0A0\">\n"\
- "<FONT COLOR=\"#FFFFFF\">\n"\
- "&nbsp;\n"\
- "</FONT>\n"\
- "</TD>\n"\
+ "<!-- MAIN FILE TABLE --> \n"
+ "<TABLE WIDTH=\"100%%\" BGCOLOR=\"#FFFFFF\" CELLPADDING=0 CELLSPACING=0 BORDER=0>\n"
+ "<!-- SORTBY LINE -->\n"
+ "<TR BGCOLOR=\"#FFFFFF\" >\n"
+ "<TD NOWRAP ALIGN=\"left\" WIDTH=\"50%%\" BGCOLOR=\"#A0A0A0\">\n"
+ "<FONT COLOR=\"#FFFFFF\">\n");
+
+ if(js) fprintf(cgiOut,
+ "<INPUT TYPE=\"CHECKBOX\" NAME=\"CHECKALL\" STYLE=\"padding: 0px; border: none;\" ONCLICK=\"checkUncheckAll(this, multiselect_filename);\">\n");
+
+ fprintf(cgiOut,
+ "%s\n"
+ "</FONT>\n"
+ "</TD>\n"
+ "<TD NOWRAP ALIGN=\"right\" BGCOLOR=\"#A0A0A0\">\n"
+ "<FONT COLOR=\"#FFFFFF\">\n"
+ "%s\n"
+ "</FONT>\n"
+ "</TD>\n"
+ "<TD NOWRAP ALIGN=\"right\" BGCOLOR=\"#A0A0A0\">\n"
+ "<FONT COLOR=\"#FFFFFF\">\n"
+ "%s\n"
+ "</FONT>\n"
+ "</TD>\n"
+ "<TD NOWRAP ALIGN=\"right\" BGCOLOR=\"#A0A0A0\">\n"
+ "&nbsp;"
+ "</TD>"
+ "<TD NOWRAP ALIGN=\"left\" BGCOLOR=\"#A0A0A0\">\n"
+ "<FONT COLOR=\"#FFFFFF\">\n"
+ "&nbsp;\n"
+ "</FONT>\n"
+ "</TD>\n"
"</TR>\n"
"<!-- End of Header -->\n\n",
namepfx, sizepfx, datepfx);
@@ -401,18 +412,23 @@ void dirlist(void) {
// directory name / date
fprintf(cgiOut,
- "<!-- Directory Entry -->\n"\
- "<TR BGCOLOR=\"#%s\" onMouseOver=\"this.bgColor='#%s';\" onMouseOut=\"this.bgColor='#%s';\">\n"\
- "<TD ALIGN=\"LEFT\">\n"
+ "<!-- Directory Entry -->\n");
+
+ if(js) fprintf(cgiOut,
+ "<TR BGCOLOR=\"#%s\" onMouseOver=\"this.bgColor='#%s';\" onMouseOut=\"this.bgColor='#%s';\">\n",
+ linecolor, HL_COLOR, linecolor);
+
+ fprintf(cgiOut,
+ "<TD NOWRAP ALIGN=\"LEFT\">\n"
"<INPUT TYPE=\"CHECKBOX\" NAME=\"multiselect_filename\" STYLE=\"border: none;\" VALUE=\"%s\">",
- linecolor, HL_COLOR, linecolor, name);
+ name);
fprintf(cgiOut,
"<A HREF=\"%s?sortby=%s&amp;directory=%s/%s&amp;token=%s\">%s %s</A></TD> \n"\
- "<TD ALIGN=\"RIGHT\">%s</TD>\n"\
- "<TD ALIGN=\"RIGHT\"><SPAN TITLE=\"Created:%s\n Modified:%s\n Accessed:%s\n\">%s&nbsp;%s</FONT></SPAN></TD>\n"\
- "<TD>&nbsp;</TD>"\
- "<TD ALIGN=\"LEFT\">",
+ "<TD NOWRAP ALIGN=\"RIGHT\">%s</TD>\n"\
+ "<TD NOWRAP ALIGN=\"RIGHT\"><SPAN TITLE=\"Created:%s\n Modified:%s\n Accessed:%s\n\">%s&nbsp;%s</FONT></SPAN></TD>\n"\
+ "<TD NOWRAP >&nbsp;</TD>"\
+ "<TD NOWRAP ALIGN=\"LEFT\">",
cgiScriptName, sortby, (strcmp(virt_dirname, "/")==0) ? "" : virt_dirname, name, token, icon, name,
buprintf(size, TRUE), rtime, mtime, atime, stime, mtime);
@@ -489,24 +505,28 @@ void dirlist(void) {
// filename
fprintf(cgiOut,
- "<!-- File Entry -->\n"
- "<TR BGCOLOR=\"#%s\" onMouseOver=\"this.bgColor='#%s';\" onMouseOut=\"this.bgColor='#%s';\">\n"
- "<TD ALIGN=\"LEFT\"><INPUT TYPE=\"CHECKBOX\" NAME=\"multiselect_filename\" STYLE=\"border: none;\" VALUE=\"%s\">"
+ "<!-- File Entry -->\n");
+
+ if(js) fprintf(cgiOut,
+ "<TR BGCOLOR=\"#%s\" onMouseOver=\"this.bgColor='#%s';\" onMouseOut=\"this.bgColor='#%s';\">\n",
+ linecolor, HL_COLOR, linecolor);
+
+ fprintf(cgiOut,
+ "<TD NOWRAP ALIGN=\"LEFT\"><INPUT TYPE=\"CHECKBOX\" NAME=\"multiselect_filename\" STYLE=\"border: none;\" VALUE=\"%s\">"
"<A HREF=\"%s?action=%s&amp;directory=%s&amp;filename=%s&amp;token=%s\" TITLE=\"Open '%s'\">%s %s</A></TD>\n",
- linecolor, HL_COLOR, linecolor, name, cgiScriptName, (edit_by_default && editable) ? "edit" : "sendfile",
- virt_dirname, name, token, name, icon, name);
+ name, cgiScriptName, (edit_by_default && editable) ? "edit" : "sendfile", virt_dirname, name, token, name, icon, name);
// size / date
fprintf(cgiOut,
"\n"
- "<TD ALIGN=\"RIGHT\" >%s</TD>\n"
- "<TD ALIGN=\"RIGHT\" ><SPAN TITLE=\"Created:%s\n Modified:%s\n Accessed:%s\n\">%s&nbsp;%s</FONT></SPAN></TD>\n",
+ "<TD NOWRAP ALIGN=\"RIGHT\" >%s</TD>\n"
+ "<TD NOWRAP ALIGN=\"RIGHT\" ><SPAN TITLE=\"Created:%s\n Modified:%s\n Accessed:%s\n\">%s&nbsp;%s</FONT></SPAN></TD>\n",
buprintf(size, TRUE), rtime, mtime, atime, stime, mtime);
// file tools
- fprintf(cgiOut, "\n<TD>&nbsp;</TD><TD ALIGN=\"LEFT\">\n");
+ fprintf(cgiOut, "\n<TD NOWRAP >&nbsp;</TD><TD NOWRAP ALIGN=\"LEFT\">\n");
// rename
@@ -586,11 +606,11 @@ void dirlist(void) {
fprintf(cgiOut,
"<!-- FOOTER -->\n"
"<TR>\n"
- "<TD BGCOLOR=\"#%s\">&nbsp;</TD>\n"
- "<TD BGCOLOR=\"#%s\" ALIGN=\"right\" STYLE=\"border-top:1px solid grey\">total %s </TD>\n"
- "<TD BGCOLOR=\"#%s\" ALIGN=\"right\" STYLE=\"color:#D0D0D0;\">%.1f ms</TD>\n"
- "<TD BGCOLOR=\"#%s\">&nbsp;</TD>\n"
- "<TD BGCOLOR=\"#%s\">&nbsp;</TD>\n"
+ "<TD NOWRAP BGCOLOR=\"#%s\">&nbsp;</TD>\n"
+ "<TD NOWRAP BGCOLOR=\"#%s\" ALIGN=\"right\" STYLE=\"border-top:1px solid grey\">total %s </TD>\n"
+ "<TD NOWRAP BGCOLOR=\"#%s\" ALIGN=\"right\" STYLE=\"color:#D0D0D0;\">%.1f ms</TD>\n"
+ "<TD NOWRAP BGCOLOR=\"#%s\">&nbsp;</TD>\n"
+ "<TD NOWRAP BGCOLOR=\"#%s\">&nbsp;</TD>\n"
"</TR>\n"
"</TABLE>\n</FORM>\n</BODY>\n<!-- Page generated in %f seconds -->\n</HTML>\n\n",
NORMAL_COLOR, NORMAL_COLOR, buprintf(totalsize, TRUE), NORMAL_COLOR, (t2-t1)*1000, NORMAL_COLOR, NORMAL_COLOR, t2-t1
diff --git a/fileio.c b/fileio.c
index c9d0380..01086f5 100644
--- a/fileio.c
+++ b/fileio.c
@@ -72,7 +72,7 @@ void receivefile(void) {
if(buff==NULL)
error("Unable to allocate memory.");
- // TODO: check for freeze - return value?
+ // TODO: holly crap this needs to be in a loop with a fixed buffer size similar to sendfile()
if(cgiFormFileRead(input, buff, size, &got) != cgiFormSuccess)
error("Reading file.");
@@ -93,7 +93,7 @@ void receivefile(void) {
fclose(output);
free(buff);
- redirect("?highlight=%s&directory=%s&token=%s", virt_filename, virt_dirname, token);
+ redirect("%s?highlight=%s&directory=%s&token=%s", cgiScriptName, virt_filename, virt_dirname, token);
}
@@ -106,14 +106,14 @@ void mkfile(void) {
checkfilename(NULL);
- output=fopen(phys_filename, "a");
+ output=fopen(phys_filename, "a"); //TODO: should probably give error if file already exists...
if(!output)
error("Unable to create file.<BR>%s", strerror(errno));
fclose(output);
- redirect("?highlight=%s&directory=%s&token=%s", virt_filename, virt_dirname, token);
+ redirect("%s?highlight=%s&directory=%s&token=%s", cgiScriptName, virt_filename, virt_dirname, token);
}
@@ -128,7 +128,7 @@ void newdir(void) {
if(mkdir(phys_filename, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH )!=0)
error("Unable to create directory.<BR>%s", strerror(errno));
- redirect("?highlight=%s&directory=%s&token=%s", virt_filename, virt_dirname, token);
+ redirect("%s?highlight=%s&directory=%s&token=%s", cgiScriptName, virt_filename, virt_dirname, token);
}
@@ -154,9 +154,10 @@ void edit_save(void) {
// the size should be updated by onclick from content.value.lenght just before submission
// it's used to verify that received data length is consistent with editor contents
- cgiFormInteger("size", &size, 0);
+ //cgiFormInteger("size", &size, 0);
+ cgiFormStringSpaceNeeded("content", &size);
- if(size>100*1024*1024)
+ if(size>5*1024*1024)
error("Input size too large.");
buff=(char *) malloc(size);
@@ -167,8 +168,8 @@ void edit_save(void) {
cgiFormString("content", buff, size);
- if(strlen(buff)+1 != size) // +1 because size was also given +1 via front end
- error("Received wrong size. <BR>ContentLen=%d DataLen=%d. <BR> The file was not changed.", size, strlen(buff));
+ //if(strlen(buff) != size) // +1 because size was also given +1 via front end
+ // error("Received wrong size. <BR>ContentLen=%d DataLen=%d. <BR> The file was not changed.", size, strlen(buff));
// rename to .bak if requested
cgiFormStringNoNewlines("backup", backup, sizeof(backup));
@@ -219,7 +220,7 @@ void edit_save(void) {
free(buff);
- redirect("?highlight=%s&directory=%s&token=%s", virt_filename, virt_dirname, token);
+ redirect("%s?highlight=%s&directory=%s&token=%s", cgiScriptName, virt_filename, virt_dirname, token);
}
@@ -305,7 +306,7 @@ void delete(void) {
}
}
- redirect("?directory=%s&token=%s", virt_dirname, token);
+ redirect("%s?directory=%s&token=%s", cgiScriptName, virt_dirname, token);
}
@@ -351,7 +352,7 @@ void move(void) {
}
}
- redirect("?highlight=%s&directory=%s&token=%s", virt_destination, virt_dirname, token);
+ redirect("%s?highlight=%s&directory=%s&token=%s", cgiScriptName, virt_destination, virt_dirname, token);
}
@@ -424,7 +425,7 @@ void re_dir_ui(char *vdir, int level) {
for (n=0; n<(level-1); n++)
fprintf(cgiOut, "&nbsp;&nbsp;&nbsp;");
- fprintf(cgiOut, "&lfloor;&nbsp;%s</OPTION>\n", direntry[e]->d_name);
+ fprintf(cgiOut, "%s&nbsp;%s</OPTION>\n", (js) ? "&lfloor;" : "-", direntry[e]->d_name);
// recurse
re_dir_ui(child,level+1);
diff --git a/wfm.c b/wfm.c
index 526278f..ece08cd 100644
--- a/wfm.c
+++ b/wfm.c
@@ -38,24 +38,29 @@ int icon(void) {
void upload_status(void) {
int shm_key=-1;
int shm_id=-1;
- char *shm_addr=NULL;
+ char *shm_val=NULL;
+ time_t t;
+ char *spin[]={"|", "/", "--", "\\"};
if(cgiFormInteger("upload_id", &shm_key, 0) == cgiFormSuccess && shm_key) {
shm_id = shmget(shm_key, SHM_SIZE, 0666);
if(shm_id >= 0)
- shm_addr = shmat(shm_id, NULL, 0);
+ shm_val = shmat(shm_id, NULL, 0);
}
fprintf(cgiOut, "Cache-Control: no-cache\r\n");
cgiHeaderContentType("text/plain");
- if(shm_addr)
- fprintf(cgiOut, "%s\r\n", shm_addr);
- else
- fprintf(cgiOut, "-----\r\n");
+ if(shm_val) {
+ fprintf(cgiOut, "=%s=\r\n", shm_val);
+ }
+ else {
+ time(&t);
+ fprintf(cgiOut, "=%s=\r\n", spin[(int)t % 4]);
+ }
- if (shm_addr)
- shmdt(shm_addr);
+ if (shm_val)
+ shmdt(shm_val);
exit(0);
}
@@ -98,7 +103,7 @@ void login(void) {
if(strlen(username)) {
snprintf(token_inp, sizeof(token_inp), "%s:%s:%s", cgiRemoteAddr, username, password);
- redirect("?directory=%s&login=server&token=%s", virt_dirname, mktoken(token_inp)); // generate MD5 as if it was the client
+ redirect("%s?directory=%s&login=server&token=%s", cgiScriptName, virt_dirname, mktoken(token_inp)); // generate MD5 as if it was the client
}
else
login_ui(); // display actual login page, which normally generates token in JavaScript
@@ -160,7 +165,7 @@ void access_check(char *access_string) {
//
// Check filename
-// Should be used by every function that uses filename
+// Should be called by every function that uses filename
//
void checkfilename(char *inp_filename) {
char temp_dirname[PHYS_FILENAME_SIZE];
@@ -371,7 +376,7 @@ int cgiMain(void) {
char c_du[]="recursive-du=true";
char c_access[]="access";
- // early action - simple actions before cfg is read or access check performed
+ // early action - simple actions before cfg is read or access check performed (no security!)
cgiFormStringNoNewlines("ea", ea, sizeof(ea));
if(strcmp(ea, "icon")==0) icon();
if(strcmp(ea, "upstat")==0) upload_status();
@@ -387,7 +392,7 @@ int cgiMain(void) {
snprintf(ICONSURL, sizeof(ICONSURL), "%s?ea=icon&amp;name=", cgiScriptName);
- // read config file and authenticate
+ // config file defaults
access_level=PERM_NO; // no access by default
access_as_user=0;
users_defined=0;
@@ -400,6 +405,7 @@ int cgiMain(void) {
memset(TAGLINE, 0, sizeof(TAGLINE));
memset(FAVICON, 0, sizeof(FAVICON));
+ // process config file
cgiFormStringNoNewlines("token", token, sizeof(token));
snprintf(cfgname, sizeof(cfgname), "%s.cfg", basename(cgiScriptName));
cfgfile=fopen(cfgname, "r");
@@ -437,29 +443,38 @@ int cgiMain(void) {
checkdirectory();
+ // JavaScript check
+ if(strncmp(cgiUserAgent, "Mozilla/5.0", 11)==0)
+ js=1;
+ else
+ js=0;
+
// main routine - regular actions
cgiFormStringNoNewlines("action", action, sizeof(action));
- if(cgiFormSubmitClicked("multi_delete_prompt")==cgiFormSuccess && access_level >= PERM_RO) multiprompt_ui("delete");
- else if(cgiFormSubmitClicked("multi_move_prompt")==cgiFormSuccess && access_level >= PERM_RO) multiprompt_ui("move");
- else if(cgiFormSubmitClicked("upload")==cgiFormSuccess && access_level >= PERM_RW) receivefile();
- else if(strcmp(action, "sendfile")==0 && access_level >= PERM_RO) sendfile();
- else if(strcmp(action, "delete")==0 && access_level >= PERM_RW) delete();
- else if(strcmp(action, "delete_prompt")==0 && access_level >= PERM_RW) multiprompt_ui("delete");
- else if(strcmp(action, "move_prompt")==0 && access_level >= PERM_RW) multiprompt_ui("move");
- else if(strcmp(action, "rename_prompt")==0 && access_level >= PERM_RW) singleprompt_ui("move");
- else if(strcmp(action, "move")==0 && access_level >= PERM_RW) move();
- else if(strcmp(action, "edit")==0 && access_level >= PERM_RO) edit_ui();
- else if(strcmp(action, "edit_save")==0 && access_level >= PERM_RW) edit_save();
- else if(strcmp(action, "mkfile")==0 && access_level >= PERM_RW) mkfile();
- else if(strcmp(action, "mkfile_prompt")==0 && access_level >= PERM_RW) singleprompt_ui("mkfile");
- else if(strcmp(action, "mkdir")==0 && access_level >= PERM_RW) newdir();
- else if(strcmp(action, "mkdir_prompt")==0 && access_level >= PERM_RW) singleprompt_ui("mkdir");
- else if(strcmp(action, "about")==0 && access_level >= PERM_RO) about();
- else if(strcmp(action, "login")==0 ) login();
- else if( access_level >= PERM_RO) dirlist();
+ if(cgiFormSubmitClicked("noop")==cgiFormSuccess && access_level >= PERM_RO) dirlist();
+ else if(cgiFormSubmitClicked("multi_delete_prompt")==cgiFormSuccess && access_level >= PERM_RO) multiprompt_ui("delete");
+ else if(cgiFormSubmitClicked("multi_delete_prompt.x")==cgiFormSuccess && access_level >= PERM_RO) multiprompt_ui("delete");
+ else if(cgiFormSubmitClicked("multi_move_prompt")==cgiFormSuccess && access_level >= PERM_RO) multiprompt_ui("move");
+ else if(cgiFormSubmitClicked("multi_move_prompt.x")==cgiFormSuccess && access_level >= PERM_RO) multiprompt_ui("move");
+ else if(cgiFormSubmitClicked("upload")==cgiFormSuccess && access_level >= PERM_RW) receivefile();
+ else if(strcmp(action, "sendfile")==0 && access_level >= PERM_RO) sendfile();
+ else if(strcmp(action, "delete")==0 && access_level >= PERM_RW) delete();
+ else if(strcmp(action, "delete_prompt")==0 && access_level >= PERM_RW) multiprompt_ui("delete");
+ else if(strcmp(action, "move_prompt")==0 && access_level >= PERM_RW) multiprompt_ui("move");
+ else if(strcmp(action, "rename_prompt")==0 && access_level >= PERM_RW) singleprompt_ui("move");
+ else if(strcmp(action, "move")==0 && access_level >= PERM_RW) move();
+ else if(strcmp(action, "edit")==0 && access_level >= PERM_RO) edit_ui();
+ else if(strcmp(action, "edit_save")==0 && access_level >= PERM_RW) edit_save();
+ else if(strcmp(action, "mkfile")==0 && access_level >= PERM_RW) mkfile();
+ else if(strcmp(action, "mkfile_prompt")==0 && access_level >= PERM_RW) singleprompt_ui("mkfile");
+ else if(strcmp(action, "mkdir")==0 && access_level >= PERM_RW) newdir();
+ else if(strcmp(action, "mkdir_prompt")==0 && access_level >= PERM_RW) singleprompt_ui("mkdir");
+ else if(strcmp(action, "about")==0 && access_level >= PERM_RO) about();
+ else if(strcmp(action, "login")==0 ) login();
+ else if( access_level >= PERM_RO) dirlist();
else
if(users_defined) // if users present but supplied credentials didn't match, or credentials not specified
- redirect("?action=login");
+ redirect("%s?action=login", cgiScriptName);
else
error("Access Denied.");
diff --git a/wfm.h b/wfm.h
index 3d95051..208a9ef 100644
--- a/wfm.h
+++ b/wfm.h
@@ -100,6 +100,8 @@ int edit_by_default;
int edit_any_file;
int recursive_du;
+int js;
+
double t1, t2;
struct timeval mt;