📄 jam_policy.c
字号:
return return_a2p;
}
/*****************************************************************************
* FUNCTION
* get_def_max_perm
* DESCRIPTION
* Get the default and maximum setting of a domain in _policy.txt
* PARAMETERS
* allowed [OUT] If there is any "ALLOW" permission
* default_setting [OUT] Setting of default permission
* max_setting [OUT] Setting of maximum permission
* perm_key [IN] Input string in _policy.txt.
* RETURNS
* void
*****************************************************************************/
static void get_def_max_perm(kal_bool* allowed, kal_char* default_setting, kal_char* max_setting, kal_char* perm_key)
{
kal_int32 perm_index = 0;
while(kp_map[perm_index].key_string != NULL)
{
if(strncmp(kp_map[perm_index].key_string, perm_key, kp_map[perm_index].key_len) == 0)
{
if(perm_index == 0)
{
*allowed = KAL_TRUE;
return;
}
*max_setting = kp_map[perm_index].permission;
break;
}
perm_index ++;
}
perm_index = 0;
while(*perm_key != 0)
{
if(*perm_key == '(')
{
perm_key ++;
break;
}
perm_key ++;
}
if(*perm_key != 0)
{
while(kp_map[perm_index].key_string != NULL)
{
if(strncmp(kp_map[perm_index].key_string, perm_key, kp_map[perm_index].key_len) == 0)
{
if(perm_index == 0)
{
*allowed = KAL_TRUE;
return;
}
*default_setting = kp_map[perm_index].permission;
break;
}
perm_index ++;
}
}
}
/*****************************************************************************
* FUNCTION
* get_domain_perm
* DESCRIPTION
* Get permissions for all domain in _policy.txt
* PARAMETERS
* kp [IN] The key / value pair structure
* alias_to_perm_struct [IN] Alias permission group mapping
* RETURNS
* domain_permission_struct Array of domain name, max setting,
* and defualt setting group.
*****************************************************************************/
static domain_permission_struct* get_domain_perm(key_value_pair_struct* kp, alias_to_perm_struct* a2p)
{
domain_permission_struct* return_domain;
kal_int32 total_domain = 0;
kal_int32 kp_index = 0;
kal_int32 domain_index = 0;
kal_bool get_permission = KAL_FALSE;
while(kp[kp_index].key != NULL)
{
if(strcmp(kp[kp_index].key, "domain") == 0)
{
total_domain ++;
}
kp_index ++;
}
return_domain = (domain_permission_struct*) jvm_malloc(sizeof(domain_permission_struct) * (total_domain + 1));
kp_index = 0;
while(total_domain > 0)
{
total_domain --;
return_domain[total_domain].perm.permission_network = PERMISSION_DENY;
return_domain[total_domain].perm.permission_push = PERMISSION_DENY;
return_domain[total_domain].perm.permission_message = PERMISSION_DENY;
return_domain[total_domain].perm.permission_multimedia = PERMISSION_DENY;
return_domain[total_domain].perm.permission_data_read = PERMISSION_DENY;
return_domain[total_domain].perm.permission_data_write = PERMISSION_DENY;
return_domain[total_domain].perm.permission_local_connectivity = PERMISSION_DENY;
return_domain[total_domain].perm.permission_reserved = PERMISSION_DENY;
return_domain[total_domain].max_perm.permission_network = PERMISSION_DENY;
return_domain[total_domain].max_perm.permission_push = PERMISSION_DENY;
return_domain[total_domain].max_perm.permission_message = PERMISSION_DENY;
return_domain[total_domain].max_perm.permission_multimedia = PERMISSION_DENY;
return_domain[total_domain].max_perm.permission_data_read = PERMISSION_DENY;
return_domain[total_domain].max_perm.permission_data_write = PERMISSION_DENY;
return_domain[total_domain].max_perm.permission_local_connectivity = PERMISSION_DENY;
return_domain[total_domain].max_perm.permission_reserved = PERMISSION_DENY;
return_domain[total_domain].domain = NULL;
}
while(kp[kp_index].key != NULL)
{
if(strcmp(kp[kp_index].key, "domain") == 0)
{
if(get_permission)
{
domain_index ++;
get_permission = KAL_FALSE;
}
if(strcmp(kp[kp_index].value, "minimum") != 0 && strcmp(kp[kp_index].value, "maximum") != 0)
{
if(return_domain[domain_index].domain != NULL)
{
jvm_free(return_domain[domain_index].domain);
}
return_domain[domain_index].domain = (kal_char*)jvm_malloc(strlen(kp[kp_index].value) + 1);
strcpy(return_domain[domain_index].domain, kp[kp_index].value);
get_permission = KAL_TRUE;
}
kp_index ++;
continue;
}
if(get_permission)
{
int alias_index = 0;
kal_bool is_allowed = KAL_FALSE;
while (a2p[alias_index].key != NULL)
{
if(strcmp(a2p[alias_index].key, kp[kp_index].value) == 0)
{
switch(a2p[alias_index].perm)
{
case PERMISSION_NETWORK:
get_def_max_perm(&is_allowed, &(return_domain[domain_index].perm.permission_network),
&(return_domain[domain_index].max_perm.permission_network), kp[kp_index].key);
break;
case PERMISSION_PUSH:
get_def_max_perm(&is_allowed, &(return_domain[domain_index].perm.permission_push),
&(return_domain[domain_index].max_perm.permission_push), kp[kp_index].key);
break;
case PERMISSION_MESSAGE:
get_def_max_perm(&is_allowed, &(return_domain[domain_index].perm.permission_message),
&(return_domain[domain_index].max_perm.permission_message), kp[kp_index].key);
break;
case PERMISSION_MULTIMEDIA:
get_def_max_perm(&is_allowed, &(return_domain[domain_index].perm.permission_multimedia),
&(return_domain[domain_index].max_perm.permission_multimedia), kp[kp_index].key);
break;
case PERMISSION_DATA_READ:
get_def_max_perm(&is_allowed, &(return_domain[domain_index].perm.permission_data_read),
&(return_domain[domain_index].max_perm.permission_data_read), kp[kp_index].key);
break;
case PERMISSION_DATA_WRITE:
get_def_max_perm(&is_allowed, &(return_domain[domain_index].perm.permission_data_write),
&(return_domain[domain_index].max_perm.permission_data_write), kp[kp_index].key);
break;
case PERMISSION_LOCAL_CON:
get_def_max_perm(&is_allowed, &(return_domain[domain_index].perm.permission_local_connectivity),
&(return_domain[domain_index].max_perm.permission_local_connectivity), kp[kp_index].key);
break;
}
if(is_allowed)
{
get_permission = KAL_FALSE;
}
break;
}
alias_index ++;
}
}
kp_index ++;
}
return return_domain;
}
/*****************************************************************************
* FUNCTION
* set_permission
* DESCRIPTION
* Set the default setting of a domain
* PARAMETERS
* kp [IN] The key / value pair structure
* domain_name [IN] The requested domain name
* alias_to_perm_struct [IN] Alias permission group mapping
* domain_permission_struct [IN]
* mmi_setting_struct [IN] Setting to be used.
* RETURNS
* J2ME_NO_ERROR if no error or J2ME_ACTION_FAILE if fail.
*****************************************************************************/
static kal_int32 set_permission(key_value_pair_struct* kp, kal_char* domain_name, alias_to_perm_struct* a2p,
domain_permission_struct* domain_perm, mmi_setting_struct* default_setting)
{
kal_int32 temp_index = 0;
kal_int32 start_index = 0;
kal_int32 end_index = 0;
kal_int32 a2p_index = 0;
kal_bool hitted = KAL_FALSE;
domain_permission_struct selected_domain;
temp_index = 0;
while(kp[temp_index].value != NULL)
{
if(strcmp(kp[temp_index].key, "domain") == 0)
{
if(hitted)
{
break;
}
if(!hitted && strcmp(kp[temp_index].value, domain_name) == 0)
{
hitted = KAL_TRUE;
start_index = temp_index;
}
}
temp_index ++;
}
if(!hitted)
{
return J2ME_ACTION_FAILE;
}
start_index ++;
end_index = temp_index;
temp_index = 0;
while(domain_perm[temp_index].domain != NULL)
{
if(strcmp(domain_perm[temp_index].domain, domain_name) == 0)
{
selected_domain = domain_perm[temp_index];
break;
}
temp_index ++;
}
if(domain_perm[temp_index].domain == NULL)
{
return J2ME_ACTION_FAILE;
}
while(a2p[a2p_index].key != NULL)
{
kal_uint8 permision_setting = PERMISSION_DENY;
switch(a2p[a2p_index].perm)
{
case PERMISSION_NETWORK:
permision_setting = default_setting->permission_network;
if(permision_setting == PERMISSION_BLANKET_GRANTED)
{
permision_setting = PERMISSION_BLANKET;
}
if(selected_domain.max_perm.permission_network > permision_setting)
{
return J2ME_ACTION_FAILE;
}
break;
case PERMISSION_PUSH:
permision_setting = default_setting->permission_push;
if(permision_setting == PERMISSION_BLANKET_GRANTED)
{
permision_setting = PERMISSION_BLANKET;
}
if(selected_domain.max_perm.permission_push > permision_setting)
{
return J2ME_ACTION_FAILE;
}
break;
case PERMISSION_MESSAGE:
permision_setting = default_setting->permission_message;
if(permision_setting == PERMISSION_BLANKET_GRANTED)
{
permision_setting = PERMISSION_BLANKET;
}
if(selected_domain.max_perm.permission_message > permision_setting)
{
return J2ME_ACTION_FAILE;
}
break;
case PERMISSION_MULTIMEDIA:
permision_setting = default_setting->permission_multimedia;
if(permision_setting == PERMISSION_BLANKET_GRANTED)
{
permision_setting = PERMISSION_BLANKET;
}
if(selected_domain.max_perm.permission_multimedia > permision_setting)
{
return J2ME_ACTION_FAILE;
}
break;
case PERMISSION_DATA_READ:
permision_setting = default_setting->permission_data_read;
if(permision_setting == PERMISSION_BLANKET_GRANTED)
{
permision_setting = PERMISSION_BLANKET;
}
if(selected_domain.max_perm.permission_data_read > permision_setting)
{
return J2ME_ACTION_FAILE;
}
break;
case PERMISSION_DATA_WRITE:
permision_setting = default_setting->permission_data_write;
if(permision_setting == PERMISSION_BLANKET_GRANTED)
{
permision_setting = PERMISSION_BLANKET;
}
if(selected_domain.max_perm.permission_data_write > permision_setting)
{
return J2ME_ACTION_FAILE;
}
break;
case PERMISSION_LOCAL_CON:
permision_setting = default_setting->permission_local_connectivity;
if(permision_setting == PERMISSION_BLANKET_GRANTED)
{
permision_setting = PERMISSION_BLANKET;
}
if(selected_domain.max_perm.permission_local_connectivity > permision_setting)
{
return J2ME_ACTION_FAILE;
}
break;
}
temp_index = start_index;
while(temp_index < end_index)
{
if(strcmp(kp[temp_index].value, a2p[a2p_index].key) == 0)
{
kal_int32 permission_map = 0;
kal_int32 str_index;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -