From b3169a5687bfc02fd512f1a1b5f83dfe00bbce7c Mon Sep 17 00:00:00 2001 From: Sterling Winter Date: Fri, 2 Jan 2009 23:40:20 -0600 Subject: Log pacsave warnings to pacman.log Pacman currently logs .pacnew warnings to pacman.log but a similar history of .pacsave warnings isn't kept. The user should be able to search pacman.log to discover when and where all .pac* files were created by pacman. Addresses FS#12531. Signed-off-by: Dan McGee --- lib/libalpm/remove.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/libalpm/remove.c b/lib/libalpm/remove.c index 864fafaf..0bec5229 100644 --- a/lib/libalpm/remove.c +++ b/lib/libalpm/remove.c @@ -285,6 +285,7 @@ static void unlink_file(pmpkg_t *info, alpm_list_t *lp, pmtrans_t *trans) snprintf(newpath, PATH_MAX, "%s.pacsave", file); rename(file, newpath); _alpm_log(PM_LOG_WARNING, _("%s saved as %s\n"), file, newpath); + alpm_logaction("warning: %s saved as %s\n", file, newpath); return; } else { _alpm_log(PM_LOG_DEBUG, "transaction is set to NOSAVE, not backing up '%s'\n", file); -- cgit v1.2.3-24-g4f1b From a73ad4f0e3981acab7234e4b17a08a52bd273ab9 Mon Sep 17 00:00:00 2001 From: Allan McRae Date: Fri, 2 Jan 2009 19:12:22 +1000 Subject: Separate local db directory creation and db write Changelogs and install files were getting extracted into the local db folder before it was manually created. This created issues for uses with 0077 umasks and was highlighted with the new sudo handling of umasks (FS#12263). This moves the local db creation to its own function which is called before the start of package archive extraction. Also, added a check that the folder is actually created. Signed-off-by: Allan McRae [Dan: rename to _alpm_db_prepare()] Signed-off-by: Dan McGee --- lib/libalpm/add.c | 10 ++++++++++ lib/libalpm/be_files.c | 24 +++++++++++++++++++++--- lib/libalpm/db.h | 1 + 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c index eef7aab1..1e8ec9f2 100644 --- a/lib/libalpm/add.c +++ b/lib/libalpm/add.c @@ -696,6 +696,16 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count, } } + /* prepare directory for database entries so permission are correct after + changelog/install script installation (FS#12263) */ + if(_alpm_db_prepare(db, newpkg)) { + alpm_logaction("error: could not create database entry %s-%s\n", + alpm_pkg_get_name(newpkg), alpm_pkg_get_version(newpkg)); + pm_errno = PM_ERR_DB_WRITE; + ret = -1; + goto cleanup; + } + if(!(trans->flags & PM_TRANS_FLAG_DBONLY)) { struct archive *archive; struct archive_entry *entry; diff --git a/lib/libalpm/be_files.c b/lib/libalpm/be_files.c index b9ff6464..31b23172 100644 --- a/lib/libalpm/be_files.c +++ b/lib/libalpm/be_files.c @@ -652,6 +652,26 @@ error: return(-1); } +int _alpm_db_prepare(pmdb_t *db, pmpkg_t *info) +{ + mode_t oldmask; + int retval = 0; + char *pkgpath = NULL; + + oldmask = umask(0000); + + pkgpath = get_pkgpath(db, info); + + if((retval = mkdir(pkgpath, 0755)) != 0) { + _alpm_log(PM_LOG_ERROR, _("could not create directory %s: %s\n"), pkgpath, strerror(errno)); + } + + free(pkgpath); + umask(oldmask); + + return(retval); +} + int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq) { FILE *fp = NULL; @@ -670,10 +690,8 @@ int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq) pkgpath = get_pkgpath(db, info); - oldmask = umask(0000); - mkdir(pkgpath, 0755); /* make sure we have a sane umask */ - umask(0022); + oldmask = umask(0022); if(strcmp(db->treename, "local") == 0) { local = 1; diff --git a/lib/libalpm/db.h b/lib/libalpm/db.h index 96fac0dd..25b90b5f 100644 --- a/lib/libalpm/db.h +++ b/lib/libalpm/db.h @@ -60,6 +60,7 @@ int _alpm_db_open(pmdb_t *db); void _alpm_db_close(pmdb_t *db); int _alpm_db_populate(pmdb_t *db); int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq); +int _alpm_db_prepare(pmdb_t *db, pmpkg_t *info); int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq); int _alpm_db_remove(pmdb_t *db, pmpkg_t *info); -- cgit v1.2.3-24-g4f1b