// -*- mode:doc -*- ;

[[makeuser-syntax]]
Makeuser syntax documentation
-----------------------------

The syntax to create users is inspired by the makedev syntax, above, but
is specific to Buildroot.

The syntax for adding a user is a space-separated list of fields, one
user per line; the fields are:

|=================================================================
|username |uid |group |gid |password |home |shell |groups |comment
|=================================================================

Where:

- +username+ is the desired user name (aka login name) for the user.
  It can not be +root+, and must be unique.
- +uid+ is the desired UID for the user. It must be unique, and not
  +0+. If set to +-1+, then a unique UID will be computed by Buildroot
  in the range [1000...1999]
- +group+ is the desired name for the user's main group. It can not
  be +root+. If the group does not exist, it will be created.
- +gid+ is the desired GID for the user's main group. It must be unique,
  and not +0+. If set to +-1+, and the group does not already exist, then
  a unique GID will be computed by Buildroot in the range [1000..1999]
- +password+ is the crypt(3)-encoded password. If prefixed with +!+,
  then login is disabled. If prefixed with +=+, then it is interpreted
  as clear-text, and will be crypt-encoded (using MD5). If prefixed with
  +!=+, then the password will be crypt-encoded (using MD5) and login
  will be disabled. If set to +*+, then login is not allowed.
- +home+ is the desired home directory for the user. If set to '-', no
  home directory will be created, and the user's home will be +/+.
  Explicitly setting +home+ to +/+ is not allowed.
- +shell+ is the desired shell for the user. If set to +-+, then
  +/bin/false+ is set as the user's shell.
- +groups+ is the comma-separated list of additional groups the user
  should be part of. If set to +-+, then the user will be a member of
  no additional group. Missing groups will be created with an arbitrary
  +gid+.
- +comment+ (aka https://en.wikipedia.org/wiki/Gecos_field[GECOS]
  field) is an almost-free-form text.

There are a few restrictions on the content of each field:

* except for +comment+, all fields are mandatory.
* except for +comment+, fields may not contain spaces.
* no field may contain a colon (+:+).

If +home+ is not +-+, then the home directory, and all files below,
will belong to the user and its main group.

Examples:

----
foo -1 bar -1 !=blabla /home/foo /bin/sh alpha,bravo Foo user
----

This will create this user:

- +username+ (aka login name) is: +foo+
- +uid+ is computed by Buildroot
- main +group+ is: +bar+
- main group +gid+ is computed by Buildroot
- clear-text +password+ is: +blabla+, will be crypt(3)-encoded, and login is disabled.
- +home+ is: +/home/foo+
- +shell+ is: +/bin/sh+
- +foo+ is also a member of +groups+: +alpha+ and +bravo+
- +comment+ is: +Foo user+

----
test 8000 wheel -1 = - /bin/sh - Test user
----

This will create this user:

- +username+ (aka login name) is: +test+
- +uid+ is : +8000+
- main +group+ is: +wheel+
- main group +gid+ is computed by Buildroot, and will use the value defined in the rootfs skeleton
- +password+ is empty (aka no password).
- +home+ is +/+ but will not belong to +test+
- +shell+ is: +/bin/sh+
- +test+ is not a member of any additional +groups+
- +comment+ is: +Test user+
