BugFix/13.1/su

Материал из Слакваря

Перейти к: навигация, поиск

Статья описывает исправление ошибки в утилите /bin/su, состоящей в потере переменных окружения LANG, LANGUAGE, LC_*.

Содержание

Пакеты:

13.1: a/shadow-4.1.4.2-*-3.txz

13.1: patches/packages/shadow-4.1.4.3-*-2_slack13.1.txz

13.37: a/shadow-4.1.4.3-*-2.txz

Симптомы:

после выполнения su теряются переменные окружения LANG, LANGUAGE, LC_*.

Причина:

в файл libmisc/env.c внесены изменения для обхода проблем безопасности в GNU gettext

/* these are allowed, but with no slashes inside
   (to work around security problems in GNU gettext) */
static const char *noslash[] = {
        "LANG=",
        "LANGUAGE=",
        "LC_",                  /* anything with the LC_ prefix */
        (char *) 0
};

но допущена ошибка в libmisc/env.c:254, вместо

if (strchr (*cur, '/') != NULL) {

должно было быть

if (strchr (*cur, '/') == NULL) {

Исправление:

пересборка пакета, например так:

# mkdir ~/bld/shadow ; cd ~/bld/shadow
# wget ftp://ftp.osuosl.org/pub/slackware/slackware-13.1/source/a/shadow/*

Добавляем в каталог файлы из архива http://ifolder.ru/18170484, заменяя shadow.SlackBuild. Содержимое архива легко изготовить самостоятельно, в нём содержатся su_env_fix.diff.gz следующего содержания (до gzip):

diff -ruN a/libmisc/env.c b/libmisc/env.c
--- a/libmisc/env.c	2009-04-28 00:07:56.000000000 +0400
+++ b/libmisc/env.c	2010-06-15 13:18:13.829195828 +0400
@@ -251,7 +251,7 @@
 			if (strncmp (*cur, *bad, strlen (*bad)) != 0) {
 				continue;
 			}
-			if (strchr (*cur, '/') != NULL) {
+			if (strchr (*cur, '/') == NULL) {
 				continue;	/* OK */
 			}
 			for (move = cur; NULL != *move; move++) {

и исправленный shadow.SlackBuild в части следующих строк:

BUILD=${BUILD:-3fix}

cd shadow-$VERSION

# bugfix for 4.1.4.2
zcat $CWD/su_env_fix.diff.gz | patch -p1 || exit 1

chown -R root:root .

Пересобираем и устанавливаем пакет:

# ./shadow.SlackBuild
# upgradepkg /tmp/shadow-4.1.4.2-*-3fix.txz

Прибираем за собой:

# cd ~/bld ; rm -rf shadow /tmp/package-shadow /tmp/shadow-4.1.4.2

На момент написания статьи (2010-06-15) ошибка в апстриме исправлена. Присутствует в Slackware 13.1, 13.37, исправлена в Slackware-14_RC2.

По мотивам http://unixforum.org/index.php?showtopic=114060&view=findpost&p=1073335

Личные инструменты