SYNOPSIS
        string valid_write(string path, string uid, string func, object ob)

DESCRIPTION
        This function is called to check if the object ob with the
        user-id uid has write permissions to the file given by path
        for the operation named by func. It should return 0 if
        permission is denied, or the normalized path if permission is
        granted. You can also return 1 to indicate that the path can
        be used unchanged.

        The returned pathname must not contain "..", a leading /
        will be stripped by the interpreter. By default, the returned
        path must also not contain space characters; if the driver
        is instructed to allow them, the preprocessor macro
        __FILENAME_SPACES__ is defined.

        Func denotes the efun call or other operation that caused
        valid_write() to be called:

          copy_file          : for the target file or directory name
          rename_from        : efun rename(), for the original name
          rename_to          : efun rename(), for the new name
          ed_start           : whenever the builtin ed tries to write to a file
          garbage_collection
          mkdir
          memdump
          objdump
          opcdump
          remove_file        : efun rm()
          rmdir
          save_object
          write_bytes
          write_file

        For save_object(), the <path> passed is the filename as given
        in the efun call. If for this efun a filename ending in ".c" is
        returned, the ".c" will be stripped from the filename.

        This function is called in compat mode as well. If
        you need to be compatible with the old 2.4.5-mudlib, redirect
        these calls to the valid_read/valid_write in the user
        object.

HISTORY
        LDMud 3.2.8 adds operation "copy_file", and replaces "do_rename"
        by "rename_from" and "rename_to".
        LDMud 3.2.9 adds operation "garbage_collection".
        LDMud 3.3.526 adds operation "memdump".

SEE ALSO
        valid_read(M), make_path_absolute(M)
