Back to index

courier  0.68.2
tcpdaccess.c
Go to the documentation of this file.
00001 /*
00002 ** Copyright 1998 - 2000 Double Precision, Inc.
00003 ** See COPYING for distribution information.
00004 */
00005 
00006 #if    HAVE_CONFIG_H
00007 #include      "config.h"
00008 #endif
00009 #include      <stdio.h>
00010 #include      <errno.h>
00011 #include      <string.h>
00012 #include      <stdlib.h>
00013 #include      <ctype.h>
00014 #include      "dbobj.h"
00015 
00016 
00017 static struct dbobj db;
00018 static int db_isopen=0, db_isinit=0;
00019 
00020 int openaccess(const char *filename)
00021 {
00022        if (!db_isinit)
00023        {
00024               dbobj_init(&db);
00025               db_isinit=1;
00026        }
00027        if (db_isopen)
00028        {
00029               dbobj_close(&db);
00030               db_isopen=0;
00031        }
00032 
00033        if (dbobj_open(&db, filename, "R"))
00034               return (-1);
00035        db_isopen=1;
00036        return (0);
00037 }
00038 
00039 void closeaccess()
00040 {
00041        if (!db_isopen)      return;
00042        dbobj_close(&db);
00043        db_isopen=0;
00044 }
00045 
00046 char *chkaccess(const char *ip)
00047 {
00048 size_t l;
00049 char   *p, *q;
00050 
00051        if (!db_isopen)      return (0);
00052 
00053 
00054        p=dbobj_fetch(&db, ip, strlen(ip), &l, "");
00055 
00056        if (!p)       return (0);
00057        q=(char *)malloc(l+1);
00058        if (!q)
00059        {
00060               perror("malloc");
00061               free(p);
00062               return (0);
00063        }
00064        memcpy(q, p, l);
00065        q[l]=0;
00066        free(p);
00067        return (q);
00068 }