📄 proxy_ftp.c
字号:
} 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 + -