If /var/run is a symlink to /run in the container, then opening /proc/<pid>/root/var/run/utmp will end up opening the host's utmp. Therefore the hack detecting shutdown through utmp fails.
Signed-off-by: Serge Hallyn <serge.hal...@canonical.com> Index: lxc/src/lxc/utmp.c =================================================================== --- lxc.orig/src/lxc/utmp.c 2011-07-28 12:16:21.973116768 -0500 +++ lxc/src/lxc/utmp.c 2011-07-28 12:50:47.295227858 -0500 @@ -170,6 +170,15 @@ char path[MAXPATHLEN]; struct lxc_handler *handler = utmp_data->handler; + if (snprintf(path, MAXPATHLEN, "/proc/%d/root/run/utmp", + handler->pid) > MAXPATHLEN) { + ERROR("path is too long"); + return -1; + } + + if (!access(path, F_OK) && !utmpxname(path)) + goto utmp_ok; + if (snprintf(path, MAXPATHLEN, "/proc/%d/root/var/run/utmp", handler->pid) > MAXPATHLEN) { ERROR("path is too long"); @@ -181,6 +190,8 @@ return -1; } +utmp_ok: + setutxent(); while ((utmpx = getutxent())) { @@ -219,6 +230,7 @@ struct lxc_handler *handler) { char path[MAXPATHLEN]; + char path2[MAXPATHLEN]; int fd, wd; struct lxc_utmp *utmp_data; struct lxc_conf *conf = handler->conf; @@ -230,6 +242,19 @@ * in utmp at the moment, but want to watch for delete and create * events as well. */ + if (snprintf(path, MAXPATHLEN, "/proc/%d/root/run", + handler->pid) > MAXPATHLEN) { + ERROR("path is too long"); + return -1; + } + if (snprintf(path2, MAXPATHLEN, "/proc/%d/root/run/utmp", + handler->pid) > MAXPATHLEN) { + ERROR("path is too long"); + return -1; + } + if (!access(path2, F_OK)) + goto run_ok; + if (snprintf(path, MAXPATHLEN, "/proc/%d/root/var/run", handler->pid) > MAXPATHLEN) { ERROR("path is too long"); @@ -241,6 +266,8 @@ return 0; } +run_ok: + utmp_data = (struct lxc_utmp *)malloc(sizeof(struct lxc_utmp)); if (NULL == utmp_data) { ------------------------------------------------------------------------------ Got Input? Slashdot Needs You. Take our quick survey online. Come on, we don't ask for help often. Plus, you'll get a chance to win $100 to spend on ThinkGeek. http://p.sf.net/sfu/slashdot-survey _______________________________________________ Lxc-users mailing list Lxc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-users