Exemplo n.º 1
0
int cgiMain(void){
    cgiFilePtr file;
    int targetFile;
    mode_t  mode;
    char name[128];
    char fileNameOnServer[64];
    char contentType[1024];
    char buffer[BufferLen];
    char *tmpStr=NULL;
    int size;
    int got,t;
    cgiHeaderContentType("text/html");
    //取得html页面中file元素的值,应该是文件在客户机上的路径名
    if (cgiFormFileName("file", name, sizeof(name)) !=cgiFormSuccess) {
        fprintf(stderr,"could not retrieve filename\n");
        goto FAIL;
    }  
    cgiFormFileSize("file", &size);
    //取得文件类型,不过本例中并未使用
    cgiFormFileContentType("file", contentType, sizeof(contentType));
    //目前文件存在于系统临时文件夹中,通常为/tmp,通过该命令打开临时文件。临时文件的名字与用户文件的名字不同,所以不能通过路径/tmp/userfilename的方式获得文件
    if (cgiFormFileOpen("file", &file) != cgiFormSuccess) {
        fprintf(stderr,"could not open the file\n");
        goto FAIL;
    }
    t=-1; 
    //从路径名解析出用户文件名
    while(1){
        tmpStr=strstr(name+t+1,"\\");
        if(NULL==tmpStr)
            tmpStr=strstr(name+t+1,"/");//if "\\" is not path separator, try "/"
        if(NULL!=tmpStr)
            t=(int)(tmpStr-name);
        else
            break;
    } 
    strcpy(fileNameOnServer,"/app/update/");
    strcat(fileNameOnServer,name+t+1);
    mode=S_IRWXU|S_IRGRP|S_IROTH;    
    //在当前目录下建立新的文件,第一个参数实际上是路径名,此处的含义是在cgi程序所在的目录(当前目录))建立新文件    
    targetFile=open(fileNameOnServer,O_RDWR|O_CREAT|O_TRUNC|O_APPEND,mode);
    if(targetFile<0){
        fprintf(stderr,"could not create the new file,%s\n",fileNameOnServer);
        goto FAIL;
    }
    //从系统临时文件中读出文件内容,并放到刚创建的目标文件中 
    while (cgiFormFileRead(file, buffer, BufferLen, &got) ==cgiFormSuccess){
        if(got>0)
            write(targetFile,buffer,got);    
    }
    cgiFormFileClose(file);
    close(targetFile);
    goto END; 
FAIL:
    fprintf(stderr,"Failed to upload");
    return 1;
END:    
    printf("File \"%s\" has been uploaded",fileNameOnServer);
    return 0;
}
Exemplo n.º 2
0
//get file of upload
int UploadFile()
{
	int fd;
	int got;
	cgiFilePtr filep;
	char pathFname[1024], fileName[1024], fileBuf[1024];

	//get file name
	if (cgiFormFileName(SUBMITNAME, fileName, sizeof(fileName)) != cgiFormSuccess) {
		fprintf(stdout, "No file was uploaded.\r\n");
		return EFAILED;
	} 

	if(isChecked(fileName, upFileType) != 0) {
		fprintf(stdout, "Upload file type is not support\r\n");	
		return EFAILED;
	}

	if (cgiFormFileOpen(SUBMITNAME, &filep) != cgiFormSuccess) {
		fprintf(cgiOut, "Can't open the file.\r\n");
		return EFAILED;
	}

	sprintf(pathFname, "%s%s", SAVEFILEPATH, NEWFILENAME);

	if((fd = open(pathFname, O_TRUNC | O_CREAT | O_WRONLY, 444)) < 0) {
		fprintf(stdout, "UploadFile()->open():%s\r\n", strerror(errno));	
		return EFAILED;
	}

	while (cgiFormFileRead(filep, fileBuf, sizeof(fileBuf), &got) == cgiFormSuccess) 
		write(fd, fileBuf, got);

	sync();

	close(fd);
	cgiFormFileClose(filep);
	return SUCCESS;
}
Exemplo n.º 3
0
void File()
{
    cgiFilePtr file;
    char name[1024];
    char contentType[1024];
    char buffer[1024];
    int size;
    int got;
    if (cgiFormFileName("file", name, sizeof(name)) != cgiFormSuccess) {
        printf("<p>No file was uploaded.<p>\n");
        return;
    }
    fprintf(cgiOut, "The filename submitted was: ");
    cgiHtmlEscape(name);
    fprintf(cgiOut, "<p>\n");
    cgiFormFileSize("file", &size);
    fprintf(cgiOut, "The file size was: %d bytes<p>\n", size);
    cgiFormFileContentType("file", contentType, sizeof(contentType));
    fprintf(cgiOut, "The alleged content type of the file was: ");
    cgiHtmlEscape(contentType);
    fprintf(cgiOut, "<p>\n");
    fprintf(cgiOut, "Of course, this is only the claim the browser made when uploading the file. Much like the filename, it cannot be trusted.<p>\n");
    fprintf(cgiOut, "The file's contents are shown here:<p>\n");
    if (cgiFormFileOpen("file", &file) != cgiFormSuccess) {
        fprintf(cgiOut, "Could not open the file.<p>\n");
        return;
    }
    fprintf(cgiOut, "<pre>\n");
    while (cgiFormFileRead(file, buffer, sizeof(buffer), &got) ==
            cgiFormSuccess)
    {
        cgiHtmlEscapeData(buffer, got);
    }
    fprintf(cgiOut, "</pre>\n");
    cgiFormFileClose(file);
}
Exemplo n.º 4
0
int cgiMain(void){
    cgiFilePtr file;
    int targetFile;
    mode_t  mode;
    char name[128];
    char fileNameOnServer[64];
    char contentType[1024];
    char buffer[BufferLen];
    char *tmpStr=NULL;
    int size;
    int got,t;
	 char cmd[256];
	long sessionId;            //会话ID
	char value[20];            //临时变量
	char username[40];         //用户名
	char actName[50];          //请求动作
	char msg[64];					//提示信息 
	int itemId = 0;				//网元ID 
	char cardtypes[128];
	char slots[128]; 
	 /* ==================基本校验 ====================== */
	
	/*  获取请求参数  */
	cgiFormString("sessionId",value,20);
	sessionId = atol(value);
	cgiFormString("username",username,40);
	cgiFormString("actName",actName,50);
	cgiFormString("QItemId",value,50);//网元ID
	itemId = atol(value);
	cgiFormString("cardtypes",cardtypes,128);
	cgiFormString("slots",slots,128);
	/* 检查session有效性  */
	//无效
	if(!isSessionValid(sessionId,username)){
		webLog("no");
		//无效session
		sprintf(msg,"未登录或会话已过期!");
		goto FAIL;
	}
	//有效
	else{
		webLog("yes");
		//更新session访问时间
		updateSessionService(sessionId);
	}
	
	/*  权限验证  */
	//权限不足
	if(!isAuthorityValid(actName,username)){
		//输出权限不足信息
		sprintf(msg,"您无此操作权限!");
		goto FAIL;
	}
	 
	
	//清除旧文件 
//	sprintf(cmd,"rm -f /backup/app.tar.gz ");
//	system(cmd);
	  
//	sprintf(cmd,"rm -rf %s/*",UPDATEDIR);
//	system(cmd);
	 
    //取得html页面中file元素的值,应该是文件在客户机上的路径名
    if (cgiFormFileName("updatePkg", name, sizeof(name)) !=cgiFormSuccess) {
        strcpy(msg,"系统出错:无法读取上传文件");
        goto FAIL;
    }  
    cgiFormFileSize("updatePkg", &size);
    if(size >30*1024*1024){
    	strcpy(msg,"不能上传大于30M的文件");
    	goto FAIL;
    }
    //取得文件类型,不过本例中并未使用
    cgiFormFileContentType("updatePkg", contentType, sizeof(contentType));
    //目前文件存在于系统临时文件夹中,通常为/tmp,通过该命令打开临时文件。临时文件的名字与用户文件的名字不同,所以不能通过路径/tmp/userfilename的方式获得文件
    if (cgiFormFileOpen("updatePkg", &file) != cgiFormSuccess) {
        fprintf(stderr,"could not open the file\n");
        goto FAIL;
    }
    t=-1; 
    //从路径名解析出用户文件名
    while(1){
        tmpStr=strstr(name+t+1,"\\");
        if(NULL==tmpStr)
            tmpStr=strstr(name+t+1,"/");//if "\\" is not path separator, try "/"
        if(NULL!=tmpStr)
            t=(int)(tmpStr-name);
        else
            break;
    } 
    strcpy(fileNameOnServer,"/app/webapp/httpd/html/file/");
    strcat(fileNameOnServer,name+t+1);
    mode=S_IRWXU|S_IRGRP|S_IROTH;  
    
    //删除同名文件 
    sprintf(cmd,"%s",fileNameOnServer);
    remove(cmd);
      
    //在当前目录下建立新的文件,第一个参数实际上是路径名,此处的含义是在cgi程序所在的目录(当前目录))建立新文件    
    targetFile=open(fileNameOnServer,O_RDWR|O_CREAT|O_TRUNC|O_APPEND,mode);
    if(targetFile<0){
        fprintf(stderr,"could not create the new file,%s\n",fileNameOnServer);
        goto FAIL;
    }
    //从系统临时文件中读出文件内容,并放到刚创建的目标文件中 
    while (cgiFormFileRead(file, buffer, BufferLen, &got) ==cgiFormSuccess){
        if(got>0)
            write(targetFile,buffer,got);    
    }
    cgiFormFileClose(file);
    close(targetFile);
    strcpy(msg,"升级文件上传成功!");
    
    
//    sprintf(cmd,"nohup /bin/Online &");
//	 system(cmd);
//	 sleep(1);
	 SendUpdateCmd(itemId,slots,cardtypes,name+t+1);
    goto END; 
FAIL:
   cgiHeaderContentType("text/html; charset=utf-8");
	printf("<html >\n");
	printf("<head> \n");
	printf("<title>Upload Information</title> \n");
	printf("</head> \n");
	printf("<body> \n");
	printf("<script type=\"text/javascript\">");
	//提示操作信息 
	printf("alert(\"%s\");",msg);	
	//提示信息后返回原页面 
	printf("window.location.href=\"/net/update.html\";");
	printf("</script>");
	printf("</body> \n");
	printf("</html> \n");
	return 0;
END:    
   cgiHeaderContentType("text/html; charset=utf-8");
	printf("<html >\n");
	printf("<head> \n");
	printf("<title>Upload Information</title> \n");
	printf("</head> \n");
	printf("<body> \n");
	printf("<script type=\"text/javascript\">");
	//提示操作信息 
	//printf("alert(\"%s\");",msg);	
	//提示信息后返回原页面 
	printf("window.location.href=\"/net/progress.html?itemId=%d\";",itemId);
	printf("</script>");
	printf("</body> \n");
	printf("</html> \n");
	return 0;
}
Exemplo n.º 5
0
int cgiMain(void){
    cgiFilePtr file;
    char fileNameOnServer[512]={0};
    char buffer[pic_max_len];
    int got = 0;
	int filelen = 0;
	Ctcp *conn_fileserver = NULL; 	
	char s_data[512]; 
	logo_recv_webclient_t data;
	uint32_t pic_type = 0;
	uint32_t branchtype = 0;
	logo_recv_fileServ_t* recv_data = NULL;
	log_init("/cgi/log/",(log_lvl_t)8,log_size,0,"");
	cgiHeaderContentType((char *)"text/html");
	  
	cgiFormString((char*)"session_key",s_data,512);
	if(strlen(s_data) == 0){
		CGI_ERROR_LOG("session_key error:len[%u] [%s]",strlen(s_data),s_data);
		cgi_print_result(recv_data,fileNameOnServer,pic_type,branchtype,FAIL,session_key_err);
		return FAIL;
	}
	parse_web_data(s_data,&data);
	
	if(data.cnt >CNT_MAX){
		CGI_ERROR_LOG("thumb cnt error[%u]",data.cnt);
		cgi_print_result(recv_data,fileNameOnServer,pic_type,branchtype,FAIL,thumb_cnt_err);
		return FAIL;
	}
	if(cgiFormFileName((char *)"file",fileNameOnServer, sizeof(fileNameOnServer)) !=cgiFormSuccess){   
		CGI_ERROR_LOG("could not retrieve filename, file: %s", fileNameOnServer);
		cgi_print_result(recv_data,"",pic_type,branchtype,FAIL,retrieve_filename_err);
		return FAIL;
    }
	char tfilename[128];
	if(cgiFormSuccess != cgiGetFilePath((char *)"file",tfilename,sizeof(tfilename))){
		CGI_ERROR_LOG("GET FILE PATH ERROR");
		cgi_print_result(recv_data,"",pic_type,branchtype,FAIL,retrieve_filename_err);
		return FAIL;
	}
	
	cgiFormFileSize((char *)"file", &filelen);
	if(filelen > pic_max_len){
		CGI_ERROR_LOG("file size is too big");
		cgi_print_result(recv_data,fileNameOnServer,pic_type,branchtype,FAIL,image_size_err);
		return FAIL;
	}

    if (cgiFormFileOpen((char *)"file", &file) != cgiFormSuccess) {
		CGI_ERROR_LOG("could not open the file");
		cgi_print_result(recv_data,fileNameOnServer,pic_type,branchtype,FAIL,open_file_err);
        return FAIL;
    }
	if(-1 == config_init("/opt/taomee/cgi_conf/bench.conf")){
		CGI_ERROR_LOG("read conf_file error");
		cgi_print_result(recv_data,fileNameOnServer,pic_type,branchtype,FAIL,unknown_err);
		return FAIL;
	}
	char *bind_ip = config_get_strval("bind_ip");
	if(data.ip != inet_addr(bind_ip)){
		struct in_addr addr1;
		memcpy(&addr1, &(data.ip), 4);
		CGI_ERROR_LOG("request is forbidden bind_ip[%d %s],req_ip[%u %s]",inet_addr(bind_ip),bind_ip,data.ip,inet_ntoa(addr1));
		cgi_print_result(recv_data,fileNameOnServer,pic_type,branchtype,FAIL,hostid_err);
		return FAIL;
	}
	time_t now_time; 
	now_time = time(NULL);  
	if((now_time - data.time) > 5*60){
		CGI_ERROR_LOG("upload timeout nowtime[%u] data.time[%u]",now_time,data.time);
		cgi_print_result(recv_data,fileNameOnServer,pic_type,branchtype,FAIL,timeout_err);
		return FAIL;
	}
	conn_fileserver = new Ctcp(config_get_strval("bind_fileserver_ip"),config_get_intval("bind_fileserver_port", 0),0,10);	
	if(cgiFormFileRead(file, buffer, pic_max_len, &got) ==cgiFormSuccess){
		if(got > 0){
			uint8_t filedate[8];
			memcpy(filedate,(uint8_t*)buffer,8);
			parse_uploadfile_type(&pic_type ,&branchtype,filedate);
			if(pic_type == 2){
				CGI_ERROR_LOG("image type error.");
				delete conn_fileserver;
				cgiFormFileClose(file);
				cgi_print_result(recv_data,fileNameOnServer,pic_type,branchtype,FAIL,image_type_err);
				config_exit();
				return FAIL;
			}
			if(NULL == cgi_create_image(branchtype, got, buffer)){
				CGI_ERROR_LOG("invalid file");
				delete conn_fileserver;
				cgiFormFileClose(file);
				cgi_print_result(recv_data,fileNameOnServer,pic_type,branchtype,FAIL,invalid_file);
				config_exit();
				return FAIL;
			}
			cgiFormFileClose(file);
			recv_data = connect_with_fileserver(buffer,conn_fileserver,&data,filelen,pic_type,branchtype,tfilename);
      		if(recv_data == NULL){
				CGI_ERROR_LOG("cgi connect fileserver error");
				delete conn_fileserver;
				cgi_print_result(recv_data,fileNameOnServer,pic_type,branchtype,FAIL,net_err);
				config_exit();
				return FAIL;
			}
			delete conn_fileserver;
			cgi_print_result(recv_data,fileNameOnServer,pic_type,branchtype,SUCC,0);
			config_exit();
			return SUCC;
		}

	}
	CGI_ERROR_LOG("cgi read file error:got=%d",got);
	delete conn_fileserver;
	cgiFormFileClose(file);
	cgi_print_result(recv_data,fileNameOnServer,pic_type,branchtype,FAIL,read_file_err);
	config_exit();
	return FAIL;	
}
Exemplo n.º 6
0
int cgiMain(void){
	cgiFilePtr file;
	int targetFile;
	mode_t mode;
	char name[128];
	char nameForCheck[64];
	char fileNameOnServer[64];
	char contentType[1024];
	char buffer[BufferLen];
	char *tmpStr=NULL;
	int size;
	int got,t;

	//取得html页面中file元素的值--文件在客户机上的路径名
	if (cgiFormFileName("file", name, sizeof(name)) !=cgiFormSuccess) {
	}
	cgiFormFileSize("file", &size);
	//取得文件类型
	cgiFormFileContentType("file", contentType, sizeof(contentType));
	//目前文件存在于系统临时文件夹中,通常为/tmp,通过该命令打开临时文件
	if (cgiFormFileOpen("file", &file) != cgiFormSuccess) {
		goto FAIL;
	}
	t=-1;
	//从路径名解析出用户文件名
	while(1){
		tmpStr=strstr(name+t+1,"\\");
		if(NULL==tmpStr)
			tmpStr=strstr(name+t+1,"/");//if "\\" is not path separator, try "/"
		if(NULL!=tmpStr)
			t=(int)(tmpStr-name);
		else
			break;
	}
	strcpy(fileNameOnServer,name+t+1);
	mode=S_IRWXU|S_IRGRP|S_IROTH;
	//在当前目录下建立新的文件,第一个参数实际上是路径名,此处的含义是在cgi程序所在的目录(当前目录))建立新文件
	targetFile=open(fileNameOnServer,O_RDWR|O_CREAT|O_TRUNC|O_APPEND,mode);
	if(targetFile<0){
		goto FAIL;
	}
	//从系统临时文件中读出文件内容,并放到刚创建的目标文件中
	while (cgiFormFileRead(file, buffer, BufferLen, &got) ==cgiFormSuccess){
		if(got>0)
			write(targetFile,buffer,got);
	}
	cgiFormFileClose(file);
	close(targetFile);
	goto END;

	FAIL:
		cgiHeaderLocation("../upgrade_error.html");
		system("rm /tmp/*");
		return 1;
	END:
		//升级动作
		if(cgiFormString("upfile1",nameForCheck,64)==cgiFormSuccess){
			system("mv /app/www/cgi-bin/rtu /app/");
			system("chmod 777 /app/rtu");
		}else if(cgiFormString("upfile2",nameForCheck,64)==cgiFormSuccess){
			system("");//预留,以后做好安装包再说
		}

		//以下为网页部分
		printf("Content-type: text/html\r\n\r\n");
		printf("<html>");
		printf("<head>");
		printf("    <meta charset=\"utf-8\" content=\"text/html\">");
		printf("    <title>");
		printf("        ctt-2000e动环设备");
		printf("    </title>");
		printf("</head>");
		printf("<body style=\"background:#1782dd\">");
		printf("<div id=\"all\" style=\"width:500px;margin:250px auto;color:#fff;font-size:30px;text-align:center;line-height:60px;\">");
		printf("    升级成功<br>系统将在 <i id=\"time\" style=\"font-size:45px;\">5</i> 秒后重启");
		printf("</div>");
		printf("<script type=\"text/javascript\">");
		printf("    var id_of_time=setInterval(setTime,1000);");
		printf("    setTimeout(close,5000);");
		printf("    function setTime(){");
		printf("        var lastTime=document.getElementById(\"time\");");
		printf("        var number=lastTime.innerHTML;");
		printf("        number=number-1;");
		printf("        lastTime.innerHTML=number;");
		printf("    }");
		printf("    function close(){");
		printf("	clearInterval(id_of_time);");
		printf("	var all=document.getElementById(\"all\");");
		printf("	all.innerHTML=\"系统重启中,请稍后点此重试连接\";");
		printf("	all.onclick=function(){");
		printf("	    window.open(\"http://\"+location.hostname+\":\"+location.port,\"_self\",\"\");");
		printf("        };");
		printf("    }");
		printf("</script>");
		printf("</body>");
		printf("</html>");

		system("rm /tmp/*");
		system("/sbin/reboot");
		return 0;
}