1823 |
(u8) (ccs_flags >> 8)); |
(u8) (ccs_flags >> 8)); |
1824 |
} |
} |
1825 |
|
|
1826 |
|
static const char *ccs_transition_type[CCS_MAX_TRANSITION_TYPE] = { |
1827 |
|
[CCS_TRANSITION_CONTROL_INITIALIZE] = CCS_KEYWORD_INITIALIZE_DOMAIN, |
1828 |
|
[CCS_TRANSITION_CONTROL_NO_INITIALIZE] |
1829 |
|
= CCS_KEYWORD_NO_INITIALIZE_DOMAIN, |
1830 |
|
[CCS_TRANSITION_CONTROL_KEEP] = CCS_KEYWORD_KEEP_DOMAIN, |
1831 |
|
[CCS_TRANSITION_CONTROL_NO_KEEP] = CCS_KEYWORD_NO_KEEP_DOMAIN |
1832 |
|
}; |
1833 |
|
|
1834 |
|
static const char *ccs_group_name[CCS_MAX_GROUP] = { |
1835 |
|
[CCS_PATH_GROUP] = CCS_KEYWORD_PATH_GROUP, |
1836 |
|
[CCS_NUMBER_GROUP] = CCS_KEYWORD_NUMBER_GROUP, |
1837 |
|
[CCS_ADDRESS_GROUP] = CCS_KEYWORD_ADDRESS_GROUP |
1838 |
|
}; |
1839 |
|
|
1840 |
/** |
/** |
1841 |
* ccs_write_exception - Write exception policy. |
* ccs_write_exception - Write exception policy. |
1842 |
* |
* |
1851 |
u8 i; |
u8 i; |
1852 |
static const struct { |
static const struct { |
1853 |
const char *keyword; |
const char *keyword; |
1854 |
int (*write) (char *, const bool, const u8); |
int (*write) (char *, const bool); |
1855 |
} ccs_callback[8] = { |
} ccs_callback[4] = { |
|
{ CCS_KEYWORD_NO_KEEP_DOMAIN, ccs_write_domain_keeper }, |
|
|
{ CCS_KEYWORD_NO_INITIALIZE_DOMAIN, |
|
|
ccs_write_domain_initializer }, |
|
|
{ CCS_KEYWORD_KEEP_DOMAIN, ccs_write_domain_keeper }, |
|
|
{ CCS_KEYWORD_INITIALIZE_DOMAIN, |
|
|
ccs_write_domain_initializer }, |
|
1856 |
{ CCS_KEYWORD_AGGREGATOR, ccs_write_aggregator }, |
{ CCS_KEYWORD_AGGREGATOR, ccs_write_aggregator }, |
1857 |
{ CCS_KEYWORD_FILE_PATTERN, ccs_write_pattern }, |
{ CCS_KEYWORD_FILE_PATTERN, ccs_write_pattern }, |
1858 |
{ CCS_KEYWORD_DENY_REWRITE, ccs_write_no_rewrite }, |
{ CCS_KEYWORD_DENY_REWRITE, ccs_write_no_rewrite }, |
1859 |
{ CCS_KEYWORD_DENY_AUTOBIND, ccs_write_reserved_port } |
{ CCS_KEYWORD_DENY_AUTOBIND, ccs_write_reserved_port } |
1860 |
}; |
}; |
1861 |
static const char *ccs_name[CCS_MAX_GROUP] = { |
for (i = 0; i < 4; i++) { |
|
[CCS_PATH_GROUP] = CCS_KEYWORD_PATH_GROUP, |
|
|
[CCS_NUMBER_GROUP] = CCS_KEYWORD_NUMBER_GROUP, |
|
|
[CCS_ADDRESS_GROUP] = CCS_KEYWORD_ADDRESS_GROUP |
|
|
}; |
|
|
for (i = 0; i < 8; i++) { |
|
1862 |
if (ccs_str_starts(&data, ccs_callback[i].keyword)) |
if (ccs_str_starts(&data, ccs_callback[i].keyword)) |
1863 |
return ccs_callback[i].write(data, is_delete, i < 2); |
return ccs_callback[i].write(data, is_delete); |
1864 |
|
} |
1865 |
|
for (i = 0; i < CCS_MAX_TRANSITION_TYPE; i++) { |
1866 |
|
if (ccs_str_starts(&data, ccs_transition_type[i])) |
1867 |
|
return ccs_write_transition_control(data, is_delete, |
1868 |
|
i); |
1869 |
} |
} |
1870 |
for (i = 0; i < CCS_MAX_GROUP; i++) { |
for (i = 0; i < CCS_MAX_GROUP; i++) { |
1871 |
if (ccs_str_starts(&data, ccs_name[i])) |
if (ccs_str_starts(&data, ccs_group_name[i])) |
1872 |
return ccs_write_group(data, is_delete, i); |
return ccs_write_group(data, is_delete, i); |
1873 |
} |
} |
1874 |
return ccs_write_domain2(data, &ccs_global_domain, is_delete); |
return ccs_write_domain2(data, &ccs_global_domain, is_delete); |
1889 |
struct list_head *gpos; |
struct list_head *gpos; |
1890 |
struct list_head *mpos; |
struct list_head *mpos; |
1891 |
const char *w[3] = { "", "", "" }; |
const char *w[3] = { "", "", "" }; |
1892 |
if (idx == CCS_PATH_GROUP) |
w[0] = ccs_group_name[idx]; |
|
w[0] = CCS_KEYWORD_PATH_GROUP; |
|
|
else if (idx == CCS_NUMBER_GROUP) |
|
|
w[0] = CCS_KEYWORD_NUMBER_GROUP; |
|
|
else if (idx == CCS_ADDRESS_GROUP) |
|
|
w[0] = CCS_KEYWORD_ADDRESS_GROUP; |
|
1893 |
list_for_each_cookie(gpos, head->read_var1, &ccs_group_list[idx]) { |
list_for_each_cookie(gpos, head->read_var1, &ccs_group_list[idx]) { |
1894 |
struct ccs_group *group = |
struct ccs_group *group = |
1895 |
list_entry(gpos, struct ccs_group, head.list); |
list_entry(gpos, struct ccs_group, head.list); |
1953 |
if (acl->is_deleted) |
if (acl->is_deleted) |
1954 |
continue; |
continue; |
1955 |
switch (idx) { |
switch (idx) { |
1956 |
case CCS_ID_DOMAIN_KEEPER: |
case CCS_ID_TRANSITION_CONTROL: |
|
{ |
|
|
struct ccs_domain_keeper *ptr = |
|
|
container_of(acl, typeof(*ptr), head); |
|
|
w[0] = ptr->is_not ? |
|
|
CCS_KEYWORD_NO_KEEP_DOMAIN : |
|
|
CCS_KEYWORD_KEEP_DOMAIN; |
|
|
if (ptr->program) { |
|
|
w[1] = ptr->program->name; |
|
|
w[2] = " from "; |
|
|
} |
|
|
w[3] = ptr->domainname->name; |
|
|
} |
|
|
break; |
|
|
case CCS_ID_DOMAIN_INITIALIZER: |
|
1957 |
{ |
{ |
1958 |
struct ccs_domain_initializer *ptr = |
struct ccs_transition_control *ptr = |
1959 |
container_of(acl, typeof(*ptr), head); |
container_of(acl, typeof(*ptr), head); |
1960 |
w[0] = ptr->is_not ? |
w[0] = ccs_transition_type[ptr->type]; |
1961 |
CCS_KEYWORD_NO_INITIALIZE_DOMAIN : |
w[1] = ptr->program ? ptr->program->name |
1962 |
CCS_KEYWORD_INITIALIZE_DOMAIN; |
: "any"; |
1963 |
w[1] = ptr->program->name; |
w[2] = " from "; |
1964 |
if (ptr->domainname) { |
w[3] = ptr->domainname ? ptr->domainname->name |
1965 |
w[2] = " from "; |
: "any"; |
|
w[3] = ptr->domainname->name; |
|
|
} |
|
1966 |
} |
} |
1967 |
break; |
break; |
1968 |
case CCS_ID_AGGREGATOR: |
case CCS_ID_AGGREGATOR: |