Beispiel #1
0
/*
 * checks if a request matches the parameters of a URL-Translation, e.g. whether or not 
 * a user is allowed to use certain services. returns 0 if allowed, -1 if not.
 */
static int check_allowed_translation(URLTranslation *t,
                  Octstr *smsc, Octstr *sender, Octstr *receiver, Octstr *account)
{
    const int IS_ALLOWED = 0;
    const int NOT_ALLOWED = -1;

    /* if smsc_id set and accepted_smsc exist, accept
     * translation only if smsc id is in accept string
     */
    if (smsc && t->accepted_smsc && !gwlist_search(t->accepted_smsc, smsc, octstr_item_match))
        return NOT_ALLOWED;

    if (smsc && t->accepted_smsc_regex && gw_regex_match_pre( t->accepted_smsc_regex, smsc) == 0)
        return NOT_ALLOWED;

    /* if account_id set and accepted_account exist, accept
     * translation only if smsc id is in accept string
     */
    if (account && t->accepted_account && !gwlist_search(t->accepted_account, account, octstr_item_match))
        return NOT_ALLOWED;

    if (account && t->accepted_account_regex && gw_regex_match_pre( t->accepted_account_regex, account) == 0)
        return NOT_ALLOWED;

    /* Have allowed for sender */
    if (t->allowed_prefix && !t->denied_prefix && does_prefix_match(t->allowed_prefix, sender) != 1)
        return NOT_ALLOWED;

    if (t->allowed_prefix_regex && !t->denied_prefix_regex && gw_regex_match_pre(t->allowed_prefix_regex, sender) == 0)
        return NOT_ALLOWED;

    /* Have denied for sender */
    if (t->denied_prefix && !t->allowed_prefix && does_prefix_match(t->denied_prefix, sender) == 1)
        return NOT_ALLOWED;

    if (t->denied_prefix_regex && !t->allowed_prefix_regex && gw_regex_match_pre(t->denied_prefix_regex, sender) == 1)
        return NOT_ALLOWED;

    /* Have allowed for receiver */
    if (t->allowed_recv_prefix && !t->denied_recv_prefix && does_prefix_match(t->allowed_recv_prefix, receiver) != 1)
        return NOT_ALLOWED;

    if (t->allowed_receiver_prefix_regex && !t->denied_receiver_prefix_regex &&
        gw_regex_match_pre(t->allowed_receiver_prefix_regex, receiver) == 0)
        return NOT_ALLOWED;

    /* Have denied for receiver */
    if (t->denied_recv_prefix && !t->allowed_recv_prefix && does_prefix_match(t->denied_recv_prefix, receiver) == 1)
        return NOT_ALLOWED;

    if (t->denied_receiver_prefix_regex && !t->allowed_receiver_prefix_regex &&
        gw_regex_match_pre(t->denied_receiver_prefix_regex, receiver) == 0)
        return NOT_ALLOWED;

    if (t->white_list && numhash_find_number(t->white_list, sender) < 1) {
        return NOT_ALLOWED;
    }

    if (t->white_list_regex && gw_regex_match_pre(t->white_list_regex, sender) == 0) {
        return NOT_ALLOWED;
    }   

    if (t->black_list && numhash_find_number(t->black_list, sender) == 1) {
        return NOT_ALLOWED;
    }

    if (t->black_list_regex && gw_regex_match_pre(t->black_list_regex, sender) == 1) {
        return NOT_ALLOWED;
    }   

    /* Have allowed and denied */
    if (t->denied_prefix && t->allowed_prefix && does_prefix_match(t->allowed_prefix, sender) != 1 &&
        does_prefix_match(t->denied_prefix, sender) == 1)
        return NOT_ALLOWED;

    if (t->denied_prefix_regex && t->allowed_prefix_regex &&
        gw_regex_match_pre(t->allowed_prefix_regex, sender) == 0 &&
        gw_regex_match_pre(t->denied_prefix_regex, sender) == 1)
        return NOT_ALLOWED;

    return IS_ALLOWED;
};
Beispiel #2
0
/*
 * checks if a request matches the parameters of a URL-Translation, e.g. whether or not 
 * a user is allowed to use certain services. returns 0 if allowed, -1 if not.
 * reject will be set to 1 is a number is rejected due to white/black-lists.
 */
static int check_allowed_translation(URLTranslation *t, 
                  Octstr *smsc, Octstr *sender, Octstr *receiver, int *reject)
{
    const int IS_ALLOWED = 0;
    const int NOT_ALLOWED = -1;

	/* if smsc_id set and accepted_smsc exist, accept
	 * translation only if smsc id is in accept string
	 */
	if (smsc && t->accepted_smsc) {
        if (!list_search(t->accepted_smsc, smsc, octstr_item_match))              
            return NOT_ALLOWED;
    };
    if (smsc && t->accepted_smsc_regex)
        if (gw_regex_matches( t->accepted_smsc_regex, smsc) == NO_MATCH)
            return NOT_ALLOWED;

	/* Have allowed for sender */
	if (t->allowed_prefix && ! t->denied_prefix &&
        (does_prefix_match(t->allowed_prefix, sender) != 1))
            return NOT_ALLOWED;

    if (t->allowed_prefix_regex && ! t->denied_prefix_regex) 
        if (gw_regex_matches( t->allowed_prefix_regex, sender) == NO_MATCH)
            return NOT_ALLOWED;

	/* Have denied for sender */
	if (t->denied_prefix && ! t->allowed_prefix &&
    (does_prefix_match(t->denied_prefix, sender) == 1))
    return NOT_ALLOWED;

    if (t->denied_prefix_regex && ! t->allowed_prefix_regex)
        if (gw_regex_matches( t->denied_prefix_regex, sender) == NO_MATCH)
            return NOT_ALLOWED;

	/* Have allowed for receiver */
	if (t->allowed_recv_prefix && ! t->denied_recv_prefix &&
    (does_prefix_match(t->allowed_recv_prefix, receiver) != 1))
    return NOT_ALLOWED;

    if (t->allowed_receiver_prefix_regex && ! t->denied_receiver_prefix_regex)
    if (gw_regex_matches( t->allowed_receiver_prefix_regex, receiver) == NO_MATCH)
        return NOT_ALLOWED;

	/* Have denied for receiver */
	if (t->denied_recv_prefix && ! t->allowed_recv_prefix &&
    (does_prefix_match(t->denied_recv_prefix, receiver) == 1))
    return NOT_ALLOWED;

    if (t->denied_receiver_prefix_regex && ! t->allowed_receiver_prefix_regex)
    if (gw_regex_matches( t->denied_receiver_prefix_regex, receiver) == NO_MATCH)
        return NOT_ALLOWED;

	if (t->white_list &&
	    numhash_find_number(t->white_list, sender) < 1) {
    *reject = 1;
    return NOT_ALLOWED;
    }

    if (t->white_list_regex) 
    if (gw_regex_matches( t->white_list_regex, sender) == NO_MATCH) {
        *reject = 1;
        return NOT_ALLOWED;
	}   

	if (t->black_list &&
	    numhash_find_number(t->black_list, sender) == 1) {
    *reject = 1;
    return NOT_ALLOWED;
    }

    if (t->black_list_regex) 
    if (gw_regex_matches(t->black_list_regex, sender) == MATCH) {
        *reject = 1;
        return NOT_ALLOWED;
	}   

	/* Have allowed and denied */
	if (t->denied_prefix && t->allowed_prefix &&
	   (does_prefix_match(t->allowed_prefix, sender) != 1) &&
    (does_prefix_match(t->denied_prefix, sender) == 1) )
    return NOT_ALLOWED;

    if (t->denied_prefix_regex && t->allowed_prefix_regex
    && (gw_regex_matches(t->allowed_prefix_regex, sender) == NO_MATCH)
    && (gw_regex_matches(t->denied_prefix_regex, sender) == MATCH))
    return NOT_ALLOWED;

    return IS_ALLOWED;
};