smdb.h
上传用户:xu_441
上传日期:2007-01-04
资源大小:1640k
文件大小:8k
源码类别:

Email客户端

开发平台:

Unix_Linux

  1. /*
  2. ** Copyright (c) 1999 Sendmail, Inc. and its suppliers.
  3. ** All rights reserved.
  4. **
  5. ** By using this file, you agree to the terms and conditions set
  6. ** forth in the LICENSE file which can be found at the top level of
  7. ** the sendmail distribution.
  8. **
  9. ** $Id: smdb.h,v 8.25 1999/11/23 08:42:53 gshapiro Exp $
  10. */
  11. #ifndef _SMDB_H_
  12. # define _SMDB_H_
  13. # include <sys/types.h>
  14. # include <sys/stat.h>
  15. # ifndef __P
  16. #  include "sendmail/cdefs.h"
  17. # endif /* __P */
  18. # ifdef NDBM
  19. #  include <ndbm.h>
  20. # endif /* NDBM */
  21. # ifdef NEWDB
  22. #  include <db.h>
  23. #  ifndef DB_VERSION_MAJOR
  24. #   define DB_VERSION_MAJOR 1
  25. #  endif /* ! DB_VERSION_MAJOR */
  26. # endif /* NEWDB */
  27. /*
  28. ** Some size constants
  29. */
  30. #define SMDB_MAX_USER_NAME_LEN 1024
  31. #define SMDB_MAX_NAME_LEN 1024
  32. /*
  33. ** This file defines the abstraction for database lookups. It is pretty
  34. ** much a copy of the db2 interface with the exception that every function
  35. ** returns 0 on success and non-zero on failure. The non-zero return code
  36. ** is meaningful.
  37. **
  38. ** I'm going to put the function comments in this file since the interface
  39. ** MUST be the same for all inheritors of this interface.
  40. */
  41. typedef struct database_struct SMDB_DATABASE;
  42. typedef struct cursor_struct SMDB_CURSOR;
  43. typedef union database_entity_union SMDB_DBENT;
  44. /*
  45. ** DB_CLOSE_FUNC -- close the database
  46. **
  47. ** Parameters:
  48. ** db -- The database to close.
  49. **
  50. ** Returns:
  51. ** 0 - Success, otherwise errno.
  52. **
  53. */
  54. typedef int (*db_close_func) __P((SMDB_DATABASE *db));
  55. /*
  56. ** DB_DEL_FUNC -- removes a key and data pair from the database
  57. **
  58. ** Parameters:
  59. ** db -- The database to close.
  60. ** key -- The key to remove.
  61. ** flags -- delete options. There are currently no defined
  62. **  flags for delete.
  63. **
  64. ** Returns:
  65. ** 0 - Success, otherwise errno.
  66. **
  67. */
  68. typedef int (*db_del_func) __P((SMDB_DATABASE *db,
  69.    SMDB_DBENT *key, u_int flags));
  70. /*
  71. ** DB_FD_FUNC -- Returns a pointer to a file used for the database.
  72. **
  73. ** Parameters:
  74. ** db -- The database to close.
  75. ** fd -- A pointer to store the returned fd in.
  76. **
  77. ** Returns:
  78. ** 0 - Success, otherwise errno.
  79. **
  80. */
  81. typedef int (*db_fd_func) __P((SMDB_DATABASE *db, int* fd));
  82. /*
  83. ** DB_GET_FUNC -- Gets the data associated with a key.
  84. **
  85. ** Parameters:
  86. ** db -- The database to close.
  87. ** key -- The key to access.
  88. ** data -- A place to store the returned data.
  89. ** flags -- get options. There are currently no defined
  90. **  flags for get.
  91. **
  92. ** Returns:
  93. ** 0 - Success, otherwise errno.
  94. **
  95. */
  96. typedef int (*db_get_func) __P((SMDB_DATABASE *db,
  97.    SMDB_DBENT *key,
  98.    SMDB_DBENT *data, u_int flags));
  99. /*
  100. ** DB_PUT_FUNC -- Sets some data according to the key.
  101. **
  102. ** Parameters:
  103. ** db -- The database to close.
  104. ** key -- The key to use.
  105. ** data -- The data to store.
  106. ** flags -- put options:
  107. ** SMDBF_NO_OVERWRITE - Return an error if key alread
  108. **      exists.
  109. ** SMDBF_ALLOW_DUP - Allow duplicates in btree maps.
  110. **
  111. ** Returns:
  112. ** 0 - Success, otherwise errno.
  113. **
  114. */
  115. typedef int (*db_put_func) __P((SMDB_DATABASE *db,
  116.    SMDB_DBENT *key,
  117.    SMDB_DBENT *data, u_int flags));
  118. /*
  119. ** DB_SYNC_FUNC -- Flush any cached information to disk.
  120. **
  121. ** Parameters:
  122. ** db -- The database to sync.
  123. ** flags -- sync options:
  124. **
  125. ** Returns:
  126. ** 0 - Success, otherwise errno.
  127. **
  128. */
  129. typedef int (*db_sync_func) __P((SMDB_DATABASE *db, u_int flags));
  130. /*
  131. ** DB_SET_OWNER_FUNC -- Set tho owner and group of the database files.
  132. **
  133. ** Parameters:
  134. ** db -- The database to set.
  135. ** uid -- The UID for the new owner (-1 for no change)
  136. ** gid -- The GID for the new owner (-1 for no change)
  137. **
  138. ** Returns:
  139. ** 0 - Success, otherwise errno.
  140. **
  141. */
  142. typedef int (*db_set_owner_func) __P((SMDB_DATABASE *db, uid_t uid,
  143.  gid_t gid));
  144. /*
  145. ** DB_CURSOR -- Obtain a cursor for sequential access
  146. **
  147. ** Parameters:
  148. ** db -- The database to use.
  149. ** cursor -- The address of a cursor pointer.
  150. ** flags -- sync options:
  151. **
  152. ** Returns:
  153. ** 0 - Success, otherwise errno.
  154. **
  155. */
  156. typedef int (*db_cursor_func) __P((SMDB_DATABASE *db,
  157.       SMDB_CURSOR **cursor, u_int flags));
  158. struct database_struct
  159. {
  160. db_close_func smdb_close;
  161. db_del_func smdb_del;
  162. db_fd_func smdb_fd;
  163. db_get_func smdb_get;
  164. db_put_func smdb_put;
  165. db_sync_func smdb_sync;
  166. db_set_owner_func smdb_set_owner;
  167. db_cursor_func smdb_cursor;
  168. void *smdb_impl;
  169. };
  170. /*
  171. ** DB_CURSOR_CLOSE -- Close a cursor
  172. **
  173. ** Parameters:
  174. ** cursor -- The cursor to close.
  175. **
  176. ** Returns:
  177. ** 0 - Success, otherwise errno.
  178. **
  179. */
  180. typedef int (*db_cursor_close_func) __P((SMDB_CURSOR *cursor));
  181. /*
  182. ** DB_CURSOR_DEL -- Delete the key/value pair of this cursor
  183. **
  184. ** Parameters:
  185. ** cursor -- The cursor.
  186. ** flags -- flags
  187. **
  188. ** Returns:
  189. ** 0 - Success, otherwise errno.
  190. **
  191. */
  192. typedef int (*db_cursor_del_func) __P((SMDB_CURSOR *cursor, u_int flags));
  193. /*
  194. ** DB_CURSOR_GET -- Get the key/value of this cursor.
  195. **
  196. ** Parameters:
  197. ** cursor -- The cursor.
  198. ** key -- The current key.
  199. ** value -- The current value
  200. ** flags -- flags
  201. **
  202. ** Returns:
  203. ** 0 - Success, otherwise errno.
  204. ** SMDBE_LAST_ENTRY - This is a success condition that
  205. **    gets returned when the end of the
  206. **    database is hit.
  207. **
  208. */
  209. typedef int (*db_cursor_get_func) __P((SMDB_CURSOR *cursor,
  210.   SMDB_DBENT *key,
  211.   SMDB_DBENT *data,
  212.   u_int flags));
  213. /*
  214. ** Flags for DB_CURSOR_GET
  215. */
  216. #define SMDB_CURSOR_GET_FIRST 0
  217. #define SMDB_CURSOR_GET_LAST 1
  218. #define SMDB_CURSOR_GET_NEXT 2
  219. /*
  220. ** DB_CURSOR_PUT -- Put the key/value at this cursor.
  221. **
  222. ** Parameters:
  223. ** cursor -- The cursor.
  224. ** key -- The current key.
  225. ** value -- The current value
  226. ** flags -- flags
  227. **
  228. ** Returns:
  229. ** 0 - Success, otherwise errno.
  230. **
  231. */
  232. typedef int (*db_cursor_put_func) __P((SMDB_CURSOR *cursor,
  233.   SMDB_DBENT *key,
  234.   SMDB_DBENT *data,
  235.   u_int flags));
  236. struct cursor_struct
  237. {
  238. db_cursor_close_func smdbc_close;
  239. db_cursor_del_func smdbc_del;
  240. db_cursor_get_func smdbc_get;
  241. db_cursor_put_func smdbc_put;
  242. void *smdbc_impl;
  243. };
  244. struct database_params_struct
  245. {
  246. u_int smdbp_num_elements;
  247. u_int smdbp_cache_size;
  248. bool smdbp_allow_dup;
  249. };
  250. typedef struct database_params_struct SMDB_DBPARAMS;
  251. struct database_user_struct
  252. {
  253. uid_t smdbu_id;
  254. gid_t smdbu_group_id;
  255. char smdbu_name[SMDB_MAX_USER_NAME_LEN];
  256. };
  257. typedef struct database_user_struct SMDB_USER_INFO;
  258. union database_entity_union
  259. {
  260. # ifdef NDBM
  261. datum dbm;
  262. # endif /* NDBM */
  263. # ifdef NEWDB
  264. DBT db;
  265. # endif /* NEWDB */
  266. struct
  267. {
  268. char *data;
  269. size_t size;
  270. } data;
  271. };
  272. typedef char *SMDB_DBTYPE;
  273. typedef u_int SMDB_FLAG;
  274. /*
  275. ** These are types of databases.
  276. */
  277. # define SMDB_TYPE_DEFAULT NULL
  278. # define SMDB_TYPE_DEFAULT_LEN 0
  279. # define SMDB_TYPE_HASH "hash"
  280. # define SMDB_TYPE_HASH_LEN 5
  281. # define SMDB_TYPE_BTREE "btree"
  282. # define SMDB_TYPE_BTREE_LEN 6
  283. # define SMDB_TYPE_NDBM "dbm"
  284. # define SMDB_TYPE_NDBM_LEN 4
  285. /*
  286. ** These are flags
  287. */
  288. /* Flags for put */
  289. # define SMDBF_NO_OVERWRITE 0x00000001
  290. # define SMDBF_ALLOW_DUP 0x00000002
  291. extern SMDB_DATABASE *smdb_malloc_database __P((void));
  292. extern void smdb_free_database __P((SMDB_DATABASE *));
  293. extern int smdb_open_database __P((SMDB_DATABASE **, char *, int,
  294. int, int, SMDB_DBTYPE,
  295. SMDB_USER_INFO *,
  296. SMDB_DBPARAMS *));
  297. # ifdef NEWDB
  298. extern int smdb_db_open __P((SMDB_DATABASE **, char *, int, int,
  299.   int, SMDB_DBTYPE, SMDB_USER_INFO *,
  300.   SMDB_DBPARAMS *));
  301. # endif /* NEWDB */
  302. # ifdef NDBM
  303. extern int smdb_ndbm_open __P((SMDB_DATABASE **, char *, int, int,
  304.     int, SMDB_DBTYPE, SMDB_USER_INFO *,
  305.     SMDB_DBPARAMS *));
  306. # endif /* NDBM */
  307. extern int smdb_add_extension __P((char *, int, char *, char *));
  308. extern int smdb_setup_file __P((char *, char *, int, int,
  309.      SMDB_USER_INFO *, struct stat *));
  310. extern int smdb_lock_file __P((int *, char *, int, int, char *));
  311. extern int smdb_unlock_file __P((int));
  312. extern int smdb_filechanged __P((char *, char *, int,
  313.       struct stat *));
  314. extern void smdb_print_available_types __P((void));
  315. extern char *smdb_db_definition __P((SMDB_DBTYPE));
  316. #endif /* ! _SMDB_H_ */