Pyzor Server

The Pyzor Server will listen on the specified address and any serve request from Pyzor Clients.



The Pyzor Server can be started as a daemon by using the --detach option. This will:

  • daemonize the script and detach from tty
  • create a pid file
  • redirect any output to the specified file


$ pyzord --detach /dev/null --homedir=/home/user/.pyzor/


To safely stop the Pyzor Server you can use the TERM signal to trigger a safe shutdown:

$ kill -TERM `cat /home/user/.pyzor/`


The reload signal will tell the Pyzor Server to reopen and read the access and passwd files. This is useful when adding new accounts or changing the permissions for an existing account. This is done by sending the USR1 signal to the process:

$ kill -USR1 `cat /home/user/.pyzor/`


The Pyzor Server supports a number of back-end database engines to store the message digests.


This is the default engine, and the easiest to use and configure. But this it is also highly inefficient and not recommended for servers that see a large number of requests.

To use the the gdbm engine simply add to the config file ~/.pyzor/config:

Engine = gdbm
DigestDB = pyzord.db

The database file will be created if it didn’t previously exists, and will be located as usual in the specified Pyzor homedir.

For more information about GDBM see


This will require the MySQL-python library.


MySQL-python does not currently support Python 3

To configure the MySQL engine you will need to:

  • Create a MySQL database (for e.g. pyzor)

  • Create a MySQL table with the following schema:

    CREATE TABLE `digests` (
            `digest` char(40) default NULL,
            `r_count` int(11) default NULL,
            `wl_count` int(11) default NULL,
            `r_entered` datetime default NULL,
            `wl_entered` datetime default NULL,
            `r_updated` datetime default NULL,
            `wl_updated` datetime default NULL,
            PRIMARY KEY  (`digest`)
  • Create a MySQL user

  • Grant ALL PRIVILEGES to that user on the newly created table

To use the MySQL engine add to the configuration file:

Engine = mysql
DigestDB = localhost,user,password,pyzor,digests


This will require the redis library.

To use the redis engine simply add to the configuration file:

Engine = redis
DigestDB = localhost,6379,,0

Or if a password is required:

Engine = redis
DigestDB = localhost,6379,password,0

In the example above the redis database used is 0.


If you want to migrate your database from one engine to another there is an utility script installed with pyzor designed to do this. Note that the arguments are the equivalent of the Engine and DigestDB options. Some usage examples:

  • Moving a database from gdbm to redis:

    pyzor-migrate --se gdbm --sd testdata/backup.db --de redis --dd localhost,6379,,0
  • Moving a database from redis to MySQL:

    pyzor-migrate --se redis --sd localhost,6379,,0 --de mysql --dd localhost,root,,pyzor,public

Access File

This file can be used to restrict or grant access to various server-side operations to accounts. For more information on setting up accounts see accounts.

The format is very similar to the popular tcp_wrappers hosts.{allow,deny}:

privilege ... : username ... : allow|deny
privilege:a list of whitespace-separated commands The keyword all can be used to to refer to all commands.
username:a list of whitespace-separated usernames. The keyword all can be used to refer to all users other than the anonymous user. The anonymous user is refereed to as anonymous.
allow|deny:whether or not the specified user(s) can perform the specified privilege(s) on the line.

The file is processed from top to bottom, with the first match for user/privilege being the value taken. Every file has the following implicit final rule:

all : all anonymous : deny

If this file is non-existant, the following default is used:

check report ping pong info : anonymous : allow