xref: /dflybsd-src/share/man/man9/nlookup.9 (revision fb3c2c0caaaa0e5d800e088b7dd7983e9ab009ec)
1d7cb6c25SSascha Wildner.\"
200b1b402SSascha Wildner.\" Copyright (c) 2005 The DragonFly Project.  All rights reserved.
3d7cb6c25SSascha Wildner.\"
4d7cb6c25SSascha Wildner.\" Redistribution and use in source and binary forms, with or without
5d7cb6c25SSascha Wildner.\" modification, are permitted provided that the following conditions
6d7cb6c25SSascha Wildner.\" are met:
7d7cb6c25SSascha Wildner.\"
8d7cb6c25SSascha Wildner.\" 1. Redistributions of source code must retain the above copyright
9d7cb6c25SSascha Wildner.\"    notice, this list of conditions and the following disclaimer.
10d7cb6c25SSascha Wildner.\" 2. Redistributions in binary form must reproduce the above copyright
11d7cb6c25SSascha Wildner.\"    notice, this list of conditions and the following disclaimer in
12d7cb6c25SSascha Wildner.\"    the documentation and/or other materials provided with the
13d7cb6c25SSascha Wildner.\"    distribution.
14d7cb6c25SSascha Wildner.\" 3. Neither the name of The DragonFly Project nor the names of its
15d7cb6c25SSascha Wildner.\"    contributors may be used to endorse or promote products derived
16d7cb6c25SSascha Wildner.\"    from this software without specific, prior written permission.
17d7cb6c25SSascha Wildner.\"
18d7cb6c25SSascha Wildner.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19d7cb6c25SSascha Wildner.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20d7cb6c25SSascha Wildner.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
21d7cb6c25SSascha Wildner.\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
22d7cb6c25SSascha Wildner.\" COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
23d7cb6c25SSascha Wildner.\" INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
24d7cb6c25SSascha Wildner.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25d7cb6c25SSascha Wildner.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26d7cb6c25SSascha Wildner.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27d7cb6c25SSascha Wildner.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
28d7cb6c25SSascha Wildner.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29d7cb6c25SSascha Wildner.\" SUCH DAMAGE.
30d7cb6c25SSascha Wildner.\"
31*97be079cSSascha Wildner.Dd December 30, 2016
32d7cb6c25SSascha Wildner.Dt NLOOKUP 9
33fb5b3747SSascha Wildner.Os
34d7cb6c25SSascha Wildner.Sh NAME
35d7cb6c25SSascha Wildner.Nm nlookup ,
36d7cb6c25SSascha Wildner.Nm nlookup_init ,
37d6d133bfSSascha Wildner.Nm nlookup_init_at ,
38d7cb6c25SSascha Wildner.Nm nlookup_init_raw ,
39fb0fde7dSAlex Hornung.Nm nlookup_init_root ,
40d7cb6c25SSascha Wildner.Nm nlookup_zero ,
41d7cb6c25SSascha Wildner.Nm nlookup_done ,
42d6d133bfSSascha Wildner.Nm nlookup_done_at ,
43d7cb6c25SSascha Wildner.Nm nlookup_simple ,
44d7cb6c25SSascha Wildner.Nm nlookup_mp ,
45d7cb6c25SSascha Wildner.Nm nreadsymlink ,
46d7cb6c25SSascha Wildner.Nm naccess ,
47543d5281SStathis Kamperis.Nm naccess_va
48d7cb6c25SSascha Wildner.Nd namecache API
49d7cb6c25SSascha Wildner.Sh SYNOPSIS
50d7cb6c25SSascha Wildner.In sys/types.h
51d7cb6c25SSascha Wildner.In sys/nlookup.h
52d7cb6c25SSascha Wildner.Ft int
53d7cb6c25SSascha Wildner.Fn nlookup "struct nlookupdata *nd"
54d7cb6c25SSascha Wildner.Ft int
55d7cb6c25SSascha Wildner.Fn nlookup_init "struct nlookupdata *nd" "const char *path" "enum uio_seg seg" "int flags"
56d7cb6c25SSascha Wildner.Ft int
57d6d133bfSSascha Wildner.Fn nlookup_init_at "struct nlookupdata *nd" "struct file **fpp" "int fd" "const char *path" "enum uio_seg seg" "int flags"
58d6d133bfSSascha Wildner.Ft int
59d7cb6c25SSascha Wildner.Fn nlookup_init_raw "struct nlookupdata *nd" "const char *path" "enum uio_seg seg" "int flags" "struct ucred *cred" "struct namecache *ncstart"
60fb0fde7dSAlex Hornung.Ft int
61fb0fde7dSAlex Hornung.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"
62d7cb6c25SSascha Wildner.Ft void
63d7cb6c25SSascha Wildner.Fn nlookup_zero "struct nlookupdata *nd"
64d7cb6c25SSascha Wildner.Ft void
65d7cb6c25SSascha Wildner.Fn nlookup_done "struct nlookupdata *nd"
66d6d133bfSSascha Wildner.Ft void
67d6d133bfSSascha Wildner.Fn nlookup_done_at "struct nlookupdata *nd" "struct file *fp"
68d7cb6c25SSascha Wildner.Ft "struct namecache *"
69d7cb6c25SSascha Wildner.Fn nlookup_simple "const char *str" "enum uio_seg seg" "int niflags" "int *error"
70d7cb6c25SSascha Wildner.Ft int
71d7cb6c25SSascha Wildner.Fn nlookup_mp "struct mount *mp" "struct namecache **ncpp"
72d7cb6c25SSascha Wildner.Ft int
73d7cb6c25SSascha Wildner.Fn nreadsymlink "struct nlookupdata *nd" "struct namecache *ncp" "struct nlcomponent *nlc"
74d7cb6c25SSascha Wildner.Ft int
75d7cb6c25SSascha Wildner.Fn naccess "struct namecache *ncp" "int vmode" "struct ucred *cred"
76d7cb6c25SSascha Wildner.Ft int
77d7cb6c25SSascha Wildner.Fn naccess_va "struct vattr *va" "int vmode" "struct ucred *cred"
78d7cb6c25SSascha Wildner.Sh DESCRIPTION
79d7cb6c25SSascha Wildner.Fn nlookup
80d7cb6c25SSascha Wildnerdoes a generic namecache lookup.
817906d720SSascha WildnerNote that the passed
827906d720SSascha Wildner.Fa "struct nlookupdata"
837906d720SSascha Wildneris not
847906d720SSascha Wildner.Fn nlookup_done Ap d
857906d720SSascha Wildneron return, even if an error occurs.
867906d720SSascha WildnerIf no error occurs the returned nl_ncp
877906d720SSascha Wildneris always referenced and locked, otherwise it may or may not be.
88d7cb6c25SSascha WildnerIntermediate directory elements, including the current directory,
89d7cb6c25SSascha Wildnerrequire execute (search) permission.
90d7cb6c25SSascha Wildner.Fn nlookup
91d7cb6c25SSascha Wildnerdoes not examine the access permissions on the returned element.
927906d720SSascha WildnerIf
937906d720SSascha Wildner.Dv NLC_CREATE
947906d720SSascha Wildneror
957906d720SSascha Wildner.Dv NLC_DELETE
967906d720SSascha Wildneris set the last directory must allow
977906d720SSascha Wildnernode creation
987906d720SSascha Wildner.Po
997906d720SSascha Wildner.Dv VCREATE Ns / Ns Dv VDELETE
1007906d720SSascha Wildner.Pc ,
1017906d720SSascha Wildnerand an error code of 0
1023f5e28f4SSascha Wildnerwill be returned for a non-existent target.
1033f5e28f4SSascha WildnerOtherwise a non-existent target will cause
1047906d720SSascha Wildner.Er ENOENT
1057906d720SSascha Wildnerto be returned.
106d7cb6c25SSascha Wildner.Pp
107d7cb6c25SSascha Wildner.Fn nlookup_init
1087906d720SSascha Wildnerinitializes a
1097906d720SSascha Wildner.Fa "struct nlookupdata" ,
1107906d720SSascha Wildnerand does an early error
111d7cb6c25SSascha Wildnerreturn for copyin faults or a degenerate empty string (which is
112d7cb6c25SSascha Wildnernot allowed).
1137906d720SSascha WildnerThe first process proc0's
1147906d720SSascha Wildnercredentials are used if the calling
115d7cb6c25SSascha Wildnerthread is not associated with a process context.
116d7cb6c25SSascha Wildner.Pp
117d6d133bfSSascha Wildner.Fn nlookup_init_at
118d6d133bfSSascha Wildneris similar to
119d6d133bfSSascha Wildner.Fn nlookup_init
120d6d133bfSSascha Wildnerexcept that when
121d6d133bfSSascha Wildner.Fa path
122d6d133bfSSascha Wildneris a relative path and
123d6d133bfSSascha Wildner.Fa fd
124d6d133bfSSascha Wildneris not
125d6d133bfSSascha Wildner.Dv AT_FDCWD ,
126d6d133bfSSascha Wildner.Fa path
127d6d133bfSSascha Wildneris interpreted relative to the directory associated with
128d6d133bfSSascha Wildner.Fa fd
129d6d133bfSSascha Wildnerand the file entry for
130d6d133bfSSascha Wildner.Fa fd
131d6d133bfSSascha Wildneris referenced and returned in
132d6d133bfSSascha Wildner.Fa *fpp .
133d6d133bfSSascha WildnerIts main use is the implementation of
134d6d133bfSSascha Wildner.Fn *at
135d6d133bfSSascha Wildnersystem calls.
136d6d133bfSSascha Wildner.Pp
137d7cb6c25SSascha Wildner.Fn nlookup_init_raw
138d7cb6c25SSascha Wildnerworks similarly to
139d7cb6c25SSascha Wildner.Fn nlookup_init
140d7cb6c25SSascha Wildnerbut does not assume a process context.
1417906d720SSascha Wildnerrootncp is always chosen for the root directory and the
1427906d720SSascha Wildner.Fa cred
143d7cb6c25SSascha Wildnerand starting directory are supplied in the arguments.
144d7cb6c25SSascha Wildner.Pp
145fb0fde7dSAlex Hornung.Fn nlookup_init_root
146fb0fde7dSAlex Hornungworks similarly to
147fb0fde7dSAlex Hornung.Fn nlookup_init_raw
148fb0fde7dSAlex Hornungbut does not assume rootnch for the root directory.
149fb0fde7dSAlex HornungThe root directory is supplied in the arguments, and is also
150fb0fde7dSAlex Hornungused for the jail directory.
151fb0fde7dSAlex Hornung.Pp
152d7cb6c25SSascha Wildner.Fn nlookup_zero
1537906d720SSascha Wildnerzeroes a given
1547906d720SSascha Wildner.Fa "struct nlookupdata" .
155d7cb6c25SSascha Wildner.Pp
156d7cb6c25SSascha Wildner.Fn nlookup_done
1577906d720SSascha Wildnercleans up an
1587906d720SSascha Wildner.Fa nlookupdata
1597906d720SSascha Wildnerstructure after we are through with
160d7cb6c25SSascha Wildnerit.
161d7cb6c25SSascha WildnerThis function may be called on any nlookupdata structure
162d7cb6c25SSascha Wildnerinitialized with
163d7cb6c25SSascha Wildner.Fn nlookup_init .
164d7cb6c25SSascha WildnerCalling
165d7cb6c25SSascha Wildner.Fn nlookup_done
166d7cb6c25SSascha Wildneris mandatory in all cases except where
167d7cb6c25SSascha Wildner.Fn nlookup_init
168d7cb6c25SSascha Wildnerreturns an error, even if as a consumer you believe you
1697906d720SSascha Wildnerhave taken all dynamic elements out of the
1707906d720SSascha Wildner.Fa nlookupdata
171d7cb6c25SSascha Wildnerstructure.
172d7cb6c25SSascha Wildner.Pp
173d6d133bfSSascha Wildner.Fn nlookup_done_at
174d6d133bfSSascha Wildnercleans up an
175d6d133bfSSascha Wildner.Fa nlookupdata
176d6d133bfSSascha Wildnerstructure that was initialized with
177d6d133bfSSascha Wildner.Fn nlookup_init_at
178d6d133bfSSascha Wildnerand drops the reference to
179d6d133bfSSascha Wildner.Fa fp .
180d6d133bfSSascha Wildner.Pp
181d7cb6c25SSascha Wildner.Fn nlookup_simple
18228feafc7SSascha Wildneris a simple all-in-one
18328feafc7SSascha Wildner.Fn nlookup .
184d7cb6c25SSascha WildnerIt returns a locked namecache structure or NULL if an error
1853f625015SSascha Wildneroccurred.
1867906d720SSascha WildnerNote that the returned ncp
1877906d720SSascha Wildneris not checked for permissions,
1887906d720SSascha Wildnerthough
1897906d720SSascha Wildner.Dv VEXEC
1907906d720SSascha Wildneris checked on the directory path leading up to
191d7cb6c25SSascha Wildnerthe result.
192d7cb6c25SSascha WildnerThe caller must call
193d7cb6c25SSascha Wildner.Fn naccess
194d7cb6c25SSascha Wildnerto check the permissions of the returned leaf.
195d7cb6c25SSascha Wildner.Pp
196d7cb6c25SSascha Wildner.Fn nlookup_mp
197d7cb6c25SSascha Wildneris used to resolve a mount point's glue ncp.
198d7cb6c25SSascha WildnerIt creates the illusion of continuity in the namecache tree
199d7cb6c25SSascha Wildnerby connecting the ncp related to the vnode under the mount
200d7cb6c25SSascha Wildnerto the ncp related to the mount's root vnode.
2013f625015SSascha WildnerIf no error occurred a locked, ref'd ncp is stored in
2027906d720SSascha Wildner.Fa *ncpp .
203d7cb6c25SSascha Wildner.Pp
204d7cb6c25SSascha Wildner.Fn nreadsymlink
205d7cb6c25SSascha Wildnerreads the contents of a symlink, allocates a path buffer out
206d7cb6c25SSascha Wildnerof the namei_zone and initialize the supplied nlcomponent
207d7cb6c25SSascha Wildnerwith the result.
208d7cb6c25SSascha WildnerIf an error occurs no buffer will be allocated or returned
209d7cb6c25SSascha Wildnerin the nlc.
210d7cb6c25SSascha Wildner.Pp
211d7cb6c25SSascha Wildner.Fn naccess
212d7cb6c25SSascha Wildnergenerally checks the V* access bits from
21344cb301eSSascha Wildner.In sys/vnode.h .
214d7cb6c25SSascha WildnerAll specified bits must pass for this function to return 0.
2157906d720SSascha WildnerIf
2167906d720SSascha Wildner.Dv VCREATE
2177906d720SSascha Wildneris specified and the target ncp represents a
2183f5e28f4SSascha Wildnernon-existent file or dir, or if
2197906d720SSascha Wildner.Dv VDELETE
2207906d720SSascha Wildneris specified and the
2217906d720SSascha Wildnertarget exists, the parent directory is checked for
2227906d720SSascha Wildner.Dv VWRITE .
2237906d720SSascha WildnerIf
2247906d720SSascha Wildner.Dv VEXCL
2257906d720SSascha Wildneris specified and the target ncp represents a positive
226d7cb6c25SSascha Wildnerhit, an error is returned.
2277906d720SSascha WildnerIf
2287906d720SSascha Wildner.Dv VCREATE
2297906d720SSascha Wildneris not specified and the target does not exist
2307906d720SSascha Wildner(negative hit),
2317906d720SSascha Wildner.Er ENOENT
2327906d720SSascha Wildneris returned.
2337906d720SSascha WildnerNote that
2347906d720SSascha Wildner.Fn nlookup
2357906d720SSascha Wildnerdoes not (and should not) return
2367906d720SSascha Wildner.Er ENOENT
2373f5e28f4SSascha Wildnerfor non-existent leafs.
238d7cb6c25SSascha WildnerThe passed ncp may or may not be locked.
239d7cb6c25SSascha WildnerThe caller should use a locked ncp on leaf lookups, especially
2407906d720SSascha Wildnerfor
2417906d720SSascha Wildner.Dv VCREATE ,
2427906d720SSascha Wildner.Dv VDELETE ,
2437906d720SSascha Wildnerand
2447906d720SSascha Wildner.Dv VEXCL
2457906d720SSascha Wildnerchecks.
246d7cb6c25SSascha Wildner.Pp
247d7cb6c25SSascha Wildner.Fn naccess_va
2487906d720SSascha Wildnerchecks the requested access against the given
2499d8ebfd8SSascha Wildner.Fa vattr
2509d8ebfd8SSascha Wildnerusing
2517906d720SSascha Wildner.Fa cred .
252543d5281SStathis Kamperis.Sh FILES
253543d5281SStathis Kamperis.Pa sys/kern/vfs_nlookup.c
254d7cb6c25SSascha Wildner.Sh SEE ALSO
255d7cb6c25SSascha Wildner.Xr VFS 9 ,
256d7cb6c25SSascha Wildner.Xr vnode 9
257d7cb6c25SSascha Wildner.Sh AUTHORS
258d7cb6c25SSascha WildnerThis man page was written by
25900b1b402SSascha Wildner.An Sascha Wildner .
260