sendmail-db4.patch 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. diff -Naur sendmail-8.12.6.orig/libsmdb/smdb2.c sendmail-8.12.6/libsmdb/smdb2.c
  2. --- sendmail-8.12.6.orig/libsmdb/smdb2.c Wed Dec 4 17:24:48 2002
  3. +++ sendmail-8.12.6/libsmdb/smdb2.c Tue Dec 10 14:05:09 2002
  4. @@ -523,7 +523,11 @@
  5. }
  6. }
  7. +#if (DB_VERSION_MAJOR >=4 && DB_VERSION_MINOR >= 1)
  8. + result = (*db)->open(*db, NULL, db_name, NULL, db_type, db_flags, DBMMODE);
  9. +#else
  10. result = (*db)->open(*db, db_name, NULL, db_type, db_flags, DBMMODE);
  11. +#endif
  12. if (result != 0)
  13. {
  14. (void) (*db)->close(*db, 0);
  15. @@ -571,7 +575,10 @@
  16. SMDB_USER_INFO *user_info;
  17. SMDB_DBPARAMS *db_params;
  18. {
  19. - bool lockcreated = false;
  20. +#if (DB_VERSION_MAJOR >=4 && DB_VERSION_MINOR >= 1)
  21. +#else
  22. + bool lockcreated = false;
  23. +#endif
  24. int result;
  25. int db_flags;
  26. int lock_fd;
  27. @@ -580,7 +587,6 @@
  28. SMDB_DB2_DATABASE *db2;
  29. DB *db;
  30. DBTYPE db_type;
  31. - struct stat stat_info;
  32. char db_file_name[MAXPATHLEN];
  33. *database = NULL;
  34. @@ -590,27 +596,33 @@
  35. if (result != SMDBE_OK)
  36. return result;
  37. - result = smdb_setup_file(db_name, SMDB2_FILE_EXTENSION,
  38. - mode_mask, sff, user_info, &stat_info);
  39. - if (result != SMDBE_OK)
  40. - return result;
  41. -
  42. - lock_fd = -1;
  43. -
  44. - if (stat_info.st_mode == ST_MODE_NOFILE &&
  45. - bitset(mode, O_CREAT))
  46. - lockcreated = true;
  47. -
  48. - result = smdb_lock_file(&lock_fd, db_name, mode, sff,
  49. - SMDB2_FILE_EXTENSION);
  50. - if (result != SMDBE_OK)
  51. - return result;
  52. -
  53. - if (lockcreated)
  54. - {
  55. - mode |= O_TRUNC;
  56. - mode &= ~(O_CREAT|O_EXCL);
  57. - }
  58. +#if (DB_VERSION_MAJOR >=4 && DB_VERSION_MINOR >= 1)
  59. +#else
  60. + result = smdb_setup_file(db_name, SMDB2_FILE_EXTENSION,
  61. + mode_mask, sff, user_info, &stat_info);
  62. + if (result != SMDBE_OK)
  63. + return result;
  64. +#endif
  65. +
  66. + lock_fd = -1;
  67. +
  68. +#if (DB_VERSION_MAJOR >=4 && DB_VERSION_MINOR >= 1)
  69. +#else
  70. + if (stat_info.st_mode == ST_MODE_NOFILE &&
  71. + bitset(mode, O_CREAT))
  72. + lockcreated = true;
  73. +
  74. + result = smdb_lock_file(&lock_fd, db_name, mode, sff,
  75. + SMDB2_FILE_EXTENSION);
  76. + if (result != SMDBE_OK)
  77. + return result;
  78. +
  79. + if (lockcreated)
  80. + {
  81. + mode |= O_TRUNC;
  82. + mode &= ~(O_CREAT|O_EXCL);
  83. + }
  84. +#endif
  85. smdb_db = smdb_malloc_database();
  86. if (smdb_db == NULL)
  87. @@ -620,8 +632,6 @@
  88. if (db2 == NULL)
  89. return SMDBE_MALLOC;
  90. - db2->smdb2_lock_fd = lock_fd;
  91. -
  92. db_type = smdb_type_to_db2_type(type);
  93. db = NULL;
  94. @@ -634,7 +644,7 @@
  95. if (mode == O_RDONLY)
  96. db_flags |= DB_RDONLY;
  97. # if !HASFLOCK && defined(DB_FCNTL_LOCKING)
  98. - db_flags |= DB_FCNTL_LOCKING;
  99. + db_flags |= DB_FCNTL_LOCKING;
  100. # endif /* !HASFLOCK && defined(DB_FCNTL_LOCKING) */
  101. result = smdb_db_open_internal(db_file_name, db_type,
  102. @@ -645,6 +655,8 @@
  103. result = db->fd(db, &db_fd);
  104. if (result == 0)
  105. result = SMDBE_OK;
  106. + else
  107. + result = SMDBE_BAD_OPEN;
  108. }
  109. else
  110. {
  111. @@ -655,12 +667,25 @@
  112. result = SMDBE_BAD_OPEN;
  113. }
  114. - if (result == SMDBE_OK)
  115. - result = smdb_filechanged(db_name, SMDB2_FILE_EXTENSION, db_fd,
  116. - &stat_info);
  117. +#if (DB_VERSION_MAJOR >=4 && DB_VERSION_MINOR >= 1)
  118. + if (result == SMDBE_OK) {
  119. + result = smdb_lock_file(&lock_fd, db_name, mode, sff,
  120. + SMDB2_FILE_EXTENSION);
  121. + if (result != SMDBE_OK)
  122. + lock_fd = -1; /* paranoia */
  123. + }
  124. +#else
  125. + if (result == SMDBE_OK)
  126. + result = smdb_filechanged(db_name, SMDB2_FILE_EXTENSION, db_fd,
  127. + &stat_info);
  128. +#endif
  129. if (result == SMDBE_OK)
  130. {
  131. +#if (DB_VERSION_MAJOR >=4 && DB_VERSION_MINOR >= 1)
  132. + db2->smdb2_lock_fd = lock_fd;
  133. +#endif
  134. +
  135. /* Everything is ok. Setup driver */
  136. db2->smdb2_db = db;
  137. @@ -680,10 +705,18 @@
  138. return SMDBE_OK;
  139. }
  140. +#if (DB_VERSION_MAJOR >=4 && DB_VERSION_MINOR >= 1)
  141. + if (lock_fd != -1)
  142. + smdb_unlock_file(lock_fd);
  143. +#endif
  144. +
  145. if (db != NULL)
  146. db->close(db, 0);
  147. - smdb_unlock_file(db2->smdb2_lock_fd);
  148. +#if (DB_VERSION_MAJOR >=4 && DB_VERSION_MINOR >= 1)
  149. +#else
  150. + smdb_unlock_file(db2->smdb2_lock_fd);
  151. +#endif
  152. free(db2);
  153. smdb_free_database(smdb_db);
  154. diff -Naur sendmail-8.12.6.orig/sendmail/map.c sendmail-8.12.6/sendmail/map.c
  155. --- sendmail-8.12.6.orig/sendmail/map.c Sat Aug 10 00:23:13 2002
  156. +++ sendmail-8.12.6/sendmail/map.c Mon Oct 14 22:37:35 2002
  157. @@ -2115,7 +2115,11 @@
  158. # endif /* DB_HASH_NELEM */
  159. if (ret == 0 && db != NULL)
  160. {
  161. +#if (DB_VERSION_MAJOR >= 4 && DB_VERSION_MINOR >= 1)
  162. + ret = db->open(db, NULL, buf, NULL, dbtype, flags, DBMMODE);
  163. +#else
  164. ret = db->open(db, buf, NULL, dbtype, flags, DBMMODE);
  165. +#endif
  166. if (ret != 0)
  167. {
  168. #ifdef DB_OLD_VERSION
  169. diff -Naur sendmail-8.12.6.orig/sendmail/udb.c sendmail-8.12.6/sendmail/udb.c
  170. --- sendmail-8.12.6.orig/sendmail/udb.c Tue Sep 11 06:05:17 2001
  171. +++ sendmail-8.12.6/sendmail/udb.c Mon Oct 14 22:44:32 2002
  172. @@ -1012,12 +1012,22 @@
  173. }
  174. else
  175. {
  176. +#if (DB_VERSION_MAJOR >= 4 && DB_VERSION_MINOR >= 1)
  177. + ret = up->udb_dbp->open(up->udb_dbp,
  178. + NULL,
  179. + up->udb_dbname,
  180. + NULL,
  181. + DB_BTREE,
  182. + flags,
  183. + 0644);
  184. +#else
  185. ret = up->udb_dbp->open(up->udb_dbp,
  186. up->udb_dbname,
  187. NULL,
  188. DB_BTREE,
  189. flags,
  190. 0644);
  191. +#endif
  192. if (ret != 0)
  193. {
  194. #ifdef DB_OLD_VERSION