unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (OSF1-V5.1-alpha)
Page:
Section:
Apropos / Subsearch:
optional field



exportfs(2)							  exportfs(2)
Patchkit 3							   Patchkit 3



NAME

  exportfs - Export an NFS file	system

SYNOPSIS

  #include <&lt;nfs/nfs.h>&gt;


  exportfs(
	  int access,
	  int *cookie,
	  struct exportfsdata *exdata );

DESCRIPTION

  The exportfs system call allows the specified	local file system to be
  mounted remotely by an NFS client.  This system call is usually called from
  mountd. The system call allows access	to the kernels export database.	 The
  method of access is specified	by the access flag as follows:

       #define EXPORTFS_CREATE 0x01	   /* create a new export record */
       #define EXPORTFS_REMOVE 0x02	   /* remove an	old export record */
       #define EXPORTFS_READ   0x03	   /* read an export record */

  Each entry in	the export database has	the following structure:

       union exportaddrlist {
	       struct exportfsaddrlist eau_avector;
	       struct exaddrlist eau_alist;
       }
       struct exportfsdata {
	       dev_t   e_dev;	  /* ID	of device containing the directory */
	       ino_t   e_ino;	  /* File serial number	*/
	       uint_t  e_gen;	  /* File generation number */
	       char e_path[MAXPATHLEN];	 /* Name of the	path to	export */
	       int  e_flags;		 /* Export flags */
	       uid_t e_rootmap;	  /* Map root to this uid (either 0 or -2) */
	       uid_t e_anon;	  /* Map anonymous users to this uid */
	       union exportaddrlist eu_rootaddrs;
				  /* List of hosts where root can be mapped
				   * to	uid 0 */
	       union exportaddrlist eu_writeaddrs;
				  /* List of hosts allowed write access	to
				   * read mostly export	*/
	       #define e_rootaddrs eu_rootaddrs.eau_avector
	       #define e_writeaddrs eu_writeaddrs.eau_avector
	       int     e_more;	  /* Used in EXPORTFS_READ */
       };

       struct exportfsaddrlist {
	       unsigned	naddrs;
	       struct sockaddr addrvec[EXMAXADDRS];
       };

  The e_path argument is a pointer to a	null-terminated	string containing the
  path name of the file	system or directory being exported.

  The e_dev, e_ino, and	e_gen fields are inputs	to the system call for creat-
  ing an entry.	They are returned when an entry	is read.

  Security on the exported file	systems	can be improved	by setting the root
  mapped user ID in, e_rootmap and the anonymous user id in e_anon to user id
  -2. Setting the rootmap field	to 0 specifies that all	client superusers
  will be mapped to 0 and thus will have the same rights as the	local
  superuser.  Anonymous	remote users are those without UNIX credentials	and
  superusers on	client systems.	 Setting anon to a user	id other than -2 will
  map all anonymous users to that uid. Use of the rootmap field	overrides
  values in e_anon for client superusers. Finally, to grant superuser
  privileges to	only a select group of clients,	set rootmap to -2 and use the
  e_rootaddrs structure	to specify the list of privileged systems.

  The export permissions flags are set in e_flags for the local	file system
  path.	The following flags are	the only possible flags	accepted by
  exportfs():

       #define M_EXRDONLY    /*	export read-only */
       #define M_EXRDMOSTLY  /*	export read-write to hosts in e_writeaddrs */
       #define M_EXPUBLIC    /*	exported for WebNFS public access */
       #define M_EXPUBINDEX  /*	WebNFS access with index */

  By default, exports are read-write.  To export a filesystem or directory
  read-only, set the M_EXRDONLY	flag.  To export a filesystem or directory
  read-only to most clients and	read-write to a	select group, set the
  M_EXRDMOSTLY flag and	include	the list of clients in e_writeaddrs.

  To export a filesystem or directory for WebNFS public	access,	set the
  M_EXPUBLIC flag. Note	that only one exported filesystem can have this	flag
  set.	By default, the	filesystem is exported read-write.

  The M_EXPUBINDEX flag	enables	the WebNFS server to look for an index.html
  file when given a directory name. This flag is used in conjunction with the
  M_EXPUBLIC flag.

  The e_more field is used in conjunction with the cookie parameter to
  sequentially read the	kernel's export	database using EXPORTFS_READ. The
  contents of cookie should be set to zero to read the first record. After
  reading the record into exdata, the system call will set e_more to a non-
  zero value if	there are more records to read and will	update the value of
  cookie. If there are no more records in the database,	e_more will be zero
  after	the system call	completes.

  To specify and retrieve more than EXMAXADDRS hosts in	the root or write
  address lists, use the EXPORTFS_LISTPTR access modifier.  This is or'd in
  with either the EXPORTFS_CREATE or EXPORTFS_READ access flag.	 When creat-
  ing an export, the host list is read from the	address	pointed	to by
  eau_alist.addrvec.  Similarly, when reading an export, the host list is
  written to an	already	allocated array	pointed	to by eau_alist.addrvec; the
  number of elements allocated is indicated by eau_alist.naddrs.  If there
  are more hosts to read than are allocated, the allocated array is filled
  with as many addresses as will fit, but the returned count will reflect the
  actual number	available.  You	can then extend	the allocated array to the
  returned number of addresses,	and retry the read.

  The exportfs system call returns a value of 0	upon successful	completion of
  an operation,	and -1 upon failure.



ERRORS

  [EPERM]
      Not superuser.

  [EIO]
      Not enough memory	in the system to service the request.

  [EFAULT]
      Bad address for exdata or	cookie.

  [ENOENT]
      Access is	EXPORTFS_CREATE	or EXPORTFS_REMOVE and e_path does not exist,
      or access	is EXPORTFS_REMOVE and e_path is not an	exported path, or
      access is	EXPORTFS_READ and there	are no exportfsdata records to read.

  [EREMOTE]
      Access is	EXPORTFS_CREATE	and e_path is an NFS mounted directory.	 Only
      local directories	can be exported.

  [EINVAL]
      The exdata pointer is NULL, the cookie value is negative,	or the access
      flag is invalid.

SEE ALSO

  Files:  exports(4)

  Daemons:  mountd(8)