Hi there, I have my home directory mounted via a kerberos - secured NFS4. All the user and groups of the files are mapped to nobody/nobody, so when trying to write to .viminfo, vim fails with the error: E137: Viminfo file is not writable
The problem is resides in ex_cmds.c: if (mch_stat((char *)fname, &st_old) == 0 && getuid() && !(st_old.st_uid == getuid() ? (st_old.st_mode & 0200) : (st_old.st_gid == getgid() ? (st_old.st_mode & 0020) : (st_old.st_mode & 0002)))) { which only checks for the main unix permissions and ignores any ACLs set or security means like kerberized NFS. Workaround: Ignore the error Solution: 1) Instead of the check above, use access((char *)fname, W_OK) to determine whether the file is writable. However, this has some security implications as shown by the access(2) manpage of FreeBSD: SECURITY CONSIDERATIONS The access() system call is a potential security hole due to race condi- tions and should never be used. Set-user-ID and set-group-ID applica- tions should restore the effective user or group ID, and perform actions directly rather than use access() to simulate access checks for the real user or group ID. The eaccess() system call likewise may be subject to races if used inappropriately. This section cannot be found in the the access(2) manpage in linux. 2) open() the file and see if it works ... Victor