/* Permision handling stuff */ int check_permission(string euid, string *path, int mask) { /* * Permission to /foo gives permission to /foo/bar/gnu too! */ string p; int i; p = ""; for (i = 0; i < sizeof(path); i ++) { p = p + "/" + path[i]; if (permissions[p] && permissions[p][euid] & mask) { return 1; } } return 0; } /* check_perminssion() */ mapping query_permissions() { return permissions + ([ ]); } int add_permission(string euid, string path, int mask) { if (high_programmer(geteuid(previous_object()))) { if (!permissions[path]) { permissions[path] = ([ euid : mask ]); } else { permissions[path][euid] |= mask; } save_object("/secure/master." + mud_name(),1); return 1; } return 0; } /* add_permission() */ int add_read_permission(string euid, string path) { if (add_permission(euid, path, READ_MASK)) { write("Added read permision for "+euid+" to "+path+".\n"); return 1; } return 0; } /* add_read_permission() */ int add_write_permission(string euid, string path) { if (add_permission(euid, path, WRITE_MASK)) { write("Added write permision for "+euid+" to "+path+".\n"); return 1; } return 0; } /* add_write_permission() */ int add_grant_permission(string euid, string path) { if (add_permission(euid, path, GRANT_MASK)) { write("Added write permision for "+euid+" to "+path+".\n"); return 1; } return 0; } /* add_grant_permission() */ int remove_permission(string euid, string path, int mask) { if (high_programmer(geteuid(previous_object())) && permissions[path] && permissions[path][euid]) { permissions[path][euid] &= ~mask; if (!permissions[path][euid]) { if (m_sizeof(permissions[path]) == 1) { map_delete(permissions, path); } else { map_delete(permissions[path], euid); } } save_object("/secure/master." + mud_name(),1); return 1; } return 0; } /* remove_permission() */ int remove_read_permission(string euid, string path) { if (remove_permission(euid, path, READ_MASK)) { write("Removed read permision for "+euid+" to "+path+".\n"); return 1; } return 0; } /* remove_read_permission() */ int remove_write_permission(string euid, string path) { if (remove_permission(euid, path, WRITE_MASK)) { write("Removed write permision for "+euid+" to "+path+".\n"); return 1; } return 0; } /* remove_write_permission() */ int remove_grant_permission(string euid, string path) { if (remove_permission(euid, path, GRANT_MASK)) { write("Removed write permision for "+euid+" to "+path+".\n"); return 1; } return 0; } /* remove_write_permission() */