# include <kernel/kernel.h>
# include <kernel/access.h>
private object accessd; /* access manager */
/*
* NAME: create()
* DESCRIPTION: initialize API
*/
static void create()
{
accessd = find_object(ACCESSD);
}
/*
* NAME: access()
* DESCRIPTION: check access
*/
static int access(string user, string file, int type)
{
if (!user || !file || type < 0 || type > FULL_ACCESS) {
error("Bad arguments for access");
}
return accessd->access(user, file, type);
}
/*
* NAME: add_user()
* DESCRIPTION: add a new user
*/
static void add_user(string user)
{
if (!user || sscanf(user, "/%*s") != 0) {
error("Bad argument for add_user");
}
accessd->add_user(user);
}
/*
* NAME: remove_user()
* DESCRIPTION: remove a user
*/
static void remove_user(string user)
{
if (!user) {
error("Bad argument for remove_user");
}
accessd->remove_user(user);
}
/*
* NAME: query_users()
* DESCRIPTION: return list of users
*/
static string *query_users()
{
return accessd->query_users();
}
/*
* NAME: set_access()
* DESCRIPTION: set access
*/
static void set_access(string user, string file, int type)
{
if (!user || !file || type < 0 || type > FULL_ACCESS) {
error("Bad arguments for set_access");
}
accessd->set_access(user, file, type);
}
/*
* NAME: query_user_access()
* DESCRIPTION: get all access for a user
*/
static mapping query_user_access(string user)
{
if (!user) {
error("Bad argument for query_user_access");
}
return accessd->query_user_access(user);
}
/*
* NAME: query_file_access()
* DESCRIPTION: get all access to a path
*/
static mapping query_file_access(string path)
{
if (!path) {
error("Bad argument for query_file_access");
}
return accessd->query_file_access(path);
}
/*
* NAME: set_global_access()
* DESCRIPTION: set global read access for a directory
*/
static void set_global_access(string dir, int flag)
{
if (!dir || (flag & ~1) != 0) {
error("Bad arguments for set_global_access");
}
accessd->set_global_access(dir, flag);
}
/*
* NAME: query_global_access()
* DESCRIPTION: return the directories under /usr where everyone has read
* access
*/
static string *query_global_access()
{
return accessd->query_global_access();
}