PreviousNext

Why Two ACL Managers?

The application has two ACL managers because it uses two different kinds of object. This circumstance is a little obscured by the fact there are only two objects used in the application (in a real application, we might have expected many instances of sample_object, although there would still of course be only one server_mgmt object). Still, sample_object and server_mgmt are very different kinds of object, and having access to one means something quite different from having access to the other. sample_object is a dummy object with no independent meaning, but server_mgmt represents access to the server's remote management routines, which involves such things as being able to kill the server.

A practical sense of what this means can be had from looking at the two managers' ACL printstrings, near the top of the sample_server.c file. These strings, which contain text representations of the full range of permissions supported by the respective managers, show that there are many permissions that are unique to a single manager. For example, there is a m_inq_if permission (permission to execute the rpc_mgmt_inq_if_ids( ) routine against the server). This permission makes sense only in the context of the server_mgmt object. A manager type identifies what set of permissions applies to a given set of objects.