]> git.saurik.com Git - apple/xnu.git/blame - bsd/man/man2/nfssvc.2
xnu-792.24.17.tar.gz
[apple/xnu.git] / bsd / man / man2 / nfssvc.2
CommitLineData
9bccf70c
A
1.\" $NetBSD: nfssvc.2,v 1.6 1995/02/27 12:35:08 cgd Exp $
2.\"
3.\" Copyright (c) 1989, 1991, 1993
4.\" The Regents of the University of California. All rights reserved.
5.\"
6.\" Redistribution and use in source and binary forms, with or without
7.\" modification, are permitted provided that the following conditions
8.\" are met:
9.\" 1. Redistributions of source code must retain the above copyright
10.\" notice, this list of conditions and the following disclaimer.
11.\" 2. Redistributions in binary form must reproduce the above copyright
12.\" notice, this list of conditions and the following disclaimer in the
13.\" documentation and/or other materials provided with the distribution.
14.\" 3. All advertising materials mentioning features or use of this software
15.\" must display the following acknowledgement:
16.\" This product includes software developed by the University of
17.\" California, Berkeley and its contributors.
18.\" 4. Neither the name of the University nor the names of its contributors
19.\" may be used to endorse or promote products derived from this software
20.\" without specific prior written permission.
21.\"
22.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32.\" SUCH DAMAGE.
33.\"
34.\" @(#)nfssvc.2 8.1 (Berkeley) 6/9/93
35.\"
36.Dd June 9, 1993
37.Dt NFSSVC 2
38.Os
39.Sh NAME
40.Nm nfssvc
41.Nd NFS services
42.Sh SYNOPSIS
43.Fd #include <unistd.h>
44.Fd #include <nfs/nfs.h>
45.Ft int
46.Fn nfssvc "int flags" "void *argstructp"
47.Sh DESCRIPTION
48The
49.Fn nfssvc
50function is used by the NFS daemons to pass information into and out
51of the kernel and also to enter the kernel as a server daemon.
52The
53.Fa flags
54argument consists of several bits that show what action is to be taken
55once in the kernel and the
56.Fa argstructp
57points to one of three structures depending on which bits are set in
58flags.
59.Pp
60On the client side,
61.Xr nfsiod 8
62calls
63.Fn nfssvc
64with the
65.Fa flags
66argument set to
67.Dv NFSSVC_BIOD
68and
69.Fa argstructp
70set to
71.Dv NULL
72to enter the kernel as a block I/O server daemon.
73For
74.Nm NQNFS ,
75.Xr mount_nfs 8
76calls
77.Fn nfssvc
78with the
79.Dv NFSSVC_MNTD
80flag, optionally or'd with the flags
81.Dv NFSSVC_GOTAUTH
82and
83.Dv NFSSVC_AUTHINFAIL
84along with a pointer to a
85.Bd -literal
86struct nfsd_cargs {
87 char *ncd_dirp; /* Mount dir path */
88 uid_t ncd_authuid; /* Effective uid */
89 int ncd_authtype; /* Type of authenticator */
90 int ncd_authlen; /* Length of authenticator string */
91 char *ncd_authstr; /* Authenticator string */
92};
93.Ed
94.sp
95structure.
96The initial call has only the
97.Dv NFSSVC_MNTD
98flag set to specify service for the mount point.
99If the mount point is using Kerberos, then the
100.Xr mount_nfs 8
101daemon will return from
102.Fn nfssvc
103with errno == ENEEDAUTH whenever the client side requires an ``rcmd''
104authentication ticket for the user.
105.Xr Mount_nfs 8
106will attempt to get the Kerberos ticket, and if successful will call
107.Fn nfssvc
108with the flags
109.Dv NFSSVC_MNTD
110and
111.Dv NFSSVC_GOTAUTH
112after filling the ticket into the
113ncd_authstr field
114and
115setting the ncd_authlen and ncd_authtype
116fields of the nfsd_cargs structure.
117If
118.Xr mount_nfs 8
119failed to get the ticket,
120.Fn nfssvc
121will be called with the flags
122.Dv NFSSVC_MNTD ,
123.Dv NFSSVC_GOTAUTH
124and
125.Dv NFSSVC_AUTHINFAIL
126to denote a failed authentication attempt.
127.Pp
128On the server side,
129.Fn nfssvc
130is called with the flag
131.Dv NFSSVC_NFSD
132and a pointer to a
133.Bd -literal
134struct nfsd_srvargs {
135 struct nfsd *nsd_nfsd; /* Pointer to in kernel nfsd struct */
136 uid_t nsd_uid; /* Effective uid mapped to cred */
137 u_long nsd_haddr; /* Ip address of client */
138 struct ucred nsd_cr; /* Cred. uid maps to */
139 int nsd_authlen; /* Length of auth string (ret) */
140 char *nsd_authstr; /* Auth string (ret) */
141};
142.Ed
143.sp
144to enter the kernel as an
145.Xr nfsd 8
146daemon.
147Whenever an
148.Xr nfsd 8
149daemon receives a Kerberos authentication ticket, it will return from
150.Fn nfssvc
151with errno == ENEEDAUTH.
152The
153.Xr nfsd 8
154will attempt to authenticate the ticket and generate a set of credentials
155on the server for the ``user id'' specified in the field nsd_uid.
156This is done by first authenticating the Kerberos ticket and then mapping
157the Kerberos principal to a local name and getting a set of credentials for
158that user via.
159.Xr getpwnam 3
160and
161.Xr getgrouplist 3 .
162If successful, the
163.Xr nfsd 8
164will call
165.Fn nfssvc
166with the
167.Dv NFSSVC_NFSD
168and
169.Dv NFSSVC_AUTHIN
170flags set to pass the credential mapping in nsd_cr into the
171kernel to be cached on the server socket for that client.
172If the authentication failed,
173.Xr nfsd 8
174calls
175.Fn nfssvc
176with the flags
177.Dv NFSSVC_NFSD
178and
179.Dv NFSSVC_AUTHINFAIL
180to denote an authentication failure.
181.Pp
182The master
183.Xr nfsd 8
184server daemon calls
185.Fn nfssvc
186with the flag
187.Dv NFSSVC_ADDSOCK
188and a pointer to a
189.Bd -literal
190struct nfsd_args {
191 int sock; /* Socket to serve */
192 caddr_t name; /* Client address for connection based sockets */
193 int namelen; /* Length of name */
194};
195.Ed
196.sp
197to pass a server side
198.Tn NFS
199socket into the kernel for servicing by the
200.Xr nfsd 8
201daemons.
202.Sh RETURN VALUES
203Normally
204.Nm nfssvc
205does not return unless the server
206is terminated by a signal when a value of 0 is returned.
207Otherwise, -1 is returned and the global variable
208.Va errno
209is set to specify the error.
210.Sh ERRORS
211.Bl -tag -width Er
212.It Bq Er ENEEDAUTH
213This special error value
214is really used for authentication support, particularly Kerberos,
215as explained above.
216.It Bq Er EPERM
217The caller is not the super-user.
218.El
219.Sh SEE ALSO
220.Xr nfsd 8 ,
221.Xr mount_nfs 8 ,
222.Xr nfsiod 8
223.Sh HISTORY
224The
225.Nm nfssvc
226function first appeared in 4.4BSD.
227.Sh BUGS
228The
229.Nm nfssvc
230system call is designed specifically for the
231.Tn NFS
232support daemons and as such is specific to their requirements.
233It should really return values to indicate the need for authentication
234support, since
235.Dv ENEEDAUTH
236is not really an error.
237Several fields of the argument structures are assumed to be valid and
238sometimes to be unchanged from a previous call, such that
239.Nm nfssvc
240must be used with extreme care.