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

📄 proxy_ftp.c

📁 最新apache的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	    }	 if(len>255)	 	return -1;	 memcpy(name,q,len);	 if(flag==TRUE)	 	return APR_SUCCESS;	 rc=ap_proxy_decode_file_type(name,len,type);	 if(rc!=APR_SUCCESS)	 	return -1;	 return APR_SUCCESS;     }int ap_proxy_decode_unix_format_directory_list(char *data,char *name,int *type,char *size,char *time,char *purview){       char *p=NULL;	char *q=NULL;	int len=0;	int temp_len=0;	int flag=FALSE;	char *search=NULL;	int count=0;       int rc=0;       	p=data;	if(p[0]=='d'||p[0]=='l')	   {		 flag=TRUE;		 if(p[0]=='d')		     *type=0;		 else		     *type=10;	   }	/*decode purview*/	p++;	q=p;	len=0;	while(*p&&*p!=' ')	   {		 p++;		 len++;	   }	if(len!=9)		return -1;	memcpy(purview,q,len);	/*decode size*/       p++;       while(*p&&*p==' ')	   	p++;	q=p;	count=0;	while(*p)          {		  search=strchr(p,' ');	         if(search==NULL)			 return -1;		  p=search+1;		  count++;		  while(*p&&*p==' ')			p++;		  if(count==3)			break;	    }	       /*decode size*/	q=p;	len=0;	while(*p&&*p!=' ')	    {	          p++;		   len++;	    }	if(len>32)		return -1;	memcpy(size,q,len);	rc=ap_proxy_format_size(size);	if(rc!=APR_SUCCESS)		return -1;	/*decode time*/	p++;	while(*p&&*p==' ')	   	p++;	q=p;	len=0;	temp_len=0;	while(*p&&*p!=' ')	   {	        p++;		 len++;	   }	if(len>32)		return -1;	memcpy(time,q,len);	time[len]=' ';	len++;	p++;	while(*p&&*p==' ')		p++;	q=p;	temp_len=0;	while(*p&&*p!=' ')	   {	        p++;		 temp_len++;	   }	if((len+temp_len)>32)		return -1;		memcpy(time+len,q,temp_len);	len+=temp_len;	time[len]=' ';	len++;	p++;	while(*p&&*p==' ')		p++;	q=p;	temp_len=0;	while(*p&&*p!=' ')	   {	        p++;		 temp_len++;	   }	if((len+temp_len)>32)		return -1;	memcpy(time+len,q,temp_len);       p++;	while(*p&&(*p==' '))		 p++;			          len=0;        q=p;        while(*p)	    {	         if(data[0]=='l')	            {	         	   if((*p==13&&*(p+1)==10)||(*p==' '&&*(p+1)=='-'&&*(p+2)=='>'))				break;	            }		  else		  	{		  	      if(*p==13&&*(p+1)==10)		             break;		  	}	  		  p++;		  len++;	    }	 if(len>255)	 	return -1;	 memcpy(name,q,len);	 if(flag==TRUE)	 	return APR_SUCCESS;	 rc=ap_proxy_decode_file_type(name,len,type);	 if(rc!=APR_SUCCESS)	 	return -1;	 return APR_SUCCESS;}int ap_proxy_decode_directory_list_oneline_info(char *data,char *name,int *type,char *size,char *time,char *purview){       char *p=NULL;	int rc=0;		if(!data||!name||!type||!size||!time||!purview)		return -1;	p=data;	/*format is right?*/	if(!(p[0]=='d'||p[0]=='-'||p[0]=='l'||apr_isdigit(p[0])))		return -1;	if(apr_isdigit(p[0])) /*MS-DOS*/		{		      rc=ap_proxy_decode_dos_format_directory_list(data,name,type,size, time);		      if(rc!=APR_SUCCESS)			  	return -1;		      memcpy(purview,"未知权限",sizeof("未知权限"));		}	else     /*UNIX*/		{		      rc=ap_proxy_decode_unix_format_directory_list(data,name,type,size,time,purview);		      if(rc!=APR_SUCCESS)			  	return -1;		}		return APR_SUCCESS;}int ap_proxy_get_mime_boundary(request_rec *r,char *boundary){       char *regex="boundary=([^;[:space:]]+)";	regex_t preg;         regmatch_t pMatch[2];	int result=0;    	const char *content_type = apr_table_get(r->headers_in, "Content-Type");       if(content_type==NULL)		return HTTP_INTERNAL_SERVER_ERROR;       if(!strstr(content_type,"multipart/form-data"))	   	return HTTP_NOT_IMPLEMENTED;       memset((char *)&preg,0,sizeof(preg));       if(regcomp(&preg,regex,REG_ICASE | REG_EXTENDED)!=0)      	       return HTTP_INTERNAL_SERVER_ERROR;        memset((char *)pMatch,0,sizeof(pMatch));	result=regexec(&preg,content_type,2,pMatch,0);	if(result)	    {	          regfree(&preg);		   return HTTP_NOT_IMPLEMENTED;	    }	if((pMatch[1].rm_so==-1)||(pMatch[1].rm_eo-pMatch[1].rm_so)>98)	    {	         regfree(&preg);		  return HTTP_NOT_IMPLEMENTED;	    }       memcpy(boundary,"--",strlen("--"));	memcpy(boundary+strlen(boundary),content_type+pMatch[1].rm_so,pMatch[1].rm_eo-pMatch[1].rm_so);       regfree(&preg);	return APR_SUCCESS;}/*1--buildfolder2--delete3--rename4--upload*/int ap_proxy_get_ftp_write_request_type(char *data,int *type){      char *start=NULL;      char *end=NULL;      int name_len=0;      start=data;	        start=strstr(start,"name=\"");      if(!start)		return HTTP_NOT_IMPLEMENTED;      start+=strlen("name=\"");      end=start;      name_len=0;      while((*end)&&(*end!='\"')&&!isspace(*end)&&(*end!=';'))	    {		   name_len++;		   end++;	    }		if(*end!='\"')		return HTTP_NOT_IMPLEMENTED;		if(name_len==strlen("foldername")&&strncmp(start,"foldername",name_len)==0)	    {		  *type=FTP_MAKE_FOLDER;		  return APR_SUCCESS;	    }	else if(name_len==strlen("deletename")&&strncmp(start,"deletename",name_len)==0)	    {		  *type=FTP_DELETE_FILE;		  return APR_SUCCESS;	    }	else if(name_len==strlen("oldname")&&strncmp(start,"oldname",name_len)==0)	    {		  *type=FTP_RENAME_FILE;		  return APR_SUCCESS;	     }	else if(name_len==strlen("uploadfilename")&&strncmp(start,"uploadfilename",name_len)==0)	    {		  *type=FTP_UPLOAD_FILE;		  return APR_SUCCESS;	    }	else	    *type=0;		return HTTP_NOT_IMPLEMENTED;}int ap_proxy_get_ftp_build_folder_request_info(char *data,char *boundary,char *folder_name){      char *start=NULL;      char *end=NULL;	        int len=0;	        if(data==NULL||boundary==NULL||folder_name==NULL)	    return HTTP_INTERNAL_SERVER_ERROR;	        start=data;      /*find CRLFCRLF*/	        while(*start)          {		 if(*start==13&&*(start+1)==10&&*(start+2)==13&&*(start+3)==10)		      break;		 start++;	   }       start+=4;	end=strstr(start,boundary);	if(!end||end<=start)              return HTTP_NOT_IMPLEMENTED;	       len=end-2-start;       if(len>32||len<=0)	       return HTTP_NOT_IMPLEMENTED;         memcpy(folder_name,start,len);       return APR_SUCCESS;}int ap_proxy_get_ftp_delete_request_info(char *data,char *boundary,char *delete_info){      char *start=NULL;      char *end=NULL;	        int len=0;	        if(data==NULL||boundary==NULL||delete_info==NULL)	    return HTTP_INTERNAL_SERVER_ERROR;	        start=data;      /*find CRLFCRLF*/	        while(*start)          {		 if(*start==13&&*(start+1)==10&&*(start+2)==13&&*(start+3)==10)		      break;		 start++;	   }       start+=4;	end=strstr(start,boundary);	if(!end||end<=start)              return HTTP_NOT_IMPLEMENTED;	       len=end-2-start;       if(len>HUGE_STRING_LEN||len<=0)	       return HTTP_NOT_IMPLEMENTED;         memcpy(delete_info,start,len);       return APR_SUCCESS;}int ap_proxy_get_ftp_rename_request_info(char *data,char *boundary,char *oldname,char *newname){      char *start=NULL;      char *end=NULL;	        int len=0;	        if(data==NULL||boundary==NULL||oldname==NULL||newname==NULL)	    return HTTP_INTERNAL_SERVER_ERROR;	        start=data;      /*find CRLFCRLF*/	        while(*start)          {		 if(*start==13&&*(start+1)==10&&*(start+2)==13&&*(start+3)==10)		      break;		 start++;	   }	         start+=4;	end=strstr(start,boundary);

⌨️ 快捷键说明

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