Group :: System/Libraries
RPM: courier-authlib
Main Changelog Spec Patches Sources Download Gear Bugs and FR Repocop
Patch: courier-authlib-0.61.0-alt-dat2db.patch
Download
Download
--- courier-authlib-0.61.0/README.authdebug.html.in.p1 2004-11-26 01:07:02 +1000
+++ courier-authlib-0.61.0/README.authdebug.html.in 2008-09-06 12:53:46 +1100
@@ -147,7 +147,7 @@ Apr 14 14:07:15 billdog authdaemond: aut
Apr 14 14:07:15 billdog authdaemond: cram: only supports authtype=cram-*
Apr 14 14:07:15 billdog authdaemond: authcram: REJECT - try next module
Apr 14 14:07:15 billdog authdaemond: authuserdb: trying this module
-Apr 14 14:07:15 billdog authdaemond: userdb: opened /etc/userdb.dat
+Apr 14 14:07:15 billdog authdaemond: userdb: opened /etc/courier-imap/userdb.db
Apr 14 14:07:15 billdog authdaemond: userdb: looking up 'brian'
Apr 14 14:07:15 billdog authdaemond: userdb: entry not found
Apr 14 14:07:15 billdog authdaemond: authuserdb: REJECT - try next module
@@ -165,8 +165,8 @@ Apr 14 14:07:15 billdog authdaemond: aut
<li>It tried 'authcram', but since this was a request with authtype=login
(rather than authtype=cram-md5, say), this module cannot handle it so it
REJECTs</li>
- <li>'authuserdb' has a go. In this case there is an /etc/userdb.dat file
- for it to look in, but the requested username 'brian' does not exist in
+ <li>'authuserdb' has a go. In this case there is an /etc/courier-imap/userdb.db
+ file for it to look in, but the requested username 'brian' does not exist in
there, so it REJECTs</li>
<li>'authpam' has a go. It finds the username and home directory in
/etc/passwd, and then calls the PAM subsystem to authenticate. The
--- courier-authlib-0.61.0/README_authlib.html.in.p1 2008-05-09 04:21:11 +1100
+++ courier-authlib-0.61.0/README_authlib.html.in 2008-09-06 12:53:46 +1100
@@ -352,13 +352,13 @@ is checked only by Courier's POP3 server
not defined the POP3 server will check <code class="literal">systempw</code> too.</p><p>Finally, compile the database:</p><div class="informalexample"><pre class="programlisting" xml:space="preserve">
# makeuserdb
</pre></div><p>
-This command creates the actual database, <code class="filename">@userdb@.dat</code> and
-<code class="filename">@userdb@shadow.dat</code> from the plain text file
+This command creates the actual database, <code class="filename">@userdb@.db</code> and
+<code class="filename">@userdb@shadow.db</code> from the plain text file
<code class="filename">@userdb@</code>. Courier will now start accepting logins to this
mailbox. Adding and removing mailboxes can be done while Courier is
running.</p><p>
-Courier reads <code class="filename">@userdb@.dat</code> and
-<code class="filename">@userdb@shadow.dat</code> only. The plain text source,
+Courier reads <code class="filename">@userdb@.db</code> and
+<code class="filename">@userdb@shadow.db</code> only. The plain text source,
<code class="filename">@userdb@</code> is not read by Courier itself. Changes take
effect
only when <span class="command"><strong>makeuserdb</strong></span> runs.</p></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="userdbcomplex" shape="rect"> </a>Large virtual domain farm</h3></div></div></div><p>
--- courier-authlib-0.61.0/authuserdb.c.p1 2006-10-29 05:22:52 +1000
+++ courier-authlib-0.61.0/authuserdb.c 2008-09-06 12:53:46 +1100
@@ -82,14 +82,14 @@ int rc;
return (-1);
userdb_set_debug(courier_authdebug_login_level);
- userdb_init(USERDB ".dat");
+ userdb_init(USERDB ".db");
if ( (u=userdb(cci.user)) == 0)
{
userdb_close();
return (-1);
}
- if ( (udbs=userdbshadow(USERDB "shadow.dat", cci.user)) == 0)
+ if ( (udbs=userdbshadow(USERDB "shadow.db", cci.user)) == 0)
{
free(u);
userdb_close();
--- courier-authlib-0.61.0/authuserdbpwd.c.p1 2008-07-10 13:43:55 +1100
+++ courier-authlib-0.61.0/authuserdbpwd.c 2008-09-06 12:53:46 +1100
@@ -243,7 +243,7 @@ static int dochangepwd1(const char *serv
struct userdbs *udb;
- udbs=userdbshadow(USERDB "shadow.dat", uid);
+ udbs=userdbshadow(USERDB "shadow.db", uid);
if (!udbs)
{
@@ -294,7 +294,7 @@ static int dochangepwd1(const char *serv
free(passwords);
free(udbs);
- userdb_init(USERDB ".dat");
+ userdb_init(USERDB ".db");
if ( (u=userdb(uid)) == 0 ||
(udb=userdb_creates(u)) == 0)
{
--- courier-authlib-0.61.0/preauthuserdbcommon.c.p1 2006-10-29 05:22:52 +1000
+++ courier-authlib-0.61.0/preauthuserdbcommon.c 2008-09-06 12:53:46 +1100
@@ -35,7 +35,7 @@ char *passwords=0;
int rc;
userdb_set_debug(courier_authdebug_login_level);
- userdb_init(USERDB ".dat");
+ userdb_init(USERDB ".db");
/* We rely on DPRINTF doing 'safe' printing */
DPRINTF("userdb: looking up '%s'", userid);
if ( (u=userdb(userid)) == 0)
@@ -63,7 +63,7 @@ int rc;
if (needpass)
{
- udbs=userdbshadow(USERDB "shadow.dat", userid);
+ udbs=userdbshadow(USERDB "shadow.db", userid);
if (udbs)
{
@@ -129,7 +129,7 @@ void auth_userdb_enumerate( void(*cb_fun
{
struct userdbs *u;
- userdb_init(USERDB ".dat");
+ userdb_init(USERDB ".db");
for (u=userdb_enum_first(); u; u=userdb_enum_next())
{
--- courier-authlib-0.61.0/userdb/makeuserdb.8.in.p1 2007-04-23 02:05:25 +1100
+++ courier-authlib-0.61.0/userdb/makeuserdb.8.in 2008-09-06 12:53:46 +1100
@@ -27,19 +27,19 @@ make \- create @userdb@
\fBmakeuserdb\fR
creates
-\fI@userdb@.dat\fR
+\fI@userdb@.db\fR
from the contents of
\fI@userdb@\fR.
\fI@userdb@\fR's contents are described later in this document.
Maildrop,
Courier, and other applications use
-\fI@userdb@.dat\fR
+\fI@userdb@.db\fR
as a substitute/complement for your system password file. The usual purpose for
-\fI@userdb@.dat\fR
+\fI@userdb@.db\fR
is to specify "virtual" accounts \- accounts that do not have an associated system login. Usually (but not necessarily) all virtual accounts share the same system userid.
-\fI@userdb@.dat\fR
+\fI@userdb@.db\fR
may also replace your system password file. Because the system password file is a text file, when there's a large number of accounts it will be significantly faster to search
-\fI@userdb.dat@\fR, which is a binary database, instead of a flat text file that the system password file usually is.
+\fI@userdb.db@\fR, which is a binary database, instead of a flat text file that the system password file usually is.
.PP
The
\fBmakeuserdb\fR
@@ -48,10 +48,10 @@ command can be safely executed during no
The
\fB\-f\fR
option creates
-\fI\fIfilename\fR\fR\fI.dat\fR
+\fI\fIfilename\fR\fR\fI.db\fR
from
\fI\fIfilename\fR\fR, instead of the default
-\fI@userdb@.dat\fR
+\fI@userdb@.db\fR
from
\fI@userdb@\fR.
.SS "Format of \fI@userdb@\fR"
@@ -82,7 +82,7 @@ is followed by exactly one tab character
is the name of the field,
\fIvalue\fR
is the field value. Fields and values themself cannot contain slashes or control characters. Fields may be specified in any order. Here are all the currently defined fields. Note that not every field is used by every application that reads
-\fI@userdb@.dat\fR.
+\fI@userdb@.db\fR.
.PP
\fIuid\fR
@@ -149,14 +149,14 @@ Courier
has a software\-based Maildir quota enforcement mechanism which requires additional setup and configuration. See
\fI\fBmaildirquota\fR(7)\fR\&[2]
for additional information.
-.SS "\fI@userdb@shadow.dat\fR"
+.SS "\fI@userdb@shadow.db\fR"
.PP
All fields whose name ends with 'pw' will NOT copied to
-\fI@userdb@.dat\fR. These fields will be copied to
-\fI@userdb@shadow.dat\fR.
+\fI@userdb@.db\fR. These fields will be copied to
+\fI@userdb@shadow.db\fR.
\fBmakeuserdb\fR
creates
-\fI@userdb@shadow.dat\fR
+\fI@userdb@shadow.db\fR
without any group and world permissions. Note that
\fBmakeuserdb\fR
reports an error if
@@ -190,7 +190,7 @@ After saving the output of
\fBpw2userdb\fR, you must still run
\fBmakeuserdb\fR
to create
-\fI@userdb@.dat\fR.
+\fI@userdb@.db\fR.
.PP
\fBvchkpw2userdb\fR
@@ -240,7 +240,7 @@ makeuserdb
.PP
It is still necessary to run
\fBmakeuserdb\fR, of course, to create the binary database file
-\fI@userdb@.dat\fR
+\fI@userdb@.db\fR
.PP
NOTE: You are still required to create the
\fB@userdb@\fR
@@ -274,8 +274,8 @@ without having to go in and cleaning up
.RS 4
.nf
\fI@userdb@\fR
-\fI@userdb@.dat\fR
-\fI@userdb@shadow.dat\fR
+\fI@userdb@.db\fR
+\fI@userdb@shadow.db\fR
\fI@tmpdir@/userdb.tmp\fR \- temporary file
\fI@tmpdir@/userdbshadow.tmp\fR \- temporary file
.fi
--- courier-authlib-0.61.0/userdb/makeuserdb.html.in.p1 2007-04-23 02:05:26 +1100
+++ courier-authlib-0.61.0/userdb/makeuserdb.html.in 2008-09-06 12:53:46 +1100
@@ -5,31 +5,31 @@ Copyright 1998 - 2007 Double Precision,
information.
--></head><body><div class="refentry" lang="en" xml:lang="en"><a id="makeuserdb" shape="rect"> </a><div class="titlepage"/><div class="refnamediv"><h2>Name</h2><p>make — create @userdb@</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">makeuserdb</code> [-f <em class="replaceable"><code>filename</code></em>]</p></div><div class="cmdsynopsis"><p><code class="command">pw2userdb</code> </p></div><div class="cmdsynopsis"><p><code class="command">vchkpw2userdb</code> [--vpopmailhome=<em class="replaceable"><code>dir</code></em>] [--todir=<em class="replaceable"><code>dir</code></em>]</p></div></div><div class="refsect1" lang="en" xml:lang="en"><a id="id282336" shape="rect"> </a><h2>DESCRIPTION</h2><p>
-<span><strong class="command">makeuserdb</strong></span> creates <code class="filename">@userdb@.dat</code> from
+<span><strong class="command">makeuserdb</strong></span> creates <code class="filename">@userdb@.db</code> from
the contents of <code class="filename">@userdb@</code>.
<code class="filename">@userdb@</code>'s contents are described later in this document.
<span class="application">Maildrop</span>,
<span class="application">Courier</span>, and other applications use
-<code class="filename">@userdb@.dat</code> as a
+<code class="filename">@userdb@.db</code> as a
substitute/complement for your system password file.
The usual purpose for
-<code class="filename">@userdb@.dat</code> is to specify "virtual" accounts - accounts
+<code class="filename">@userdb@.db</code> is to specify "virtual" accounts - accounts
that do
not have an associated system login.
Usually (but not necessarily) all virtual accounts share the same
system userid.
-<code class="filename">@userdb@.dat</code> may also replace
+<code class="filename">@userdb@.db</code> may also replace
your system password file. Because the system password file is a text file,
when there's a large number of accounts it will be significantly faster to
search
-<code class="filename">@userdb.dat@</code>, which is a binary database,
+<code class="filename">@userdb@.db</code>, which is a binary database,
instead of a flat text file that the system password file usually is.</p><p>
The <span><strong class="command">makeuserdb</strong></span> command can be safely executed during
normal system activity.</p><p>
The <code class="option">-f</code> option creates
-<code class="filename"><em class="replaceable"><code>filename</code></em>.dat</code> from
+<code class="filename"><em class="replaceable"><code>filename</code></em>.db</code> from
<code class="filename"><em class="replaceable"><code>filename</code></em></code>, instead of the
-default <code class="filename">@userdb@.dat</code> from
+default <code class="filename">@userdb@.db</code> from
<code class="filename">@userdb@</code>.</p><div class="refsect2" lang="en" xml:lang="en"><a id="id282645" shape="rect"> </a><h3>Format of <code class="filename">@userdb@</code></h3><p>
<code class="filename">@userdb@</code> is a plain text file that can be created using
any text editor. Blank lines are ignored. Lines that start with the #
@@ -51,7 +51,7 @@ Fields and values themself cannot contai
Fields may be
specified in any order. Here are all the currently defined fields. Note that
not every field is used by every application that reads
-<code class="filename">@userdb@.dat</code>.</p><div class="blockquote"><blockquote class="blockquote"><p>
+<code class="filename">@userdb@.db</code>.</p><div class="blockquote"><blockquote class="blockquote"><p>
<em class="parameter"><code>uid</code></em> - <em class="replaceable"><code>value</code></em> is a (possibly)
unique numerical user ID for this account.</p><p>
<em class="parameter"><code>gid</code></em> - <em class="replaceable"><code>value</code></em> is a (possibly)
@@ -92,11 +92,11 @@ software-based Maildir quota enforcement
mechanism which requires additional setup and configuration.
See
<a href="maildirquota.html" target="_top" shape="rect"><span class="citerefentry"><span class="refentrytitle">maildirquota</span>(7)</span></a>
-for additional information.</p></blockquote></div></div><div class="refsect2" lang="en" xml:lang="en"><a id="id325306" shape="rect"> </a><h3><code class="filename">@userdb@shadow.dat</code></h3><p>
+for additional information.</p></blockquote></div></div><div class="refsect2" lang="en" xml:lang="en"><a id="id325306" shape="rect"> </a><h3><code class="filename">@userdb@shadow.db</code></h3><p>
All fields whose name ends with 'pw' will NOT copied to
-<code class="filename">@userdb@.dat</code>. These fields will be copied to
-<code class="filename">@userdb@shadow.dat</code>.
-<span><strong class="command">makeuserdb</strong></span> creates <code class="filename">@userdb@shadow.dat</code>
+<code class="filename">@userdb@.db</code>. These fields will be copied to
+<code class="filename">@userdb@shadow.db</code>.
+<span><strong class="command">makeuserdb</strong></span> creates <code class="filename">@userdb@shadow.db</code>
without any group and world permissions.
Note that <span><strong class="command">makeuserdb</strong></span> reports an error
if <span><strong class="command">@userdb@</strong></span> has any group
@@ -120,7 +120,7 @@ amount of
time it takes to look up this information.</p><p>
After saving the output of <span><strong class="command">pw2userdb</strong></span>, you must still run
<span><strong class="command">makeuserdb</strong></span> to create
-<code class="filename">@userdb@.dat</code>.</p><p>
+<code class="filename">@userdb@.db</code>.</p><p>
<span><strong class="command">vchkpw2userdb</strong></span> converts a vpopmail-style
directory hierarchy to the <code class="filename">@userdb@</code> format.
This is an external virtual domain management package that's often used
@@ -153,7 +153,7 @@ vchkpw2userdb --todir=@userdb@/vpopmail
makeuserdb<br clear="none"/>
</p></div></div></blockquote></div><p>
It is still necessary to run <span><strong class="command">makeuserdb</strong></span>, of course, to
-create the binary database file <code class="filename">@userdb@.dat</code></p><p>
+create the binary database file <code class="filename">@userdb@.db</code></p><p>
NOTE: You are still required to create the <span><strong class="command">@userdb@</strong></span> entry
which maps
system userids back to accounts,
@@ -180,8 +180,8 @@ This allows you to run
<span><strong class="command">vchkpw2userdb</strong></span> without having to go in and
cleaning up again, afterwards.</p></div></div><div class="refsect1" lang="en" xml:lang="en"><a id="id325708" shape="rect"> </a><h2>FILES</h2><div class="literallayout"><p><br clear="none"/>
<code class="filename">@userdb@</code><br clear="none"/>
-<code class="filename">@userdb@.dat</code><br clear="none"/>
-<code class="filename">@userdb@shadow.dat</code><br clear="none"/>
+<code class="filename">@userdb@.db</code><br clear="none"/>
+<code class="filename">@userdb@shadow.db</code><br clear="none"/>
<code class="filename">@tmpdir@/userdb.tmp</code> - temporary file<br clear="none"/>
<code class="filename">@tmpdir@/userdbshadow.tmp</code> - temporary file<br clear="none"/>
</p></div></div><div class="refsect1" lang="en" xml:lang="en"><a id="id325752" shape="rect"> </a><h2>BUGS</h2><p><span><strong class="command">makeuserdb</strong></span> is a Perl script, and uses Perl's portable
--- courier-authlib-0.61.0/userdb/makeuserdb.in.p1 2006-03-25 23:31:21 +1000
+++ courier-authlib-0.61.0/userdb/makeuserdb.in 2008-09-06 12:53:46 +1100
@@ -27,10 +27,10 @@ if ($name eq "-f") {
$dbfile=~s/\/$//;
}
-$datfile=$dbfile.".dat";
+$datfile=$dbfile.".db";
# XXX the lock file here is etc/userdb.lock but the userdb command uses etc/.lock.userdb
$lockfile=$dbfile.".lock";
-$shadowfile=$dbfile."shadow.dat";
+$shadowfile=$dbfile."shadow.db";
$tmpdatfile=$dbfile.".tmp";
$tmpshadowfile=$dbfile."shadow.tmp";
--- courier-authlib-0.61.0/userdb/userdb.8.in.p1 2007-04-23 02:05:25 +1100
+++ courier-authlib-0.61.0/userdb/userdb.8.in 2008-09-06 12:53:46 +1100
@@ -147,16 +147,16 @@ produces a list, on standard output, of
\fI@userdb@\fR
for this
\fI\fIaddr\fR\fR.
-.SS "REBUILDING \fI@userdb@.dat\fR"
+.SS "REBUILDING \fI@userdb@.db\fR"
.PP
The actual virtual account/address database is
-\fI@userdb@.dat\fR. This is a binary database file.
+\fI@userdb@.db\fR. This is a binary database file.
\fB@userdb@\fR
is the plain text version. After running
\fBuserdb\fR, execute the
\fI\fBmakeuserdb\fR(8)\fR\&[1]
command to rebuild
-\fI@userdb@.dat\fR
+\fI@userdb@.db\fR
for the changes to take effect.
.SH "BUGS"
.PP
--- courier-authlib-0.61.0/userdb/userdb.c.p1 2007-04-14 14:02:46 +1100
+++ courier-authlib-0.61.0/userdb/userdb.c 2008-09-06 12:53:46 +1100
@@ -27,7 +27,7 @@ static ino_t di;
static int initialized=0;
int userdb_debug_level=0;
-/* Open userdb.dat, if already opened, see if it changed, if so reopen */
+/* Open userdb.db, if already opened, see if it changed, if so reopen */
void userdb_init(const char *n)
{
@@ -90,7 +90,7 @@ void userdb_set_debug(int lvl)
userdb_debug_level = lvl;
}
-/* Fetch a record from userdb.dat */
+/* Fetch a record from userdb.db */
char *userdb(const char *u)
{
@@ -306,7 +306,7 @@ struct userdbs *userdb_enum_next()
return NULL;
}
-/* Extracted a userdb.dat record, convert it to a userdbs structure */
+/* Extracted a userdb.db record, convert it to a userdbs structure */
struct userdbs *userdb_creates(const char *u)
{
--- courier-authlib-0.61.0/userdb/userdb.h.p1 2004-04-19 02:54:39 +1100
+++ courier-authlib-0.61.0/userdb/userdb.h 2008-09-06 12:53:46 +1100
@@ -15,7 +15,7 @@ extern "C" {
#endif
/*
- Functions to access local/config/userdb.dat
+ Functions to access local/config/userdb.db
*/
void userdb_set_debug(int);
--- courier-authlib-0.61.0/userdb/userdb.html.in.p1 2007-04-23 02:05:26 +1100
+++ courier-authlib-0.61.0/userdb/userdb.html.in 2008-09-06 12:53:46 +1100
@@ -82,13 +82,13 @@ output, containing all addresses found i
<em class="parameter"><code><em class="replaceable"><code>addr</code></em></code></em> is specified,
<span><strong class="command">userdb</strong></span> produces a list, on standard output, of
all the fields in <code class="filename">@userdb@</code> for this
-<em class="parameter"><code><em class="replaceable"><code>addr</code></em></code></em>.</p></div><div class="refsect2" lang="en" xml:lang="en"><a id="id325639" shape="rect"> </a><h3>REBUILDING <code class="filename">@userdb@.dat</code></h3><p>
+<em class="parameter"><code><em class="replaceable"><code>addr</code></em></code></em>.</p></div><div class="refsect2" lang="en" xml:lang="en"><a id="id325639" shape="rect"> </a><h3>REBUILDING <code class="filename">@userdb@.db</code></h3><p>
The actual virtual account/address database is
-<code class="filename">@userdb@.dat</code>.
+<code class="filename">@userdb@.db</code>.
This is a binary database file. <span><strong class="command">@userdb@</strong></span> is the plain text
version. After running <span><strong class="command">userdb</strong></span>, execute the
<a href="makeuserdb.html" target="_top" shape="rect"><span class="citerefentry"><span class="refentrytitle">makeuserdb</span>(8)</span></a> command to rebuild
-<code class="filename">@userdb@.dat</code> for the changes to take effect.</p></div></div><div class="refsect1" lang="en" xml:lang="en"><a id="id325690" shape="rect"> </a><h2>BUGS</h2><p>
+<code class="filename">@userdb@.db</code> for the changes to take effect.</p></div></div><div class="refsect1" lang="en" xml:lang="en"><a id="id325690" shape="rect"> </a><h2>BUGS</h2><p>
<em class="parameter"><code><em class="replaceable"><code>addr</code></em></code></em> must be unique.
If <code class="filename">@userdb@</code> is a subdirectory,
it's possible to create the same
--- courier-authlib-0.61.0/userdb/userdbpw.8.in.p1 2007-04-23 02:05:27 +1100
+++ courier-authlib-0.61.0/userdb/userdbpw.8.in 2008-09-06 12:53:46 +1100
@@ -49,11 +49,11 @@ uses the SHA1 hash function instead. Whe
library.
.PP
Note that even though the result of HMAC hashing looks like an encrypted password, it's really not. HMAC\-based challenge/response authentication mechanisms require the cleartext password to be available as cleartext. Computing an intermediate HMAC context does scramble the cleartext password, however if its compromised, it WILL be possible for an attacker to succesfully authenticate. Therefore, applications that use challenge/response authentication will store intermediate HMAC contexts in the "pw" fields in the userdb database, which will be compiled into the
-\fIuserdbshadow.dat\fR
+\fIuserdbshadow.db\fR
database, which has group and world permissions turned off. The userdb library also requires that the cleartext userdb source for the
-\fIuserdb.dat\fR
+\fIuserdb.db\fR
and
-\fIuserdbshadow.dat\fR
+\fIuserdbshadow.db\fR
databases is also stored with the group and world permissions turned off.
.PP
\fBuserdbpw\fR
--- courier-authlib-0.61.0/userdb/userdbpw.html.in.p1 2007-04-23 02:05:27 +1100
+++ courier-authlib-0.61.0/userdb/userdbpw.html.in 2008-09-06 12:53:46 +1100
@@ -27,11 +27,11 @@ however if its compromised, it WILL be p
authenticate. Therefore, applications that use challenge/response
authentication will store intermediate HMAC contexts in the "pw" fields in the
userdb database, which will be compiled into the
-<code class="filename">userdbshadow.dat</code>
+<code class="filename">userdbshadow.db</code>
database, which has group and world permissions turned off. The
userdb library also requires that the cleartext userdb source for the
-<code class="filename">userdb.dat</code> and
-<code class="filename">userdbshadow.dat</code> databases is also stored with the
+<code class="filename">userdb.db</code> and
+<code class="filename">userdbshadow.db</code> databases is also stored with the
group and world permissions turned off.</p><p><span><strong class="command">userdbpw</strong></span> is usually used together in a pipe with
<span><strong class="command">userdb</strong></span>, which reads from standard input. For example:</p><div class="blockquote"><blockquote class="blockquote"><div class="informalexample"><pre class="programlisting" xml:space="preserve"><span><strong class="command">userdbpw -md5 | userdb users/john set systempw</strong></span></pre></div></blockquote></div><p>or:</p><div class="blockquote"><blockquote class="blockquote"><div class="informalexample"><pre class="programlisting" xml:space="preserve"><span><strong class="command">userdbpw -hmac-md5 | userdb users/john set hmac-md5pw</strong></span></pre></div></blockquote></div><p>These commands set the <code class="option">systempw</code> field in the record for
the user <code class="option">john</code> in <code class="filename">@userdb@/users</code> file, and the