DICT *dict_pgsql_open(const char *name, int open_flags, int dict_flags) { DICT_PGSQL *dict_pgsql; CFG_PARSER *parser; /* * Sanity check. */ if (open_flags != O_RDONLY) return (dict_surrogate(DICT_TYPE_PGSQL, name, open_flags, dict_flags, "%s:%s map requires O_RDONLY access mode", DICT_TYPE_PGSQL, name)); /* * Open the configuration file. */ if ((parser = cfg_parser_alloc(name)) == 0) return (dict_surrogate(DICT_TYPE_PGSQL, name, open_flags, dict_flags, "open %s: %m", name)); dict_pgsql = (DICT_PGSQL *) dict_alloc(DICT_TYPE_PGSQL, name, sizeof(DICT_PGSQL)); dict_pgsql->dict.lookup = dict_pgsql_lookup; dict_pgsql->dict.close = dict_pgsql_close; dict_pgsql->dict.flags = dict_flags; dict_pgsql->parser = parser; pgsql_parse_config(dict_pgsql, name); dict_pgsql->active_host = 0; dict_pgsql->pldb = plpgsql_init(dict_pgsql->hosts); if (dict_pgsql->pldb == NULL) msg_fatal("couldn't intialize pldb!\n"); dict_pgsql->dict.owner = cfg_get_owner(dict_pgsql->parser); return (DICT_DEBUG (&dict_pgsql->dict)); }
DICT *dict_sqlite_open(const char *name, int open_flags, int dict_flags) { DICT_SQLITE *dict_sqlite; CFG_PARSER *parser; /* * Sanity checks. */ if (open_flags != O_RDONLY) return (dict_surrogate(DICT_TYPE_SQLITE, name, open_flags, dict_flags, "%s:%s map requires O_RDONLY access mode", DICT_TYPE_SQLITE, name)); /* * Open the configuration file. */ if ((parser = cfg_parser_alloc(name)) == 0) return (dict_surrogate(DICT_TYPE_SQLITE, name, open_flags, dict_flags, "open %s: %m", name)); dict_sqlite = (DICT_SQLITE *) dict_alloc(DICT_TYPE_SQLITE, name, sizeof(DICT_SQLITE)); dict_sqlite->dict.lookup = dict_sqlite_lookup; dict_sqlite->dict.close = dict_sqlite_close; dict_sqlite->dict.flags = dict_flags; dict_sqlite->parser = parser; sqlite_parse_config(dict_sqlite, name); if (sqlite3_open(dict_sqlite->dbpath, &dict_sqlite->db)) msg_fatal("%s:%s: Can't open database: %s\n", DICT_TYPE_SQLITE, name, sqlite3_errmsg(dict_sqlite->db)); dict_sqlite->dict.owner = cfg_get_owner(dict_sqlite->parser); return (DICT_DEBUG (&dict_sqlite->dict)); }