Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 150009 Details for
Bug 232050
Change format of DBVERSION and guardian files
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
cvs diffs
dbupgrade.diffs (text/plain), 32.23 KB, created by
Noriko Hosoi
on 2007-03-14 00:39:26 UTC
(
hide
)
Description:
cvs diffs
Filename:
MIME Type:
Creator:
Noriko Hosoi
Created:
2007-03-14 00:39:26 UTC
Size:
32.23 KB
patch
obsolete
>Index: back-ldbm.h >=================================================================== >RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/back-ldbm.h,v >retrieving revision 1.8 >diff -t -w -U4 -r1.8 back-ldbm.h >--- back-ldbm.h 10 Nov 2006 23:45:39 -0000 1.8 >+++ back-ldbm.h 14 Mar 2007 00:20:08 -0000 >@@ -133,28 +133,33 @@ > */ > #define LDBM_VERSION_MAXBUF 64 > #define LDBM_DATABASE_TYPE_NAME "ldbm database" > /* >+ * 232050: Change format of DBVERSION and guardian files >+ * new format: >+ * implementation/version/server backend plugin name[/other tag][/other tag].... >+ * For example: >+ * bdb/4.2/libback-ldbm/newidl >+ * This indicates that the files use Berkeley DB version 4.2, they are used >+ * by the server libback-ldbm database plugin, and the index files use the >+ * newidl format. >+ * Starting from DS7.2 >+ */ >+#define BDB_IMPL "bdb" >+#define BDB_BACKEND "libback-ldbm" /* default */ >+#define BDB_IDLTYPE "newidl" /* default */ >+#define BDB_IDLTYPE_OLD "oldidl" >+ >+/* > * While we support both new and old idl index, > * we distinguish them by the following 2 macros. > * When we drop the old idl code, we eliminate LDBM_VERSION_OLD. > * bug #604922 > */ >-/* To set new idl default, uncomment it. */ >-#define USE_NEW_IDL 1 >- > #define LDBM_VERSION_BASE "Netscape-ldbm/" > #define LDBM_VERSION "Netscape-ldbm/7.0" /* db42: new idl -> old */ > #define LDBM_VERSION_NEW "Netscape-ldbm/7.0_NEW" /* db42: new idl */ >- /* used only when >- * USE_NEW_IDL is >- * NOT defined >- */ > #define LDBM_VERSION_OLD "Netscape-ldbm/7.0_CLASSIC" /* db42: old idl */ >- /* used only when >- * USE_NEW_IDL is >- * defined >- */ > #define LDBM_VERSION_62 "Netscape-ldbm/6.2" /* db33: new idl */ > #define LDBM_VERSION_61 "Netscape-ldbm/6.1" /* db33: new idl */ > #define LDBM_VERSION_60 "Netscape-ldbm/6.0" /* db33: old idl */ > >@@ -380,8 +385,10 @@ > typedef struct id_array Id_Array; > > struct _db_upgrade_info { > char* old_version_string; >+ int old_dbversion_major; >+ int old_dbversion_minor; > int type; > int action; > }; > typedef struct _db_upgrade_info db_upgrade_info; >@@ -396,8 +403,12 @@ > #define DBVERSION_NO_UPGRADE 0x0 > #define DBVERSION_NEED_IDL_OLD2NEW 0x100 > #define DBVERSION_NEED_IDL_NEW2OLD 0x200 > #define DBVERSION_UPGRADE_3_4 0x400 >+#define DBVERSION_UPGRADE_4_4 0x400 /* bdb 4.2 -> 4.3 -> 4.4 -> 4.5 */ >+ /* same operation: The log file format >+ * changed; No database formats changed >+ */ > #define DBVERSION_NOT_SUPPORTED 0x800 > > #define DBVERSION_TYPE 0x1 > #define DBVERSION_ACTION 0x2 >Index: dblayer.c >=================================================================== >RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/dblayer.c,v >retrieving revision 1.17 >diff -t -w -U4 -r1.17 dblayer.c >--- dblayer.c 12 Feb 2007 21:13:07 -0000 1.17 >+++ dblayer.c 14 Mar 2007 00:20:09 -0000 >@@ -345,9 +345,9 @@ > /* Remove the memory regions */ > dblayer_private *priv = (dblayer_private*)li->li_dblayer_private; > DB_ENV *pEnv = priv->dblayer_env->dblayer_DB_ENV; > char *home_dir = dblayer_get_home_dir(li, NULL); >- if (home_dir) >+ if (home_dir && *home_dir) > pEnv->remove(pEnv, home_dir, DB_FORCE); > } > > /* Callback function for libdb to spit error info into our log */ >@@ -1152,9 +1152,10 @@ > } > } > home_dir = dblayer_get_home_dir(li, NULL); > /* user specified db home */ >- if (!charray_utf8_inlist(priv->dblayer_data_directories, home_dir)) >+ if (home_dir && *home_dir && >+ !charray_utf8_inlist(priv->dblayer_data_directories, home_dir)) > { > charray_add(&(priv->dblayer_data_directories), home_dir); > } > >@@ -1205,8 +1206,12 @@ > } > else > { > parent_dir = dblayer_get_home_dir(li, NULL); >+ if (!parent_dir || !*parent_dir) { >+ buf = NULL; >+ return buf; >+ } > mylen = strlen(parent_dir); > inst->inst_parent_dir_name = slapi_ch_strdup(parent_dir); > } > >@@ -1752,10 +1757,16 @@ > return -1; > } > > inst_dirp = dblayer_get_full_inst_dir(li, inst, inst_dir, MAXPATHLEN); >+ if (inst_dirp && *inst_dirp) { > return_value = dblayer_grok_directory(inst_dirp, > DBLAYER_DIRECTORY_READWRITE_ACCESS); >+ } else { >+ LDAPDebug(LDAP_DEBUG_ANY,"Can't start because the database instance " >+ "directory is NULL\n", 0, 0, 0); >+ goto errout; >+ } > if (0 != return_value) { > LDAPDebug(LDAP_DEBUG_ANY,"Can't start because the database instance " > "directory \"%s\" either doesn't exist, " > "or the db files are not accessible\n", >@@ -1769,20 +1780,22 @@ > > /* Read the dbversion file if there is one, and create it > * if it doesn't exist. */ > if (dbversion_exists(li, inst_dirp)) { >- char ldbmversion[LDBM_VERSION_MAXBUF]; >- char dataversion[LDBM_VERSION_MAXBUF]; >+ char *ldbmversion = NULL; >+ char *dataversion = NULL; > >- if (dbversion_read(li, inst_dirp, ldbmversion, dataversion) != 0) { >+ if (dbversion_read(li, inst_dirp, &ldbmversion, &dataversion) != 0) { > LDAPDebug(LDAP_DEBUG_ANY, "Warning: Unable to read dbversion " > "file in %s\n", inst->inst_dir_name, 0, 0); > } else { > int rval = 0; > /* check the DBVERSION and reset idl-switch if needed (DS6.2) */ > /* from the next major rel, we won't do this and just upgrade */ >- if (!(li->li_flags & LI_FORCE_MOD_CONFIG)) >+ if (!(li->li_flags & LI_FORCE_MOD_CONFIG)) { > adjust_idl_switch(ldbmversion, li); >+ } >+ slapi_ch_free_string(&ldbmversion); > > /* check to make sure these instance was made with the correct > * version. */ > rval = check_db_inst_version(inst); >@@ -1809,10 +1822,12 @@ > inst->inst_name, 0, 0); > } > > /* record the dataversion */ >- if (dataversion[0] != '\0') { >- inst->inst_dataversion = slapi_ch_strdup(dataversion); >+ if (dataversion != NULL && *dataversion != '\0') { >+ inst->inst_dataversion = dataversion; >+ } else { >+ slapi_ch_free_string(&dataversion); > } > > rval = ldbm_upgrade(inst, rval); > if (0 != rval) >@@ -2135,10 +2150,19 @@ > memcpy(priv, opriv, sizeof(dblayer_private)); > priv->dblayer_spin_count = 0; > > inst_dirp = dblayer_get_full_inst_dir(li, inst, inst_dir, MAXPATHLEN); >- priv->dblayer_home_directory = >- slapi_ch_smprintf("%s/dbenv", inst_dirp); >+ if (inst_dirp && *inst_dirp) >+ { >+ priv->dblayer_home_directory = slapi_ch_smprintf("%s/dbenv", inst_dirp); >+ } >+ else >+ { >+ LDAPDebug(LDAP_DEBUG_ANY, >+ "Instance dir is NULL: persistent id2entry is not available\n", >+ 0, 0, 0); >+ goto done; >+ } > priv->dblayer_log_directory = slapi_ch_strdup(priv->dblayer_home_directory); > > prst = PR_GetFileInfo(inst_dirp, &prfinfo); > if (PR_FAILURE == prst || PR_FILE_DIRECTORY != prfinfo.type) >@@ -2262,9 +2286,12 @@ > } > > inst_dirp = dblayer_get_full_inst_dir(inst->inst_li, inst, > inst_dir, MAXPATHLEN); >+ if (inst_dirp && *inst_dirp) >+ { > envdir = slapi_ch_smprintf("%s/dbenv", inst_dirp); >+ } > > done: > if (pDB) > pDB->close(pDB, 0); >@@ -2335,9 +2362,15 @@ > if (return_value == 0) { > char inst_dir[MAXPATHLEN]; > char *inst_dirp = dblayer_get_full_inst_dir(inst->inst_li, inst, > inst_dir, MAXPATHLEN); >+ if (inst_dirp && *inst_dir) { > return_value = env->remove(env, inst_dirp, 0); >+ } >+ else >+ { >+ return_value = -1; >+ } > if (return_value == EBUSY) { > return_value = 0; /* something else is using the env so ignore */ > } > if (inst_dirp != inst_dir) >@@ -2669,17 +2702,24 @@ > char *abs_file_name = NULL; > /* create a file with abs path, then try again */ > > inst_dirp = dblayer_get_full_inst_dir(li, inst, inst_dir, MAXPATHLEN); >+ if (!inst_dirp || !*inst_dirp) >+ { >+ return_value = -1; >+ goto out; >+ } > abs_file_name = slapi_ch_smprintf("%s%c%s", > inst_dirp, get_sep(inst_dirp), file_name); > DB_OPEN(pENV->dblayer_openflags, > dbp, NULL/* txnid */, abs_file_name, subname, DB_BTREE, > open_flags, priv->dblayer_file_mode, return_value); > dbp->close(dbp, 0); > return_value = db_create(ppDB, pENV->dblayer_DB_ENV, 0); > if (0 != return_value) >+ { > goto out; >+ } > dbp = *ppDB; > > slapi_ch_free_string(&abs_file_name); > if (inst_dirp != inst_dir) >@@ -2894,9 +2934,9 @@ > struct ldbminfo *li = (struct ldbminfo *) be->be_database->plg_private; > dblayer_private *priv = (dblayer_private*) li->li_dblayer_private; > struct dblayer_private_env *pEnv = priv->dblayer_env; > ldbm_instance *inst = (ldbm_instance *) be->be_instance_info; >- dblayer_handle *handle; >+ dblayer_handle *handle = NULL; > char dbName[MAXPATHLEN]; > char *dbNamep; > char *p; > int dbbasenamelen, dbnamelen; >@@ -2960,21 +3000,28 @@ > } > } > } > dbNamep = dblayer_get_full_inst_dir(li, inst, dbName, MAXPATHLEN); >+ if (dbNamep && *dbNamep) { > dbbasenamelen = strlen(dbNamep); > dbnamelen = dbbasenamelen + strlen(a->ai_type) + 6; > if (dbnamelen > MAXPATHLEN) > { > dbNamep = (char *)slapi_ch_realloc(dbNamep, dbnamelen); > } > p = dbNamep + dbbasenamelen; >- sprintf(p, "%c%s%s", get_sep(dbNamep), a->ai_type, LDBM_FILENAME_SUFFIX); >+ sprintf(p, "%c%s%s", >+ get_sep(dbNamep), a->ai_type, LDBM_FILENAME_SUFFIX); > rc = dblayer_db_remove_ex(pEnv, dbNamep, 0, use_lock); > a->ai_dblayer = NULL; >- slapi_ch_free((void **)&handle); > if (dbNamep != dbName) > slapi_ch_free_string(&dbNamep); >+ } >+ else >+ { >+ rc = -1; >+ } >+ slapi_ch_free((void **)&handle); > } else { > /* no handle to close */ > } > PR_Unlock(inst->inst_handle_list_mutex); >@@ -3447,9 +3494,9 @@ > INCR_THREAD_COUNT(priv); > > interval = PR_MillisecondsToInterval(DBLAYER_SLEEP_INTERVAL); > home_dir = dblayer_get_home_dir(li, NULL); >- if (NULL == home_dir) >+ if (NULL == home_dir || '\0' == *home_dir) > { > LDAPDebug(LDAP_DEBUG_ANY, > "Checkpoint thread failed due to missing db home directory info\n", > 0, 0, 0); >@@ -3868,9 +3915,9 @@ > filename, PR_GetError(), slapd_pr_strerror(PR_GetError()) ); > return -1; > } > PR_snprintf(line,sizeof(line),"cachesize:%lu\nncache:%d\nversion:%d\n", >- priv->dblayer_cachesize, priv->dblayer_ncache, 3); >+ priv->dblayer_cachesize, priv->dblayer_ncache, DB_VERSION_MAJOR); > num_bytes = strlen(line); > return_value = slapi_write_buffer(prfd, line, num_bytes); > if (return_value != num_bytes) > { >@@ -4100,18 +4147,25 @@ > if (inst->inst_dir_name == NULL) > dblayer_get_instance_data_dir(inst->inst_be); > > inst_dirp = dblayer_get_full_inst_dir(li, inst, inst_dir, MAXPATHLEN); >+ if (inst_dirp && *inst_dirp) { > dirhandle = PR_OpenDir(inst_dirp); >+ } > if (! dirhandle) { > if ( PR_GetError() == PR_FILE_NOT_FOUND_ERROR ) { > /* the directory does not exist... that's not an error */ > rval = 0; > goto done; > } >+ if (inst_dirp && *inst_dirp) { >+ LDAPDebug(LDAP_DEBUG_ANY, >+ "_dblayer_delete_instance_dir: inst_dir is NULL\n", 0, 0, 0); >+ } else { > LDAPDebug(LDAP_DEBUG_ANY, > "_dblayer_delete_instance_dir: PR_OpenDir(%s) failed (%d): %s\n", > inst_dirp, PR_GetError(),slapd_pr_strerror(PR_GetError())); >+ } > rval = -1; > goto done; > } > >@@ -4275,9 +4329,9 @@ > else > { > log_dir = dblayer_get_home_dir(li, NULL); > } >- if (instance == NULL) >+ if (instance == NULL && log_dir && *log_dir) > { > ret = dblayer_delete_transaction_logs(log_dir); > if(ret) { > LDAPDebug(LDAP_DEBUG_ANY, >@@ -4564,19 +4618,27 @@ > relative_instance_name, src_dir, 0); > return return_value; > } > >- inst_dirp = dblayer_get_full_inst_dir(inst->inst_li, inst, >- inst_dir, MAXPATHLEN); > if (is_fullpath(src_dir)) > new_src_dir = src_dir; > else > { >- int len = strlen(inst_dirp); >+ int len; >+ inst_dirp = dblayer_get_full_inst_dir(inst->inst_li, inst, >+ inst_dir, MAXPATHLEN); >+ if (!inst_dirp || !*inst_dirp) >+ { >+ LDAPDebug(LDAP_DEBUG_ANY, "Instance dir is NULL.\n", 0, 0, 0); >+ return return_value; >+ } >+ len = strlen(inst_dirp); > sep = get_sep(inst_dirp); > if (*(inst_dirp+len-1) == sep) > sep = '\0'; > new_src_dir = slapi_ch_smprintf("%s%c%s", inst_dirp, sep, src_dir); >+ if (inst_dirp != inst_dir) >+ slapi_ch_free_string(&inst_dirp); > } > > dirhandle = PR_OpenDir(new_src_dir); > if (NULL == dirhandle) >@@ -4618,8 +4680,12 @@ > > if (!is_fullpath(dest_dir)) > { > prefix = dblayer_get_home_dir(li, NULL); >+ if (!prefix || !*prefix) >+ { >+ continue; >+ } > mysep = get_sep(prefix); > } > > if (mysep) >@@ -4710,9 +4776,9 @@ > PR_ASSERT(NULL != li); > priv = (dblayer_private*)li->li_dblayer_private; > PR_ASSERT(NULL != priv); > home_dir = dblayer_get_home_dir(li, NULL); >- if (NULL == home_dir) >+ if (NULL == home_dir || '\0' == *home_dir) > { > LDAPDebug(LDAP_DEBUG_ANY, > "Backup failed due to missing db home directory info\n", 0, 0, 0); > return -1; >@@ -4788,10 +4854,27 @@ > char *inst_dirp = NULL; > inst = (ldbm_instance *)object_get_data(inst_obj); > inst_dirp = dblayer_get_full_inst_dir(inst->inst_li, inst, > inst_dir, MAXPATHLEN); >+ if (inst_dirp && *inst_dirp) >+ { > return_value = dblayer_copy_directory(li, task, inst_dirp, > dest_dir, 0 /* backup */, &cnt, 0, 0, 0); >+ } >+ else >+ { >+ LDAPDebug(LDAP_DEBUG_ANY, >+ "ERROR: Instance dir is empty\n", 0, 0, 0); >+ if (task) { >+ slapi_task_log_notice(task, >+ "ERROR: Instance dir is empty\n"); >+ } >+ if (listA) { >+ free(listA); >+ } >+ dblayer_txn_abort(li,&txn); >+ return -1; >+ } > if (return_value != 0) { > LDAPDebug(LDAP_DEBUG_ANY, > "ERROR: error copying directory (%s -> %s): err=%d\n", > inst_dirp, dest_dir, return_value); >@@ -5265,9 +5348,9 @@ > PR_Unlock(li->li_config_mutex); > > home_dir = dblayer_get_home_dir(li, NULL); > >- if (NULL == home_dir) >+ if (NULL == home_dir || '\0' == *home_dir) > { > LDAPDebug(LDAP_DEBUG_ANY, > "Restore failed due to missing db home directory info\n", 0, 0, 0); > return -1; >@@ -5469,24 +5552,26 @@ > > /* [605024] check the DBVERSION and reset idl-switch if needed */ > if (dbversion_exists(li, home_dir)) > { >- char ldbmversion[LDBM_VERSION_MAXBUF]; >- char dataversion[LDBM_VERSION_MAXBUF]; >+ char *ldbmversion = NULL; >+ char *dataversion = NULL; > >- if (dbversion_read(li, home_dir, ldbmversion, dataversion) != 0) >+ if (dbversion_read(li, home_dir, &ldbmversion, &dataversion) != 0) > { > LDAPDebug(LDAP_DEBUG_ANY, "Warning: Unable to read dbversion " > "file in %s\n", home_dir, 0, 0); > } > else > { > adjust_idl_switch(ldbmversion, li); >+ slapi_ch_free_string(&ldbmversion); >+ slapi_ch_free_string(&ldbmversion); > } > } > > return_value = check_db_version(li, &action); >- if (action & DBVERSION_UPGRADE_3_4) >+ if (action & DBVERSION_UPGRADE_3_4) /* == DBVERSION_UPGRADE_4_4 */ > { > dbmode = DBLAYER_CLEAN_RECOVER_MODE;/* upgrade: remove logs & recover */ > } > else if (seen_logfiles) >@@ -5585,8 +5670,11 @@ > * instance use it othewise use the ldbm-wide one > */ > full_namep = dblayer_get_full_inst_dir(inst->inst_li, inst, > full_name, MAXPATHLEN); >+ if (!full_namep || !*full_namep) { >+ return ret; >+ } > /* Does this directory already exist? */ > if ((db_dir = PR_OpenDir(full_namep)) != NULL) { > /* yep. */ > PR_CloseDir(db_dir); >@@ -5621,8 +5709,13 @@ > int rval = 0; > > inst_dirp = dblayer_get_full_inst_dir(inst->inst_li, inst, > inst_dir, MAXPATHLEN); >+ if (!inst_dirp || !*inst_dirp) >+ { >+ rval = -1; >+ goto done; >+ } > dirhandle = PR_OpenDir(inst_dirp); > > if (NULL == dirhandle) > goto done; >@@ -5671,8 +5764,13 @@ > be = inst->inst_be; > li = inst->inst_li; > priv = (dblayer_private*)li->li_dblayer_private; > inst_dirp = dblayer_get_full_inst_dir(li, inst, inst_dir, MAXPATHLEN); >+ if (!inst_dirp || *inst_dirp) { >+ LDAPDebug(LDAP_DEBUG_ANY, >+ "update_db_ext: instance dir is NULL\n", 0, 0, 0); >+ return -1; /* non zero */ >+ } > for (a = (struct attrinfo *)avl_getfirst(inst->inst_attrs); > NULL != a; > a = (struct attrinfo *)avl_getnext()) > { >Index: dbversion.c >=================================================================== >RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/dbversion.c,v >retrieving revision 1.7 >diff -t -w -U4 -r1.7 dbversion.c >--- dbversion.c 10 Nov 2006 23:45:39 -0000 1.7 >+++ dbversion.c 14 Mar 2007 00:20:09 -0000 >@@ -104,21 +104,17 @@ > /* recognize the difference between an old/new database regarding idl > * (406922) */ > if (idl_get_idl_new()) > { >-#if defined(USE_NEW_IDL) >- sprintf( buf, "%s\n", LDBM_VERSION ); >-#else >- sprintf( buf, "%s\n", LDBM_VERSION_NEW ); >-#endif >+ sprintf( buf, "%s/%d.%d/%s/%s\n", >+ BDB_IMPL, DB_VERSION_MAJOR, DB_VERSION_MINOR, >+ BDB_BACKEND, BDB_IDLTYPE); > } > else > { >-#if defined(USE_NEW_IDL) >- sprintf( buf, "%s\n", LDBM_VERSION_OLD ); >-#else >- sprintf( buf, "%s\n", LDBM_VERSION ); >-#endif >+ sprintf( buf, "%s/%d.%d/%s/%s\n", >+ BDB_IMPL, DB_VERSION_MAJOR, DB_VERSION_MINOR, >+ BDB_BACKEND, BDB_IDLTYPE_OLD); > } > len = strlen( buf ); > if ( slapi_write_buffer( prfd, buf, len ) != len ) > { >@@ -148,24 +144,24 @@ > * Description: This function reads the DB version file. > */ > int > dbversion_read(struct ldbminfo *li, const char *directory, >- char *ldbmversion, char *dataversion) >+ char **ldbmversion, char **dataversion) > { > char filename[ MAXPATHLEN*2 ]; > PRFileDesc *prfd; > int rc = -1; > char * iter = NULL; > > if (!is_fullpath((char *)directory)) { >- rc = -1; > return rc; > } > >- mk_dbversion_fullpath(li, directory, filename); >+ if (NULL == *ldbmversion || NULL == *dataversion) { >+ return rc; >+ } > >- ldbmversion[0]= '\0'; >- dataversion[0]= '\0'; >+ mk_dbversion_fullpath(li, directory, filename); > > /* Open the file */ > if (( prfd = PR_Open( filename, PR_RDONLY, SLAPD_DEFAULT_FILE_MODE )) == > NULL ) >@@ -183,13 +179,13 @@ > buf[nr]= '\0'; > t= ldap_utf8strtok_r(buf,"\n", &iter); > if(t!=NULL) > { >- strcpy(ldbmversion,t); >+ *ldbmversion = slapi_ch_strdup(t); > t= ldap_utf8strtok_r(NULL,"\n", &iter); > if(t!=NULL && t[0]!='\0') > { >- strcpy(dataversion,t); >+ *dataversion = slapi_ch_strdup(t); > } > } > } > (void)PR_Close( prfd ); >Index: ldbm_config.c >=================================================================== >RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/ldbm_config.c,v >retrieving revision 1.10 >diff -t -w -U4 -r1.10 ldbm_config.c >--- ldbm_config.c 4 Dec 2006 18:36:57 -0000 1.10 >+++ ldbm_config.c 14 Mar 2007 00:20:09 -0000 >@@ -1213,13 +1213,9 @@ > {CONFIG_IMPORT_CACHE_AUTOSIZE, CONFIG_TYPE_INT, "-1", &ldbm_config_import_cache_autosize_get, &ldbm_config_import_cache_autosize_set, CONFIG_FLAG_ALWAYS_SHOW|CONFIG_FLAG_ALLOW_RUNNING_CHANGE}, > {CONFIG_CACHE_AUTOSIZE, CONFIG_TYPE_INT, "0", &ldbm_config_cache_autosize_get, &ldbm_config_cache_autosize_set, 0}, > {CONFIG_CACHE_AUTOSIZE_SPLIT, CONFIG_TYPE_INT, "50", &ldbm_config_cache_autosize_split_get, &ldbm_config_cache_autosize_split_set, 0}, > {CONFIG_IMPORT_CACHESIZE, CONFIG_TYPE_SIZE_T, "20000000", &ldbm_config_import_cachesize_get, &ldbm_config_import_cachesize_set, CONFIG_FLAG_ALWAYS_SHOW|CONFIG_FLAG_ALLOW_RUNNING_CHANGE}, >-#if defined(USE_NEW_IDL) > {CONFIG_IDL_SWITCH, CONFIG_TYPE_STRING, "new", &ldbm_config_idl_get_idl_new, &ldbm_config_idl_set_tune, CONFIG_FLAG_ALWAYS_SHOW}, >-#else >- {CONFIG_IDL_SWITCH, CONFIG_TYPE_STRING, "old", &ldbm_config_idl_get_idl_new, &ldbm_config_idl_set_tune, CONFIG_FLAG_ALWAYS_SHOW}, >-#endif > {CONFIG_BYPASS_FILTER_TEST, CONFIG_TYPE_STRING, "on", &ldbm_config_get_bypass_filter_test, &ldbm_config_set_bypass_filter_test, CONFIG_FLAG_ALWAYS_SHOW|CONFIG_FLAG_ALLOW_RUNNING_CHANGE}, > {CONFIG_USE_VLV_INDEX, CONFIG_TYPE_ONOFF, "on", &ldbm_config_get_use_vlv_index, &ldbm_config_set_use_vlv_index, CONFIG_FLAG_ALWAYS_SHOW|CONFIG_FLAG_ALLOW_RUNNING_CHANGE}, > {CONFIG_DB_LOCKDOWN, CONFIG_TYPE_ONOFF, "off", &ldbm_config_db_lockdown_get, &ldbm_config_db_lockdown_set, 0}, > {CONFIG_INDEX_BUFFER_SIZE, CONFIG_TYPE_INT, "0", &ldbm_config_index_buffer_size_get, &ldbm_config_index_buffer_size_set, 0}, >Index: proto-back-ldbm.h >=================================================================== >RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/proto-back-ldbm.h,v >retrieving revision 1.10 >diff -t -w -U4 -r1.10 proto-back-ldbm.h >--- proto-back-ldbm.h 1 Dec 2006 21:57:57 -0000 1.10 >+++ proto-back-ldbm.h 14 Mar 2007 00:20:09 -0000 >@@ -562,9 +562,9 @@ > * dbversion.c > */ > int dbversion_write(struct ldbminfo *li, const char *dir, const char *dversion); > int dbversion_read(struct ldbminfo *li, const char *directory, >- char *ldbmversion, char *dataversion); >+ char **ldbmversion, char **dataversion); > int dbversion_exists(struct ldbminfo *li, const char *directory); > > /* > * config_ldbm.c >Index: upgrade.c >=================================================================== >RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/upgrade.c,v >retrieving revision 1.6 >diff -t -w -U4 -r1.6 upgrade.c >--- upgrade.c 10 Nov 2006 23:45:39 -0000 1.6 >+++ upgrade.c 14 Mar 2007 00:20:09 -0000 >@@ -44,29 +44,23 @@ > /* upgrade.c --- upgrade from a previous version of the database */ > > #include "back-ldbm.h" > >-#if 0 >-static char* filename = "upgrade.c"; >-#endif > /* > * ldbm_compat_versions holds DBVERSION strings for all versions of the > * database with which we are (upwards) compatible. If check_db_version > * encounters a database with a version that is not listed in this array, > * we display a warning message. > */ > > db_upgrade_info ldbm_version_suss[] = { >-#if defined(USE_NEW_IDL) >- {LDBM_VERSION,DBVERSION_NEW_IDL,DBVERSION_NO_UPGRADE}, >- {LDBM_VERSION_OLD,DBVERSION_OLD_IDL,DBVERSION_NO_UPGRADE}, >-#else >- /* default: old idl (DS6.2) */ >- {LDBM_VERSION_NEW,DBVERSION_NEW_IDL,DBVERSION_NO_UPGRADE}, >- {LDBM_VERSION,DBVERSION_OLD_IDL,DBVERSION_NO_UPGRADE}, >-#endif >- {LDBM_VERSION_61,DBVERSION_NEW_IDL,DBVERSION_UPGRADE_3_4}, >- {LDBM_VERSION_60,DBVERSION_OLD_IDL,DBVERSION_UPGRADE_3_4}, >+ /* for bdb/#.#/..., we don't have to put the version number in the 2nd col >+ since DBVERSION keeps it */ >+ {BDB_IMPL, 0, 0, DBVERSION_NEW_IDL, DBVERSION_NO_UPGRADE}, >+ {LDBM_VERSION, 4, 2, DBVERSION_NEW_IDL, DBVERSION_NO_UPGRADE}, >+ {LDBM_VERSION_OLD, 4, 2, DBVERSION_OLD_IDL, DBVERSION_NO_UPGRADE}, >+ {LDBM_VERSION_61, 3, 3, DBVERSION_NEW_IDL, DBVERSION_UPGRADE_3_4}, >+ {LDBM_VERSION_60, 3, 3, DBVERSION_OLD_IDL, DBVERSION_UPGRADE_3_4}, > {NULL,0,0} > }; > > >@@ -78,13 +72,14 @@ > int > lookup_dbversion(char *dbversion, int flag) > { > int i, matched = 0; >- int rval = 0; >+ int rval = DBVERSION_NO_UPGRADE; > > for ( i = 0; ldbm_version_suss[i].old_version_string != NULL; ++i ) > { >- if ( strcmp( dbversion, ldbm_version_suss[i].old_version_string ) == 0 ) >+ if (PL_strncasecmp(dbversion, ldbm_version_suss[i].old_version_string, >+ strlen(ldbm_version_suss[i].old_version_string)) == 0) > { > matched = 1; > break; > } >@@ -96,10 +91,45 @@ > rval |= ldbm_version_suss[i].type; > } > if ( flag & DBVERSION_ACTION ) > { >+ int dbmajor = 0, dbminor = 0; >+ if (0 == ldbm_version_suss[i].old_dbversion_major) >+ { >+ /* case of bdb/4.4/... */ >+ char *p = strchr(dbversion, '/'); >+ char *endp = dbversion + strlen(dbversion); >+ if (NULL != p && p < endp) >+ { >+ char *dotp = strchr(p, '.'); >+ if (NULL != dotp) >+ { >+ *dotp = '\0'; >+ dbmajor = strtol(p, (char **)NULL, 10); >+ dbminor = strtol(++dotp, (char **)NULL, 10); >+ } >+ else >+ { >+ dbmajor = strtol(p, (char **)NULL, 10); >+ } >+ } >+ } >+ else >+ { >+ dbmajor = ldbm_version_suss[i].old_dbversion_major; >+ dbminor = ldbm_version_suss[i].old_dbversion_minor; >+ } >+ if (dbmajor < DB_VERSION_MAJOR) >+ { >+ /* 3.3 -> 4.x */ > rval |= ldbm_version_suss[i].action; > } >+ else if (dbminor < DB_VERSION_MINOR) >+ { >+ /* 4.low -> 4.high */ >+ rval |= DBVERSION_UPGRADE_4_4; >+ } >+ } > } > return rval; > } > >@@ -117,15 +147,17 @@ > int > check_db_version( struct ldbminfo *li, int *action ) > { > int value = 0; >- char ldbmversion[BUFSIZ]; >- char dataversion[BUFSIZ]; >+ char *ldbmversion = NULL; >+ char *dataversion = NULL; > > *action = 0; >- dbversion_read(li, li->li_directory,ldbmversion,dataversion); >- if (0 == strlen(ldbmversion)) >+ dbversion_read(li, li->li_directory, &ldbmversion, &dataversion); >+ if (NULL == ldbmversion || '\0' == *ldbmversion) { >+ slapi_ch_free_string(&dataversion); > return 0; >+ } > > value = lookup_dbversion( ldbmversion, DBVERSION_TYPE | DBVERSION_ACTION); > if ( !value ) > { >@@ -135,15 +167,19 @@ > LDBM_VERSION, ldbmversion, li->li_directory ); > /* > * A non-zero return here will cause slapd to exit during startup. > */ >+ slapi_ch_free_string(&ldbmversion); >+ slapi_ch_free_string(&dataversion); > return DBVERSION_NOT_SUPPORTED; > } > if ( value & DBVERSION_UPGRADE_3_4 ) > { > dblayer_set_recovery_required(li); > *action = DBVERSION_UPGRADE_3_4; > } >+ slapi_ch_free_string(&ldbmversion); >+ slapi_ch_free_string(&dataversion); > return 0; > } > > /* >@@ -164,20 +200,21 @@ > int > check_db_inst_version( ldbm_instance *inst ) > { > int value = 0; >- char ldbmversion[BUFSIZ]; >- char dataversion[BUFSIZ]; >+ char *ldbmversion = NULL; >+ char *dataversion = NULL; > int rval = 0; > char inst_dir[MAXPATHLEN*2]; > char *inst_dirp = NULL; > > inst_dirp = > dblayer_get_full_inst_dir(inst->inst_li, inst, inst_dir, MAXPATHLEN*2); > >- dbversion_read(inst->inst_li, inst_dirp,ldbmversion,dataversion); >- if (0 == strlen(ldbmversion)) >+ dbversion_read(inst->inst_li, inst_dirp, &ldbmversion, &dataversion); >+ if (NULL == ldbmversion || '\0' == *ldbmversion) { > return rval; >+ } > > value = lookup_dbversion( ldbmversion, DBVERSION_TYPE | DBVERSION_ACTION); > if ( !value ) > { >@@ -187,8 +224,10 @@ > LDBM_VERSION, ldbmversion, inst->inst_dir_name ); > /* > * A non-zero return here will cause slapd to exit during startup. > */ >+ slapi_ch_free_string(&ldbmversion); >+ slapi_ch_free_string(&dataversion); > return DBVERSION_NOT_SUPPORTED; > } > > /* recognize the difference between an old/new database regarding idl >@@ -206,8 +245,10 @@ > rval |= DBVERSION_UPGRADE_3_4; > } > if (inst_dirp != inst_dir) > slapi_ch_free_string(&inst_dirp); >+ slapi_ch_free_string(&ldbmversion); >+ slapi_ch_free_string(&dataversion); > return rval; > } > > /* >@@ -220,15 +261,11 @@ > { > int rval = 0; > > li->li_flags |= LI_FORCE_MOD_CONFIG; >-#if defined(USE_NEW_IDL) >- if ((0 == strcmp(ldbmversion, LDBM_VERSION)) || >- (0 == strcmp(ldbmversion, LDBM_VERSION_61))) /* db: new idl */ >-#else >- if ((0 == strcmp(ldbmversion, LDBM_VERSION_NEW)) || >+ if ((0 == PL_strncasecmp(ldbmversion, BDB_IMPL, strlen(BDB_IMPL))) || >+ (0 == PL_strcmp(ldbmversion, LDBM_VERSION)) || > (0 == strcmp(ldbmversion, LDBM_VERSION_61))) /* db: new idl */ >-#endif > { > if (!idl_get_idl_new()) /* config: old idl */ > { > replace_ldbm_config_value(CONFIG_IDL_SWITCH, "new", li); >@@ -238,15 +275,10 @@ > > ldbmversion, 0, 0); > } > } >-#if defined(USE_NEW_IDL) > else if ((0 == strcmp(ldbmversion, LDBM_VERSION_OLD)) || > (0 == strcmp(ldbmversion, LDBM_VERSION_60))) /* db: old */ >-#else >- else if ((0 == strcmp(ldbmversion, LDBM_VERSION)) || /* ds6.2: old */ >- (0 == strcmp(ldbmversion, LDBM_VERSION_60))) /* db: old */ >-#endif > { > if (idl_get_idl_new()) /* config: new */ > { > replace_ldbm_config_value(CONFIG_IDL_SWITCH, "old", li); >@@ -288,9 +320,8 @@ > > int rval = dblayer_update_db_ext(inst, LDBM_SUFFIX_OLD, LDBM_SUFFIX); > if (0 == rval) > { >-#if defined(USE_NEW_IDL) > if (idl_get_idl_new()) > { > LDAPDebug(LDAP_DEBUG_ANY, > "ldbm_upgrade: Upgrading instance %s to %s%s is successfully done.\n", >@@ -301,13 +332,8 @@ > LDAPDebug(LDAP_DEBUG_ANY, > "ldbm_upgrade: Upgrading instance %s to %s%s is successfully done.\n", > inst->inst_name, LDBM_VERSION_OLD, 0); > } >-#else >- LDAPDebug(LDAP_DEBUG_ANY, >- "ldbm_upgrade: Upgrading instance %s to %s%s is successfully done.\n", >- inst->inst_name, LDBM_VERSION_BASE, PRODUCTTEXT); >-#endif > } > else > { > /* recovery effort ... */
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 232050
:
150009
|
150100
|
150172
|
150177
|
150178
|
150974