/* -*- LPC -*- */
/*
* $Id: valid_write.c,v 1.9 2000/02/06 00:20:34 turrican Exp $
*/
/*
* This controls the copy permisions for everything in the mud.
* It defaults to 0 if all else fails.
* Any permisions can be overridden by the global permision giving/
* changeing code.
*
* The master.c's in the domain and wizard dirs will be checked if
* any access is done to them. This is a very flexible system,
* but perhaps a little hard for some people to use.
*/
int valid_copy(string path, mixed euid, string func) {
object master_ob;
string *bits = explode(path, "/") - ({ "", "." });
mapping perms;
perms = permission_match_path(permissions, path);
if(sizeof(bits) < 2 || bits[0] == "open" || bits[0] == "doc" ||
bits[0] == "log" || bits[0] == "mudlib" || bits[0] == "w")
return check_permission(euid, func, path, perms, READ_MASK);
master_ob = find_object("/d/" + bits[1] + "/master");
if((master_ob && master_ob->copy_with_read(path, euid, func)) ||
(!master_ob && master()->query_senior(euid)))
return check_permission(euid, func, path, perms, READ_MASK);
else
return check_permission(euid, func, path, perms, WRITE_MASK);
}