<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML ><HEAD ><link rel='stylesheet' type='text/css' href='manpage.css'> <!-- $Id: userdb.sgml,v 1.1 2001/11/24 20:49:56 mrsam Exp $ --> <!-- Copyright 1998 - 2001 Double Precision, Inc. See COPYING for --> <!-- distribution information. --> <meta name="MSSmartTagsPreventParsing" content="TRUE"> <link rel="icon" href="icon.gif" type="image/gif" /> <TITLE >userdb</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.7"></HEAD ><BODY CLASS="REFENTRY" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><H1 ><A NAME="USERDB" ></A >userdb</H1 ><DIV CLASS="REFNAMEDIV" ><A NAME="AEN10" ></A ><H2 >Name</H2 >userdb -- manipulate /etc/maildrop/userdb</DIV ><DIV CLASS="REFSYNOPSISDIV" ><A NAME="AEN13" ></A ><H2 >Synopsis</H2 ><P ><B CLASS="COMMAND" >userdb</B > {<VAR CLASS="REPLACEABLE" >addr</VAR >} set {<VAR CLASS="REPLACEABLE" >field</VAR >=<VAR CLASS="REPLACEABLE" >value</VAR >...}</P ><P ><B CLASS="COMMAND" >userdb</B > {<VAR CLASS="REPLACEABLE" >addr</VAR >} unset {<VAR CLASS="REPLACEABLE" >field</VAR >...}</P ><P ><B CLASS="COMMAND" >userdb</B > {<VAR CLASS="REPLACEABLE" >addr</VAR >} del </P ><P ><B CLASS="COMMAND" >userdb</B > {<VAR CLASS="REPLACEABLE" >path/addr</VAR >} [set | unset | del] ... </P ><P ><B CLASS="COMMAND" >userdb</B > -f {<VAR CLASS="REPLACEABLE" >file</VAR >} {<VAR CLASS="REPLACEABLE" >adr</VAR >} [set | unset | del] ... </P ><P ><B CLASS="COMMAND" >userdb</B > -show {<VAR CLASS="REPLACEABLE" >path</VAR >}</P ><P ><B CLASS="COMMAND" >userdb</B > -show {<VAR CLASS="REPLACEABLE" >path</VAR >} {<VAR CLASS="REPLACEABLE" >addr</VAR >}</P ><P ><B CLASS="COMMAND" >userdb</B > -show -f {<VAR CLASS="REPLACEABLE" >file</VAR >}</P ><P ><B CLASS="COMMAND" >userdb</B > -show -f {<VAR CLASS="REPLACEABLE" >file</VAR >} {<VAR CLASS="REPLACEABLE" >addr</VAR >}</P ></DIV ><DIV CLASS="REFSECT1" ><A NAME="AEN81" ></A ><H2 >DESCRIPTION</H2 ><P ><B CLASS="COMMAND" >userdb</B > is a convenient script to individually manipulate entries in <TT CLASS="FILENAME" >/etc/maildrop/userdb</TT >. See <A HREF="makeuserdb.html" TARGET="_top" ><SPAN CLASS="CITEREFENTRY" ><SPAN CLASS="REFENTRYTITLE" >makeuserdb</SPAN >(8)</SPAN ></A > for a description of its contents. <TT CLASS="FILENAME" >/etc/maildrop/userdb</TT > can always be edited using any text editor, but <B CLASS="COMMAND" >userdb</B > is a convenient way to modify this file from another script.</P ><P ><TT CLASS="FILENAME" >/etc/maildrop/userdb</TT > can also be a subdirectory, instead of a file. Specify <VAR CLASS="OPTION" ><VAR CLASS="REPLACEABLE" >foo/bar/addr</VAR ></VAR > to manipulate <VAR CLASS="OPTION" ><VAR CLASS="REPLACEABLE" >addr</VAR ></VAR > in the file <TT CLASS="FILENAME" >/etc/maildrop/userdb<VAR CLASS="REPLACEABLE" >/foo/bar</VAR ></TT >. You can also use the <VAR CLASS="OPTION" >-f</VAR > flag: <VAR CLASS="OPTION" >-f <VAR CLASS="REPLACEABLE" >/etc/maildrop/userdb/foo/bar</VAR ></VAR > is equivalent. Use whatever form makes the most sense to you.</P ><P ><TT CLASS="FILENAME" >/etc/maildrop/userdb</TT > must not have any group or world permissions. That's because its contents may include system passwords (depending upon the application which uses this virtual user account database).</P ><P >Each line in <TT CLASS="FILENAME" >/etc/maildrop/userdb</TT > takes following form: <A NAME="AEN107" ></A ><BLOCKQUOTE CLASS="BLOCKQUOTE" ><P ><SAMP CLASS="COMPUTEROUTPUT" ><VAR CLASS="REPLACEABLE" >addr</VAR ><SPAN CLASS="TOKEN" ><TAB></SPAN ><VAR CLASS="REPLACEABLE" >field</VAR >=<VAR CLASS="REPLACEABLE" >value</VAR >|<VAR CLASS="REPLACEABLE" >field</VAR >=<VAR CLASS="REPLACEABLE" >value</VAR >...</SAMP ></P ></BLOCKQUOTE ></P ><P ><VAR CLASS="REPLACEABLE" >addr</VAR > specifies a unique virtual address. It is followed by a single tab character, then a list of <VAR CLASS="REPLACEABLE" >field</VAR >=<VAR CLASS="REPLACEABLE" >value</VAR > pairs, separated by vertical slash characters. See <A HREF="makeuserdb.html" TARGET="_top" ><SPAN CLASS="CITEREFENTRY" ><SPAN CLASS="REFENTRYTITLE" >makeuserdb</SPAN >(8)</SPAN ></A > for field definitions.</P ><P >A text editor can be used to add blank lines or comments in <TT CLASS="FILENAME" >/etc/maildrop/userdb</TT >. Any blank lines or comments are ignored by the <B CLASS="COMMAND" >userdb</B > script.</P ><P >The names of the actual fields, and their contents, are defined entirely by applications that use the <TT CLASS="FILENAME" >/etc/maildrop/userdb</TT > database, the <B CLASS="COMMAND" >userdb</B > command just adds or removes arbitrary fields.</P ><P >For example: <A NAME="AEN131" ></A ><BLOCKQUOTE CLASS="BLOCKQUOTE" ><DIV CLASS="INFORMALEXAMPLE" ><P ></P ><A NAME="AEN132" ></A ><P CLASS="LITERALLAYOUT" ><B CLASS="COMMAND" >userdb default/info set mail=/home/mail/info</B ></P ><P ></P ></DIV ></BLOCKQUOTE ></P ><P >This command accesses the address "info" in <TT CLASS="FILENAME" >/etc/maildrop/userdb/default</TT >.</P ><P >If the second argument to <B CLASS="COMMAND" >userdb</B > is "<TT CLASS="PARAMETER" ><I >set</I ></TT >", the remaining arguments are taken as <TT CLASS="PARAMETER" ><I ><VAR CLASS="REPLACEABLE" >field</VAR >=<VAR CLASS="REPLACEABLE" >value</VAR ></I ></TT > pairs, which are added to the record for <VAR CLASS="REPLACEABLE" >addr</VAR >. If there is no record for <VAR CLASS="REPLACEABLE" >addr</VAR >, a new record will be appended to the file. If <VAR CLASS="REPLACEABLE" >addr</VAR > exists, any existing values of any specified fields are removed. If <TT CLASS="PARAMETER" ><I >=<VAR CLASS="REPLACEABLE" >value</VAR ></I ></TT > is missing, <B CLASS="COMMAND" >userdb</B > stops and prompts for it. This is useful if you're setting a password field, where you do not want to specify the password on the command line, which can be seen by the <SPAN CLASS="CITEREFENTRY" ><SPAN CLASS="REFENTRYTITLE" >ps</SPAN >(1)</SPAN > command. If <B CLASS="COMMAND" >userdb</B > is being executed by a script, the value can be provided on standard input.</P ><P >Use "<TT CLASS="PARAMETER" ><I >unset</I ></TT >" to delete fields from an existing record. Use "<TT CLASS="PARAMETER" ><I >del</I ></TT >" to delete all fields in the existing record, plus the record itself.</P ><DIV CLASS="REFSECT2" ><A NAME="AEN156" ></A ><H3 >DISPLAYING <TT CLASS="FILENAME" >/etc/maildrop/userdb</TT ></H3 ><P >If the first argument to userdb is <TT CLASS="PARAMETER" ><I >-show</I ></TT >, <B CLASS="COMMAND" >userdb</B > displays the contents of <TT CLASS="FILENAME" >/etc/maildrop/userdb</TT >. If <TT CLASS="FILENAME" >/etc/maildrop/userdb</TT > is a subdirectory, <TT CLASS="PARAMETER" ><I ><VAR CLASS="REPLACEABLE" >path</VAR ></I ></TT > must refer to a specific file in <TT CLASS="FILENAME" >/etc/maildrop/userdb</TT >. The <TT CLASS="PARAMETER" ><I >-f</I ></TT > option can be used instead of <TT CLASS="PARAMETER" ><I ><VAR CLASS="REPLACEABLE" >path</VAR ></I ></TT > in order to specify an arbitrary file.</P ><P >If <TT CLASS="PARAMETER" ><I ><VAR CLASS="REPLACEABLE" >addr</VAR ></I ></TT > is not specified, <B CLASS="COMMAND" >userdb</B > produces a list, on standard output, containing all addresses found in the file, on per line. If <TT CLASS="PARAMETER" ><I ><VAR CLASS="REPLACEABLE" >addr</VAR ></I ></TT > is specified, <B CLASS="COMMAND" >userdb</B > produces a list, on standard output, of all the fields in <TT CLASS="FILENAME" >/etc/maildrop/userdb</TT > for this <TT CLASS="PARAMETER" ><I ><VAR CLASS="REPLACEABLE" >addr</VAR ></I ></TT >.</P ></DIV ><DIV CLASS="REFSECT2" ><A NAME="AEN180" ></A ><H3 >REBUILDING <TT CLASS="FILENAME" >/etc/maildrop/userdb.dat</TT ></H3 ><P >The actual virtual account/address database is <TT CLASS="FILENAME" >/etc/maildrop/userdb.dat</TT >. This is a binary database file. <B CLASS="COMMAND" >/etc/maildrop/userdb</B > is the plain text version. After running <B CLASS="COMMAND" >userdb</B >, execute the <A HREF="makeuserdb.html" TARGET="_top" ><SPAN CLASS="CITEREFENTRY" ><SPAN CLASS="REFENTRYTITLE" >makeuserdb</SPAN >(8)</SPAN ></A > command to rebuild <TT CLASS="FILENAME" >/etc/maildrop/userdb.dat</TT > for the changes to take effect.</P ></DIV ></DIV ><DIV CLASS="REFSECT1" ><A NAME="AEN192" ></A ><H2 >BUGS</H2 ><P ><TT CLASS="PARAMETER" ><I ><VAR CLASS="REPLACEABLE" >addr</VAR ></I ></TT > must be unique. If <TT CLASS="FILENAME" >/etc/maildrop/userdb</TT > is a subdirectory, it's possible to create the same <TT CLASS="PARAMETER" ><I ><VAR CLASS="REPLACEABLE" >addr</VAR ></I ></TT > in different files in the subdirectory. This is an error that is not currently detected by <B CLASS="COMMAND" >userdb</B >, however the subsequent <A HREF="makeuserdb.html" TARGET="_top" ><SPAN CLASS="CITEREFENTRY" ><SPAN CLASS="REFENTRYTITLE" >makeuserdb</SPAN >(8)</SPAN ></A > command will fail with an error message.</P ></DIV ><DIV CLASS="REFSECT1" ><A NAME="AEN205" ></A ><H2 >FILES</H2 ><P ><TT CLASS="FILENAME" > /etc/maildrop/userdb</TT > - plain text file, or directory of plain text files</P ><P ><TT CLASS="FILENAME" > .lock.filename</TT > - lock file for <TT CLASS="FILENAME" >filename</TT ></P ><P ><TT CLASS="FILENAME" > .tmp.filename</TT > - temporary file used to create new contents of <TT CLASS="FILENAME" >filename</TT ></P ></DIV ><DIV CLASS="REFSECT1" ><A NAME="AEN215" ></A ><H2 >SEE ALSO</H2 ><P ><A HREF="makeuserdb.html" TARGET="_top" ><SPAN CLASS="CITEREFENTRY" ><SPAN CLASS="REFENTRYTITLE" >makeuserdb</SPAN >(8)</SPAN ></A >, <A HREF="userdbpw.html" TARGET="_top" ><SPAN CLASS="CITEREFENTRY" ><SPAN CLASS="REFENTRYTITLE" >userdbpw</SPAN >(8)</SPAN ></A ></P ></DIV ></BODY ></HTML >