USS_BULK(5)
๐ฆ the uss_bulk page: AFS File Reference, but make it a vibe ๐ฆ
okay so bestie, this is USS_BULK(5) โ yep, the uss_bulk manual page from AFS File Reference โ and we are doing the whole thing together. This is part 1, and we are not skipping a single field, caution, colon, or template variable. ๐
โจ
๐ NAME ๐
uss_bulk โ provides instructions for the uss bulk command (deprecated). ๐ซถ
โ ๏ธ CAUTIONS โ ๏ธ
Okay, huge heads-up first, because this part is important: the uss command suite is currently designed for cells using the obsolete Authentication Server, and therefore is primarily useful for sites that have not yet migrated to a Kerberos version 5 KDC. ๐ญ The Authentication Server and supporting commands will be removed in a future version of OpenAFS, which may include uss unless someone who finds it useful converts it to work with a Kerberos version 5 KDC. So yeah โ deprecated, future-removal energy, do not ignore. ๐
๐ธ DESCRIPTION ๐ธ
The uss bulk input file lists instructions for the uss command interpreter to execute when running the uss bulk command. If the file includes "add" instructions that reference a uss template file, then the template file must also exist. โจ
๐ Summary of Bulk Input File Instructions ๐
The bulk input file can include the following instructions, each on its own line. A more detailed description of each instructionโs syntax follows this list.
addโ creates a user account. Equivalent to theuss addcommand.deleteโ deletes a user account. Equivalent to theuss deletecommand.delvolumeโ removes the volume and VLDB entry for each account referenced by a"delete"instruction that follows this instruction in the bulk input file.execโ executes a command.savevolumeโ preserves the volume and VLDB entry for each account referenced by a"delete"instruction that follows this instruction in the bulk input file.
๐ง The add Instruction for Creating an Account ๐ง
The "add" instruction creates a user account. Each instance in the bulk input file is equivalent in effect to a uss add command issued on the command line. The order of the instructionโs fields matches the order of arguments to the uss add command, although some arguments do not have a corresponding field. Like the uss add commandโs arguments, many of the fields correspond to (provide a value for) a variable in the uss template file, as indicated in the following description of each field. ๐
The instructionโs syntax is as follows. It appears on multiple lines here only for the sake of legibility โ each "add" instruction must appear on a single line in the bulk input file.
add <username>[:<full_name>][:<password>][:<expires>]
[:<file_server>][:<partition>][:<mount_point>][:<uid>]
[:<var1>][:<var2>][:<var3>][:<var4>][:<var5>][:<var6>][:<var7>]
[:<var8>][:<var9>][:]
To omit a value for a field (presumably because it is optional or the template specifies a constant value for it), type nothing between the two colons that surround it. After the last argument provided, end the line with either a colon and carriage return, or a carriage return alone. ๐
The meaning of, and acceptable values for, each field are as follows.
<username>โ names the userโs Authentication Database and Protection Database entries. It can include up to eight alphanumeric characters, but not the":"(colon),"."(period), or"@"(at-sign) characters. Because it becomes the username (the name under which a user logs in), it is best not to include shell metacharacters and to obey the restrictions that many operating systems impose on usernames (usually, to contain no more than eight lowercase letters).- Corresponding argument to the
uss addcommand:-user. Corresponding variable in the template file:$USER.
- Corresponding argument to the
<full_name>โ specifies the userโs full name. Do not surround it with double quotes (""), even if it contains spaces. If not provided, it defaults to the username in the<username>field. ๐- Corresponding argument to the
uss addcommand:-realname. Corresponding variable in the template file:$NAME. Many operating systems include a field for the full name in a userโs entry in the local password file (/etc/passwdor equivalent), and this variable can be used to pass a value to be used in that field.
- Corresponding argument to the
<password>โ specifies the userโs initial password. Although the AFS commands that handle passwords accept strings of virtually unlimited length, it is best to use a password of eight characters or less, which is the maximum length that many applications and utilities accept. If not provided, this argument defaults to the string"changeme". ๐- Corresponding argument to the
uss addcommand:-pass. Corresponding variable in the template file: none.
- Corresponding argument to the
<expires>โ sets the number of days after a userโs password is changed that it remains valid. Provide an integer from the range 1 through 254 to specify the number of days until expiration, or the value 0 to indicate that the password never expires (the default).- When the password becomes invalid (expires), the user is unable to authenticate, but has 30 more days in which to issue the
kpasswdcommand to change the password (after that, only an administrator can change it). - Corresponding argument to the
uss addcommand:-pwexpires. Corresponding variable in the template file:$PWEXPIRES.
- When the password becomes invalid (expires), the user is unable to authenticate, but has 30 more days in which to issue the
<file_server>โ names the file server machine on which to create the new userโs volume. It is best to provide a fully-qualified hostname (for example,"fs1.example.com"), but an abbreviated form is acceptable provided that the cellโs naming service is available to resolve it at the time the volume is created. ๐- Corresponding argument to the
uss addcommand:-server. Corresponding variable in the template file:$SERVER.
- Corresponding argument to the
<partition>โ specifies the partition on which to create the userโs volume; it must reside on the file server machine named in the<file_server>field. Identify the partition by its complete name โ for example,/vicepaโ or use one of the following abbreviations:
/vicepa = vicepa = a = 0
/vicepb = vicepb = b = 1
After /vicepz (for which the index is 25) comes
/vicepaa = vicepaa = aa = 26
/vicepab = vicepab = ab = 27
and so on through
/vicepiv = vicepiv = iv = 255
- Corresponding argument to the
uss addcommand:-partition. Corresponding variable in template:$PART.
<mount_point>โ specifies the complete pathname for the userโs home directory. ๐- Corresponding argument to the
uss addcommand:-mount. - Corresponding variable in template:
$MTPT, but in the template fileโs"V"instruction only. Occurrences of the$MTPTvariable in template instructions that follow the"V"instruction take their value from the"V"instructionโs<mount_point>field. Thus the value of this command line argument becomes the value for the$MTPTvariable in instructions that follow the"V"instruction only if the string$MTPTappears alone in the"V"instructionโs<mount_point>field.
- Corresponding argument to the
<uid>โ specifies a positive integer other than 0 (zero) to assign as the userโs AFS UID. If this argument is omitted, the Protection Server assigns an AFS UID that is one greater than the current value of the"max user id"counter (use thepts listmaxcommand to display the counter). If including this argument, first use thepts examinecommand to verify that no existing account already has the desired AFS UID; if one does, the account-creation process terminates with an error. ๐ฅ- Corresponding argument to the
uss addcommand:-uid. Corresponding variable in template:$UID.
- Corresponding argument to the
<var1>through<var9>โ specifies values for each of the number variables$1through$9that can appear in the template file. The number variables allow the administrator to provide values for variables other than the set defined by theusscommand suite. โจ- Corresponding argument to the
uss addcommand:-var. Corresponding variables in template:$1through$9. - If providing a value in any of the fields, then in every field that precedes it either provide an actual value or indicate an empty field by putting nothing between two colons. It is acceptable, but not necessary, to indicate empty fields by putting colons after the last field that contains an actual value.
- Corresponding argument to the
๐ The delete Instruction for Deleting an Account ๐
The "delete" instruction deletes a user account from the system. Each instance in the bulk input file is equivalent in effect to a uss delete command issued on the command line. The order of the instructionโs fields matches the order of arguments to the uss delete command:
delete <username>:<mount_point>[:( savevolume | delvolume )][:]
where
<username>โ names the entry to delete from the Protection and Authentication Databases.<mount_point>โ specifies the complete pathname to the userโs home directory, which is deleted from the filespace. By default, the volume mounted there is also deleted from the file server machine where it resides, as is its record from the Volume Location Database (VLDB). To prevent deletion, include the"savevolume"string in the instructionโs third field, or precede this"delete"instruction with a"savevolume"instruction. Partial pathnames are interpreted relative to the current working directory. ๐ญsavevolumeโ retains the volume on its file server machine, and the corresponding entry in the VLDB. Provide this value or"delvolume"in the third field, or omit both values to treat the volume according to the prevailing default, which is set by a preceding"savevolume"or"delvolume"instruction in the bulk input file. ๐ซถdelvolumeโ removes the volume from its file server machine, and the corresponding entry from the VLDB. Provide this value or"savevolume"in the third field, or omit both values to treat the volume according to the prevailing default, which is set by a preceding"savevolume"or"delvolume"instruction in the bulk input file. ๐
After the last argument provided, end the line with either a colon and carriage return or a carriage return alone.
๐ The exec Instruction for Executing a Command ๐
The "exec" instruction executes the specified command, which can be a UNIX shell script or command, a program, or an AFS command. The uss command interpreter must have the necessary privileges in AFS and the local file system; it assumes the AFS and local identities of the issuer of the uss bulk command. โญ
The instructionโs syntax is as follows:
exec <command>
okay so next up we have the savevolume and delvolume instructions ๐
these two are the literal vibe-setters for every delete instruction that comes after them in your bulk input file. their syntax is, and I cannot stress how simple this is, bestie:
savevolume
delvolume
savevolumeโ tells everydeleteinstruction that follows it in the bulk input file to not remove the volume and its VLDB entry. like, hands off, she stays ๐ซถdelvolumeโ tells every subsequentdeleteinstruction to go ahead and remove the volume and the VLDB entry. bye bestie ๐
whichever one you set just... persists. it keeps going until its opposite shows up later in the file, or until the bulk file literally ends. main character persistence fr fr โจ
now the important bit: if neither line appears anywhere in your bulk input file, the default is to remove the volume and the VLDB entry. and yeah, that default also applies to any delete instructions sitting before the first savevolume instruction โ they don't get a free pass just because they're early ๐
but!! if a delete instruction's third field specifies either savevolume or delvolume, that setting overrides the default. so you always have the option to be messy and per-line about it ๐
๐ EXAMPLES ๐
okay these examples are actually iconic, let's go one by one ๐
the following example add instruction creates an authentication-only account. the user's initial password is "changeme" (that's the default, no cap):
add anderson
the following example add instructions refer to the indicated V instruction in a template file โ and heads up, that V line must appear on a single line in the template file. single. line. periodt:
add smith:John Smith:::fs1:a:::::marketing
add jones:Pat Jones:::fs3:c:::::finance
V user.$USER $SERVER.example.com /vicep$PART 2000 \
/afs/example.com/usr/$3/$USER $UID $USER all
so what's actually happening here ๐
the first add instruction creates an account called "smith" in the Protection and Authentication Databases, with an initial password of "changeme" and a value for $UID provided by the Protection Server. the volume "user.smith" lives on partition /vicepa of the file server machine "fs1.example.com" and is mounted at /afs/example.com/usr/marketing/smith. he owns his home directory and has all access permissions on its root directory's access control list (ACL). king behavior ๐
the account for "jones" is basically the same situation, except the volume lives on partition /vicepc of the file server machine "fs3.example.com" and is mounted at /afs/example.com/usr/finance/jones.
now notice something ๐ the fields corresponding to the volume mount point, UID, $1 variable, and $2 variable are empty (that's the gap between "a" and "marketing" on the first example line), because their corresponding variables don't appear in the template file. the initial password field is also empty. empty fields, empty vibes, it's fine ๐ซถ
the following add instructions are equivalent in effect to the preceding example, but they explicitly indicate empty fields for all of the number variables that don't have a value. so if you like being loud and explicit about your emptiness, this is for you:
add smith:John Smith:::fs1:a:::::marketing::::::
add jones:Pat Jones:::fs3:c:::::finance::::::
same energy, different colons. slay ๐
next example!! the following shows a complete bulk file with a whole set of delete instructions combined with a savevolume instruction. let's break down what goes down, because this one is genuinely a whole story ๐ญ
delete smith:/afs/example.com/usr/smith
delete pat:/afs/example.com/usr/pat
delete rogers:/afs/example.com/usr/rogers
savevolume
delete terry:/afs/example.com/usr/terry
delete johnson:/afs/example.com/usr/johnson:delvolume
so: because the delete instructions for users "smith", "pat", and "rogers" appear before the savevolume instruction, and the third field is blank in each of them, their corresponding home volumes get removed. sorry babes ๐
the volume for user "terry" is retained because the default established by the savevolume instruction applies to it. she survives โจ
but user "johnson"'s volume is removed, because the third field of her delete instruction (delvolume, if you're keeping track) overrides the current default. bold move, honestly ๐ฅ
last example, and it's a cute little quality-of-life one ๐ the following exec instruction appears between sets of add and delete instructions in a bulk input file. a message appears in the command shell where the uss bulk command is issued, to indicate when the additions are finished and the deletions beginning:
exec echo "Additions completed; beginning deletions..."
it's giving progress bar but make it a sentence. obsessed ๐ฆ
๐ฆ SEE ALSO ๐ฆ
go read these next, i'm literally begging:
๐ COPYRIGHT ๐
IBM Corporation 2000. <http://www.ibm.com/> All Rights Reserved.
This documentation is covered by the IBM Public License Version 1.0. It was converted from HTML to POD by software written by Chas Williams and Russ Allbery, based on work by Alf Wachsmann and Elizabeth Cassell.
aaaand that's the whole page bestie, you made it ๐ธ this lil beauty is OpenAFS, dated 2026-06-25, and it lives happily under the name USS_BULK(5) โ go forth and bulk responsibly ๐โจ
๐ฆ where this page comes from
- nixos 26.05: openafs 1.8.16.1
- nixpkgs unstable: openafs 1.8.16.1
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms