|
void _user_add_to_list (XML * ret, XML * user, const char * class, const char * object, const char * permission)
{
XML * child;
XML * piece;
int ok;
child = xml_firstelem (user);
while (child) {
if (!strcmp (child->name, "object")) {
if ((!strcmp (class, ".") || !strcmp (class, xml_attrval (child, "class"))) &&
(!strcmp (object, ".") || !strcmp (object, xml_attrval (child, "object"))) &&
(!strcmp (permission, ".") ||
_user_perm_cmp (xml_attrval (child, "permission"), permission))) {
piece = xml_create ("object");
xml_set (piece, "class", xml_attrval (child, "class"));
xml_set (piece, "object", xml_attrval (child, "object"));
xml_set (piece, "permission", xml_attrval (child, "permission"));
xml_append (ret, piece);
}
} else if (!strcmp (child->name, "group-include")) {
if (!strcmp (permission, ".") ||
_user_perm_cmp (xml_attrval (child, "permission"), permission)) {
piece = xml_create ("group-include");
xml_set (piece, "name", xml_attrval (child, "name"));
xml_set (piece, "permission", xml_attrval (child, "permission"));
xml_append (ret, piece);
}
} else if (!strcmp (child->name, "group")) {
piece = group_get (xml_attrval (child, "name"));
if (piece) {
_user_add_to_list (ret, piece, class, object, permission);
xml_free (piece);
}
}
child = xml_nextelem (child);
}
}
XML * user_list (XML * user, const char * class, const char * object, const char * permission)
{
XML * ret;
ret = xml_create ("user_list");
_user_add_to_list (ret, user, class ? class : ".", object ? object : ".", permission ? permission : ".");
return (ret);
}
|