aboutsummaryrefslogtreecommitdiff
path: root/contrib/sendmail/include/libsmdb/smdb.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/sendmail/include/libsmdb/smdb.h')
-rw-r--r--contrib/sendmail/include/libsmdb/smdb.h385
1 files changed, 385 insertions, 0 deletions
diff --git a/contrib/sendmail/include/libsmdb/smdb.h b/contrib/sendmail/include/libsmdb/smdb.h
new file mode 100644
index 000000000000..fa46b512203b
--- /dev/null
+++ b/contrib/sendmail/include/libsmdb/smdb.h
@@ -0,0 +1,385 @@
+/*
+ * Copyright (c) 1999-2002, 2018 Proofpoint, Inc. and its suppliers.
+ * All rights reserved.
+ *
+ * By using this file, you agree to the terms and conditions set
+ * forth in the LICENSE file which can be found at the top level of
+ * the sendmail distribution.
+ *
+ * $Id: smdb.h,v 8.42 2013-11-22 20:51:28 ca Exp $
+ *
+ */
+
+#ifndef _SMDB_H_
+# define _SMDB_H_
+
+# include <sys/types.h>
+# include <sys/stat.h>
+# include <sm/gen.h>
+# include <sm/errstring.h>
+
+# if NDBM
+# include <ndbm.h>
+# endif
+
+# if NEWDB
+# include "sm/bdb.h"
+# endif
+
+/*
+** Some size constants
+*/
+
+#define SMDB_MAX_USER_NAME_LEN 1024
+
+/*
+** This file defines the abstraction for database lookups. It is pretty
+** much a copy of the db2 interface with the exception that every function
+** returns 0 on success and non-zero on failure. The non-zero return code
+** is meaningful.
+**
+** I'm going to put the function comments in this file since the interface
+** MUST be the same for all inheritors of this interface.
+*/
+
+typedef struct database_struct SMDB_DATABASE;
+typedef struct cursor_struct SMDB_CURSOR;
+typedef struct entry_struct SMDB_DBENT;
+
+/*
+** DB_CLOSE_FUNC -- close the database
+**
+** Parameters:
+** db -- The database to close.
+**
+** Returns:
+** 0 - Success, otherwise errno.
+**
+*/
+
+typedef int (*db_close_func) __P((SMDB_DATABASE *db));
+
+/*
+** DB_DEL_FUNC -- removes a key and data pair from the database
+**
+** Parameters:
+** db -- The database to close.
+** key -- The key to remove.
+** flags -- delete options. There are currently no defined
+** flags for delete.
+**
+** Returns:
+** 0 - Success, otherwise errno.
+**
+*/
+
+typedef int (*db_del_func) __P((SMDB_DATABASE *db,
+ SMDB_DBENT *key, unsigned int flags));
+
+/*
+** DB_FD_FUNC -- Returns a pointer to a file used for the database.
+**
+** Parameters:
+** db -- The database to close.
+** fd -- A pointer to store the returned fd in.
+**
+** Returns:
+** 0 - Success, otherwise errno.
+**
+*/
+
+typedef int (*db_fd_func) __P((SMDB_DATABASE *db, int* fd));
+
+/*
+** DB_GET_FUNC -- Gets the data associated with a key.
+**
+** Parameters:
+** db -- The database to close.
+** key -- The key to access.
+** data -- A place to store the returned data.
+** flags -- get options. There are currently no defined
+** flags for get.
+**
+** Returns:
+** 0 - Success, otherwise errno.
+**
+*/
+
+typedef int (*db_get_func) __P((SMDB_DATABASE *db,
+ SMDB_DBENT *key,
+ SMDB_DBENT *data, unsigned int flags));
+
+/*
+** DB_PUT_FUNC -- Sets some data according to the key.
+**
+** Parameters:
+** db -- The database to close.
+** key -- The key to use.
+** data -- The data to store.
+** flags -- put options:
+** SMDBF_NO_OVERWRITE - Return an error if key already
+** exists.
+**
+** Returns:
+** 0 - Success, otherwise errno.
+**
+*/
+
+typedef int (*db_put_func) __P((SMDB_DATABASE *db,
+ SMDB_DBENT *key,
+ SMDB_DBENT *data, unsigned int flags));
+
+/*
+** DB_SYNC_FUNC -- Flush any cached information to disk.
+**
+** Parameters:
+** db -- The database to sync.
+** flags -- sync options:
+**
+** Returns:
+** 0 - Success, otherwise errno.
+**
+*/
+
+typedef int (*db_sync_func) __P((SMDB_DATABASE *db, unsigned int flags));
+
+/*
+** DB_SET_OWNER_FUNC -- Set the owner and group of the database files.
+**
+** Parameters:
+** db -- The database to set.
+** uid -- The UID for the new owner (-1 for no change)
+** gid -- The GID for the new owner (-1 for no change)
+**
+** Returns:
+** 0 - Success, otherwise errno.
+**
+*/
+
+typedef int (*db_set_owner_func) __P((SMDB_DATABASE *db, uid_t uid, gid_t gid));
+
+/*
+** DB_CURSOR -- Obtain a cursor for sequential access
+**
+** Parameters:
+** db -- The database to use.
+** cursor -- The address of a cursor pointer.
+** flags -- sync options:
+**
+** Returns:
+** 0 - Success, otherwise errno.
+**
+*/
+
+typedef int (*db_cursor_func) __P((SMDB_DATABASE *db,
+ SMDB_CURSOR **cursor, unsigned int flags));
+
+typedef int (*db_lockfd_func) __P((SMDB_DATABASE *db));
+
+struct database_struct
+{
+ db_close_func smdb_close;
+ db_del_func smdb_del;
+ db_fd_func smdb_fd;
+ db_get_func smdb_get;
+ db_put_func smdb_put;
+ db_sync_func smdb_sync;
+ db_set_owner_func smdb_set_owner;
+ db_cursor_func smdb_cursor;
+ db_lockfd_func smdb_lockfd;
+ void *smdb_impl;
+};
+
+/*
+** DB_CURSOR_CLOSE -- Close a cursor
+**
+** Parameters:
+** cursor -- The cursor to close.
+**
+** Returns:
+** 0 - Success, otherwise errno.
+**
+*/
+
+typedef int (*db_cursor_close_func) __P((SMDB_CURSOR *cursor));
+
+/*
+** DB_CURSOR_DEL -- Delete the key/value pair of this cursor
+**
+** Parameters:
+** cursor -- The cursor.
+** flags -- flags
+**
+** Returns:
+** 0 - Success, otherwise errno.
+**
+*/
+
+typedef int (*db_cursor_del_func) __P((SMDB_CURSOR *cursor,
+ unsigned int flags));
+
+/*
+** DB_CURSOR_GET -- Get the key/value of this cursor.
+**
+** Parameters:
+** cursor -- The cursor.
+** key -- The current key.
+** value -- The current value
+** flags -- flags
+**
+** Returns:
+** 0 - Success, otherwise errno.
+** SMDBE_LAST_ENTRY - This is a success condition that
+** gets returned when the end of the
+** database is hit.
+**
+*/
+
+typedef int (*db_cursor_get_func) __P((SMDB_CURSOR *cursor,
+ SMDB_DBENT *key,
+ SMDB_DBENT *data,
+ unsigned int flags));
+
+/*
+** Flags for DB_CURSOR_GET
+*/
+
+#define SMDB_CURSOR_GET_FIRST 0 /* NOT USED by any application */
+#define SMDB_CURSOR_GET_LAST 1 /* NOT USED by any application */
+#define SMDB_CURSOR_GET_NEXT 2
+#define SMDB_CURSOR_GET_RANGE 3 /* NOT USED by any application */
+
+/*
+** DB_CURSOR_PUT -- Put the key/value at this cursor.
+**
+** Parameters:
+** cursor -- The cursor.
+** key -- The current key.
+** value -- The current value
+** flags -- flags
+**
+** Returns:
+** 0 - Success, otherwise errno.
+**
+*/
+
+typedef int (*db_cursor_put_func) __P((SMDB_CURSOR *cursor,
+ SMDB_DBENT *key,
+ SMDB_DBENT *data,
+ unsigned int flags));
+
+
+
+struct cursor_struct
+{
+ db_cursor_close_func smdbc_close;
+ db_cursor_del_func smdbc_del;
+ db_cursor_get_func smdbc_get;
+ db_cursor_put_func smdbc_put;
+ void *smdbc_impl;
+};
+
+
+struct database_params_struct
+{
+ unsigned int smdbp_num_elements;
+ unsigned int smdbp_cache_size;
+ bool smdbp_allow_dup;
+};
+
+typedef struct database_params_struct SMDB_DBPARAMS;
+
+struct database_user_struct
+{
+ uid_t smdbu_id;
+ gid_t smdbu_group_id;
+ char smdbu_name[SMDB_MAX_USER_NAME_LEN];
+};
+
+typedef struct database_user_struct SMDB_USER_INFO;
+
+struct entry_struct
+{
+ void *data;
+ size_t size;
+};
+
+typedef char *SMDB_DBTYPE;
+typedef unsigned int SMDB_FLAG;
+
+/*
+** These are types of databases.
+*/
+
+# define SMDB_TYPE_DEFAULT NULL
+# define SMDB_TYPE_DEFAULT_LEN 0
+# define SMDB_TYPE_IMPL "implicit"
+# define SMDB_TYPE_IMPL_LEN 9
+# define SMDB_TYPE_HASH "hash"
+# define SMDB_TYPE_HASH_LEN 5
+# define SMDB_TYPE_BTREE "btree"
+# define SMDB_TYPE_BTREE_LEN 6
+# define SMDB_TYPE_NDBM "dbm"
+# define SMDB_TYPE_NDBM_LEN 4
+# define SMDB_TYPE_CDB "cdb"
+# define SMDB_TYPE_CDB_LEN 4
+
+# define SMDB_IS_TYPE_HASH(type) (strncmp(type, SMDB_TYPE_HASH, SMDB_TYPE_HASH_LEN) == 0)
+# define SMDB_IS_TYPE_BTREE(type) (strncmp(type, SMDB_TYPE_BTREE, SMDB_TYPE_BTREE_LEN) == 0)
+# define SMDB_IS_TYPE_NDBM(type) (strncmp(type, SMDB_TYPE_NDBM, SMDB_TYPE_NDBM_LEN) == 0)
+# define SMDB_IS_TYPE_CDB(type) (strncmp(type, SMDB_TYPE_CDB, SMDB_TYPE_CDB_LEN) == 0)
+
+# define SMDB_IS_TYPE_DEFAULT(t) (((t) == SMDB_TYPE_DEFAULT) \
+ || (strncmp(type, SMDB_TYPE_IMPL, SMDB_TYPE_IMPL_LEN) == 0) \
+ )
+
+# if CDB >= 2
+# define SMCDB_FILE_EXTENSION "db"
+# else
+# define SMCDB_FILE_EXTENSION "cdb"
+# endif
+# define SMDB1_FILE_EXTENSION "db"
+# define SMDB2_FILE_EXTENSION "db"
+# define SMNDB_DIR_FILE_EXTENSION "dir"
+
+/*
+** These are flags
+*/
+
+/* Flags for put */
+# define SMDBF_NO_OVERWRITE 0x00000001
+
+typedef int (smdb_open_func) __P((SMDB_DATABASE **, char *, int, int, long, SMDB_DBTYPE, SMDB_USER_INFO *, SMDB_DBPARAMS *));
+
+extern SMDB_DATABASE *smdb_malloc_database __P((void));
+extern void smdb_free_database __P((SMDB_DATABASE *));
+extern smdb_open_func smdb_open_database;
+# if NEWDB
+extern smdb_open_func smdb_db_open;
+# else
+# define smdb_db_open NULL
+# endif
+# if NDBM
+extern smdb_open_func smdb_ndbm_open;
+# else
+# define smdb_ndbm_open NULL
+# endif
+extern int smdb_add_extension __P((char *, int, char *, char *));
+extern int smdb_setup_file __P((char *, char *, int, long,
+ SMDB_USER_INFO *, struct stat *));
+extern int smdb_lock_file __P((int *, char *, int, long, char *));
+extern int smdb_unlock_file __P((int));
+extern int smdb_filechanged __P((char *, char *, int,
+ struct stat *));
+extern void smdb_print_available_types __P((bool));
+extern bool smdb_is_db_type __P((const char *));
+extern char *smdb_db_definition __P((SMDB_DBTYPE));
+extern int smdb_lock_map __P((SMDB_DATABASE *, int));
+extern int smdb_unlock_map __P((SMDB_DATABASE *));
+
+# if CDB
+extern smdb_open_func smdb_cdb_open;
+# else
+# define smdb_cdb_open NULL
+# endif
+#endif /* ! _SMDB_H_ */