Download | Plain Text | Line Numbers
/*
* Copyright (c) 2016 Manuel Mausz
*/
/* uncomment the line below to use nbdm or gdbm instead of BerkDB */
//#define USE_NDBM
#define _GNU_SOURCE
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#if defined(USE_NDBM)
# include <ndbm.h>
#else
# define DB_DBM_HSEARCH 1 /* use the dbm interface */
# define HAVE_DBM /* for BerkDB 5.0 and later */
# include <db.h>
#endif
int main()
{
char *user = getenv("SMTPAUTHUSER");
if (user == NULL || strlen(user) == 0)
return 0;
char *dbfile = getenv("LOCKUSERDB");
if (dbfile == NULL)
dbfile = "control/lockedusers";
DBM *dbm = dbm_open(dbfile, O_RDONLY, 0600);
if (dbm == NULL)
{
perror("Unable to open database");
return 0;
}
datum key = { .dptr = user, .dsize = strlen(user) };
datum data = dbm_fetch(dbm, key);
if (data.dptr != NULL)
{
puts("E550 YOUR ACCOUNT HAS BEEN LOCKED - PLEASE CONTACT YOUR POSTMASTER");
fprintf(stderr, "block: smtp user %s has been blocked\n", user);
}
(void)dbm_close(dbm);
return 0;
}