Do not block signals if the database is opened read-only, it just annoys the users. [#48026] --- ./lib/rpmdb.c.orig 2011-02-28 09:57:27.000000000 +0000 +++ ./lib/rpmdb.c 2011-05-10 16:58:21.000000000 +0000 @@ -623,10 +623,12 @@ int rpmdbClose(rpmdb db) { rpmdb * prev, next; int rc = 0; + int dbmode; if (db == NULL) goto exit; + dbmode = db->db_mode; (void) rpmdbUnlink(db); if (db->nrefs > 0) @@ -655,11 +657,13 @@ int rpmdbClose(rpmdb db) db = _free(db); exit: - (void) rpmsqEnable(-SIGHUP, NULL); - (void) rpmsqEnable(-SIGINT, NULL); - (void) rpmsqEnable(-SIGTERM,NULL); - (void) rpmsqEnable(-SIGQUIT,NULL); - (void) rpmsqEnable(-SIGPIPE,NULL); + if ((dbmode & (O_RDWR|O_WRONLY)) != 0) { + (void) rpmsqEnable(-SIGHUP, NULL); + (void) rpmsqEnable(-SIGINT, NULL); + (void) rpmsqEnable(-SIGTERM,NULL); + (void) rpmsqEnable(-SIGQUIT,NULL); + (void) rpmsqEnable(-SIGPIPE,NULL); + } return rc; } @@ -721,11 +725,13 @@ static int openDatabase(const char * pre /* Try to ensure db home exists, error out if we cant even create */ rc = rpmioMkpath(rpmdbHome(db), 0755, getuid(), getgid()); if (rc == 0) { - (void) rpmsqEnable(SIGHUP, NULL); - (void) rpmsqEnable(SIGINT, NULL); - (void) rpmsqEnable(SIGTERM,NULL); - (void) rpmsqEnable(SIGQUIT,NULL); - (void) rpmsqEnable(SIGPIPE,NULL); + if ((db->db_mode & (O_RDWR|O_WRONLY)) != 0) { + (void) rpmsqEnable(SIGHUP, NULL); + (void) rpmsqEnable(SIGINT, NULL); + (void) rpmsqEnable(SIGTERM,NULL); + (void) rpmsqEnable(SIGQUIT,NULL); + (void) rpmsqEnable(SIGPIPE,NULL); + } /* Just the primary Packages database opened here */ rc = (rpmdbOpenIndex(db, RPMDBI_PACKAGES, db->db_flags) != NULL) ? 0 : -2;