On Tue, Jul 09, 2019 at 11:16:24PM +0200, ropers wrote:
> On 09/07/2019, Stuart Henderson <s...@spacehopper.org> wrote:
> > The lsof port didn't display filenames. That information is not
> > available on OpenBSD (and is not trustworthy on other OS either;
> > files could have been moved/replaced since opening).
> 
> Interesting. Thanks.
> Is the (un)availability of filename info a feature of the filesystem
> (ext2/3/etc vs FFS) or of the OS?
> Are there security implications to this info being available/unavailable?

This information is actually meaningless, on *any* Unix-like OS.

You've got data on the disk. That data is accessible through a file
descriptor. That file descriptor may or may not correspond to a file name.

The following is perfectly okay in unix:

fd = open("/tmp/myfile", O_RDWR|O_CREAT|OTRUNC, 0666);
unlink("/tmp/myfile");

there. You've got a fd with no name attached to it.

similarly:
fd = open("/tmp/myfile", O_RDWR|O_CREAT|OTRUNC, 0666);
rename("/tmp/myfile", "/tmp/myfile2");

there.  What's the fd name ?

or
fd = open("/tmp/myfile", O_RDWR|O_CREAT|OTRUNC, 0666);
link("/tmp/myfile", "/tmp/myfile2");

do you return myfile or myfile2 ?

you could keep some correspondence between fds and file names, but it
might get out of date, or be meaningless.

You've got this one feature: fstat(2) will give you 
         dev_t      st_dev;    /* inode's device */
         ino_t      st_ino;    /* inode's number */
from which you could walk the device and retrieve things
(and actually it's very useful to uniquely identify files on a system)

And also, there's no guarantee that what information you determine will
be valid for any amount of time, as files may be renamed.

Guess what ? This is exactly the info fstat(1) displays. And not more,
with the exact same caveats in its manpage, though in terser fashion.

Reply via email to