/* * Copyright (c) 2016 Manuel Mausz */ /* uncomment the line below to use nbdm or gdbm instead of BerkDB */ //#define USE_NDBM #define _GNU_SOURCE #include #include #include #include #if defined(USE_NDBM) # include #else # define DB_DBM_HSEARCH 1 /* use the dbm interface */ # define HAVE_DBM /* for BerkDB 5.0 and later */ # include #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; }