106f25ae9SGregory Neil Shapiro /* 294c01205SGregory Neil Shapiro * Copyright (c) 1999-2002 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 * 913bd1963SGregory Neil Shapiro * $Id: smdb.h,v 8.40.2.1 2002/10/05 17:04:51 ca 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 2613bd1963SGregory Neil Shapiro # include "sm/bdb.h" 2706f25ae9SGregory Neil Shapiro # endif /* NEWDB */ 2806f25ae9SGregory Neil Shapiro 2906f25ae9SGregory Neil Shapiro /* 3006f25ae9SGregory Neil Shapiro ** Some size constants 3106f25ae9SGregory Neil Shapiro */ 3240266059SGregory Neil Shapiro 3306f25ae9SGregory Neil Shapiro #define SMDB_MAX_USER_NAME_LEN 1024 3406f25ae9SGregory Neil Shapiro 3506f25ae9SGregory Neil Shapiro /* 3606f25ae9SGregory Neil Shapiro ** This file defines the abstraction for database lookups. It is pretty 3706f25ae9SGregory Neil Shapiro ** much a copy of the db2 interface with the exception that every function 3806f25ae9SGregory Neil Shapiro ** returns 0 on success and non-zero on failure. The non-zero return code 3906f25ae9SGregory Neil Shapiro ** is meaningful. 4006f25ae9SGregory Neil Shapiro ** 4106f25ae9SGregory Neil Shapiro ** I'm going to put the function comments in this file since the interface 4206f25ae9SGregory Neil Shapiro ** MUST be the same for all inheritors of this interface. 4306f25ae9SGregory Neil Shapiro */ 4406f25ae9SGregory Neil Shapiro 4506f25ae9SGregory Neil Shapiro typedef struct database_struct SMDB_DATABASE; 4606f25ae9SGregory Neil Shapiro typedef struct cursor_struct SMDB_CURSOR; 47193538b7SGregory Neil Shapiro typedef struct entry_struct SMDB_DBENT; 4806f25ae9SGregory Neil Shapiro 4906f25ae9SGregory Neil Shapiro /* 5006f25ae9SGregory Neil Shapiro ** DB_CLOSE_FUNC -- close the database 5106f25ae9SGregory Neil Shapiro ** 5206f25ae9SGregory Neil Shapiro ** Parameters: 5306f25ae9SGregory Neil Shapiro ** db -- The database to close. 5406f25ae9SGregory Neil Shapiro ** 5506f25ae9SGregory Neil Shapiro ** Returns: 5606f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 5706f25ae9SGregory Neil Shapiro ** 5806f25ae9SGregory Neil Shapiro */ 5940266059SGregory Neil Shapiro 6006f25ae9SGregory Neil Shapiro typedef int (*db_close_func) __P((SMDB_DATABASE *db)); 6106f25ae9SGregory Neil Shapiro 6206f25ae9SGregory Neil Shapiro /* 6306f25ae9SGregory Neil Shapiro ** DB_DEL_FUNC -- removes a key and data pair from the database 6406f25ae9SGregory Neil Shapiro ** 6506f25ae9SGregory Neil Shapiro ** Parameters: 6606f25ae9SGregory Neil Shapiro ** db -- The database to close. 6706f25ae9SGregory Neil Shapiro ** key -- The key to remove. 6806f25ae9SGregory Neil Shapiro ** flags -- delete options. There are currently no defined 6906f25ae9SGregory Neil Shapiro ** flags for delete. 7006f25ae9SGregory Neil Shapiro ** 7106f25ae9SGregory Neil Shapiro ** Returns: 7206f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 7306f25ae9SGregory Neil Shapiro ** 7406f25ae9SGregory Neil Shapiro */ 7540266059SGregory Neil Shapiro 7606f25ae9SGregory Neil Shapiro typedef int (*db_del_func) __P((SMDB_DATABASE *db, 7740266059SGregory Neil Shapiro SMDB_DBENT *key, unsigned int flags)); 7806f25ae9SGregory Neil Shapiro 7906f25ae9SGregory Neil Shapiro /* 8006f25ae9SGregory Neil Shapiro ** DB_FD_FUNC -- Returns a pointer to a file used for the database. 8106f25ae9SGregory Neil Shapiro ** 8206f25ae9SGregory Neil Shapiro ** Parameters: 8306f25ae9SGregory Neil Shapiro ** db -- The database to close. 8406f25ae9SGregory Neil Shapiro ** fd -- A pointer to store the returned fd in. 8506f25ae9SGregory Neil Shapiro ** 8606f25ae9SGregory Neil Shapiro ** Returns: 8706f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 8806f25ae9SGregory Neil Shapiro ** 8906f25ae9SGregory Neil Shapiro */ 9040266059SGregory Neil Shapiro 9106f25ae9SGregory Neil Shapiro typedef int (*db_fd_func) __P((SMDB_DATABASE *db, int* fd)); 9206f25ae9SGregory Neil Shapiro 9306f25ae9SGregory Neil Shapiro /* 9406f25ae9SGregory Neil Shapiro ** DB_GET_FUNC -- Gets the data associated with a key. 9506f25ae9SGregory Neil Shapiro ** 9606f25ae9SGregory Neil Shapiro ** Parameters: 9706f25ae9SGregory Neil Shapiro ** db -- The database to close. 9806f25ae9SGregory Neil Shapiro ** key -- The key to access. 9906f25ae9SGregory Neil Shapiro ** data -- A place to store the returned data. 10006f25ae9SGregory Neil Shapiro ** flags -- get options. There are currently no defined 10106f25ae9SGregory Neil Shapiro ** flags for get. 10206f25ae9SGregory Neil Shapiro ** 10306f25ae9SGregory Neil Shapiro ** Returns: 10406f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 10506f25ae9SGregory Neil Shapiro ** 10606f25ae9SGregory Neil Shapiro */ 10740266059SGregory Neil Shapiro 10806f25ae9SGregory Neil Shapiro typedef int (*db_get_func) __P((SMDB_DATABASE *db, 10906f25ae9SGregory Neil Shapiro SMDB_DBENT *key, 11040266059SGregory Neil Shapiro SMDB_DBENT *data, unsigned int flags)); 11106f25ae9SGregory Neil Shapiro 11206f25ae9SGregory Neil Shapiro /* 11306f25ae9SGregory Neil Shapiro ** DB_PUT_FUNC -- Sets some data according to the key. 11406f25ae9SGregory Neil Shapiro ** 11506f25ae9SGregory Neil Shapiro ** Parameters: 11606f25ae9SGregory Neil Shapiro ** db -- The database to close. 11706f25ae9SGregory Neil Shapiro ** key -- The key to use. 11806f25ae9SGregory Neil Shapiro ** data -- The data to store. 11906f25ae9SGregory Neil Shapiro ** flags -- put options: 12006f25ae9SGregory Neil Shapiro ** SMDBF_NO_OVERWRITE - Return an error if key alread 12106f25ae9SGregory Neil Shapiro ** exists. 12206f25ae9SGregory Neil Shapiro ** SMDBF_ALLOW_DUP - Allow duplicates in btree maps. 12306f25ae9SGregory Neil Shapiro ** 12406f25ae9SGregory Neil Shapiro ** Returns: 12506f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 12606f25ae9SGregory Neil Shapiro ** 12706f25ae9SGregory Neil Shapiro */ 12840266059SGregory Neil Shapiro 12906f25ae9SGregory Neil Shapiro typedef int (*db_put_func) __P((SMDB_DATABASE *db, 13006f25ae9SGregory Neil Shapiro SMDB_DBENT *key, 13140266059SGregory Neil Shapiro SMDB_DBENT *data, unsigned int flags)); 13206f25ae9SGregory Neil Shapiro 13306f25ae9SGregory Neil Shapiro /* 13406f25ae9SGregory Neil Shapiro ** DB_SYNC_FUNC -- Flush any cached information to disk. 13506f25ae9SGregory Neil Shapiro ** 13606f25ae9SGregory Neil Shapiro ** Parameters: 13706f25ae9SGregory Neil Shapiro ** db -- The database to sync. 13806f25ae9SGregory Neil Shapiro ** flags -- sync options: 13906f25ae9SGregory Neil Shapiro ** 14006f25ae9SGregory Neil Shapiro ** Returns: 14106f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 14206f25ae9SGregory Neil Shapiro ** 14306f25ae9SGregory Neil Shapiro */ 14406f25ae9SGregory Neil Shapiro 14540266059SGregory Neil Shapiro typedef int (*db_sync_func) __P((SMDB_DATABASE *db, unsigned int flags)); 14640266059SGregory Neil Shapiro 14706f25ae9SGregory Neil Shapiro /* 14806f25ae9SGregory Neil Shapiro ** DB_SET_OWNER_FUNC -- Set the owner and group of the database files. 14906f25ae9SGregory Neil Shapiro ** 15006f25ae9SGregory Neil Shapiro ** Parameters: 15106f25ae9SGregory Neil Shapiro ** db -- The database to set. 15206f25ae9SGregory Neil Shapiro ** uid -- The UID for the new owner (-1 for no change) 15306f25ae9SGregory Neil Shapiro ** gid -- The GID for the new owner (-1 for no change) 15406f25ae9SGregory Neil Shapiro ** 15506f25ae9SGregory Neil Shapiro ** Returns: 15606f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 15706f25ae9SGregory Neil Shapiro ** 15806f25ae9SGregory Neil Shapiro */ 15906f25ae9SGregory Neil Shapiro 16040266059SGregory Neil Shapiro typedef int (*db_set_owner_func) __P((SMDB_DATABASE *db, uid_t uid, gid_t gid)); 16140266059SGregory Neil Shapiro 16206f25ae9SGregory Neil Shapiro /* 16306f25ae9SGregory Neil Shapiro ** DB_CURSOR -- Obtain a cursor for sequential access 16406f25ae9SGregory Neil Shapiro ** 16506f25ae9SGregory Neil Shapiro ** Parameters: 16606f25ae9SGregory Neil Shapiro ** db -- The database to use. 16706f25ae9SGregory Neil Shapiro ** cursor -- The address of a cursor pointer. 16806f25ae9SGregory Neil Shapiro ** flags -- sync options: 16906f25ae9SGregory Neil Shapiro ** 17006f25ae9SGregory Neil Shapiro ** Returns: 17106f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 17206f25ae9SGregory Neil Shapiro ** 17306f25ae9SGregory Neil Shapiro */ 17440266059SGregory Neil Shapiro 17506f25ae9SGregory Neil Shapiro typedef int (*db_cursor_func) __P((SMDB_DATABASE *db, 17640266059SGregory Neil Shapiro SMDB_CURSOR **cursor, unsigned int flags)); 17706f25ae9SGregory Neil Shapiro 17842e5d165SGregory Neil Shapiro typedef int (*db_lockfd_func) __P((SMDB_DATABASE *db)); 17906f25ae9SGregory Neil Shapiro 18006f25ae9SGregory Neil Shapiro struct database_struct 18106f25ae9SGregory Neil Shapiro { 18206f25ae9SGregory Neil Shapiro db_close_func smdb_close; 18306f25ae9SGregory Neil Shapiro db_del_func smdb_del; 18406f25ae9SGregory Neil Shapiro db_fd_func smdb_fd; 18506f25ae9SGregory Neil Shapiro db_get_func smdb_get; 18606f25ae9SGregory Neil Shapiro db_put_func smdb_put; 18706f25ae9SGregory Neil Shapiro db_sync_func smdb_sync; 18806f25ae9SGregory Neil Shapiro db_set_owner_func smdb_set_owner; 18906f25ae9SGregory Neil Shapiro db_cursor_func smdb_cursor; 19042e5d165SGregory Neil Shapiro db_lockfd_func smdb_lockfd; 19106f25ae9SGregory Neil Shapiro void *smdb_impl; 19206f25ae9SGregory Neil Shapiro }; 19306f25ae9SGregory Neil Shapiro /* 19406f25ae9SGregory Neil Shapiro ** DB_CURSOR_CLOSE -- Close a cursor 19506f25ae9SGregory Neil Shapiro ** 19606f25ae9SGregory Neil Shapiro ** Parameters: 19706f25ae9SGregory Neil Shapiro ** cursor -- The cursor to close. 19806f25ae9SGregory Neil Shapiro ** 19906f25ae9SGregory Neil Shapiro ** Returns: 20006f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 20106f25ae9SGregory Neil Shapiro ** 20206f25ae9SGregory Neil Shapiro */ 20340266059SGregory Neil Shapiro 20406f25ae9SGregory Neil Shapiro typedef int (*db_cursor_close_func) __P((SMDB_CURSOR *cursor)); 20506f25ae9SGregory Neil Shapiro 20606f25ae9SGregory Neil Shapiro /* 20706f25ae9SGregory Neil Shapiro ** DB_CURSOR_DEL -- Delete the key/value pair of this cursor 20806f25ae9SGregory Neil Shapiro ** 20906f25ae9SGregory Neil Shapiro ** Parameters: 21006f25ae9SGregory Neil Shapiro ** cursor -- The cursor. 21106f25ae9SGregory Neil Shapiro ** flags -- flags 21206f25ae9SGregory Neil Shapiro ** 21306f25ae9SGregory Neil Shapiro ** Returns: 21406f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 21506f25ae9SGregory Neil Shapiro ** 21606f25ae9SGregory Neil Shapiro */ 21706f25ae9SGregory Neil Shapiro 21840266059SGregory Neil Shapiro typedef int (*db_cursor_del_func) __P((SMDB_CURSOR *cursor, 21940266059SGregory Neil Shapiro unsigned int flags)); 22040266059SGregory Neil Shapiro 22106f25ae9SGregory Neil Shapiro /* 22206f25ae9SGregory Neil Shapiro ** DB_CURSOR_GET -- Get the key/value of this cursor. 22306f25ae9SGregory Neil Shapiro ** 22406f25ae9SGregory Neil Shapiro ** Parameters: 22506f25ae9SGregory Neil Shapiro ** cursor -- The cursor. 22606f25ae9SGregory Neil Shapiro ** key -- The current key. 22706f25ae9SGregory Neil Shapiro ** value -- The current value 22806f25ae9SGregory Neil Shapiro ** flags -- flags 22906f25ae9SGregory Neil Shapiro ** 23006f25ae9SGregory Neil Shapiro ** Returns: 23106f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 23206f25ae9SGregory Neil Shapiro ** SMDBE_LAST_ENTRY - This is a success condition that 23306f25ae9SGregory Neil Shapiro ** gets returned when the end of the 23406f25ae9SGregory Neil Shapiro ** database is hit. 23506f25ae9SGregory Neil Shapiro ** 23606f25ae9SGregory Neil Shapiro */ 23740266059SGregory Neil Shapiro 23806f25ae9SGregory Neil Shapiro typedef int (*db_cursor_get_func) __P((SMDB_CURSOR *cursor, 23906f25ae9SGregory Neil Shapiro SMDB_DBENT *key, 24006f25ae9SGregory Neil Shapiro SMDB_DBENT *data, 24140266059SGregory Neil Shapiro unsigned int flags)); 24206f25ae9SGregory Neil Shapiro 24306f25ae9SGregory Neil Shapiro /* 24406f25ae9SGregory Neil Shapiro ** Flags for DB_CURSOR_GET 24506f25ae9SGregory Neil Shapiro */ 24640266059SGregory Neil Shapiro 24706f25ae9SGregory Neil Shapiro #define SMDB_CURSOR_GET_FIRST 0 24806f25ae9SGregory Neil Shapiro #define SMDB_CURSOR_GET_LAST 1 24906f25ae9SGregory Neil Shapiro #define SMDB_CURSOR_GET_NEXT 2 25006f25ae9SGregory Neil Shapiro #define SMDB_CURSOR_GET_RANGE 3 25106f25ae9SGregory Neil Shapiro 25206f25ae9SGregory Neil Shapiro /* 25306f25ae9SGregory Neil Shapiro ** DB_CURSOR_PUT -- Put the key/value at this cursor. 25406f25ae9SGregory Neil Shapiro ** 25506f25ae9SGregory Neil Shapiro ** Parameters: 25606f25ae9SGregory Neil Shapiro ** cursor -- The cursor. 25706f25ae9SGregory Neil Shapiro ** key -- The current key. 25806f25ae9SGregory Neil Shapiro ** value -- The current value 25906f25ae9SGregory Neil Shapiro ** flags -- flags 26006f25ae9SGregory Neil Shapiro ** 26106f25ae9SGregory Neil Shapiro ** Returns: 26206f25ae9SGregory Neil Shapiro ** 0 - Success, otherwise errno. 26306f25ae9SGregory Neil Shapiro ** 26406f25ae9SGregory Neil Shapiro */ 26540266059SGregory Neil Shapiro 26606f25ae9SGregory Neil Shapiro typedef int (*db_cursor_put_func) __P((SMDB_CURSOR *cursor, 26706f25ae9SGregory Neil Shapiro SMDB_DBENT *key, 26806f25ae9SGregory Neil Shapiro SMDB_DBENT *data, 26940266059SGregory Neil Shapiro unsigned int flags)); 27006f25ae9SGregory Neil Shapiro 27106f25ae9SGregory Neil Shapiro 27206f25ae9SGregory Neil Shapiro 27306f25ae9SGregory Neil Shapiro struct cursor_struct 27406f25ae9SGregory Neil Shapiro { 27506f25ae9SGregory Neil Shapiro db_cursor_close_func smdbc_close; 27606f25ae9SGregory Neil Shapiro db_cursor_del_func smdbc_del; 27706f25ae9SGregory Neil Shapiro db_cursor_get_func smdbc_get; 27806f25ae9SGregory Neil Shapiro db_cursor_put_func smdbc_put; 27906f25ae9SGregory Neil Shapiro void *smdbc_impl; 28006f25ae9SGregory Neil Shapiro }; 28106f25ae9SGregory Neil Shapiro 28206f25ae9SGregory Neil Shapiro 28306f25ae9SGregory Neil Shapiro struct database_params_struct 28406f25ae9SGregory Neil Shapiro { 28540266059SGregory Neil Shapiro unsigned int smdbp_num_elements; 28640266059SGregory Neil Shapiro unsigned int smdbp_cache_size; 28706f25ae9SGregory Neil Shapiro bool smdbp_allow_dup; 28806f25ae9SGregory Neil Shapiro }; 28906f25ae9SGregory Neil Shapiro 29006f25ae9SGregory Neil Shapiro typedef struct database_params_struct SMDB_DBPARAMS; 29106f25ae9SGregory Neil Shapiro 29206f25ae9SGregory Neil Shapiro struct database_user_struct 29306f25ae9SGregory Neil Shapiro { 29406f25ae9SGregory Neil Shapiro uid_t smdbu_id; 29506f25ae9SGregory Neil Shapiro gid_t smdbu_group_id; 29606f25ae9SGregory Neil Shapiro char smdbu_name[SMDB_MAX_USER_NAME_LEN]; 29706f25ae9SGregory Neil Shapiro }; 29806f25ae9SGregory Neil Shapiro 29906f25ae9SGregory Neil Shapiro typedef struct database_user_struct SMDB_USER_INFO; 30006f25ae9SGregory Neil Shapiro 301193538b7SGregory Neil Shapiro struct entry_struct 30206f25ae9SGregory Neil Shapiro { 303193538b7SGregory Neil Shapiro void *data; 30406f25ae9SGregory Neil Shapiro size_t size; 30506f25ae9SGregory Neil Shapiro }; 30606f25ae9SGregory Neil Shapiro 30706f25ae9SGregory Neil Shapiro typedef char *SMDB_DBTYPE; 30840266059SGregory Neil Shapiro typedef unsigned int SMDB_FLAG; 30906f25ae9SGregory Neil Shapiro 31006f25ae9SGregory Neil Shapiro /* 31106f25ae9SGregory Neil Shapiro ** These are types of databases. 31206f25ae9SGregory Neil Shapiro */ 31306f25ae9SGregory Neil Shapiro 31406f25ae9SGregory Neil Shapiro # define SMDB_TYPE_DEFAULT NULL 31506f25ae9SGregory Neil Shapiro # define SMDB_TYPE_DEFAULT_LEN 0 31606f25ae9SGregory Neil Shapiro # define SMDB_TYPE_HASH "hash" 31706f25ae9SGregory Neil Shapiro # define SMDB_TYPE_HASH_LEN 5 31806f25ae9SGregory Neil Shapiro # define SMDB_TYPE_BTREE "btree" 31906f25ae9SGregory Neil Shapiro # define SMDB_TYPE_BTREE_LEN 6 32006f25ae9SGregory Neil Shapiro # define SMDB_TYPE_NDBM "dbm" 32106f25ae9SGregory Neil Shapiro # define SMDB_TYPE_NDBM_LEN 4 32206f25ae9SGregory Neil Shapiro 32306f25ae9SGregory Neil Shapiro /* 32406f25ae9SGregory Neil Shapiro ** These are flags 32506f25ae9SGregory Neil Shapiro */ 32640266059SGregory Neil Shapiro 32706f25ae9SGregory Neil Shapiro /* Flags for put */ 32806f25ae9SGregory Neil Shapiro # define SMDBF_NO_OVERWRITE 0x00000001 32906f25ae9SGregory Neil Shapiro # define SMDBF_ALLOW_DUP 0x00000002 33006f25ae9SGregory Neil Shapiro 33106f25ae9SGregory Neil Shapiro 33206f25ae9SGregory Neil Shapiro extern SMDB_DATABASE *smdb_malloc_database __P((void)); 33306f25ae9SGregory Neil Shapiro extern void smdb_free_database __P((SMDB_DATABASE *)); 33406f25ae9SGregory Neil Shapiro extern int smdb_open_database __P((SMDB_DATABASE **, char *, int, 33506f25ae9SGregory Neil Shapiro int, long, SMDB_DBTYPE, 33606f25ae9SGregory Neil Shapiro SMDB_USER_INFO *, 33706f25ae9SGregory Neil Shapiro SMDB_DBPARAMS *)); 33806f25ae9SGregory Neil Shapiro # ifdef NEWDB 33906f25ae9SGregory Neil Shapiro extern int smdb_db_open __P((SMDB_DATABASE **, char *, int, int, 34006f25ae9SGregory Neil Shapiro long, SMDB_DBTYPE, SMDB_USER_INFO *, 34106f25ae9SGregory Neil Shapiro SMDB_DBPARAMS *)); 34206f25ae9SGregory Neil Shapiro # endif /* NEWDB */ 34306f25ae9SGregory Neil Shapiro # ifdef NDBM 34406f25ae9SGregory Neil Shapiro extern int smdb_ndbm_open __P((SMDB_DATABASE **, char *, int, int, 34506f25ae9SGregory Neil Shapiro long, SMDB_DBTYPE, 34606f25ae9SGregory Neil Shapiro SMDB_USER_INFO *, 34706f25ae9SGregory Neil Shapiro SMDB_DBPARAMS *)); 34806f25ae9SGregory Neil Shapiro # endif /* NDBM */ 34906f25ae9SGregory Neil Shapiro extern int smdb_add_extension __P((char *, int, char *, char *)); 35006f25ae9SGregory Neil Shapiro extern int smdb_setup_file __P((char *, char *, int, long, 35106f25ae9SGregory Neil Shapiro SMDB_USER_INFO *, struct stat *)); 35206f25ae9SGregory Neil Shapiro extern int smdb_lock_file __P((int *, char *, int, long, char *)); 35306f25ae9SGregory Neil Shapiro extern int smdb_unlock_file __P((int)); 35406f25ae9SGregory Neil Shapiro extern int smdb_filechanged __P((char *, char *, int, 35506f25ae9SGregory Neil Shapiro struct stat *)); 35606f25ae9SGregory Neil Shapiro extern void smdb_print_available_types __P((void)); 35706f25ae9SGregory Neil Shapiro extern char *smdb_db_definition __P((SMDB_DBTYPE)); 35842e5d165SGregory Neil Shapiro extern int smdb_lock_map __P((SMDB_DATABASE *, int)); 35942e5d165SGregory Neil Shapiro extern int smdb_unlock_map __P((SMDB_DATABASE *)); 36006f25ae9SGregory Neil Shapiro #endif /* ! _SMDB_H_ */ 361