Obey --root option when calculating the directory of the transaction lock. Already fixed in rpm-4.4.7. --- ./lib/rpmlock.c.orig 2005-12-21 14:34:27.000000000 +0000 +++ ./lib/rpmlock.c 2005-12-21 14:42:59.000000000 +0000 @@ -45,12 +45,18 @@ static rpmlock rpmlock_new(/*@unused@*/ } if (lock != NULL) { mode_t oldmask = umask(022); - lock->fd = open(rpmlock_path, O_RDWR|O_CREAT, 0644); + char *path = rpmlock_path; + if (rootdir && *rootdir == '/' && rootdir[1] != 0) { + path = xmalloc(strlen(rootdir) + strlen(rpmlock_path) + 1); + strcpy(path, rootdir); + strcat(path, rpmlock_path); + } + lock->fd = open(path, O_RDWR|O_CREAT, 0644); (void) umask(oldmask); /*@-branchstate@*/ if (lock->fd == -1) { - lock->fd = open(rpmlock_path, O_RDONLY); + lock->fd = open(path, O_RDONLY); if (lock->fd == -1) { free(lock); lock = NULL; @@ -64,6 +70,8 @@ static rpmlock rpmlock_new(/*@unused@*/ lock->openmode = RPMLOCK_WRITE | RPMLOCK_READ; /*@=nullderef@*/ } + if (path != rpmlock_path) + free(path); /*@=branchstate@*/ } /*@-compdef@*/