2 .\" Copyright (c) 2005 The DragonFly Project. All rights reserved.
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
8 .\" 1. Redistributions of source code must retain the above copyright
9 .\" notice, this list of conditions and the following disclaimer.
10 .\" 2. Redistributions in binary form must reproduce the above copyright
11 .\" notice, this list of conditions and the following disclaimer in
12 .\" the documentation and/or other materials provided with the
14 .\" 3. Neither the name of The DragonFly Project nor the names of its
15 .\" contributors may be used to endorse or promote products derived
16 .\" from this software without specific, prior written permission.
18 .\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 .\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 .\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
21 .\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
22 .\" COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
23 .\" INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
24 .\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 .\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26 .\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27 .\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
28 .\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38 .Nm nlookup_init_raw ,
39 .Nm nlookup_init_root ,
40 .Nm nlookup_set_cred ,
54 .Fn nlookup "struct nlookupdata *nd"
56 .Fn nlookup_init "struct nlookupdata *nd" "const char *path" "enum uio_seg seg" "int flags"
58 .Fn nlookup_init_at "struct nlookupdata *nd" "struct file **fpp" "int fd" "const char *path" "enum uio_seg seg" "int flags"
60 .Fn nlookup_init_raw "struct nlookupdata *nd" "const char *path" "enum uio_seg seg" "int flags" "struct ucred *cred" "struct namecache *ncstart"
62 .Fn nlookup_init_root "struct nlookupdata *nd" "const char *path" "enum uio_seg seg" "int flags" "struct ucred *cred" "struct namecache *ncstart" "struct namecache *ncroot"
64 .Fn nlookup_set_cred "struct nlookupdata *nd" "struct ucred *cred"
66 .Fn nlookup_zero "struct nlookupdata *nd"
68 .Fn nlookup_done "struct nlookupdata *nd"
70 .Fn nlookup_done_at "struct nlookupdata *nd" "struct file *fp"
71 .Ft "struct namecache *"
72 .Fn nlookup_simple "const char *str" "enum uio_seg seg" "int niflags" "int *error"
74 .Fn nlookup_mp "struct mount *mp" "struct namecache **ncpp"
76 .Fn nreadsymlink "struct nlookupdata *nd" "struct namecache *ncp" "struct nlcomponent *nlc"
78 .Fn naccess "struct namecache *ncp" "int vmode" "struct ucred *cred"
80 .Fn naccess_va "struct vattr *va" "int vmode" "struct ucred *cred"
83 does a generic namecache lookup.
85 .Fa "struct nlookupdata"
88 on return, even if an error occurs.
89 If no error occurs the returned nl_ncp
90 is always referenced and locked, otherwise it may or may not be.
91 Intermediate directory elements, including the current directory,
92 require execute (search) permission.
94 does not examine the access permissions on the returned element.
99 is set the last directory must allow
102 .Dv VCREATE Ns / Ns Dv VDELETE
104 and an error code of 0
105 will be returned for a non-existent target.
106 Otherwise a non-existent target will cause
112 .Fa "struct nlookupdata" ,
113 and does an early error
114 return for copyin faults or a degenerate empty string (which is
116 The first process proc0's
117 credentials are used if the calling
118 thread is not associated with a process context.
125 is a relative path and
130 is interpreted relative to the directory associated with
132 and the file entry for
134 is referenced and returned in
136 Its main use is the implementation of
143 but does not assume a process context.
144 rootncp is always chosen for the root directory and the
146 and starting directory are supplied in the arguments.
148 .Fn nlookup_init_root
151 but does not assume rootnch for the root directory.
152 The root directory is supplied in the arguments, and is also
153 used for the jail directory.
156 sets a different credential; this credential will be used by
157 future operations performed on nd.nl_open_vp
164 .Fa "struct nlookupdata" .
169 structure after we are through with
171 This function may be called on any nlookupdata structure
176 is mandatory in all cases except where
178 returns an error, even if as a consumer you believe you
179 have taken all dynamic elements out of the
186 structure that was initialized with
188 and drops the reference to
192 is a simple all-in-one
194 It returns a locked namecache structure or NULL if an error
196 Note that the returned ncp
197 is not checked for permissions,
200 is checked on the directory path leading up to
204 to check the permissions of the returned leaf.
207 is used to resolve a mount point's glue ncp.
208 It creates the illusion of continuity in the namecache tree
209 by connecting the ncp related to the vnode under the mount
210 to the ncp related to the mount's root vnode.
211 If no error occurred a locked, ref'd ncp is stored in
215 reads the contents of a symlink, allocates a path buffer out
216 of the namei_zone and initialize the supplied nlcomponent
218 If an error occurs no buffer will be allocated or returned
222 generally checks the V* access bits from
224 All specified bits must pass for this function to return 0.
227 is specified and the target ncp represents a
228 non-existent file or dir, or if
231 target exists, the parent directory is checked for
235 is specified and the target ncp represents a positive
236 hit, an error is returned.
239 is not specified and the target does not exist
245 does not (and should not) return
247 for non-existent leafs.
248 The passed ncp may or may not be locked.
249 The caller should use a locked ncp on leaf lookups, especially
258 checks the requested access against the given
263 .Pa sys/kern/vfs_nlookup.c
268 This man page was written by