|
See Helper functions for that
int user_perm (XML * user, const char * class, const char * object, const char * permission)
{
XML * group;
XML * child;
child = xml_firstelem (user);
while (child) {
if (!strcmp (child->name, "object")) {
if (!strcmp (xml_attrval (child, "class"), class) &&
!strcmp (xml_attrval (child, "object"), object)) {
if (_user_perm_cmp (xml_attrval (child, "permission"), permission)) return (1);
}
} else if (!strcmp (child->name, "group")) {
if (!strcmp (xml_attrval (child, "name"), "admin")) return (1);
group = group_get (xml_attrval (child, "name"));
if (group) {
if (user_perm (group, class, object, permission)) {
xml_free (group);
return (1);
}
xml_free (group);
}
} else if (!strcmp (child->name, "group-include")) {
if (_user_perm_cmp (xml_attrval (child, "permission"), permission)) {
group = group_get (xml_attrval (child, "name"));
if (group) {
if (user_perm (group, class, object, permission)) {
xml_free (group);
return (1);
}
xml_free (group);
}
}
}
child = xml_nextelem (child);
}
if (strcmp (user->name, "group") && strcmp (xml_attrval (user, "name"), "everybody")) {
group = group_get ("everybody");
if (group) {
if (user_perm (group, class, object, permission)) {
xml_free (group);
return (1);
}
xml_free (group);
}
}
return (0);
}
|