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