SYNOPSIS
        string valid_read(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 read permissions for 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_read() to be called:

          copy_file
          ed_start (check if the file to be edited is readable),
          file_size,
          get_dir,
          print_file (efun cat()),
          read_bytes,
          read_file,
          restore_object,
          tail.

        For restore_object(), the <path> passed is the filename as given
        in the efun call.

        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.

SEE ALSO
        valid_write(M), make_path_absolute(M)
