mhonek / rpms / openldap

Forked from rpms/openldap 3 years ago
Clone
381aba6
*** sequence/sequence.c.orig	2008-05-05 13:25:09.000000000 -0700
381aba6
--- sequence/sequence.c	2008-08-15 09:58:46.000000000 -0700
381aba6
***************
381aba6
*** 187,193 ****
381aba6
  	if ((ret = __db_get_flags(dbp, &tflags)) != 0)
381aba6
  		goto err;
381aba6
  
381aba6
! 	if (DB_IS_READONLY(dbp)) {
381aba6
  		ret = __db_rdonly(dbp->env, "DB_SEQUENCE->open");
381aba6
  		goto err;
381aba6
  	}
381aba6
--- 187,197 ----
381aba6
  	if ((ret = __db_get_flags(dbp, &tflags)) != 0)
381aba6
  		goto err;
381aba6
  
381aba6
! 	/*
381aba6
! 	 * We can let replication clients open sequences, but must
381aba6
! 	 * check later that they do not update them.
381aba6
! 	 */
381aba6
! 	if (F_ISSET(dbp, DB_AM_RDONLY)) {
381aba6
  		ret = __db_rdonly(dbp->env, "DB_SEQUENCE->open");
381aba6
  		goto err;
381aba6
  	}
381aba6
***************
381aba6
*** 244,249 ****
381aba6
--- 248,258 ----
381aba6
  		if ((ret != DB_NOTFOUND && ret != DB_KEYEMPTY) ||
381aba6
  		    !LF_ISSET(DB_CREATE))
381aba6
  			goto err;
381aba6
+ 		if (IS_REP_CLIENT(env) &&
381aba6
+ 		    !F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
381aba6
+ 			ret = __db_rdonly(env, "DB_SEQUENCE->open");
381aba6
+ 			goto err;
381aba6
+ 		}
381aba6
  		ret = 0;
381aba6
  
381aba6
  		rp = &seq->seq_record;
381aba6
***************
381aba6
*** 296,302 ****
381aba6
  	 */
381aba6
  	rp = seq->seq_data.data;
381aba6
  	if (rp->seq_version == DB_SEQUENCE_OLDVER) {
381aba6
! oldver:		rp->seq_version = DB_SEQUENCE_VERSION;
381aba6
  		if (!F_ISSET(env, ENV_LITTLEENDIAN)) {
381aba6
  			if (IS_DB_AUTO_COMMIT(dbp, txn)) {
381aba6
  				if ((ret =
381aba6
--- 305,316 ----
381aba6
  	 */
381aba6
  	rp = seq->seq_data.data;
381aba6
  	if (rp->seq_version == DB_SEQUENCE_OLDVER) {
381aba6
! oldver:		if (IS_REP_CLIENT(env) &&
381aba6
! 		    !F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
381aba6
! 			ret = __db_rdonly(env, "DB_SEQUENCE->open");
381aba6
! 			goto err;
381aba6
! 		}
381aba6
! 		rp->seq_version = DB_SEQUENCE_VERSION;
381aba6
  		if (!F_ISSET(env, ENV_LITTLEENDIAN)) {
381aba6
  			if (IS_DB_AUTO_COMMIT(dbp, txn)) {
381aba6
  				if ((ret =
381aba6
***************
381aba6
*** 707,712 ****
381aba6
--- 721,733 ----
381aba6
  
381aba6
  	MUTEX_LOCK(env, seq->mtx_seq);
381aba6
  
381aba6
+ 	if (handle_check && IS_REP_CLIENT(env) &&
381aba6
+ 	    !F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
381aba6
+ 		ret = __db_rdonly(env, "DB_SEQUENCE->get");
381aba6
+ 		goto err;
381aba6
+ 	}
381aba6
+ 
381aba6
+ 
381aba6
  	if (rp->seq_min + delta > rp->seq_max) {
381aba6
  		__db_errx(env, "Sequence overflow");
381aba6
  		ret = EINVAL;