Beispiel #1
0
static int
set_parse_v2(int c, char **argv, int invert, unsigned int *flags,
	     const void *entry, struct xt_entry_match **match)
{
	struct xt_set_info_match_v1 *myinfo = 
		(struct xt_set_info_match_v1 *) (*match)->data;
	struct xt_set_info *info = &myinfo->match_set;

	switch (c) {
	case '3':
		info->flags |= IPSET_RETURN_NOMATCH;
		break;
	case '2':
		fprintf(stderr,
			"--set option deprecated, please use --match-set\n");
	case '1':		/* --match-set <set> <flag>[,<flag> */
		if (info->dim)
			xtables_error(PARAMETER_PROBLEM,
				      "--match-set can be specified only once");
		if (invert)
			info->flags |= IPSET_INV_MATCH;

		if (!argv[optind]
		    || argv[optind][0] == '-'
		    || argv[optind][0] == '!')
			xtables_error(PARAMETER_PROBLEM,
				      "--match-set requires two args.");

		if (strlen(optarg) > IPSET_MAXNAMELEN - 1)
			xtables_error(PARAMETER_PROBLEM,
				      "setname `%s' too long, max %d characters.",
				      optarg, IPSET_MAXNAMELEN - 1);

		get_set_byname(optarg, info);
		parse_dirs(argv[optind], info);
		DEBUGP("parse: set index %u\n", info->index);
		optind++;
		
		*flags = 1;
		break;
	}

	return 1;
}
Beispiel #2
0
static int ipset_parse_eopt(struct nlmsghdr *n, struct tcf_ematch_hdr *hdr,
			    struct bstr *args)
{
	struct xt_set_info set_info = {};
	int ret;

#define PARSE_ERR(CARG, FMT, ARGS...) \
	em_parse_error(EINVAL, args, CARG, &ipset_ematch_util, FMT, ##ARGS)

	if (args == NULL)
		return PARSE_ERR(args, "ipset: missing set name");

	if (args->len >= IPSET_MAXNAMELEN)
		return PARSE_ERR(args, "ipset: set name too long (max %u)", IPSET_MAXNAMELEN - 1);
	ret = get_set_byname(args->data, &set_info);
	if (ret < 0)
		return PARSE_ERR(args, "ipset: unknown set name '%s'", args->data);

	if (args->next == NULL)
		return PARSE_ERR(args, "ipset: missing set flags");

	args = bstr_next(args);
	if (parse_dirs(args->data, &set_info))
		return PARSE_ERR(args, "ipset: error parsing set flags");

	if (args->next) {
		args = bstr_next(args);
		return PARSE_ERR(args, "ipset: unknown parameter");
	}

	addraw_l(n, MAX_MSG, hdr, sizeof(*hdr));
	addraw_l(n, MAX_MSG, &set_info, sizeof(set_info));

#undef PARSE_ERR
	return 0;
}
Beispiel #3
0
/* Revision 4 */
static int
set_parse_v4(int c, char **argv, int invert, unsigned int *flags,
	     const void *entry, struct xt_entry_match **match)
{
	struct xt_set_info_match_v4 *info =
		(struct xt_set_info_match_v4 *) (*match)->data;

	switch (c) {
	case 'a':
		if (invert)
			info->flags |= IPSET_FLAG_SKIP_SUBCOUNTER_UPDATE;
		break;
	case '0':
		if (info->bytes.op != IPSET_COUNTER_NONE)
			xtables_error(PARAMETER_PROBLEM,
				      "only one of the --bytes-[eq|lt|gt]"
				      " is allowed\n");
		if (invert)
			xtables_error(PARAMETER_PROBLEM,
				      "--bytes-gt option cannot be inverted\n");
		info->bytes.op = IPSET_COUNTER_GT;
		info->bytes.value = parse_counter(optarg);
		break;
	case '9':
		if (info->bytes.op != IPSET_COUNTER_NONE)
			xtables_error(PARAMETER_PROBLEM,
				      "only one of the --bytes-[eq|lt|gt]"
				      " is allowed\n");
		if (invert)
			xtables_error(PARAMETER_PROBLEM,
				      "--bytes-lt option cannot be inverted\n");
		info->bytes.op = IPSET_COUNTER_LT;
		info->bytes.value = parse_counter(optarg);
		break;
	case '8':
		if (info->bytes.op != IPSET_COUNTER_NONE)
			xtables_error(PARAMETER_PROBLEM,
				      "only one of the --bytes-[eq|lt|gt]"
				      " is allowed\n");
		info->bytes.op = invert ? IPSET_COUNTER_NE : IPSET_COUNTER_EQ;
		info->bytes.value = parse_counter(optarg);
		break;
	case '7':
		if (info->packets.op != IPSET_COUNTER_NONE)
			xtables_error(PARAMETER_PROBLEM,
				      "only one of the --packets-[eq|lt|gt]"
				      " is allowed\n");
		if (invert)
			xtables_error(PARAMETER_PROBLEM,
				      "--packets-gt option cannot be inverted\n");
		info->packets.op = IPSET_COUNTER_GT;
		info->packets.value = parse_counter(optarg);
		break;
	case '6':
		if (info->packets.op != IPSET_COUNTER_NONE)
			xtables_error(PARAMETER_PROBLEM,
				      "only one of the --packets-[eq|lt|gt]"
				      " is allowed\n");
		if (invert)
			xtables_error(PARAMETER_PROBLEM,
				      "--packets-lt option cannot be inverted\n");
		info->packets.op = IPSET_COUNTER_LT;
		info->packets.value = parse_counter(optarg);
		break;
	case '5':
		if (info->packets.op != IPSET_COUNTER_NONE)
			xtables_error(PARAMETER_PROBLEM,
				      "only one of the --packets-[eq|lt|gt]"
				      " is allowed\n");
		info->packets.op = invert ? IPSET_COUNTER_NE : IPSET_COUNTER_EQ;
		info->packets.value = parse_counter(optarg);
		break;
	case '4':
		if (invert)
			info->flags |= IPSET_FLAG_SKIP_COUNTER_UPDATE;
		break;
	case '3':
		if (invert)
			xtables_error(PARAMETER_PROBLEM,
				      "--return-nomatch flag cannot be inverted\n");
		info->flags |= IPSET_FLAG_RETURN_NOMATCH;
		break;
	case '2':
		fprintf(stderr,
			"--set option deprecated, please use --match-set\n");
	case '1':		/* --match-set <set> <flag>[,<flag> */
		if (info->match_set.dim)
			xtables_error(PARAMETER_PROBLEM,
				      "--match-set can be specified only once");
		if (invert)
			info->match_set.flags |= IPSET_INV_MATCH;

		if (!argv[optind]
		    || argv[optind][0] == '-'
		    || argv[optind][0] == '!')
			xtables_error(PARAMETER_PROBLEM,
				      "--match-set requires two args.");

		if (strlen(optarg) > IPSET_MAXNAMELEN - 1)
			xtables_error(PARAMETER_PROBLEM,
				      "setname `%s' too long, max %d characters.",
				      optarg, IPSET_MAXNAMELEN - 1);

		get_set_byname(optarg, &info->match_set);
		parse_dirs(argv[optind], &info->match_set);
		DEBUGP("parse: set index %u\n", info->match_set.index);
		optind++;

		*flags = 1;
		break;
	}

	return 1;
}
Beispiel #4
0
void Fl_File_Dialog::read_dir(const char *_path)
{
    image_cache.clear();
    update_preview(0);

    static char read_path[4096];
    if(_path && *_path) {
        normalize_path(_path, read_path);
        //strncpy(read_path, _path, 4096);
    } else read_path[0] = '\0';

#ifndef _WIN32
    if(!*read_path) { _path = "/"; }
    if(!strcmp(read_path, "My Home")) {
        char *home = fl_get_homedir();
        strncpy(read_path, home, 4096);
        delete []home;
        _path = read_path;
    }
    parse_dirs(_path);
#else
    parse_dirs(_path);
    bool get_drives = false;
    bool read_net = false; LPNETRESOURCE netres=0;
	
    if(!*read_path || !strcmp(read_path, "My Computer"))
    {
        get_drives = true;
        _path=0;
    } else
    if(!strcmp(read_path, "My Network")) {
		read_net = true;
        _path=0;
    } else
    if(read_path[0]=='\\' && read_path[1]=='\\') {		
        char *p = strchr((char *)(read_path+2), '\\');
        if(!p) {
		    //Network path, w/o share name. Try to read all shares
            NETRESOURCE net;
            memset(&net, 0, sizeof(net));
            net.lpRemoteName = strdup(read_path);
            netres = &net;
            read_net = true;
        }
    }
#endif
    fullpath(_path);

    if(!fullpath_) up_->deactivate();
    else up_->activate();

    if(mode_!=Fl_File_Dialog::DIRECTORY || (mode_==Fl_File_Dialog::DIRECTORY && !fullpath_))
        ok_->deactivate();

    location_->value("");

    listview_->yposition(0);
    listview_->column_width(0, -1);
    listview_->clear();
    listview_->begin();

#ifdef _WIN32
    if(get_drives)
    {
        listview_->column_name(1, "Type");
        listview_->column_name(2, "Used Space");
        listview_->column_name(3, "Free Space");
        DWORD drvs = GetLogicalDrives();
        char drive[4];
        Fl_FileItem *it;
        for(int i = 'A'; i <= 'Z'; i++, drvs >>= 1) {
            if(drvs & 1) {
                sprintf(drive, "%c:", i);
                it = new Fl_FileItem(drive, fl_file_attr(drive));
                it->image(0, hd_pix);
            }
        }
    }
    else if(read_net) {