Bug 9766 - Пропуск симлинков при обработке /etc/profile.d
: Пропуск симлинков при обработке /etc/profile.d
Status: CLOSED WONTFIX
: Sisyphus
(All bugs in Sisyphus/setup)
: unstable
: all Linux
: P2 normal
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2006-07-11 08:18 by
Modified: 2010-05-26 18:15 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2006-07-11 08:18:38
В /etc/profile написано:

for f in /etc/profile.d/*.sh; do
         if [ -f "$f" -a -r "$f" -a -x "$f" -a -s "$f" -a ! -L "$f" ]; then
                 . "$f" &> /tmp/fff
         fi
done

В результате симлинки пропускаются, что сказывается, например, на
фукционировании /etc/profile.d/j2se.sh. Фрагмент из переписки в sisyphus@ :

On Monday 10 July 2006 14:14, Eugene Prokopiev wrote:

>> Теперь главный вопрос: как сделать, чтоб после логина пользователя
>> он видел бы в переменной JAVA_HOME /usr/lib/j2se1.5-sun.


[ skiped ]


>>      if [ -f "$f" -a -r "$f" -a -x "$f" -a -s "$f" -a ! -L "$f" ];


[ skiped ]


>> Т.е. выпадают ссылки, ведущие наружу. Вопрос: что делает if в
>> profile, делает ли он это правильно (что тогда неправильно?) или
>> нет


Это из-за условия -a ! -L "$f", что означает "и если $f не ссылка". То 
есть выпадают все ссылки (не только ведущие наружу). Судя по:

>> $ ls -la /etc/profile.d
>> -rwxr-xr-x  1 root root 1569 May 18 13:03 0lang.csh
>> -rwxr-xr-x  1 root root 1792 May 18 13:03 0lang.sh
>> lrwxrwxrwx  1 root root    9 May 18 13:03 lang.csh -> 0lang.csh
>> lrwxrwxrwx  1 root root    8 May 18 13:03 lang.sh -> 0lang.sh


...игнорирование ссылок сделано, чтоб повторно не обрабатывать файл, 
на который там же есть ссылка. Зачем в /etc/profile.d лежат и файлы, 
и ссылки на них - хз.


>>  (как тогда исправить?)

Проще всего переделать условие на:
    if [ -f "$f" -a -r "$f" -a -x "$f" -a -s "$f" ]

Но не забыть поудалять ссылки, указывающие на файлы, лежащие в том же 
директории. Или убрать из таких ссылок или из самих файлов 
расширение .sh
------- Comment #1 From 2006-07-12 02:07:07 -------
Файл /etc/profile живёт в пакете setup.
------- Comment #2 From 2006-07-12 02:15:13 -------
Речь идёт об изменении, сделанном в setup-2.2.8:

* Wed Aug 17 2005 Dmitry V. Levin <ldv@altlinux> 2.2.8-alt1
- profile,csh.login: disabled sourcing empty files and symbolic links.

Смысл игнорирования ссылок в том, чтобы избежать двойного чтения файлов, в
частности, оставленного для обеспечения обратной совместимости lang.*sh

Полагаю, лучше будет исправить пакет, содержащий файл /etc/profile.d/j2se.sh
------- Comment #3 From 2006-07-12 08:44:29 -------
дело в том, что:

$ ls -l /etc/profile.d/j2se.sh
lrwxrwxrwx 1 root root 46 Jul 10 12:21 /etc/profile.d/j2se.sh ->
/etc/alternatives/links/|etc|profile.d|j2se.sh
$ ls -l "/etc/alternatives/links/|etc|profile.d|j2se.sh"
lrwxrwxrwx 1 root root 28 Jul 10 12:21
/etc/alternatives/links/|etc|profile.d|j2se.sh -> /usr/lib/j2se1.5-sun/j2se.sh
$ ls -l /usr/lib/j2se1.5-sun/j2se.sh
-rwxr-xr-x 1 root root 73 Jul 10 14:59 /usr/lib/j2se1.5-sun/j2se.sh
$ rpm -qf /usr/lib/j2se1.5-sun/j2se.sh
j2se1.5-sun-devel-1.5.0_07-alt1

как именно вы предлагаете это исправить?
------- Comment #4 From 2006-12-04 00:24:47 -------
Например, положить в качестве /etc/profile.d/j2se.sh файл, который будет просто
включать другой файл.
------- Comment #5 From 2010-05-26 18:15:24 -------
Apparently WONTFIX.