On Wed, Apr 13, 2011 at 3:25 PM, Jonathan Stuart <jstu...@adaranet.com> wrote: > Hi, > > Yes, I am.. that was my suspicion (e.g., that it was the parameters of the > process which called open()/creat()/socket()/... originally). What's the > quickest way to get back to the v/inode's uid/gid? >
Since you have a struct mount * and an inode, it should be something like: void test_uidgid(struct mount *mp, ino_t ino) { struct vnode *vp; struct inode *ip; int error; error = VFS_VGET(mp, ino, LK_SHARED, &vp); if (error != 0) { printf("Got error %d\n", error); return; } ip = VTOI(vp); printf("For inode %x, uid is %d, gid is %d\n", ino, ip->i_uid, ip->i_gid); vput(vp); } > Also, calling VFS_VGET() seems to give me a lockmgr panic with unknown type > 0x0. > What is odd is that the only way I can get a vnode for VFS_VGET is through > struct file, and then shouldn't I be able to use that? I tried using the > flipping that vnode->inode with VTOI() and it was also giving me zeros for > i_uid, i_gid, etc., when it shouldn't have been. > VFS_VGET gives you the vnode pointer; you shouldn't need getvnode() or struct file or anything else. There are other ways to get a vnode *, but from an ino_t that's the easiest I know of. Cheers, matthew > -----Original Message----- > From: Matthew Fleming [mailto:mdf...@gmail.com] > Sent: Wednesday, April 13, 2011 3:20 PM > To: Jonathan Stuart > Cc: freebsd-hackers@freebsd.org > Subject: Re: Getting vnode + credentials of a file from a struct mount and > UFS inode # > > On Wed, Apr 13, 2011 at 2:37 PM, Jonathan Stuart <jstu...@adaranet.com> wrote: >> Yes, however getvnode() does initialize a struct file *.. but f_cred seems >> to not contain valid/correct entries. >> In my last post I probably should have pointed out that I have the inode >> stored from another operation. > > I haven't looked at this field before, but it looks that f_cred is set > on falloc() to the cred of the thread creating the struct file (the > thread that called open or socket or pipe or kqueue, etc.). Are you > running this as root/wheel? > > Cheers, > matthew > >> -----Original Message----- >> From: Matthew Fleming [mailto:mdf...@gmail.com] >> Sent: Wednesday, April 13, 2011 2:35 PM >> To: Jonathan Stuart >> Cc: freebsd-hackers@freebsd.org >> Subject: Re: Getting vnode + credentials of a file from a struct mount and >> UFS inode # >> >> On Wed, Apr 13, 2011 at 2:18 PM, Jonathan Stuart <jstu...@adaranet.com> >> wrote: >>> Hi Matthew, >>> >>> Thanks, I'll give it a shot.. for some reason f_cred off the vnode is >>> returning all zeros for uid/gid, and >>> pulling the VTOI does the same thing (using getvnode()).. do these not get >>> initialized properly? >> >> f_cred is a field in struct file, not struct vnode, so I'm confused as >> to what you're referring to. >> >> Cheers, >> matthew >> >>> -----Original Message----- >>> From: Matthew Fleming [mailto:mdf...@gmail.com] >>> Sent: Wednesday, April 13, 2011 1:48 PM >>> To: Jonathan Stuart >>> Cc: freebsd-hackers@freebsd.org >>> Subject: Re: Getting vnode + credentials of a file from a struct mount and >>> UFS inode # >>> >>> On Wed, Apr 13, 2011 at 12:31 PM, Jonathan Stuart <jstu...@adaranet.com> >>> wrote: >>>> Hi, >>>> >>>> I'd like to pull the owner/group ownership from a file (the information I >>>> have about the file is it's UFS inode # and it's struct mount *). I'm >>>> sure there's got to be a function that would return a vnode and I could >>>> VTOI() to get this information from the inode.. but I'm having a >>>> brainfreeze. >>>> >>> >>> VFS_VGET(mp, ino, flags, &vp) is probably what you want. >>> >>> Cheers, >>> matthew >>> >> > _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"