October 9, 2008 QUOTACTL 2

### NAME

quotactl - manipulate filesystem quotas

### LIBRARY

Standard C Library (libc, -lc)

### SYNOPSIS

```int` quotactl(```const char *path``, int cmd``, int id``, void *addr`)

### DESCRIPTION

The quotactl(``) call enables, disables and manipulates filesystem quotas. A quota control command given by ```cmd` operates on the given filename ```path` for the given user ```id`. The address of an optional command specific data structure, ```addr`, may be given; its interpretation is discussed below with each command.

Currently quotas are supported only for the ``ffs'' and ``lfs'' filesystem. For both of them, a command is composed of a primary command (see below) and a command type used to interpret the ```id`. Types are supported for interpretation of user identifiers and group identifiers. The ``ffs'' and ``lfs'' specific commands are:

```Q_QUOTAON`
  Enable disk quotas for the filesystem specified by ```path`. The command type specifies the type of the quotas being enabled. The ```addr` argument specifies a file from which to take the quotas. The quota file must exist; it is normally created with the quotacheck(8) program. The ```id` argument is unused. Only the super-user may turn quotas on.

```Q_QUOTAOFF`
  Disable disk quotas for the filesystem specified by ```path`. The command type specifies the type of the quotas being disabled. The ```addr` and ```id` arguments are unused. Only the super-user may turn quotas off.

```Q_GETQUOTA`
  Get disk quota limits and current usage for the user or group (as determined by the command type) with identifier ```id`. ```addr` is a pointer to a ```struct` `dqblk` structure (defined in <```ufs/ufs/quota.h`>).

```Q_SETQUOTA`
  Set disk quota limits for the user or group (as determined by the command type) with identifier ```id`. ```addr` is a pointer to a ```struct` `dqblk` structure (defined in <```ufs/ufs/quota.h`>). The usage fields of the ```dqblk` structure are ignored. This call is restricted to the super-user.

```Q_SETUSE`
  Set disk usage for the user or group (as determined by the command type) with identifier ```id`. ```addr` is a pointer to a ```struct` `dqblk` structure (defined in <```ufs/ufs/quota.h`>). Only the usage fields are used. This call is restricted to the super-user.

```Q_SYNC`
  Update the on-disk copy of quota usages. The command type specifies which type of quotas are to be updated. The ```id` and ```addr` parameters are ignored.

### RETURN VALUES

A successful call returns 0, otherwise the value -1 is returned and the global variable errno indicates the reason for the failure.

### ERRORS

A quotactl(``) call will fail if:

[```EOPNOTSUPP`]
  The kernel has not been compiled with the ```QUOTA` option.

[```EUSERS`]
  The quota table cannot be expanded.

[```EINVAL`]
  ```cmd` or the command type is invalid.

[```EACCES`]
  In ```Q_QUOTAON`, the quota file is not a plain file, or search permission is denied for a component of a path prefix.

[```ENOTDIR`]
  A component of a path prefix was not a directory.

[```ENAMETOOLONG`]
  A component of a pathname exceeded ```{NAME_MAX}` characters, or an entire path name exceeded ```{PATH_MAX}` characters.

[```ENOENT`]
  A filename does not exist.

[```ELOOP`]
  Too many symbolic links were encountered in translating a pathname.

[```EROFS`]
  In ```Q_QUOTAON`, the quota file resides on a read-only filesystem.

[```EIO`]
  An I/O error occurred while reading from or writing to a file containing quotas.

[```EFAULT`]
  ```path` points outside the process's allocated address space, or an invalid ```addr` was supplied; the associated structure could not be copied in or out of the kernel.

[```EPERM`]
  The call was privileged and the caller was not the super-user.

### SEE ALSO

quota(1), fstab(5), edquota(8), quotacheck(8), quotaon(8), repquota(8)

### HISTORY

The quotactl(``) function call appeared in 4.3BSDReno.

### BUGS

There should be some way to integrate this call with the resource limit interface provided by setrlimit(2) and getrlimit(2).