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