// vim:syntax=lpc #ifndef _SANDBOX_H # define _SANDBOX_H # ifdef SANDBOX # define MASK(name, bname) nomask mixed name (varargs array(mixed) args) {\ if (extern_call()) {\ if (!geteuid(previous_object()) || stringp(geteuid(previous_object()))\ && geteuid(previous_object())[0] != '/') {\ raise_error(sprintf("INVALID " bname " by %O(%O)\n",\ previous_object(),\ geteuid(previous_object())));\ }\ set_this_object(previous_object());\ }\ return efun::name (args...) ;\ } # define MASK2(type, name, args, args2, bname) nomask type name args {\ if (extern_call()) {\ if (!geteuid(previous_object()) || stringp(geteuid(previous_object()))\ && geteuid(previous_object())[0] != '/') {\ raise_error(sprintf("INVALID " bname " by %O(%O)\n",\ previous_object(),\ geteuid(previous_object())));\ }\ set_this_object(previous_object());\ }\ return efun::name args2 ;\ } # define PROTECT(name) if (extern_call()) {\ if (!geteuid(previous_object()) || stringp(geteuid(previous_object()))\ && geteuid(previous_object())[0] != '/') {\ raise_error(sprintf("INVALID " name " by %O(%O)\n", previous_object(),\ geteuid(previous_object())));\ }\ } # else # define PROTECT(name) # define MASK(name, bname) # define MASK2(type, name, args, args2, bname) # endif #endif