UserDB — adjust default behavior of Interchange user database functions


profile parameter value


The directive sets parameters to adjust the behavior of Interchange's built-in user database functions.

Parameter Explanation Default
acl Field name for the simple page access control acl
addr_field Field name for the address book address_book
assign_username Automatically assign username if not provided? 0
bill_field Field name for billing accounts accounts
cart_field Field name for carts storage carts
clear_cookie List of cookies to clear on explicit logout, separated by space, a comma or null-character None
clear_session Clear user session completely upon logout? 0
counter Counter filename for assign_username function etc/username.counter
crypt Encrypt passwords? 1
database Name of the user database userdb
db_acl Field name for database access control db_acl
expire_field Field name for account expiration data expiration
file_acl Field name for file access control file_acl
force_lower Force possibly upper-case database fields to lower case session variable names? 0
ignore_case Ignore case in usernames and passwords? 0
indirect_login Field name used as login field if different from the primary table key None
logfile Filename to which successful and unsuccessful authentication messages should be sent error.log
md5 Use MD5 for encryption algorithm instead of the standard (and aging) Unix crypt? 0
no_get Do not load values from the database into the user's values space at login time? 0
no_login Successfully perform login even if already logged in? 0
outboard_key_col Field name providing key for outboard tables None
outboard List of fields that live in another table None
pass_field Field name for password password
passminlen Minimum password length 2
postlogin_action Macro to run after the user is logged in None
pref_field Field name for preferences preferences
scratch List of UserDB fields to load into scratch space, instead of the default values space None
secure_cookies Forces the MV_PASSWORD cookie to be set secure 1, if using https
sql_counter SQL counter spec (sequence or AUTO_INCREMENT) for assign_username function  
super_field Field name that, when set to 1, indicates account's superuser status super
time_field Field name for storing last login time time
unix_time In log files, use seconds since Unix epoch instead of human-readable time? 0
userminlen Minimum username length 2
username_mask Regular expression that usernames must not match in order to be allowed None
validchars Character classes that usernames must match in order to be allowed -A-Za-z0-9_@.


Catalog directive


Example: Minimum lengths

Set minimum lengths in characters for username and password.

UserDB    default    userminlen    8
UserDB    default    passminlen    6


See UserDB glossary entry for more information.


UserDB is available in Interchange versions:

4.6.0-5.7.0 (git-head)


Interchange 5.7.0:

Source: lib/Vend/
Line 685

['UserDB',       'locale',          ''], 

Source: lib/Vend/
Line 3064 (context shows lines 3064-3128)

sub parse_locale {
my($item,$settings) = @_;
return ($settings || '') unless $settings =~ /[^\d.]/;
$settings = '' if "\L$settings" eq 'default';
my $name;
my ($c, $store);
if(defined $C) {
  $c = $C->{$item} || { };
  $C->{$item . "_repository"} = {}
    unless $C->{$item . "_repository"};
  $store = $C->{$item . "_repository"};
else {
  no strict 'refs';
  $c = ${"Global::$item"} || {};
  ${"Global::$item" . "_repository"} = {}
    unless ${"Global::$item" . "_repository"};
  $store = ${"Global::$item" . "_repository"};

my ($eval, $safe);
if ($settings =~ s/^\s*([-\w.@]+)(?:\s+)?//) {
  $name = $1;

  undef $eval;
  $settings =~ /^\s*{/
    and $settings =~ /}\s*$/
      and $eval = 1;
  $eval and ! $safe and $safe = new Vend::Safe;
  if(! defined $store->{$name} and $item eq 'Locale') {
      my $past = POSIX::setlocale(POSIX::LC_ALL);
    if(POSIX::setlocale(POSIX::LC_ALL, $name) ) {
      $store->{$name} = POSIX::localeconv();
    POSIX::setlocale(POSIX::LC_ALL, $past);

  if ($eval) {
    $sethash = $safe->reval($settings)
      or config_warn("bad Locale setting in %s: %s", $name, $@),
          $sethash = {};
  else {
    $settings =~ s/^\s+//;
    $settings =~ s/\s+$//;
    $sethash = {};
    %{$sethash} = Text::ParseWords::shellwords($settings);
  $c = $store->{$name} || {};
  my $nodefaults = delete $sethash->{MV_LOCALE_NO_DEFAULTS};
  for (keys %{$sethash}) {
    $c->{$_} = $sethash->{$_};
else {
  config_error("Bad locale setting $settings.\n");

$C->{LastLocale} = $name if $C and $item eq 'Locale';

$store->{$name} = $c unless $store->{$name};

return $c;


Interchange Development Group


Database(7ic), userdb(7ic), UserControl(7ic), UserDatabase(7ic)

DocBook! Interchange!