Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:11.4:Update
rpm
luaroot.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File luaroot.diff of Package rpm
--- ./lib/psm.c.orig 2009-12-07 14:36:49.000000000 +0000 +++ ./lib/psm.c 2010-03-25 14:42:52.000000000 +0000 @@ -455,6 +455,8 @@ static rpmRC runLuaScript(rpmpsm psm, He #ifdef WITH_LUA char *sname = NULL; int rootFd = -1; + int chroot_done; + const char *rootDir; int xx; rpmlua lua = NULL; /* Global state. */ rpmluav var; @@ -463,6 +465,22 @@ static rpmRC runLuaScript(rpmpsm psm, He rpmlog(RPMLOG_DEBUG, "%s: %s running <lua> scriptlet.\n", psm->stepName, sname); + chroot_done = rpmtsChrootDone(ts); + rootDir = rpmtsRootDir(ts); + if (!chroot_done) { + if (rootDir != NULL && strcmp(rootDir, "/") && *rootDir == '/') { + xx = chdir("/"); + rootFd = open(".", O_RDONLY, 0); + if (rootFd >= 0) { + xx = chroot(rootDir); + xx = rpmtsSetChrootDone(ts, 1); + } + } + } else { + rootFd = open(".", O_RDONLY, 0); + } + xx = chdir("/"); + if (!rpmtsChrootDone(ts)) { const char *rootDir = rpmtsRootDir(ts); xx = chdir("/"); @@ -505,12 +523,17 @@ static rpmRC runLuaScript(rpmpsm psm, He rpmluaDelVar(lua, "arg"); if (rootFd >= 0) { - const char *rootDir = rpmtsRootDir(ts); xx = fchdir(rootFd); xx = close(rootFd); - if (rootDir != NULL && !rstreq(rootDir, "/") && *rootDir == '/') + if (!chroot_done) { xx = chroot("."); - xx = rpmtsSetChrootDone(ts, 0); + xx = rpmtsSetChrootDone(ts, 0); + } + } + if (!chroot_done) { + const char *currDir = rpmtsCurrDir(ts); + if (currDir != NULL) + xx = chdir(currDir); } free(sname); #else
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor