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

📄 proxy_ftp.c

📁 最新apache的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
			memcpy(title_msg,download_msg,strlen(download_msg));      	}	        sprintf(buf+strlen(buf),"   <tr>\n");      sprintf(buf+strlen(buf),"   <td nowrap><input type=\"checkbox\" name=\"mid\" value=\"%s\" onclick=\"checkItem(this, 'midAll')\"></td>\n",name);            if(type==0)      	{      	        sprintf(buf+strlen(buf),"   <td><A href=\"%s/\" title=\"%s\"><img src=\"%s\" width=\"16\" height=\"16\" border=\"0\" align=\"absmiddle\">&#160;\%s</A></td>\n",ap_escape_uri(p, name),title_msg,img_path,name);      	        sprintf(buf+strlen(buf),"   <td><A href=\"javascript:renamefile('hidetype','mid',%d)\"><image src=\"%s\" width=\"16\" height=\"16\" border=\"0\" align=\"absmiddle\" title=\"%s\"></A></td>\n",file_index,"/sslVpnImages/ftp/props.gif",rename_msg);      	}      else      	  {      	        sprintf(buf+strlen(buf),"   <td><A href=\"%s\" title=\"%s\"><img src=\"%s\" width=\"16\" height=\"16\" border=\"0\" align=\"absmiddle\">&#160;\%s</A></td>\n",ap_escape_uri(p, name),title_msg,img_path,name);      	        sprintf(buf+strlen(buf),"<td><A href=\"%s\"><img src=\"%s\" width=\"16\" height=\"16\" border=\"0\" align=\"absmiddle\" title=\"%s\"></A>\n",ap_escape_uri(p, name),"/sslVpnImages/ftp/download.gif",title_msg);      	        sprintf(buf+strlen(buf),"       <A href=\"javascript:renamefile('hidetype','mid',%d)\"><image src=\"%s\" width=\"16\" height=\"16\" border=\"0\" align=\"absmiddle\" title=\"%s\"></A></td>\n",file_index,"/sslVpnImages/ftp/props.gif",rename_msg);      	  }      sprintf(buf+strlen(buf),"   <td>%s  字节</td>\n",size);      if(type==0)	  	sprintf(buf+strlen(buf),"   <td><input name=\"hidetype\" type=\"hidden\" value=0>目录文件</td>\n");      else	  	sprintf(buf+strlen(buf),"   <td><input name=\"hidetype\" type=\"hidden\" value=1>文件</td>\n");      sprintf(buf+strlen(buf),"   <td>%s</td>\n",purview);      sprintf(buf+strlen(buf),"   <td>%s</td>\n",time);      sprintf(buf+strlen(buf),"   </tr>\n");      return;}void ap_proxy_create_ftp_folder_table_tail(char *tail,int file_num,int folder_num){      if(!tail)	    return;            sprintf(tail+strlen(tail),"   <tr>\n");      sprintf(tail+strlen(tail),"     <td nowrap><input type=\"checkbox\" name=\"midAll\" value=\"\" onclick=\"checkAll(this,'mid')\"></td>\n");      sprintf(tail+strlen(tail),"     <td><LABEL for=\"chkAll\"><font color=\"Maroon\">全选/不选</font></LABEL></td>\n");      sprintf(tail+strlen(tail),"     <td colspan=\"5\" align=\"right\">共%d个文件夹,%d个文件</td>\n",folder_num,file_num);      sprintf(tail+strlen(tail),"   </tr>\n");      sprintf(tail+strlen(tail),"  </table>\n");      sprintf(tail+strlen(tail)," <table width=\"100%\" align=\"center\" border=0 cellpadding=2 cellspacing=0>\n");      sprintf(tail+strlen(tail),"   <tr>\n");      sprintf(tail+strlen(tail),"     <td width=\"20\"></td>\n");      sprintf(tail+strlen(tail),"     <td width=\"108\" valign=\"top\">\n");      sprintf(tail+strlen(tail),"       <form name=\"buildform\" enctype=\"multipart/form-data\" action=\".\" method=\"POST\" onsubmit=\"return makefolder()\">\n");      sprintf(tail+strlen(tail),"           <input name=\"foldername\" value=\"\" type=\"hidden\">\n");      sprintf(tail+strlen(tail),"           <input name=\"submit\" type=\"submit\" value=\"新建文件夹\">\n");      sprintf(tail+strlen(tail),"       </form>\n");      sprintf(tail+strlen(tail),"     </td>\n");	        sprintf(tail+strlen(tail),"     <td width=\"205\" valign=\"top\">\n");      sprintf(tail+strlen(tail),"       <form name=\"deleteform\" enctype=\"multipart/form-data\" action=\".\" method=\"POST\" onsubmit=\"return deletefile('hidetype','mid')\">\n");      sprintf(tail+strlen(tail),"           <input name=\"deletename\" value=\"\" type=\"hidden\">\n");      sprintf(tail+strlen(tail),"           <input name=\"submit\" type=\"submit\" value=\"删除所选文件\">\n");      sprintf(tail+strlen(tail),"       </form>\n");      sprintf(tail+strlen(tail),"     </td>\n");      sprintf(tail+strlen(tail),"     <td width=\"400\" valign=\"top\">\n");      sprintf(tail+strlen(tail),"       <form name=\"uploadform\" enctype=\"multipart/form-data\" action=\".\" method=\"POST\" onsubmit=\"return uploadfile()\">\n");      sprintf(tail+strlen(tail),"           <img src=\"/sslVpnImages/ftp/upload.gif\" width=\"16\" height=\"16\" border=\"0\" align=\"absmiddle\">上传文件:\n");      sprintf(tail+strlen(tail),"           <input name=\"uploadfilename\" value=\"\" type=\"file\">\n");      sprintf(tail+strlen(tail),"           <input name=\"submit\" type=\"submit\" value=\"上传\">\n");      sprintf(tail+strlen(tail),"       </form>\n");      sprintf(tail+strlen(tail),"     </td>\n");      /*刷新按钮*/      sprintf(tail+strlen(tail),"     <td valign=\"top\">\n");      sprintf(tail+strlen(tail),"       <img src=\"/sslVpnImages/ftp/refresh.gif\" width=\"16\" height=\"16\" border=\"0\" align=\"absmiddle\">");      sprintf(tail+strlen(tail),"<input name=\"refresh\" type=\"button\" onclick=\"refresh()\" value=\"刷新列表\">\n");      sprintf(tail+strlen(tail),"     </td>\n");	        	        sprintf(tail+strlen(tail),"     <td>\n");      sprintf(tail+strlen(tail),"       <form name=\"renameform\" enctype=\"multipart/form-data\" action=\".\" method=\"POST\" onsubmit=\"return false\">\n");      sprintf(tail+strlen(tail),"           <input name=\"oldname\" value=\"\" type=\"hidden\">\n");      sprintf(tail+strlen(tail),"           <input name=\"newname\" value=\"\" type=\"hidden\">\n");      sprintf(tail+strlen(tail),"           <input name=\"uploadstate\" value=0 type=\"hidden\">\n");      sprintf(tail+strlen(tail),"       </form>\n");      sprintf(tail+strlen(tail),"     </td>\n");      sprintf(tail+strlen(tail),"   </tr>\n");      sprintf(tail+strlen(tail),"   <tr>\n");      sprintf(tail+strlen(tail),"     <td width=\"20\"></td>\n");      sprintf(tail+strlen(tail),"     <td colspan=\"4\">\n");      sprintf(tail+strlen(tail),"       <div id=\"blockDiv\" style=\"visibility:hidden;\">\n");      sprintf(tail+strlen(tail),"           <table width=\"100%\">\n");      sprintf(tail+strlen(tail),"             <tr>\n");      sprintf(tail+strlen(tail),"               <td style=\"font-size:9pt\" align=\"left\" width=\"465\" valign=\"top\">文件正在上传处理中.请耐心等待...\n");      sprintf(tail+strlen(tail),"                  <marquee style=\"border:1px solid #000000\" direction=\"right\" width=\"250\" scrollamount=\"5\" scrolldelay=\"10\" bgcolor=\"white\">\n");      sprintf(tail+strlen(tail),"                      <table cellspacing=\"1\" cellpadding=\"0\">\n");      sprintf(tail+strlen(tail),"                        <tr height=8>\n");      sprintf(tail+strlen(tail),"                        <td bgcolor=#009933 width=8></td>\n");      sprintf(tail+strlen(tail),"                        <td></td>\n");      sprintf(tail+strlen(tail),"                        <td bgcolor=#009933 width=8></td>\n");      sprintf(tail+strlen(tail),"                        <td></td>\n");      sprintf(tail+strlen(tail),"                        <td bgcolor=#009933 width=8></td>\n");      sprintf(tail+strlen(tail),"                        <td></td>\n");      sprintf(tail+strlen(tail),"                        <td bgcolor=#009933 width=8></td>\n");      sprintf(tail+strlen(tail),"                        <td></td>\n");      sprintf(tail+strlen(tail),"                        </tr>\n");      sprintf(tail+strlen(tail),"                      </table>\n");      sprintf(tail+strlen(tail),"                  </marquee>\n");      sprintf(tail+strlen(tail),"               </td>\n");      sprintf(tail+strlen(tail),"               <td valign=\"top\">\n");      sprintf(tail+strlen(tail),"                  <input value=\"取消上传\" type=\"button\" onclick=\"location.href='.'\">\n");      sprintf(tail+strlen(tail),"               </td>\n");      sprintf(tail+strlen(tail),"             </tr>\n");      sprintf(tail+strlen(tail),"           </table>\n");      sprintf(tail+strlen(tail),"       </div>\n");      sprintf(tail+strlen(tail),"     </td>\n");      sprintf(tail+strlen(tail),"   </tr>\n");            sprintf(tail+strlen(tail),"  </table>\n");      return;}int ap_proxy_build_ftp_epsv_data_sock(request_rec *r,proxy_server_conf *conf,apr_sockaddr_t *connect_addr,conn_rec *ftp_ctrl,apr_socket_t *ctrl_sock,apr_bucket_brigade * bb,apr_socket_t **data_sock){       int rc;	apr_status_t rv;	char *ftpmessage = NULL;	apr_socket_t *sock = NULL;	       apr_sockaddr_t *data_addr;       char *data_ip;       apr_port_t data_port;       apr_brigade_cleanup(bb);       rc = proxy_ftp_command("EPSV" CRLF,r, ftp_ctrl, bb, &ftpmessage);       if (rc == -1 || rc == 421) {            return ap_proxyerror(r, HTTP_BAD_GATEWAY,"Error reading from remote server");        }        if (rc != 229 && rc != 500 && rc != 501 && rc != 502) {            return ap_proxyerror(r, HTTP_BAD_GATEWAY, ftpmessage);        }        else if (rc == 229) {            char *pstr;            char *tok_cntx;            pstr = ftpmessage;            pstr = apr_strtok(pstr, " ", &tok_cntx);    /* separate result code */            if (pstr != NULL) {                if (*(pstr + strlen(pstr) + 1) == '=') {                    pstr += strlen(pstr) + 2;                }                else {                    pstr = apr_strtok(NULL, "(", &tok_cntx);    /* separate address &                                                                 * port params */                    if (pstr != NULL)                        pstr = apr_strtok(NULL, ")", &tok_cntx);                }            }            if (pstr) {                apr_sockaddr_t *epsv_addr;                data_port = atoi(pstr + 3);                ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,                       "proxy: FTP: EPSV contacting remote host on port %d",                             data_port);                if ((rv = apr_socket_create(&sock, connect_addr->family, SOCK_STREAM, r->pool)) != APR_SUCCESS) {                    ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,                                  "proxy: FTP: error creating EPSV socket");                    return HTTP_INTERNAL_SERVER_ERROR;                }#if !defined (TPF) && !defined(BEOS)                if (conf->recv_buffer_size > 0                         && (rv = apr_socket_opt_set(sock, APR_SO_RCVBUF,                                                    conf->recv_buffer_size))) {                    ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,                                  "proxy: FTP: apr_socket_opt_set(SO_RCVBUF): Failed to set ProxyReceiveBufferSize, using default");                }#endif                /* make the connection */                apr_socket_addr_get(&data_addr, APR_REMOTE, ctrl_sock);                apr_sockaddr_ip_get(&data_ip, data_addr);                apr_sockaddr_info_get(&epsv_addr, data_ip, connect_addr->family, data_port, 0, r->pool);                rv = apr_connect(sock, epsv_addr);                if (rv != APR_SUCCESS) {                    ap_log_error(APLOG_MARK, APLOG_ERR, rv, r->server,                                 "proxy: FTP: EPSV attempt to connect to %pI failed - Firewall/NAT?", epsv_addr);		       apr_socket_close(sock);                    return ap_proxyerror(r, HTTP_BAD_GATEWAY, apr_psprintf(r->pool,                                                                           "EPSV attempt to connect to %pI failed - firewall/NAT?", epsv_addr));                }                else {                    *data_sock=sock;                }            }        }	return APR_SUCCESS;}int ap_proxy_build_ftp_pasv_data_sock(request_rec *r,proxy_server_conf *conf,apr_sockaddr_t *connect_addr,conn_rec *ftp_ctrl,apr_bucket_brigade * bb,apr_socket_t **data_sock){       int rc;	apr_status_t rv;	char *ftpmessage = NULL;	apr_socket_t *sock = NULL;	apr_pool_t *p = r->pool;       rc = proxy_ftp_command("PASV" CRLF,r, ftp_ctrl, bb, &ftpmessage);       if (rc == -1 || rc == 421) {            return ap_proxyerror(r, HTTP_BAD_GATEWAY,                                 "Error reading from remote server");        }        if (rc != 227 && rc != 502) {            return ap_proxyerror(r, HTTP_BAD_GATEWAY, ftpmessage);        }        else if (rc == 227) {            unsigned int h0, h1, h2, h3, p0, p1;            char *pstr;            char *tok_cntx;            pstr = ftpmessage;            pstr = apr_strtok(pstr, " ", &tok_cntx);    /* separate result code */            if (pstr != NULL) {                if (*(pstr + strlen(pstr) + 1) == '=') {                    pstr += strlen(pstr) + 2;                }                else {                    pstr = apr_strtok(NULL, "(", &tok_cntx);    /* separate address &                                                                 * port params */                    if (pstr != NULL)                        pstr = apr_strtok(NULL, ")", &tok_cntx);                }            }/* FIXME: Only supports IPV4 - fix in RFC2428 */            if (pstr != NULL && (sscanf(pstr,                 "%d,%d,%d,%d,%d,%d", &h3, &h2, &h1, &h0, &p1, &p0) == 6)) {                apr_sockaddr_t *pasv_addr;                apr_port_t pasvport = (p1 << 8) + p0;                ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,                          "proxy: FTP: PASV contacting host %d.%d.%d.%d:%d",                             h3, h2, h1, h0, pasvport);                if ((rv = apr_socket_create(&sock, connect_addr->family, SOCK_STREAM, r->pool)) != APR_SUCCESS) {                    ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,                                  "proxy: error creating PASV socket");                    return HTTP_INTERNAL_SERVER_ERROR;                }#if !defined (TPF) && !defined(BEOS)                if (conf->recv_buffer_size > 0                         && (rv = apr_socket_opt_set(sock, APR_SO_RCVBUF,                                                    conf->recv_buffer_size))) {                    ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,                                  "proxy: FTP: apr_socket_opt_set(SO_RCVBUF): Failed to set ProxyReceiveBufferSize, using default");                }#endif                /* make the connection */                apr_sockaddr_info_get(&pasv_addr, apr_psprintf(p, "%d.%d.%d.%d", h3, h2, h1, h0), connect_addr->family, pasvport, 0, p);                rv = apr_connect(sock, pasv_addr);                if (rv != APR_SUCCESS) {                    ap_log_error(APLOG_MARK, APLOG_ERR, rv, r->server,                                 "proxy: FTP: PASV attempt to connect to %pI failed - Firewall/NAT?", pasv_addr);		      apr_socket_close(sock);                    return ap_proxyerror(r, HTTP_BAD_GATEWAY, apr_psprintf(r->pool,                                                                           "PASV attempt to connect to %pI failed - firewall/NAT?", pasv_addr));                }                else {                    *data_sock=sock;                }            }        }	return APR_SUCCESS;}int ap_proxy_build_ftp_port_listen_sock(request_rec *r,apr_sockaddr_t *connect_addr,conn_rec *ftp_ctrl,apr_socket_t *ctrl_sock,apr_bucket_brigade * bb,apr_socket_t **listen_sock){        int rc;	 apr_status_t rv;	 char *ftpmessage = NULL;	 int one = 1;	 apr_pool_t *p = r->pool;	 char buffer[MAX_STRING_LEN];        apr_sockaddr_t *local_addr;        apr_socket_t *local_sock;        char *local_ip;        apr_port_t local_port;        unsigned int h0, h1, h2, h3, p0, p1;        if ((rv = apr_socket_create(&local_sock, connect_addr->family, SOCK_STREAM, r->pool)) != APR_SUCCESS) {            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,                          "proxy: FTP: error creating local socket");            return HTTP_INTERNAL_SERVER_ERROR;        }        apr_socket_addr_get(&local_addr, APR_LOCAL, ctrl_sock);        apr_sockaddr_port_get(&local_port, local_addr);        apr_sockaddr_ip_get(&local_ip, local_addr);        if ((rv = apr_socket_opt_set(local_sock, APR_SO_REUSEADDR, one))                 != APR_SUCCESS) {#ifndef _OSD_POSIX              /* BS2000 has this option "always on" */            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,                          "proxy: FTP: error setting reuseaddr option");            apr_socket_close(local_sock);            return HTTP_INTERNAL_SERVER_ERROR;#endif                          /* _OSD_POSIX */        }        apr_sockaddr_info_get(&local_addr, local_ip, APR_UNSPEC, local_port, 0, r->pool);        if ((rv = apr_bind(local_sock, local_addr)) != APR_SUCCESS) {            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,            "proxy: FTP: error binding to ftp data socket %pI", local_addr);	     apr_socket_close(local_sock);            return HTTP_INTERNAL_SERVER_ERROR;        }        /* only need a short queue */        if ((rv = apr_listen(local_sock, 2)) != APR_SUCCESS) {            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,                          "proxy: FTP: error listening to ftp data socket %pI", local_addr);	     apr_socket_close(local_sock);            return HTTP_INTERNAL_SERVER_ERROR;        }/* FIXME: Sent PORT here */        if (local_ip && (sscanf(local_ip,                                "%d.%d.%d.%d", &h3, &h2, &h1, &h0) == 4)) {            p1 = (local_port >> 8);            p0 = (local_port & 0xFF);            apr_brigade_cleanup(bb);            rc = proxy_ftp_command(apr_psprintf(p, "PORT %d,%d,%d,%d,%d,%d" CRLF, h3, h2, h1, h0, p1, p0),                           r, ftp_ctrl, bb, &ftpmessage);            /* possible results: 200, 421, 500, 501, 502, 530 */            /* 200 Command okay. */            /* 421 Service not available, closing control connection. */            /* 500 Syntax error, command unrecognized. */            /* 501 Syntax error in parameters or arguments. */            /* 502 Command not implemented. */            /* 530 Not logged in. */            if (rc == -1 || rc == 421) {		  apr_socket_close(local_sock);                return ap_proxyerror(r, HTTP_BAD_GATEWAY,                                     "Error reading from remote server");            }            if (rc != 200) {		  apr_socket_close(local_sock);                return ap_proxyerror(r, HTTP_BAD_GATEWAY, buffer);            }            *listen_sock=local_sock;        }        else {/* IPV6 FIXME: * The EPRT command replaces PORT where both IPV4 and IPV6 is supported. The first * number (1,2) indicates the protocol type. Examples: *   EPRT |1|132.235.1.2|6275| *   EPRT |2|1080::8:800:200C:417A|5282| */        apr_socket_close(local_sock);            return ap_proxyerror(r, HTTP_NOT_IMPLEMENTED, "Connect to IPV6 ftp server using EPRT not supported. Enable EPSV.");        }		

⌨️ 快捷键说明

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