Esempio n. 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;
};
Esempio n. 2
0
int smscconn_usable(SMSCConn *conn, Msg *msg)
{
    gw_assert(conn != NULL);
    gw_assert(msg != NULL && msg_type(msg) == sms);

    if (conn->status == SMSCCONN_DEAD || conn->why_killed != SMSCCONN_ALIVE)
	return -1;

    /* if allowed-smsc-id set, then only allow this SMSC if message
     * smsc-id matches any of its allowed SMSCes
     */
    if (conn->allowed_smsc_id && (msg->sms.smsc_id == NULL ||
         gwlist_search(conn->allowed_smsc_id, msg->sms.smsc_id, octstr_item_match) == NULL)) {
        return -1;
    }
    /* ..if no allowed-smsc-id set but denied-smsc-id and message smsc-id
     * is set, deny message if smsc-ids match */
    else if (conn->denied_smsc_id && msg->sms.smsc_id != NULL &&
                 gwlist_search(conn->denied_smsc_id, msg->sms.smsc_id, octstr_item_match) != NULL) {
        return -1;
    }

    if (conn->allowed_smsc_id_regex) {
        if (msg->sms.smsc_id == NULL)
            return -1;
        
        if (gw_regex_match_pre(conn->allowed_smsc_id_regex, msg->sms.smsc_id) == 0) 
            return -1;
    }
    else if (conn->denied_smsc_id_regex && msg->sms.smsc_id != NULL) {
        if (gw_regex_match_pre(conn->denied_smsc_id_regex, msg->sms.smsc_id) == 1) 
            return -1;
    }

    /* Have allowed */
    if (conn->allowed_prefix && ! conn->denied_prefix && 
       (does_prefix_match(conn->allowed_prefix, msg->sms.receiver) != 1))
	return -1;
    
    if (conn->allowed_prefix_regex && ! conn->denied_prefix_regex) {
        if (gw_regex_match_pre(conn->allowed_prefix_regex, msg->sms.receiver) == 0)
            return -1;
    }

    /* Have denied */
    if (conn->denied_prefix && ! conn->allowed_prefix &&
       (does_prefix_match(conn->denied_prefix, msg->sms.receiver) == 1))
	return -1;

    if (conn->denied_prefix_regex && ! conn->allowed_prefix_regex) {
        if (gw_regex_match_pre(conn->denied_prefix_regex, msg->sms.receiver) == 1)
            return -1;
    }

    /* Have allowed and denied */
    if (conn->denied_prefix && conn->allowed_prefix &&
       (does_prefix_match(conn->allowed_prefix, msg->sms.receiver) != 1) &&
       (does_prefix_match(conn->denied_prefix, msg->sms.receiver) == 1) )
	return -1;

    if (conn->allowed_prefix_regex && conn->denied_prefix_regex) {
        if (gw_regex_match_pre(conn->allowed_prefix_regex, msg->sms.receiver) == 0 &&
            gw_regex_match_pre(conn->denied_prefix_regex, msg->sms.receiver) == 1)
            return -1;
    }
    
    /* then see if it is preferred one */
    if (conn->preferred_smsc_id && msg->sms.smsc_id != NULL &&
         gwlist_search(conn->preferred_smsc_id, msg->sms.smsc_id, octstr_item_match) != NULL) {
        return 1;
    }

    if (conn->preferred_prefix)
	if (does_prefix_match(conn->preferred_prefix, msg->sms.receiver) == 1)
	    return 1;

    if (conn->preferred_prefix_regex &&
        gw_regex_match_pre(conn->preferred_prefix_regex, msg->sms.receiver) == 1) {
        return 1;
    }
        
    return 0;
}
Esempio n. 3
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;
};