⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 proxy_ftp.c

📁 最新apache的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/* Copyright 1999-2005 The Apache Software Foundation or its licensors, as * applicable. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//* FTP routines for Apache proxy */#include "mod_proxy.h"#if APR_HAVE_TIME_H#include <time.h>#endif#define AUTODETECT_PWD/* Automatic timestamping (Last-Modified header) based on MDTM is used if: * 1) the FTP server supports the MDTM command and * 2) HAVE_TIMEGM (preferred) or HAVE_GMTOFF is available at compile time */#define USE_MDTMmodule AP_MODULE_DECLARE_DATA proxy_ftp_module;int ap_proxy_ftp_canon(request_rec *r, char *url);int ap_proxy_ftp_handler(request_rec *r, proxy_server_conf *conf,                             char *url, const char *proxyhost,                             apr_port_t proxyport);apr_status_t ap_proxy_send_dir_filter(ap_filter_t * f,                                                   apr_bucket_brigade *bb);static intproxy_ftp_command(const char *cmd, request_rec *r, conn_rec *ftp_ctrl,                  apr_bucket_brigade *bb, char **pmessage);static int ftp_set_TYPE(char xfer_type, request_rec *r, conn_rec *ftp_ctrl,                  apr_bucket_brigade *bb, char **pmessage);/*huanglin-20060303-add-begin*/#define FTP_MAKE_FOLDER 1#define FTP_DELETE_FILE   2#define FTP_RENAME_FILE  3#define FTP_UPLOAD_FILE  4/*huanglin-20060303-add-end*//*huanglin-20060301-add-begin*/void ap_proxy_create_ftp_html_style(char *style){      if(style==NULL)	  return;      sprintf(style+strlen(style),"  <STYLE type=text/css>\n");      sprintf(style+strlen(style),"   A:link { COLOR: #666633; TEXT-DECORATION: none}\n");      sprintf(style+strlen(style),"   A:visited { COLOR: #666633; TEXT-DECORATION: none}\n");      sprintf(style+strlen(style),"   A:active { COLOR: #666633; TEXT-DECORATION: none}\n");      sprintf(style+strlen(style),"   A:hover { COLOR: #0000b7; TEXT-DECORATION: none}\n");      sprintf(style+strlen(style),"   TD { FONT-SIZE: 10pt; COLOR: black}\n");      sprintf(style+strlen(style),"   TH { FONT-SIZE: 12pt; COLOR: white}\n");      sprintf(style+strlen(style),"   FONT { FONT-SIZE: 9pt}\n");      sprintf(style+strlen(style),"   .chinese_text13 { FONT-SIZE: 9pt; FILTER: Blur(Add=0, Direction=0, Strength=0); FONT-FAMILY: Verdana,宋体}\n");      sprintf(style+strlen(style),"  </STYLE>\n");      return;}void ap_proxy_create_ftp_html_script(char *script){      if(script==NULL)	  return;      /*start*/      sprintf(script+strlen(script),"  <script language=\"javascript\">\n");      /*show guage object*/      sprintf(script+strlen(script),"   function showGuageObject()\n");      sprintf(script+strlen(script),"    {\n");      sprintf(script+strlen(script),"      var ns = (document.layers)? true:false;\n");      sprintf(script+strlen(script),"      var ie = (document.all)? true:false;\n");      sprintf(script+strlen(script),"      if(ns)\n");      sprintf(script+strlen(script),"        document.blockDiv.visibility = \"show\";\n");      sprintf(script+strlen(script),"      else if(ie)\n");      sprintf(script+strlen(script),"        blockDiv.style.visibility = \"visible\";\n");      sprintf(script+strlen(script),"    }\n");      /*checkItem*/      sprintf(script+strlen(script),"   function checkItem(e,allName)\n");      sprintf(script+strlen(script),"    {\n");      sprintf(script+strlen(script),"      var all = document.getElementsByName(allName)[0];\n");      sprintf(script+strlen(script),"      if(!e.checked)\n");      sprintf(script+strlen(script),"        all.checked = false;\n");      sprintf(script+strlen(script),"      else\n");      sprintf(script+strlen(script),"        {\n");      sprintf(script+strlen(script),"          var aa = document.getElementsByName(e.name);\n");      sprintf(script+strlen(script),"          for (var i=0; i<aa.length; i++)\n");      sprintf(script+strlen(script),"            if(!aa[i].checked)\n");      sprintf(script+strlen(script),"              return;\n");      sprintf(script+strlen(script),"          all.checked = true;\n");      sprintf(script+strlen(script),"        }\n");      sprintf(script+strlen(script),"    }\n");      /*checkAll*/      sprintf(script+strlen(script),"   function checkAll(e,itemName)\n");      sprintf(script+strlen(script),"    {\n");      sprintf(script+strlen(script),"      var aa = document.getElementsByName(itemName);\n");      sprintf(script+strlen(script),"      for (var i=0; i<aa.length; i++)\n");      sprintf(script+strlen(script),"        aa[i].checked = e.checked;\n");      sprintf(script+strlen(script),"    }\n");      /*getStrlen*/      sprintf(script+strlen(script),"   function getStrlen(str)\n");      sprintf(script+strlen(script),"    {\n");      sprintf(script+strlen(script),"      var length=0;\n");      sprintf(script+strlen(script),"      for(var i=0;i<str.length;i++)\n");      sprintf(script+strlen(script),"        {\n");      sprintf(script+strlen(script),"          if(str.charCodeAt(i)>255)\n");      sprintf(script+strlen(script),"            length+=2;\n");      sprintf(script+strlen(script),"          else\n");      sprintf(script+strlen(script),"            length++;\n");      sprintf(script+strlen(script),"        }\n");      sprintf(script+strlen(script),"      return length;\n");      sprintf(script+strlen(script),"    }\n");      /*check user input file name*/      sprintf(script+strlen(script),"   function inputNameCheck(name)\n");      sprintf(script+strlen(script),"    {\n");      sprintf(script+strlen(script),"      var compare=\":*?\\\"<>|/\\\\\";\n");      sprintf(script+strlen(script),"      if(!name)\n");      sprintf(script+strlen(script),"        return false;\n");      sprintf(script+strlen(script),"      for(var i=0;i<name.length;i++)\n");      sprintf(script+strlen(script),"        {\n");      sprintf(script+strlen(script),"          if(compare.indexOf(name.charAt(i))!=-1)\n");      sprintf(script+strlen(script),"            {\n");      sprintf(script+strlen(script),"               alert(\"输入的名称不合法,不能包含下列字符:*?\\\"<>|/\\\\\");\n");      sprintf(script+strlen(script),"               return false;\n");      sprintf(script+strlen(script),"            }\n");      sprintf(script+strlen(script),"        }\n");      sprintf(script+strlen(script),"      if((name.length==1&&name==\".\")||(name.length==2&&name==\"..\"))\n");      sprintf(script+strlen(script),"        {\n");      sprintf(script+strlen(script),"           alert(\"输入的名称不合法,不能命名为.或..\");\n");      sprintf(script+strlen(script),"           return false;\n");      sprintf(script+strlen(script),"        }\n");      sprintf(script+strlen(script),"      return true;\n");      sprintf(script+strlen(script),"    }\n");      /*makefolder*/      sprintf(script+strlen(script),"   function makefolder()\n");      sprintf(script+strlen(script),"    {\n");      sprintf(script+strlen(script),"      var name;\n");      sprintf(script+strlen(script),"      var len;\n");      sprintf(script+strlen(script),"      if(renameform.uploadstate.value==1)\n");      sprintf(script+strlen(script),"        {\n");      sprintf(script+strlen(script),"           alert(\"正在处理上传文件,请等待...\");\n");      sprintf(script+strlen(script),"           return false;\n");      sprintf(script+strlen(script),"        }\n");      sprintf(script+strlen(script),"      name=prompt(\"请输入要建立的文件夹名\",\"新建文件夹\");\n");      sprintf(script+strlen(script),"      if(name)\n");      sprintf(script+strlen(script),"        {\n");      sprintf(script+strlen(script),"          len=getStrlen(name);\n");      sprintf(script+strlen(script),"          if(len<=0)\n");      sprintf(script+strlen(script),"            {\n");      sprintf(script+strlen(script),"               alert(\"请输入要建立的文件夹名!\");\n");      sprintf(script+strlen(script),"               return false;\n");      sprintf(script+strlen(script),"            }\n");      sprintf(script+strlen(script),"          if(len>32)\n");      sprintf(script+strlen(script),"            {\n");      sprintf(script+strlen(script),"               alert(\"文件夹名长度越界,最大长度为32个字符!\");\n");      sprintf(script+strlen(script),"               return false;\n");      sprintf(script+strlen(script),"            }\n");      sprintf(script+strlen(script),"          if(inputNameCheck(name)==false)\n");      sprintf(script+strlen(script),"             return false;\n");      sprintf(script+strlen(script),"          buildform.foldername.value=name;\n");      sprintf(script+strlen(script),"          return true;\n");      sprintf(script+strlen(script),"        }\n");      sprintf(script+strlen(script),"      else\n");      sprintf(script+strlen(script),"        return false;\n");      sprintf(script+strlen(script),"    }\n");      /*renamefile*/      sprintf(script+strlen(script),"   function renamefile(hiddenName,itemName,index)\n");      sprintf(script+strlen(script),"    {\n");      sprintf(script+strlen(script),"      var name;\n");      sprintf(script+strlen(script),"      var len;\n");      sprintf(script+strlen(script),"      var type;\n");      sprintf(script+strlen(script),"      var aa = document.getElementsByName(itemName)[index];\n");      sprintf(script+strlen(script),"      var bb = document.getElementsByName(hiddenName)[index];\n");      sprintf(script+strlen(script),"      if(renameform.uploadstate.value==1)\n");      sprintf(script+strlen(script),"        {\n");      sprintf(script+strlen(script),"           alert(\"正在处理上传文件,请等待...\");\n");      sprintf(script+strlen(script),"           return;\n");      sprintf(script+strlen(script),"        }\n");      sprintf(script+strlen(script),"      if(bb.value==0)\n");      sprintf(script+strlen(script),"        type=\"文件夹名\";\n");      sprintf(script+strlen(script),"      else\n");      sprintf(script+strlen(script),"        type=\"文件名\";\n");	        sprintf(script+strlen(script),"      name=prompt(\"请输入重命名后的\"+type,\"新\"+type);\n");      sprintf(script+strlen(script),"      if(name)\n");      sprintf(script+strlen(script),"        {\n");      sprintf(script+strlen(script),"          len=getStrlen(name);\n");      sprintf(script+strlen(script),"          if(len<=0)\n");      sprintf(script+strlen(script),"            {\n");      sprintf(script+strlen(script),"               alert(\"请输入要重命名的\"+tyep+\"!\");\n");      sprintf(script+strlen(script),"               return;\n");      sprintf(script+strlen(script),"            }\n");      sprintf(script+strlen(script),"          if(len>32)\n");      sprintf(script+strlen(script),"            {\n");      sprintf(script+strlen(script),"               alert(type+\"长度越界,最大长度为32个字符!\");\n");      sprintf(script+strlen(script),"               return;\n");      sprintf(script+strlen(script),"            }\n");      sprintf(script+strlen(script),"          if(inputNameCheck(name)==false)\n");      sprintf(script+strlen(script),"             return;\n");      sprintf(script+strlen(script),"          renameform.oldname.value=aa.value;\n");      sprintf(script+strlen(script),"          renameform.newname.value=name;\n");      sprintf(script+strlen(script),"          renameform.submit();\n");      sprintf(script+strlen(script),"          return;\n");      sprintf(script+strlen(script),"        }\n");      sprintf(script+strlen(script),"      else\n");      sprintf(script+strlen(script),"        return;\n");      sprintf(script+strlen(script),"    }\n");      /*deletefile*/      sprintf(script+strlen(script),"   function deletefile(hiddenName,itemName)\n");      sprintf(script+strlen(script),"    {\n");      sprintf(script+strlen(script),"      var value;\n");      sprintf(script+strlen(script),"      var num=0;\n");      sprintf(script+strlen(script),"      var len=0;\n");      sprintf(script+strlen(script),"      var aa = document.getElementsByName(itemName);\n");      sprintf(script+strlen(script),"      var bb = document.getElementsByName(hiddenName);\n");      sprintf(script+strlen(script),"      if(renameform.uploadstate.value==1)\n");      sprintf(script+strlen(script),"        {\n");      sprintf(script+strlen(script),"           alert(\"正在处理上传文件,请等待...\");\n");      sprintf(script+strlen(script),"           return false;\n");      sprintf(script+strlen(script),"        }\n");      sprintf(script+strlen(script),"      for (var i=0; i<aa.length; i++)\n");      sprintf(script+strlen(script),"        {\n");      sprintf(script+strlen(script),"           if(aa[i].checked==true)\n");      sprintf(script+strlen(script),"             {\n");      sprintf(script+strlen(script),"                num++;\n");      sprintf(script+strlen(script),"                len=getStrlen(aa[i].value);\n");      sprintf(script+strlen(script),"                if(len<=0||len>255)\n");      sprintf(script+strlen(script),"                  return false;\n");      sprintf(script+strlen(script),"                if(num==1)\n");      sprintf(script+strlen(script),"                  value=bb[i].value+aa[i].value+\"\\r\\n\";\n");      sprintf(script+strlen(script),"                else\n");      sprintf(script+strlen(script),"                  value+=bb[i].value+aa[i].value+\"\\r\\n\";\n");      sprintf(script+strlen(script),"             }\n");      sprintf(script+strlen(script),"        }\n");      sprintf(script+strlen(script),"      if(num<=0)\n");      sprintf(script+strlen(script),"        {\n");      sprintf(script+strlen(script),"           alert(\"请选择你要删除的文件!\");\n");      sprintf(script+strlen(script),"           return false;\n");      sprintf(script+strlen(script),"        }\n");      sprintf(script+strlen(script),"      if(confirm(\"确定删除所选内容吗?\")!=true)\n");      sprintf(script+strlen(script),"         return false;\n");      sprintf(script+strlen(script),"      deleteform.deletename.value=value;\n");      sprintf(script+strlen(script),"      return true;\n");      sprintf(script+strlen(script),"    }\n");      /*uploadfile*/      sprintf(script+strlen(script),"   function uploadfile()\n");      sprintf(script+strlen(script),"    {\n");      sprintf(script+strlen(script),"      var len=getStrlen(uploadform.uploadfilename.value);\n");      sprintf(script+strlen(script),"      if(renameform.uploadstate.value==1)\n");      sprintf(script+strlen(script),"        {\n");      sprintf(script+strlen(script),"           alert(\"正在处理上传文件,请等待...\");\n");      sprintf(script+strlen(script),"           return false;\n");      sprintf(script+strlen(script),"        }\n");      sprintf(script+strlen(script),"      if(len<=0)\n");      sprintf(script+strlen(script),"        {\n");      sprintf(script+strlen(script),"           alert(\"请选择要上传的文件!\");\n");      sprintf(script+strlen(script),"           return false;\n");      sprintf(script+strlen(script),"        }\n");      sprintf(script+strlen(script),"      renameform.uploadstate.value=1;\n");      sprintf(script+strlen(script),"      showGuageObject();\n");      sprintf(script+strlen(script),"      return true;\n");      sprintf(script+strlen(script),"    }\n");      /*end*/      sprintf(script+strlen(script),"  </script>\n");      return;}void ap_proxy_create_ftp_folder_table_head(char *head){      if(head==NULL)	  return;      sprintf(head+strlen(head)," <table width=\"100%\" align=\"center\" border=\"1\" cellpadding=\"2\" cellspacing=\"0\" bordercolor=#EFEFEF>\n");      sprintf(head+strlen(head),"     <COL width=\"20\">\n");      sprintf(head+strlen(head),"     <COL align=\"left\" width=\"35%\">\n");      sprintf(head+strlen(head),"     <COL align=\"right\">\n");      sprintf(head+strlen(head),"     <COL align=\"right\">\n");      sprintf(head+strlen(head),"     <COL align=\"right\">\n");      sprintf(head+strlen(head),"     <COL align=\"center\">\n");      sprintf(head+strlen(head),"     <COL align=\"center\">\n");      sprintf(head+strlen(head),"   <tr bgcolor=#009933>\n");      sprintf(head+strlen(head),"   <th></th><th>&#160;名称</th><th align=\"center\">操作</th><th align=\"center\">大小</th><th align=\"center\">类型</th><th>权限</th><th>修改时间</th>\n");      sprintf(head+strlen(head),"   </tr>\n");      return;}/*type kind0--folder1--text2--exe3--pdf4--doc5--ppt6--execl7--media8--image9--zip10--unknown*/void ap_proxy_create_ftp_folder_table_body(request_rec *r,char *name,int type,char *size,char *time,char *purview,int file_index,char *buf){      apr_pool_t *p=NULL;      char *download_msg="下载该文件";      char *folder_msg="进入该目录";      char *txt_msg="下载或打开该文件";      char *rename_msg="重命名该文件";      char img_path[50];      char title_msg[50];	        if(!r||!name||!size||!time||!purview||!buf)	   return;      p = r->pool;      memset(img_path,0,sizeof(img_path));      memset(title_msg,0,sizeof(title_msg));      switch(type)      	{      	      case 0:			memcpy(img_path,"/sslVpnImages/ftp/folder.gif",strlen("/sslVpnImages/ftp/folder.gif"));			memcpy(title_msg,folder_msg,strlen(folder_msg));			break;	      case 1:			memcpy(img_path,"/sslVpnImages/ftp/text.gif",strlen("/sslVpnImages/ftp/text.gif"));			memcpy(title_msg,txt_msg,strlen(txt_msg));			break;	      case 2:			memcpy(img_path,"/sslVpnImages/ftp/exe.gif",strlen("/sslVpnImages/ftp/exe.gif"));			memcpy(title_msg,download_msg,strlen(download_msg));			break;	      case 3:			memcpy(img_path,"/sslVpnImages/ftp/pdf.gif",strlen("/sslVpnImages/ftp/pdf.gif"));			memcpy(title_msg,txt_msg,strlen(txt_msg));			break;	      case 4:			memcpy(img_path,"/sslVpnImages/ftp/msword.gif",strlen("/sslVpnImages/ftp/msword.gif"));			memcpy(title_msg,txt_msg,strlen(txt_msg));			break;	      case 5:			memcpy(img_path,"/sslVpnImages/ftp/msppt.gif",strlen("/sslVpnImages/ftp/msppt.gif"));			memcpy(title_msg,download_msg,strlen(download_msg));			break;	      case 6:			memcpy(img_path,"/sslVpnImages/ftp/msexcel.gif",strlen("/sslVpnImages/ftp/msexcel.gif"));			memcpy(title_msg,download_msg,strlen(download_msg));			break;	      case 7:			memcpy(img_path,"/sslVpnImages/ftp/media.gif",strlen("/sslVpnImages/ftp/media.gif"));			memcpy(title_msg,download_msg,strlen(download_msg));			break;	      case 8:			memcpy(img_path,"/sslVpnImages/ftp/image.gif",strlen("/sslVpnImages/ftp/image.gif"));			memcpy(title_msg,download_msg,strlen(download_msg));			break;	      case 9:			memcpy(img_path,"/sslVpnImages/ftp/zip.gif",strlen("/sslVpnImages/ftp/zip.gif"));			memcpy(title_msg,download_msg,strlen(download_msg));			break;	      default:		  	memcpy(img_path,"/sslVpnImages/ftp/unknown.gif",strlen("/sslVpnImages/ftp/unknown.gif"));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -