Submitted By: DJ Lucas Date: 2008-09-28 Initial Package Version: 4.7.25 Upstream Status: From Upstream Origin: http://www.oracle.com/technology/products/berkeley-db/db/update/4.7.25/patch.4.7.25.1 Description: Update to latest patch for 4.7.25 release (avoid improperly named patches in LFS). diff -Naur db-4.7.25-orig/sequence/sequence.c db-4.7.25/sequence/sequence.c --- db-4.7.25-orig/sequence/sequence.c 2008-05-05 15:25:09.000000000 -0500 +++ db-4.7.25/sequence/sequence.c 2008-09-28 00:03:59.000000000 -0500 @@ -187,7 +187,11 @@ if ((ret = __db_get_flags(dbp, &tflags)) != 0) goto err; - if (DB_IS_READONLY(dbp)) { + /* + * We can let replication clients open sequences, but must + * check later that they do not update them. + */ + if (F_ISSET(dbp, DB_AM_RDONLY)) { ret = __db_rdonly(dbp->env, "DB_SEQUENCE->open"); goto err; } @@ -244,6 +248,11 @@ if ((ret != DB_NOTFOUND && ret != DB_KEYEMPTY) || !LF_ISSET(DB_CREATE)) goto err; + if (IS_REP_CLIENT(env) && + !F_ISSET(dbp, DB_AM_NOT_DURABLE)) { + ret = __db_rdonly(env, "DB_SEQUENCE->open"); + goto err; + } ret = 0; rp = &seq->seq_record; @@ -296,7 +305,12 @@ */ rp = seq->seq_data.data; if (rp->seq_version == DB_SEQUENCE_OLDVER) { -oldver: rp->seq_version = DB_SEQUENCE_VERSION; +oldver: if (IS_REP_CLIENT(env) && + !F_ISSET(dbp, DB_AM_NOT_DURABLE)) { + ret = __db_rdonly(env, "DB_SEQUENCE->open"); + goto err; + } + rp->seq_version = DB_SEQUENCE_VERSION; if (!F_ISSET(env, ENV_LITTLEENDIAN)) { if (IS_DB_AUTO_COMMIT(dbp, txn)) { if ((ret = @@ -707,6 +721,13 @@ MUTEX_LOCK(env, seq->mtx_seq); + if (handle_check && IS_REP_CLIENT(env) && + !F_ISSET(dbp, DB_AM_NOT_DURABLE)) { + ret = __db_rdonly(env, "DB_SEQUENCE->get"); + goto err; + } + + if (rp->seq_min + delta > rp->seq_max) { __db_errx(env, "Sequence overflow"); ret = EINVAL;