56 |
if (is_add) { |
if (is_add) { |
57 |
if ((ptr = domain->first_acl_ptr) == NULL) goto first_entry; |
if ((ptr = domain->first_acl_ptr) == NULL) goto first_entry; |
58 |
while (1) { |
while (1) { |
59 |
struct signal_acl_record *new_ptr; |
struct signal_acl_record *new_ptr = (struct signal_acl_record *) ptr; |
60 |
if (ptr->type == TYPE_SIGNAL_ACL && ptr->u.w == hash && ptr->cond == condition) { |
if (ptr->type == TYPE_SIGNAL_ACL && new_ptr->sig == hash && ptr->cond == condition) { |
61 |
if (!pathcmp(((struct signal_acl_record *) ptr)->domainname, saved_dest_pattern)) { |
if (!pathcmp(new_ptr->domainname, saved_dest_pattern)) { |
62 |
ptr->is_deleted = 0; |
ptr->is_deleted = 0; |
63 |
/* Found. Nothing to do. */ |
/* Found. Nothing to do. */ |
64 |
error = 0; |
error = 0; |
74 |
/* Not found. Append it to the tail. */ |
/* Not found. Append it to the tail. */ |
75 |
if ((new_ptr = alloc_element(sizeof(*new_ptr))) == NULL) break; |
if ((new_ptr = alloc_element(sizeof(*new_ptr))) == NULL) break; |
76 |
new_ptr->head.type = TYPE_SIGNAL_ACL; |
new_ptr->head.type = TYPE_SIGNAL_ACL; |
77 |
new_ptr->head.u.w = hash; |
new_ptr->sig = hash; |
78 |
new_ptr->head.cond = condition; |
new_ptr->head.cond = condition; |
79 |
new_ptr->domainname = saved_dest_pattern; |
new_ptr->domainname = saved_dest_pattern; |
80 |
error = AddDomainACL(ptr, domain, (struct acl_info *) new_ptr); |
error = AddDomainACL(ptr, domain, (struct acl_info *) new_ptr); |
83 |
} else { |
} else { |
84 |
error = -ENOENT; |
error = -ENOENT; |
85 |
for (ptr = domain->first_acl_ptr; ptr; ptr = ptr->next) { |
for (ptr = domain->first_acl_ptr; ptr; ptr = ptr->next) { |
86 |
if (ptr->type != TYPE_SIGNAL_ACL || ptr->is_deleted || ptr->u.w != hash || ptr->cond != condition) continue; |
struct signal_acl_record *ptr2 = (struct signal_acl_record *) ptr; |
87 |
if (pathcmp(((struct signal_acl_record *) ptr)->domainname, saved_dest_pattern)) continue; |
if (ptr->type != TYPE_SIGNAL_ACL || ptr->is_deleted || ptr2->sig != hash || ptr->cond != condition) continue; |
88 |
|
if (pathcmp(ptr2->domainname, saved_dest_pattern)) continue; |
89 |
error = DelDomainACL(ptr); |
error = DelDomainACL(ptr); |
90 |
break; |
break; |
91 |
} |
} |
125 |
} |
} |
126 |
dest_pattern = dest->domainname->name; |
dest_pattern = dest->domainname->name; |
127 |
for (ptr = domain->first_acl_ptr; ptr; ptr = ptr->next) { |
for (ptr = domain->first_acl_ptr; ptr; ptr = ptr->next) { |
128 |
if (ptr->type == TYPE_SIGNAL_ACL && ptr->is_deleted == 0 && ptr->u.w == hash && CheckCondition(ptr->cond, NULL) == 0) { |
struct signal_acl_record *ptr2 = (struct signal_acl_record *) ptr; |
129 |
const int len = ((struct signal_acl_record *) ptr)->domainname->total_len; |
if (ptr->type == TYPE_SIGNAL_ACL && ptr->is_deleted == 0 && ptr2->sig == hash && CheckCondition(ptr->cond, NULL) == 0) { |
130 |
if (strncmp(((struct signal_acl_record *) ptr)->domainname->name, dest_pattern, len) == 0 && (dest_pattern[len] == ' ' || dest_pattern[len] == '\0')) break; |
const int len = ptr2->domainname->total_len; |
131 |
|
if (strncmp(ptr2->domainname->name, dest_pattern, len) == 0 && (dest_pattern[len] == ' ' || dest_pattern[len] == '\0')) break; |
132 |
} |
} |
133 |
} |
} |
134 |
if (ptr) { |
if (ptr) { |