106f25ae9SGregory Neil Shapiro /* 206f25ae9SGregory Neil Shapiro ** Copyright (c) 1999-2000 Sendmail, Inc. and its suppliers. 306f25ae9SGregory Neil Shapiro ** All rights reserved. 406f25ae9SGregory Neil Shapiro ** 506f25ae9SGregory Neil Shapiro ** By using this file, you agree to the terms and conditions set 606f25ae9SGregory Neil Shapiro ** forth in the LICENSE file which can be found at the top level of 706f25ae9SGregory Neil Shapiro ** the sendmail distribution. 806f25ae9SGregory Neil Shapiro ** 906f25ae9SGregory Neil Shapiro ** $Id: smdb.h,v 8.29.2.1 2000/04/08 20:40:42 ca Exp $ 1006f25ae9SGregory Neil Shapiro */ 1106f25ae9SGregory Neil Shapiro 1206f25ae9SGregory Neil Shapiro #ifndef _SMDB_H_ 1306f25ae9SGregory Neil Shapiro # define _SMDB_H_ 1406f25ae9SGregory Neil Shapiro 1506f25ae9SGregory Neil Shapiro # include <sys/types.h> 1606f25ae9SGregory Neil Shapiro # include <sys/stat.h> 1706f25ae9SGregory Neil Shapiro # ifndef __P 1806f25ae9SGregory Neil Shapiro # include "sendmail/cdefs.h" 1906f25ae9SGregory Neil Shapiro # endif /* __P */ 2006f25ae9SGregory Neil Shapiro 2106f25ae9SGregory Neil Shapiro # ifndef NDBM 2206f25ae9SGregory Neil Shapiro # ifndef NEWDB 2306f25ae9SGregory Neil Shapiro ERROR NDBM or NEWDB must be defined. 2406f25ae9SGregory Neil Shapiro # endif /* ! NEWDB */ 2506f25ae9SGregory Neil Shapiro # endif /* ! NDBM */ 2606f25ae9SGregory Neil Shapiro 2706f25ae9SGregory Neil Shapiro # ifdef NDBM 2806f25ae9SGregory Neil Shapiro # include <ndbm.h> 2906f25ae9SGregory Neil Shapiro # endif /* NDBM */ 3006f25ae9SGregory Neil Shapiro 3106f25ae9SGregory Neil Shapiro # ifdef NEWDB 3206f25ae9SGregory Neil Shapiro # include <db.h> 3306f25ae9SGregory Neil Shapiro # ifndef DB_VERSION_MAJOR 3406f25ae9SGregory Neil Shapiro # define DB_VERSION_MAJOR 1 3506f25ae9SGregory Neil Shapiro # endif /* ! DB_VERSION_MAJOR */ 3606f25ae9SGregory Neil Shapiro # endif /* NEWDB */ 3706f25ae9SGregory Neil Shapiro 3806f25ae9SGregory Neil Shapiro /* 3906f25ae9SGregory Neil Shapiro ** Some size constants 4006f25ae9SGregory Neil Shapiro */ 4106f25ae9SGregory Neil Shapiro #define SMDB_MAX_USER_NAME_LEN 1024 4206f25ae9SGregory Neil Shapiro #define SMDB_MAX_NAME_LEN 1024 4306f25ae9SGregory Neil Shapiro 4406f25ae9SGregory Neil Shapiro /* 4506f25ae9SGregory Neil Shapiro ** This file defines the abstraction for database lookups. It is pretty 4606f25ae9SGregory Neil Shapiro ** much a copy of the db2 interface with the exception that every function 4706f25ae9SGregory Neil Shapiro ** returns 0 on success and non-zero on failure. The non-zero return code 4806f25ae9SGregory Neil Shapiro ** is meaningful. 4906f25ae9SGregory Neil Shapiro ** 5006f25ae9SGregory Neil Shapiro ** I'm going to put the function comments in this file since the interface 5106f25ae9SGregory Neil Shapiro ** MUST be the same for all inheritors of this interface. 5206f25ae9SGregory Neil Shapiro */ 5306f25ae9SGregory Neil Shapiro 5406f25ae9SGregory Neil Shapiro typedef struct database_struct SMDB_DATABASE; 5506f25ae9SGregory Neil Shapiro typedef struct cursor_struct SMDB_CURSOR; 5606f25ae9SGregory Neil Shapiro typedef union database_entity_union SMDB_DBENT; 5706f25ae9SGregory Neil Shapiro 5806f25ae9SGregory Neil Shapiro 5906f25ae9SGregory Neil Shapiro /* 6006f25ae9SGregory Neil Shapiro ** DB_CLOSE_FUNC -- close the database 6106f25ae9SGregory Neil Shapiro ** 6206f25ae9SGregory Neil Shapiro ** Parameters: 6306f25ae9SGregory Neil Shapiro ** db -- The database to close. 6406f25ae9SGregory Neil Shapiro ** 6506f25ae9SGregory Neil Shapiro ** Returns: 6606f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 6706f25ae9SGregory Neil Shapiro ** 6806f25ae9SGregory Neil Shapiro */ 6906f25ae9SGregory Neil Shapiro typedef int (*db_close_func) __P((SMDB_DATABASE *db)); 7006f25ae9SGregory Neil Shapiro 7106f25ae9SGregory Neil Shapiro 7206f25ae9SGregory Neil Shapiro 7306f25ae9SGregory Neil Shapiro /* 7406f25ae9SGregory Neil Shapiro ** DB_DEL_FUNC -- removes a key and data pair from the database 7506f25ae9SGregory Neil Shapiro ** 7606f25ae9SGregory Neil Shapiro ** Parameters: 7706f25ae9SGregory Neil Shapiro ** db -- The database to close. 7806f25ae9SGregory Neil Shapiro ** key -- The key to remove. 7906f25ae9SGregory Neil Shapiro ** flags -- delete options. There are currently no defined 8006f25ae9SGregory Neil Shapiro ** flags for delete. 8106f25ae9SGregory Neil Shapiro ** 8206f25ae9SGregory Neil Shapiro ** Returns: 8306f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 8406f25ae9SGregory Neil Shapiro ** 8506f25ae9SGregory Neil Shapiro */ 8606f25ae9SGregory Neil Shapiro typedef int (*db_del_func) __P((SMDB_DATABASE *db, 8706f25ae9SGregory Neil Shapiro SMDB_DBENT *key, u_int flags)); 8806f25ae9SGregory Neil Shapiro 8906f25ae9SGregory Neil Shapiro 9006f25ae9SGregory Neil Shapiro 9106f25ae9SGregory Neil Shapiro /* 9206f25ae9SGregory Neil Shapiro ** DB_FD_FUNC -- Returns a pointer to a file used for the database. 9306f25ae9SGregory Neil Shapiro ** 9406f25ae9SGregory Neil Shapiro ** Parameters: 9506f25ae9SGregory Neil Shapiro ** db -- The database to close. 9606f25ae9SGregory Neil Shapiro ** fd -- A pointer to store the returned fd in. 9706f25ae9SGregory Neil Shapiro ** 9806f25ae9SGregory Neil Shapiro ** Returns: 9906f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 10006f25ae9SGregory Neil Shapiro ** 10106f25ae9SGregory Neil Shapiro */ 10206f25ae9SGregory Neil Shapiro typedef int (*db_fd_func) __P((SMDB_DATABASE *db, int* fd)); 10306f25ae9SGregory Neil Shapiro 10406f25ae9SGregory Neil Shapiro 10506f25ae9SGregory Neil Shapiro 10606f25ae9SGregory Neil Shapiro /* 10706f25ae9SGregory Neil Shapiro ** DB_GET_FUNC -- Gets the data associated with a key. 10806f25ae9SGregory Neil Shapiro ** 10906f25ae9SGregory Neil Shapiro ** Parameters: 11006f25ae9SGregory Neil Shapiro ** db -- The database to close. 11106f25ae9SGregory Neil Shapiro ** key -- The key to access. 11206f25ae9SGregory Neil Shapiro ** data -- A place to store the returned data. 11306f25ae9SGregory Neil Shapiro ** flags -- get options. There are currently no defined 11406f25ae9SGregory Neil Shapiro ** flags for get. 11506f25ae9SGregory Neil Shapiro ** 11606f25ae9SGregory Neil Shapiro ** Returns: 11706f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 11806f25ae9SGregory Neil Shapiro ** 11906f25ae9SGregory Neil Shapiro */ 12006f25ae9SGregory Neil Shapiro typedef int (*db_get_func) __P((SMDB_DATABASE *db, 12106f25ae9SGregory Neil Shapiro SMDB_DBENT *key, 12206f25ae9SGregory Neil Shapiro SMDB_DBENT *data, u_int flags)); 12306f25ae9SGregory Neil Shapiro 12406f25ae9SGregory Neil Shapiro 12506f25ae9SGregory Neil Shapiro 12606f25ae9SGregory Neil Shapiro /* 12706f25ae9SGregory Neil Shapiro ** DB_PUT_FUNC -- Sets some data according to the key. 12806f25ae9SGregory Neil Shapiro ** 12906f25ae9SGregory Neil Shapiro ** Parameters: 13006f25ae9SGregory Neil Shapiro ** db -- The database to close. 13106f25ae9SGregory Neil Shapiro ** key -- The key to use. 13206f25ae9SGregory Neil Shapiro ** data -- The data to store. 13306f25ae9SGregory Neil Shapiro ** flags -- put options: 13406f25ae9SGregory Neil Shapiro ** SMDBF_NO_OVERWRITE - Return an error if key alread 13506f25ae9SGregory Neil Shapiro ** exists. 13606f25ae9SGregory Neil Shapiro ** SMDBF_ALLOW_DUP - Allow duplicates in btree maps. 13706f25ae9SGregory Neil Shapiro ** 13806f25ae9SGregory Neil Shapiro ** Returns: 13906f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 14006f25ae9SGregory Neil Shapiro ** 14106f25ae9SGregory Neil Shapiro */ 14206f25ae9SGregory Neil Shapiro typedef int (*db_put_func) __P((SMDB_DATABASE *db, 14306f25ae9SGregory Neil Shapiro SMDB_DBENT *key, 14406f25ae9SGregory Neil Shapiro SMDB_DBENT *data, u_int flags)); 14506f25ae9SGregory Neil Shapiro 14606f25ae9SGregory Neil Shapiro 14706f25ae9SGregory Neil Shapiro /* 14806f25ae9SGregory Neil Shapiro ** DB_SYNC_FUNC -- Flush any cached information to disk. 14906f25ae9SGregory Neil Shapiro ** 15006f25ae9SGregory Neil Shapiro ** Parameters: 15106f25ae9SGregory Neil Shapiro ** db -- The database to sync. 15206f25ae9SGregory Neil Shapiro ** flags -- sync options: 15306f25ae9SGregory Neil Shapiro ** 15406f25ae9SGregory Neil Shapiro ** Returns: 15506f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 15606f25ae9SGregory Neil Shapiro ** 15706f25ae9SGregory Neil Shapiro */ 15806f25ae9SGregory Neil Shapiro typedef int (*db_sync_func) __P((SMDB_DATABASE *db, u_int flags)); 15906f25ae9SGregory Neil Shapiro 16006f25ae9SGregory Neil Shapiro 16106f25ae9SGregory Neil Shapiro /* 16206f25ae9SGregory Neil Shapiro ** DB_SET_OWNER_FUNC -- Set the owner and group of the database files. 16306f25ae9SGregory Neil Shapiro ** 16406f25ae9SGregory Neil Shapiro ** Parameters: 16506f25ae9SGregory Neil Shapiro ** db -- The database to set. 16606f25ae9SGregory Neil Shapiro ** uid -- The UID for the new owner (-1 for no change) 16706f25ae9SGregory Neil Shapiro ** gid -- The GID for the new owner (-1 for no change) 16806f25ae9SGregory Neil Shapiro ** 16906f25ae9SGregory Neil Shapiro ** Returns: 17006f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 17106f25ae9SGregory Neil Shapiro ** 17206f25ae9SGregory Neil Shapiro */ 17306f25ae9SGregory Neil Shapiro typedef int (*db_set_owner_func) __P((SMDB_DATABASE *db, uid_t uid, 17406f25ae9SGregory Neil Shapiro gid_t gid)); 17506f25ae9SGregory Neil Shapiro 17606f25ae9SGregory Neil Shapiro 17706f25ae9SGregory Neil Shapiro /* 17806f25ae9SGregory Neil Shapiro ** DB_CURSOR -- Obtain a cursor for sequential access 17906f25ae9SGregory Neil Shapiro ** 18006f25ae9SGregory Neil Shapiro ** Parameters: 18106f25ae9SGregory Neil Shapiro ** db -- The database to use. 18206f25ae9SGregory Neil Shapiro ** cursor -- The address of a cursor pointer. 18306f25ae9SGregory Neil Shapiro ** flags -- sync options: 18406f25ae9SGregory Neil Shapiro ** 18506f25ae9SGregory Neil Shapiro ** Returns: 18606f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 18706f25ae9SGregory Neil Shapiro ** 18806f25ae9SGregory Neil Shapiro */ 18906f25ae9SGregory Neil Shapiro typedef int (*db_cursor_func) __P((SMDB_DATABASE *db, 19006f25ae9SGregory Neil Shapiro SMDB_CURSOR **cursor, u_int flags)); 19106f25ae9SGregory Neil Shapiro 19206f25ae9SGregory Neil Shapiro 19306f25ae9SGregory Neil Shapiro struct database_struct 19406f25ae9SGregory Neil Shapiro { 19506f25ae9SGregory Neil Shapiro db_close_func smdb_close; 19606f25ae9SGregory Neil Shapiro db_del_func smdb_del; 19706f25ae9SGregory Neil Shapiro db_fd_func smdb_fd; 19806f25ae9SGregory Neil Shapiro db_get_func smdb_get; 19906f25ae9SGregory Neil Shapiro db_put_func smdb_put; 20006f25ae9SGregory Neil Shapiro db_sync_func smdb_sync; 20106f25ae9SGregory Neil Shapiro db_set_owner_func smdb_set_owner; 20206f25ae9SGregory Neil Shapiro db_cursor_func smdb_cursor; 20306f25ae9SGregory Neil Shapiro void *smdb_impl; 20406f25ae9SGregory Neil Shapiro }; 20506f25ae9SGregory Neil Shapiro 20606f25ae9SGregory Neil Shapiro 20706f25ae9SGregory Neil Shapiro 20806f25ae9SGregory Neil Shapiro /* 20906f25ae9SGregory Neil Shapiro ** DB_CURSOR_CLOSE -- Close a cursor 21006f25ae9SGregory Neil Shapiro ** 21106f25ae9SGregory Neil Shapiro ** Parameters: 21206f25ae9SGregory Neil Shapiro ** cursor -- The cursor to close. 21306f25ae9SGregory Neil Shapiro ** 21406f25ae9SGregory Neil Shapiro ** Returns: 21506f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 21606f25ae9SGregory Neil Shapiro ** 21706f25ae9SGregory Neil Shapiro */ 21806f25ae9SGregory Neil Shapiro typedef int (*db_cursor_close_func) __P((SMDB_CURSOR *cursor)); 21906f25ae9SGregory Neil Shapiro 22006f25ae9SGregory Neil Shapiro 22106f25ae9SGregory Neil Shapiro /* 22206f25ae9SGregory Neil Shapiro ** DB_CURSOR_DEL -- Delete the key/value pair of this cursor 22306f25ae9SGregory Neil Shapiro ** 22406f25ae9SGregory Neil Shapiro ** Parameters: 22506f25ae9SGregory Neil Shapiro ** cursor -- The cursor. 22606f25ae9SGregory Neil Shapiro ** flags -- flags 22706f25ae9SGregory Neil Shapiro ** 22806f25ae9SGregory Neil Shapiro ** Returns: 22906f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 23006f25ae9SGregory Neil Shapiro ** 23106f25ae9SGregory Neil Shapiro */ 23206f25ae9SGregory Neil Shapiro typedef int (*db_cursor_del_func) __P((SMDB_CURSOR *cursor, u_int flags)); 23306f25ae9SGregory Neil Shapiro 23406f25ae9SGregory Neil Shapiro 23506f25ae9SGregory Neil Shapiro /* 23606f25ae9SGregory Neil Shapiro ** DB_CURSOR_GET -- Get the key/value of this cursor. 23706f25ae9SGregory Neil Shapiro ** 23806f25ae9SGregory Neil Shapiro ** Parameters: 23906f25ae9SGregory Neil Shapiro ** cursor -- The cursor. 24006f25ae9SGregory Neil Shapiro ** key -- The current key. 24106f25ae9SGregory Neil Shapiro ** value -- The current value 24206f25ae9SGregory Neil Shapiro ** flags -- flags 24306f25ae9SGregory Neil Shapiro ** 24406f25ae9SGregory Neil Shapiro ** Returns: 24506f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 24606f25ae9SGregory Neil Shapiro ** SMDBE_LAST_ENTRY - This is a success condition that 24706f25ae9SGregory Neil Shapiro ** gets returned when the end of the 24806f25ae9SGregory Neil Shapiro ** database is hit. 24906f25ae9SGregory Neil Shapiro ** 25006f25ae9SGregory Neil Shapiro */ 25106f25ae9SGregory Neil Shapiro typedef int (*db_cursor_get_func) __P((SMDB_CURSOR *cursor, 25206f25ae9SGregory Neil Shapiro SMDB_DBENT *key, 25306f25ae9SGregory Neil Shapiro SMDB_DBENT *data, 25406f25ae9SGregory Neil Shapiro u_int flags)); 25506f25ae9SGregory Neil Shapiro 25606f25ae9SGregory Neil Shapiro /* 25706f25ae9SGregory Neil Shapiro ** Flags for DB_CURSOR_GET 25806f25ae9SGregory Neil Shapiro */ 25906f25ae9SGregory Neil Shapiro #define SMDB_CURSOR_GET_FIRST 0 26006f25ae9SGregory Neil Shapiro #define SMDB_CURSOR_GET_LAST 1 26106f25ae9SGregory Neil Shapiro #define SMDB_CURSOR_GET_NEXT 2 26206f25ae9SGregory Neil Shapiro #define SMDB_CURSOR_GET_RANGE 3 26306f25ae9SGregory Neil Shapiro 26406f25ae9SGregory Neil Shapiro 26506f25ae9SGregory Neil Shapiro /* 26606f25ae9SGregory Neil Shapiro ** DB_CURSOR_PUT -- Put the key/value at this cursor. 26706f25ae9SGregory Neil Shapiro ** 26806f25ae9SGregory Neil Shapiro ** Parameters: 26906f25ae9SGregory Neil Shapiro ** cursor -- The cursor. 27006f25ae9SGregory Neil Shapiro ** key -- The current key. 27106f25ae9SGregory Neil Shapiro ** value -- The current value 27206f25ae9SGregory Neil Shapiro ** flags -- flags 27306f25ae9SGregory Neil Shapiro ** 27406f25ae9SGregory Neil Shapiro ** Returns: 27506f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 27606f25ae9SGregory Neil Shapiro ** 27706f25ae9SGregory Neil Shapiro */ 27806f25ae9SGregory Neil Shapiro typedef int (*db_cursor_put_func) __P((SMDB_CURSOR *cursor, 27906f25ae9SGregory Neil Shapiro SMDB_DBENT *key, 28006f25ae9SGregory Neil Shapiro SMDB_DBENT *data, 28106f25ae9SGregory Neil Shapiro u_int flags)); 28206f25ae9SGregory Neil Shapiro 28306f25ae9SGregory Neil Shapiro 28406f25ae9SGregory Neil Shapiro 28506f25ae9SGregory Neil Shapiro struct cursor_struct 28606f25ae9SGregory Neil Shapiro { 28706f25ae9SGregory Neil Shapiro db_cursor_close_func smdbc_close; 28806f25ae9SGregory Neil Shapiro db_cursor_del_func smdbc_del; 28906f25ae9SGregory Neil Shapiro db_cursor_get_func smdbc_get; 29006f25ae9SGregory Neil Shapiro db_cursor_put_func smdbc_put; 29106f25ae9SGregory Neil Shapiro void *smdbc_impl; 29206f25ae9SGregory Neil Shapiro }; 29306f25ae9SGregory Neil Shapiro 29406f25ae9SGregory Neil Shapiro 29506f25ae9SGregory Neil Shapiro struct database_params_struct 29606f25ae9SGregory Neil Shapiro { 29706f25ae9SGregory Neil Shapiro u_int smdbp_num_elements; 29806f25ae9SGregory Neil Shapiro u_int smdbp_cache_size; 29906f25ae9SGregory Neil Shapiro bool smdbp_allow_dup; 30006f25ae9SGregory Neil Shapiro }; 30106f25ae9SGregory Neil Shapiro 30206f25ae9SGregory Neil Shapiro typedef struct database_params_struct SMDB_DBPARAMS; 30306f25ae9SGregory Neil Shapiro 30406f25ae9SGregory Neil Shapiro struct database_user_struct 30506f25ae9SGregory Neil Shapiro { 30606f25ae9SGregory Neil Shapiro uid_t smdbu_id; 30706f25ae9SGregory Neil Shapiro gid_t smdbu_group_id; 30806f25ae9SGregory Neil Shapiro char smdbu_name[SMDB_MAX_USER_NAME_LEN]; 30906f25ae9SGregory Neil Shapiro }; 31006f25ae9SGregory Neil Shapiro 31106f25ae9SGregory Neil Shapiro typedef struct database_user_struct SMDB_USER_INFO; 31206f25ae9SGregory Neil Shapiro 31306f25ae9SGregory Neil Shapiro union database_entity_union 31406f25ae9SGregory Neil Shapiro { 31506f25ae9SGregory Neil Shapiro # ifdef NDBM 31606f25ae9SGregory Neil Shapiro datum dbm; 31706f25ae9SGregory Neil Shapiro # endif /* NDBM */ 31806f25ae9SGregory Neil Shapiro # ifdef NEWDB 31906f25ae9SGregory Neil Shapiro DBT db; 32006f25ae9SGregory Neil Shapiro # endif /* NEWDB */ 32106f25ae9SGregory Neil Shapiro struct 32206f25ae9SGregory Neil Shapiro { 32306f25ae9SGregory Neil Shapiro char *data; 32406f25ae9SGregory Neil Shapiro size_t size; 32506f25ae9SGregory Neil Shapiro } data; 32606f25ae9SGregory Neil Shapiro }; 32706f25ae9SGregory Neil Shapiro 32806f25ae9SGregory Neil Shapiro 32906f25ae9SGregory Neil Shapiro typedef char *SMDB_DBTYPE; 33006f25ae9SGregory Neil Shapiro typedef u_int SMDB_FLAG; 33106f25ae9SGregory Neil Shapiro 33206f25ae9SGregory Neil Shapiro /* 33306f25ae9SGregory Neil Shapiro ** These are types of databases. 33406f25ae9SGregory Neil Shapiro */ 33506f25ae9SGregory Neil Shapiro 33606f25ae9SGregory Neil Shapiro # define SMDB_TYPE_DEFAULT NULL 33706f25ae9SGregory Neil Shapiro # define SMDB_TYPE_DEFAULT_LEN 0 33806f25ae9SGregory Neil Shapiro # define SMDB_TYPE_HASH "hash" 33906f25ae9SGregory Neil Shapiro # define SMDB_TYPE_HASH_LEN 5 34006f25ae9SGregory Neil Shapiro # define SMDB_TYPE_BTREE "btree" 34106f25ae9SGregory Neil Shapiro # define SMDB_TYPE_BTREE_LEN 6 34206f25ae9SGregory Neil Shapiro # define SMDB_TYPE_NDBM "dbm" 34306f25ae9SGregory Neil Shapiro # define SMDB_TYPE_NDBM_LEN 4 34406f25ae9SGregory Neil Shapiro 34506f25ae9SGregory Neil Shapiro /* 34606f25ae9SGregory Neil Shapiro ** These are flags 34706f25ae9SGregory Neil Shapiro */ 34806f25ae9SGregory Neil Shapiro /* Flags for put */ 34906f25ae9SGregory Neil Shapiro # define SMDBF_NO_OVERWRITE 0x00000001 35006f25ae9SGregory Neil Shapiro # define SMDBF_ALLOW_DUP 0x00000002 35106f25ae9SGregory Neil Shapiro 35206f25ae9SGregory Neil Shapiro 35306f25ae9SGregory Neil Shapiro extern SMDB_DATABASE *smdb_malloc_database __P((void)); 35406f25ae9SGregory Neil Shapiro extern void smdb_free_database __P((SMDB_DATABASE *)); 35506f25ae9SGregory Neil Shapiro extern int smdb_open_database __P((SMDB_DATABASE **, char *, int, 35606f25ae9SGregory Neil Shapiro int, long, SMDB_DBTYPE, 35706f25ae9SGregory Neil Shapiro SMDB_USER_INFO *, 35806f25ae9SGregory Neil Shapiro SMDB_DBPARAMS *)); 35906f25ae9SGregory Neil Shapiro # ifdef NEWDB 36006f25ae9SGregory Neil Shapiro extern int smdb_db_open __P((SMDB_DATABASE **, char *, int, int, 36106f25ae9SGregory Neil Shapiro long, SMDB_DBTYPE, SMDB_USER_INFO *, 36206f25ae9SGregory Neil Shapiro SMDB_DBPARAMS *)); 36306f25ae9SGregory Neil Shapiro # endif /* NEWDB */ 36406f25ae9SGregory Neil Shapiro # ifdef NDBM 36506f25ae9SGregory Neil Shapiro extern int smdb_ndbm_open __P((SMDB_DATABASE **, char *, int, int, 36606f25ae9SGregory Neil Shapiro long, SMDB_DBTYPE, 36706f25ae9SGregory Neil Shapiro SMDB_USER_INFO *, 36806f25ae9SGregory Neil Shapiro SMDB_DBPARAMS *)); 36906f25ae9SGregory Neil Shapiro # endif /* NDBM */ 37006f25ae9SGregory Neil Shapiro extern int smdb_add_extension __P((char *, int, char *, char *)); 37106f25ae9SGregory Neil Shapiro extern int smdb_setup_file __P((char *, char *, int, long, 37206f25ae9SGregory Neil Shapiro SMDB_USER_INFO *, struct stat *)); 37306f25ae9SGregory Neil Shapiro extern int smdb_lock_file __P((int *, char *, int, long, char *)); 37406f25ae9SGregory Neil Shapiro extern int smdb_unlock_file __P((int)); 37506f25ae9SGregory Neil Shapiro extern int smdb_filechanged __P((char *, char *, int, 37606f25ae9SGregory Neil Shapiro struct stat *)); 37706f25ae9SGregory Neil Shapiro extern void smdb_print_available_types __P((void)); 37806f25ae9SGregory Neil Shapiro extern char *smdb_db_definition __P((SMDB_DBTYPE)); 37906f25ae9SGregory Neil Shapiro #endif /* ! _SMDB_H_ */ 380