xref: /freebsd/contrib/sendmail/include/libsmdb/smdb.h (revision 06f25ae9f1d6020a600a10f713046203d1a82570)
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