Exemple #1
0
void* cam_folder_init(char* path, char* folder_name, char* postfix, int* file_num, int name_format)
{
	folderInfo_t* fi;
	int ret;
	
	fi = malloc(sizeof(folderInfo_t));
	
	if (!fi)
	{
		printf("[%s] out of memory!\n", __FUNCTION__);
		return NULL;
	}
	
	memset(fi, 0, sizeof(folderInfo_t));
	
	strcpy(fi->root_path, path);
	strcpy(fi->folder_name, folder_name);
	fi->name_format = name_format;
	if (postfix)
		fi->postfix = strdup(postfix);
	printf("[%s] path = %s, directory = %s\n", __FUNCTION__, path, folder_name);	
	ret = folder_scan(fi);
	if (0 > ret)
	{
		printf("[%s] folder scan fail!\n", __FUNCTION__);
		free(fi);
		fi = NULL;
	}
	
	if(file_num)
		*file_num = ret;
	return (void*)fi;
}
Exemple #2
0
int main(int argc, char *argv[], char* envp[])
{
	char cwd[100];
	int ret;

	if (argc < 2 || argc > 3) {
		printf
			("Usage: antivirus <-options> <folder_name/binary_name>\nOptions:\n\t-scan: Scanning the binary for virus\n\t-update: Updating the virus database\n");
		return 0;
	}

	getcwd(cwd,100);
	//To print in STDOUT when running on-demand as a user process
#if 0
	printf("pwd=%s argc=%d ", cwd, argc);

	int i;
	for (i = 0; i < argc; i++) {
		printf("argv[%d]=%s ", i, argv[i]);
	}
	printf("\n");
#endif

	if (!strcmp(argv[1], "-scan")) {
		if (argc != 3) {
			printf("Usage: antivirus <-options> <binary_name>\nOptions:\n\t-scan: Scanning the binary for virus\n\t-update: Updating the virus database\n");
			return 0;
		}
		int is_folder = is_path_a_folder(argv[2]);
		if (!is_folder) {
			binary_scan(argv[2]);
		} else if (is_folder == 1) {
			folder_scan(argv[2]);
		} else {
			printf("File/Folder not found\n");
		}

	} else if (!strcmp(argv[1], "-update")) {
		ret = update_antivirus();
		if (ret < 0) {
			printf("Antivirus update failed\n");
		} else if (ret == 0) {
			printf("Antivirus files whitelist, blacklist updated successfully\n");
		}
	} else {
		printf
			("Usage: antivirus <-options> <binary_name>\nOptions:\n\t-scan: Scanning the binary for virus\n\t-update: Updating the virus database\n");
	}
	return 0;
}
Exemple #3
0
static int get_current_folder(folderInfo_t* fi, char* folderpath)
{
	int fnum = 0, new_folder = 0;
	char tmp[256], tmp2[256];
	
	if (!fi->folder_num)
	{
		fnum = 100;
		new_folder = 1;
		get_index_folder_name(tmp, fnum, fi->working_path);
	}
	else
	{
		strcpy(tmp, fi->folder_list[fi->folder_num-1]->d_name);
		tmp[3] = 0;
		fnum = (int)strtoul(tmp, NULL, 10);
		
		sprintf(tmp2, "%s/%s", fi->working_path, fi->folder_list[fi->folder_num-1]->d_name);
		get_index_folder_name(tmp, fnum, fi->working_path);
		
		if (strcmp(tmp, tmp2))
		{
			new_folder = 1;
			fnum++;
			get_index_folder_name(tmp, fnum, fi->working_path);
		}
	}
	
	strcpy(folderpath, tmp);

	if (new_folder)
	{
		printf("[folder] create directory %s\n", folderpath);
		if (0 > mkdir(folderpath, S_IRWXU | S_IRWXG | S_IRWXO))
		{
			printf("[folder] cannot create directory %s, error: %s\n", folderpath, strerror(errno));
			if (errno != EEXIST)
				return -1;
		}
		fnum = folder_scan(fi);
	}
	else
		fnum = 0;
	
	return fnum;
}
Exemple #4
0
static int get_current_folder2(folderInfo_t* fi, char* folderpath)
{
	char path[256];
	int fnum = 0;
	DIR *dir;
	
	get_date_folder_name(path, fi->working_path);
	
	dir = opendir(path);
		
	if (!dir)
	{
		if (errno == ENOENT)
		{
			if (0 > mkdir(path, S_IRWXU | S_IRWXG | S_IRWXO))
			{
				printf("[folder] canot create directory %s. error: %s\n", path, strerror(errno));
				return -1;
			}			
		}
		
		dir = opendir(path);
		
		if (!dir)
		{
			printf("[folder] open directory %s fail. error: %s\n", path, strerror(errno));
			return -1;
		}
		fnum = folder_scan(fi);
	}
	
	closedir(dir);
	
	strcpy(folderpath, path);
	
	return fnum;
}
Exemple #5
0
int cam_delete_file(void* handle, int size)
{
	folderInfo_t* fi = (folderInfo_t*)handle;
	char folder[256];
	char file[256];
	int i;
	UINT64 del_space = 0;
	int current_folder = 0;
	
	if (!fi->folder_num)
		return 0;

	if (fi->delete_folder_idx == fi->folder_num)
		folder_scan(fi);

	if (!size)
		size = 1;

	//printf("[folder] delete minimum size = %u, old_file_num = %d\n", size, old_file_num);
	
	while(1)
	{
		sprintf(folder, "%s/%s", fi->working_path, fi->folder_list[fi->delete_folder_idx]->d_name);
		if (fi->old_file_num < 1)
		{
			fi->delete_idx = 0;    
    		printf("[folder] scan directory [%d] to delete: %s\n", fi->delete_folder_idx, folder);	
			if (fi->name_format == 1)
				fi->old_file_num = scandir(folder, &fi->file_list, file_select2, file_compar2);
			else
				fi->old_file_num = scandir(folder, &fi->file_list, file_select, file_compar);
			if (0 > fi->old_file_num)
			{
				printf("[folder] cannot scan directory %s. errno: %s\n", folder, strerror(errno));
				return -1;
			}
			
			current_folder = 0;
			if (fi->delete_folder_idx == (fi->folder_num - 1))
			{
				current_folder = 1;	
				fi->old_file_num --;
			}
				
			//for (i = 0; i < old_file_num; i++)
				//printf("[folder scan] [%d] %s\n", i, file_list[i]->d_name);
		}
					
		for (i = fi->delete_idx; i < fi->old_file_num; i++)
		{
			struct stat stbuf;
			
			if (del_space >= size)
				break;

			sprintf(file, "%s/%s", folder, fi->file_list[i]->d_name);
			
			stat(file, &stbuf);
			
			if (stbuf.st_mode & S_IWUSR)
			{
				printf("[folder] del the file [%d] %s\n", i, file);
				if(unlink(file) == 0)
					del_space += stbuf.st_size;
			}
		}
		
		fi->delete_idx = i;
		
		if (i == fi->old_file_num || i == 0)
		{
			if (current_folder)
				fi->old_file_num++;
				
			for (i = 0; i < fi->old_file_num; i++)
				free(fi->file_list[i]);

			if (fi->file_list)
			{
				free(fi->file_list);
				fi->file_list = NULL;
			}
					
			if (!current_folder)
			{
				printf("[folder] remove directory %s\n", folder);
				if (0 > rmdir(folder))
					printf("[folder] cannot delete folder %s, error:%s\n", folder, strerror(errno));
				fi->delete_folder_idx ++;
			}
			fi->delete_idx = 0;
			fi->old_file_num = 0;
		}
		
		if (del_space >= size || fi->delete_folder_idx == fi->folder_num || current_folder)
			break;
	}
	
	printf("[folder] del %llu bytes\n", del_space);
	return del_space;
}