diff options
author | tenox <as@tenoware.com> | 2016-08-21 00:55:07 -0700 |
---|---|---|
committer | tenox <as@tenoware.com> | 2016-08-21 00:55:07 -0700 |
commit | d7cbff722b4b12e2017802543a4f8936386b2744 (patch) | |
tree | b18aae24a02ef606ef0cd5fc545f4d9094c9dbe6 | |
parent | 3a39aee0e25f1e8f9e7b93de96981ec292edcdf4 (diff) | |
download | wfm-d7cbff722b4b12e2017802543a4f8936386b2744.tar.gz |
JavaScript dependency fixes
-rw-r--r-- | dialogs.c | 100 | ||||
-rw-r--r-- | dir.c | 222 | ||||
-rw-r--r-- | fileio.c | 27 | ||||
-rw-r--r-- | wfm.c | 77 | ||||
-rw-r--r-- | wfm.h | 2 |
5 files changed, 248 insertions, 180 deletions
@@ -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&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\"> %s</FONT></TD></TR>\n" " <TR><TD WIDTH=30> </TD><TD>\n" - " <BR>\n", cgiScriptName, M_action); + " <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&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&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\"> </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" " <P>\n" " <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&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\"> </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\"> Authentication Required</FONT></TD></TR>\n" " <TR><TD WIDTH=30> </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&login=client&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&login=client&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;\"> \n" - "<INPUT TYPE=\"BUTTON\" VALUE=\"Cancel\" onClick=\"self.location='?directory=%s&token=%s'; return true;\">\n" + "<INPUT TYPE=\"SUBMIT\" VALUE=\"Save\" >\n"//onClick=\"document.EDITOR.size.value=document.EDITOR.content.value.length+1; return true;\"> \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); @@ -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" " <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&directory=%s\">"\ + "<A HREF=\"%s?action=login&directory=%s\">" " <IMG SRC=\"%s%s.gif\" ALIGN=\"MIDDLE\" BORDER=\"0\" ALT=\"Access\"></A> %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\">" - " <IMG SRC=\"%snet.gif\" ALIGN=\"MIDDLE\" ALT=\"Client IP\"> %s </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\">" + " <IMG SRC=\"%snet.gif\" ALIGN=\"MIDDLE\" ALT=\"Client IP\"> %s "//</TD>" + //"<TD NOWRAP BGCOLOR=\"#F1F1F1\" VALIGN=\"MIDDLE\" ALIGN=\"RIGHT\" STYLE=\"color:#000000; font-weight:bold; white-space:nowrap\">" "<A HREF=\"%s?action=about&directory=%s&token=%s\"><IMG BORDER=\"0\" SRC=\"%sver.gif\" ALIGN=\"MIDDLE\" ALT=\"Version\"></A> v%s " "</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&directory=%s&token=%s\">\n"\ "<IMG SRC=\"%sdir_up.gif\" BORDER=0 ALIGN=\"MIDDLE\" WIDTH=\"16\" HEIGHT=\"16\" ALT=\"Dir Up\"> 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&directory=/&token=%s\">\n"\ "<IMG SRC=\"%shome.gif\" BORDER=0 ALIGN=\"MIDDLE\" WIDTH=\"16\" HEIGHT=\"16\" ALT=\"Home\"> 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&directory=%s&token=%s\">\n"\ "<IMG SRC=\"%sreload.gif\" BORDER=0 ALIGN=\"MIDDLE\" ALT=\"Reload\"> 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&directory=%s&token=%s\" >\n"\ "<IMG SRC=\"%smkdir.gif\" BORDER=0 ALIGN=\"MIDDLE\" ALT=\"New Folder\"> 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&directory=%s&token=%s\" >\n"\ "<IMG SRC=\"%smkfile.gif\" BORDER=0 ALIGN=\"MIDDLE\" ALT=\"New File\"> 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"\ - " "\ - "</TD>"\ - "<TD ALIGN=\"left\" BGCOLOR=\"#A0A0A0\">\n"\ - "<FONT COLOR=\"#FFFFFF\">\n"\ - " \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" + " " + "</TD>" + "<TD NOWRAP ALIGN=\"left\" BGCOLOR=\"#A0A0A0\">\n" + "<FONT COLOR=\"#FFFFFF\">\n" + " \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&directory=%s/%s&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 %s</FONT></SPAN></TD>\n"\ - "<TD> </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 %s</FONT></SPAN></TD>\n"\ + "<TD NOWRAP > </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&directory=%s&filename=%s&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 %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 %s</FONT></SPAN></TD>\n", buprintf(size, TRUE), rtime, mtime, atime, stime, mtime); // file tools - fprintf(cgiOut, "\n<TD> </TD><TD ALIGN=\"LEFT\">\n"); + fprintf(cgiOut, "\n<TD NOWRAP > </TD><TD NOWRAP ALIGN=\"LEFT\">\n"); // rename @@ -586,11 +606,11 @@ void dirlist(void) { fprintf(cgiOut, "<!-- FOOTER -->\n" "<TR>\n" - "<TD BGCOLOR=\"#%s\"> </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\"> </TD>\n" - "<TD BGCOLOR=\"#%s\"> </TD>\n" + "<TD NOWRAP BGCOLOR=\"#%s\"> </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\"> </TD>\n" + "<TD NOWRAP BGCOLOR=\"#%s\"> </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 @@ -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, " "); - fprintf(cgiOut, "⌊ %s</OPTION>\n", direntry[e]->d_name); + fprintf(cgiOut, "%s %s</OPTION>\n", (js) ? "⌊" : "-", direntry[e]->d_name); // recurse re_dir_ui(child,level+1); @@ -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&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."); @@ -100,6 +100,8 @@ int edit_by_default; int edit_any_file; int recursive_du; +int js; + double t1, t2; struct timeval mt; |