static DB_ENV *dbenv; /* The DB environment (global) */
+void cdb_abort(void) {
+ syslog(LOG_DEBUG,
+ "citserver is stopping in order to prevent data loss. uid=%d gid=%d euid=%d egid=%d",
+ getuid(),
+ getgid(),
+ geteuid(),
+ getegid()
+ );
+ exit(CTDLEXIT_DB);
+}
+
/* Verbose logging callback */
void cdb_verbose_log(const DB_ENV *dbenv, const char *msg)
if (ret) {
syslog(LOG_EMERG, "bdb(): txn_abort: %s", db_strerror(ret));
- abort();
+ cdb_abort();
}
}
if (ret) {
syslog(LOG_EMERG, "bdb(): txn_commit: %s", db_strerror(ret));
- abort();
+ cdb_abort();
}
}
if (ret) {
syslog(LOG_EMERG, "bdb(): txn_begin: %s", db_strerror(ret));
- abort();
+ cdb_abort();
}
}
if ((ret = cursor->c_close(cursor))) {
syslog(LOG_EMERG, "bdb(): c_close: %s", db_strerror(ret));
- abort();
+ cdb_abort();
}
}
for (i = 0; i < MAXCDB; i++)
if (cursors[i] != NULL) {
syslog(LOG_EMERG, "bdb(): cursor still in progress on cdb %02x: %s", i, msg);
- abort();
+ cdb_abort();
}
}
if (TSD->tid != NULL) {
syslog(LOG_EMERG, "bdb(): transaction still in progress!");
- abort();
+ cdb_abort();
}
}
if (ret != 0) {
syslog(LOG_EMERG, "cdb_checkpoint: txn_checkpoint: %s", db_strerror(ret));
- abort();
+ cdb_abort();
}
/* After a successful checkpoint, we can cull the unused logs */
(const Bytef *) compressed_data,
(uLong) sourceLen) != Z_OK) {
syslog(LOG_EMERG, "uncompress() error\n");
- abort();
+ cdb_abort();
}
free(cdb->ptr);
&destLen, (Bytef *) cdata, (uLongf) cdatalen, 1) != Z_OK)
{
syslog(LOG_EMERG, "compress2() error\n");
- abort();
+ cdb_abort();
}
zheader.compressed_len = (size_t) destLen;
memcpy(compressed_data, &zheader, sizeof(struct CtdlCompressHeader));
0); /* flags */
if (ret) {
syslog(LOG_EMERG, "cdb_store(%d): %s", cdb, db_strerror(ret));
- abort();
+ cdb_abort();
}
if (compressing)
free(compressed_data);
goto retry;
} else {
syslog(LOG_EMERG, "cdb_store(%d): %s", cdb, db_strerror(ret));
- abort();
+ cdb_abort();
}
} else {
txcommit(tid);
return ret;
}
}
+ return ret;
}
if (ret) {
syslog(LOG_EMERG, "cdb_delete(%d): %s\n", cdb, db_strerror(ret));
if (ret != DB_NOTFOUND) {
- abort();
+ cdb_abort();
}
}
} else {
} else {
syslog(LOG_EMERG, "cdb_delete(%d): %s\n",
cdb, db_strerror(ret));
- abort();
+ cdb_abort();
}
} else {
txcommit(tid);
if (ret) {
syslog(LOG_EMERG, "localcursor: %s\n", db_strerror(ret));
- abort();
+ cdb_abort();
}
return curs;
if ((ret != 0) && (ret != DB_NOTFOUND)) {
syslog(LOG_EMERG, "cdb_fetch(%d): %s\n", cdb, db_strerror(ret));
- abort();
+ cdb_abort();
}
if (ret != 0)
if (tempcdb == NULL) {
syslog(LOG_EMERG, "cdb_fetch: Cannot allocate memory for tempcdb\n");
- abort();
+ cdb_abort();
}
tempcdb->len = dret.size;
if (TSD->cursors[cdb] != NULL) {
syslog(LOG_EMERG,
"cdb_rewind: must close cursor on database %d before reopening.\n", cdb);
- abort();
+ cdb_abort();
/* cclose(TSD->cursors[cdb]); */
}
ret = dbp[cdb]->cursor(dbp[cdb], TSD->tid, &TSD->cursors[cdb], 0);
if (ret) {
syslog(LOG_EMERG, "cdb_rewind: db_cursor: %s\n", db_strerror(ret));
- abort();
+ cdb_abort();
}
}
if (ret) {
if (ret != DB_NOTFOUND) {
syslog(LOG_EMERG, "cdb_next_item(%d): %s\n", cdb, db_strerror(ret));
- abort();
+ cdb_abort();
}
cdb_close_cursor(cdb);
return NULL; /* presumably, end of file */
if (TSD->tid != NULL) {
syslog(LOG_EMERG, "cdb_begin_transaction: ERROR: nested transaction\n");
- abort();
+ cdb_abort();
}
txbegin(&TSD->tid);
if (TSD->tid == NULL) {
syslog(LOG_EMERG,
"cdb_end_transaction: ERROR: txcommit(NULL) !!\n");
- abort();
+ cdb_abort();
} else {
txcommit(TSD->tid);
}
if (TSD->tid != NULL) {
syslog(LOG_EMERG, "cdb_trunc must not be called in a transaction.");
- abort();
+ cdb_abort();
} else {
bailIfCursor(TSD->cursors, "attempt to write during r/o cursor");