summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/pacman.conf.5.txt9
-rw-r--r--lib/libalpm/db.c13
2 files changed, 18 insertions, 4 deletions
diff --git a/doc/pacman.conf.5.txt b/doc/pacman.conf.5.txt
index 8cd2d0ea..9c3dffe3 100644
--- a/doc/pacman.conf.5.txt
+++ b/doc/pacman.conf.5.txt
@@ -202,10 +202,11 @@ Repository Sections
-------------------
Each repository section defines a section name and at least one location where
the packages can be found. The section name is defined by the string within
-square brackets (the two above are 'current' and 'custom'). Locations are
-defined with the 'Server' directive and follow a URL naming structure. If you
-want to use a local directory, you can specify the full path with a ``file://''
-prefix, as shown above.
+square brackets (the two above are 'core' and 'custom'). Repository names
+must be unique and the name 'local' is reserved for the database of installed
+packages. Locations are defined with the 'Server' directive and follow a URL
+naming structure. If you want to use a local directory, you can specify the
+full path with a ``file://'' prefix, as shown above.
A common way to define DB locations utilizes the 'Include' directive. For each
repository defined in the configuration file, a single 'Include' directive can
diff --git a/lib/libalpm/db.c b/lib/libalpm/db.c
index 528b04bb..2069a7b5 100644
--- a/lib/libalpm/db.c
+++ b/lib/libalpm/db.c
@@ -46,6 +46,8 @@
alpm_db_t SYMEXPORT *alpm_register_syncdb(alpm_handle_t *handle,
const char *treename, alpm_siglevel_t level)
{
+ alpm_list_t *i;
+
/* Sanity checks */
CHECK_HANDLE(handle, return NULL);
ASSERT(treename != NULL && strlen(treename) != 0,
@@ -53,6 +55,17 @@ alpm_db_t SYMEXPORT *alpm_register_syncdb(alpm_handle_t *handle,
/* Do not register a database if a transaction is on-going */
ASSERT(handle->trans == NULL, RET_ERR(handle, ALPM_ERR_TRANS_NOT_NULL, NULL));
+ /* ensure database name is unique */
+ if(strcmp(treename, "local") == 0) {
+ RET_ERR(handle, ALPM_ERR_DB_NOT_NULL, NULL);
+ }
+ for(i = handle->dbs_sync; i; i = i->next) {
+ alpm_db_t *d = i->data;
+ if(strcmp(treename, d->treename) == 0) {
+ RET_ERR(handle, ALPM_ERR_DB_NOT_NULL, NULL);
+ }
+ }
+
return _alpm_db_register_sync(handle, treename, level);
}