vpopmail



features


domain based quotas


user based quotas


non /etc/passwd email accounts


storing user information outside of /etc/passwd

storage in 


rich API


rich command line programs


Configuration options

--enable-qmaildir=dir   directory where qmail control and user directories are installed. default is /var/qmail],

--enable-qmail-newu=path Full path to qmail-newu program],

-enable-qmail-inject=path Full path to qmail-inject program],

--enable-qmail-newmrh=path Full path to qmail-newmrh program],

--enable-vpopuser=vpopmail   user vchkpw was installed as.],

--enable-vpopgroup=vchkpw   group vchkpw was installed as.],

--enable-roaming-users,

--enable-tcprules-prog=/usr/local/bin/tcprules   where is your tcprules program.],

--enable-tcpserver-file=~vpopmail/etc/tcp.smtp  File where tcpserver -x relay information is stored.],

--enable-relay-clear-minutes=180   expire time for roaming users after pop authentication.],

--enable-learn-passwords,

--enable-auth-logging,

--enable-mysql-logging,

--enable-clear-passwd,

--enable-logging,

--enable-sqwebmail-pass,

--enable-log-name, [  --enable-log-name=vpopmail   set syslog name.],

--enable-default-domain=name   Default domain name, default is null.],

--enable-incdir="" Directory where auth include files are.],

--enable-libdir=path-to-auth-libs Directory where auth libs are.],

--enable-libs=mysqlclient libraries for sql linking.],

--enable-mysql,

--enable-mysql-replication,

--enable-valias,

--enable-file-locking,

--enable-file-sync,

--enable-many-domains,

--enable-ldap,

--enable-oracle,

--enable-sybase,

--enable-qmail-ext,

--enable-ip-alias-domains,

--enable-passwd,

--enable-hardquota,

--enable-defaultquota,


vpopmail command line programs


clearopensmtp

vaddaliasdomain

vadddomain

vadduser

valias

vchkpw

vconvert

vdeldomain

vdelivermail

vdeloldusers

vdeluser

vdominfo

vipmap

vkill

vmkpasswd

vmoduser

vpasswd

vpopbull

vqmaillocal

vsetuserquota

vuserinfo


Data structures

struct vqpasswd {

  char *pw_name;                /* Username.  */

  char *pw_passwd;              /* Password.  */

  uid_t pw_uid;                 /* User ID.  */

  gid_t pw_gid;                 /* Group ID.  */

  char *pw_gecos;               /* Real name.  */

  char *pw_dir;                 /* Home directory.  */

  char *pw_shell;               /* Shell program.  */

  char *pw_clear_passwd;        /* Clear password.  */

};




vpopmail API

Primary functions


int vadddomain( char *domain, char *dir, uid_t uid, gid_t gid);

int vdeldomain( char *);

int vadduser( char *, char *, char *, char *, int);

int vdeluser( char *, char *);

int vpasswd( char *, char *, char *, int);

int vsetuserquota( char *, char *, char * );

int vexit(int err);

int mkpasswd3( char *, char *, int);



Authentication functions

int vauth_deluser(char *, char *);      

int vauth_setquota( char *, char *, char *);

struct vqpasswd *vauth_getpw(char *, char *);

int vauth_setpw(struct vqpasswd *, char *);

struct vqpasswd *vauth_getall(char *, int, int);

void vauth_end_getall();

int vmkpasswd( char *domain );

void vclose();

void vclose1();

int vset_lastauth( char *user, char *domain, char *remoteip);

int vset_lastauth_time( char *user,char *domain,char *remoteip,time_t curtime);

time_t vget_lastauth( struct vqpasswd *pw, char *domain);

char *vget_lastauthip( struct vqpasswd *pw, char *domain);

int vauth_adddomain(char *);

int vauth_deldomain(char *);


int vauth_adduser(char *username, char *domain, char *passwd, char *gecos, char * dir, int apop);




secondary functions

char randltr(void);

char *vgetpasswd( char *);

int vdelfiles( char *);

int add_domain_assign( char *domain, char *dir, uid_t uid, gid_t gid);

int del_control( char *);

int del_domain_assign( char *domain, char *dir, uid_t uid, gid_t gid);

int remove_line( char *, char *);

int r_chown( char *, uid_t, gid_t);

int signal_process( char *, int );

int update_newu();

int parse_email( char *, char *, char *, int);

int add_user_assign( char *, char *);

int del_user_assign( char *);

void lowerit( char *);

char *crypt();

int update_file(char *, char *);

int count_rcpthosts();

int compile_morercpthosts();

char *make_user_dir(char *username, char *domain, uid_t uid, gid_t gid);

int r_mkdir(char *, uid_t uid, gid_t gid);

struct vqpasswd *vgetent(FILE *);

int pw_comp(char *, char *, char *, int);

void vset_default_domain( char *);

void vopen_smtp_relay();

void vupdate_rules(int);

void vclear_open_smtp(time_t, time_t);

char *verror(int);

int vadddotqmail(char *alias, char *domain,... );

int vdeldotqmail( char *alias, char *domain);

int vget_real_domain(char *domain, int len );

char *vget_assign(char *domain, char *dir, int dir_len, uid_t *uid, gid_t *gid);struct vqpasswd *vauth_user(char *user, char *domain, char *password, char *apop);

int vmake_maildir(char *dir, uid_t uid, gid_t gid);

int vsqwebmail_pass( char *dir, char *crypted, uid_t uid, gid_t gid );

int open_smtp_relay();

unsigned  long tcprules_open();

int vfd_copy(int,int);

int vfd_move(int,int);

int update_rules();

char *vversion(char *);

void remove_maildirsize(char *dir);

int vcheck_vqpw(struct vqpasswd *inpw, char *domain);

char *vgen_pass(int len);

int vvalidchar( char inchar );


Directory Hashing

functions

int open_big_dir(char *domain, uid_t uid, gid_t gid);

int close_big_dir(char *domain, uid_t uid, gid_t gid);

char *next_big_dir(uid_t uid, gid_t gid);

char *inc_dir(vdir_type *, int);

char next_char(char, int, int);

int inc_dir_control(vdir_type *);

int dec_dir_control(char *domain, uid_t uid, gid_t gid);

void print_control();


int vread_dir_control(vdir_type *vdir, char *domain, uid_t uid, gid_t gid );

int vwrite_dir_control(vdir_type *vdir, char *domain, uid_t uid, gid_t gid);

int vdel_dir_control(char *domain);


data structure


#define MAX_USERS_PER_LEVEL 100


#define MAX_DIR_NAME  300

typedef struct {

        int level_cur;

        int level_max;

        int level_start[MAX_DIR_LEVELS];

        int level_end[MAX_DIR_LEVELS];

        int level_mod[MAX_DIR_LEVELS];

        int level_index[MAX_DIR_LEVELS]; /* current spot in dir list */

        long unsigned cur_users;

        char the_dir[MAX_DIR_NAME];

} vdir_type;


IP functions

int vget_ip_map( char *ip, char *domain, int domain_size);

int vadd_ip_map( char *ip, char *domain);

int vdel_ip_map( char *ip, char *domain);

int vshow_ip_map( int first, char *ip, char *domain);


Alias functinos

char *valias_select( char *alias, char *domain );

char *valias_select_next();

char *valias_select_all( char *alias, char *domain );

char *valias_select_all_next(char *alias);

int valias_insert( char *alias, char *domain, char *alias_line);

int valias_delete( char *alias, char *domain);

int valias_delete_domain( char *domain);

#endif


Error Codes

#define VA_SUCCESS                        0

#define VA_ILLEGAL_USERNAME              -1

#define VA_USERNAME_EXISTS               -2

#define VA_BAD_DIR                       -3

#define VA_BAD_U_DIR                     -4

#define VA_BAD_D_DIR                     -5

#define VA_BAD_V_DIR                     -6

#define VA_EXIST_U_DIR                   -7

#define VA_BAD_U_DIR2                    -8

#define VA_SUBDIR_CREATION               -9

#define VA_USER_DOES_NOT_EXIST          -10

#define VA_DOMAIN_DOES_NOT_EXIST        -11

#define VA_INVALID_DOMAIN_NAME          -12

#define VA_DOMAIN_ALREADY_EXISTS        -13

#define VA_COULD_NOT_MAKE_DOMAIN_DIR    -14

#define VA_COULD_NOT_OPEN_QMAIL_DEFAULT -15

#define VA_CAN_NOT_MAKE_DOMAINS_DIR     -16

#define VA_COULD_NOT_UPDATE_FILE        -17

#define VA_CRYPT_FAILED                 -18

#define VA_COULD_NOT_OPEN_DOT_QMAIL     -19

#define VA_BAD_CHAR                     -20

#define VA_SQWEBMAIL_PASS_FAIL          -21

#define VA_BAD_UID                      -22

#define VA_NO_AUTH_CONNECTION           -23

#define VA_MEMORY_ALLOC_ERR             -24

#define VA_USER_NAME_TOO_LONG           -25

#define VA_DOMAIN_NAME_TOO_LONG         -26

#define VA_PASSWD_TOO_LONG              -27

#define VA_GECOS_TOO_LONG               -28

#define VA_QUOTA_TOO_LONG               -29

#define VA_DIR_TOO_LONG                 -30

#define VA_CLEAR_PASSWD_TOO_LONG        -31

#define VA_ALIAS_LINE_TOO_LONG          -32

#define VA_NULL_POINTER                 -33

#define VA_INVALID_EMAIL_CHAR           -34


Gid Flags

#define NO_PASSWD_CHNG 0x01

#define NO_POP         0x02

#define NO_WEBMAIL     0x04

#define NO_IMAP        0x08

#define BOUNCE_MAIL    0x10

#define NO_RELAY       0x20

#define NO_DIALUP      0x40

#define V_USER0       0x080

#define V_USER1       0x100

#define V_USER2       0x200

#define V_USER3       0x400

#define QA_ADMIN     0x1000


External variables

extern int OptimizeAddDomain;

extern int NoMakeIndex;

extern int verrori;


Configure defines

#undef PS_COMMAND

#undef ENABLE_PASSWD

#undef HAS_SHADOW

#undef TCP_FILE

#undef ADMIN

#undef USE_CDB

#undef USE_SYBASE

#undef USE_ORACLE

#undef USE_LDAP

#undef SQWEBMAIL_PASS

#undef USE_MYSQL

#undef MYSQL_REPLICATION

#undef USE_SQL

#undef MANY_DOMAINS

#undef DEFAULT_DOMAIN

#undef UCSPI_DIR

#undef ENABLE_AUTH_LOGGING

#undef ENABLE_LEARN_PASSWORDS

#undef ENABLE_MYSQL_LOGGING

#undef CLEAR_PASS

#undef VALIAS

#undef FILE_LOCKING

#undef FILE_SYNC

#undef ENABLE_LOGGING

#undef LOG_NAME

#undef OPEN_SMTP_CUR_FILE

#undef OPEN_SMTP_TMP_FILE

#undef OPEN_SMTP_LOK_FILE

#undef TCPRULES_PROG

#undef RELAY_CLEAR_MINUTES

#undef IP_ALIAS_DOMAINS

#undef HARD_QUOTA

#undef QMAIL_EXT

#undef VPOPUSER

#undef VPOPGROUP

#undef APOP_FILE

#undef QMAILNEWU

#undef QMAILINJECT

#undef QMAILNEWMRH

#undef QMAILDIR

#undef VPOPMAILDIR

#undef VPOPMAILUID

#undef VPOPMAILGID

#undef POP_AUTH_OPEN_RELAY