Bug 9766

Summary: Пропуск симлинков при обработке /etc/profile.d
Product: Sisyphus Reporter: enp <enp>
Component: setupAssignee: Alexey Gladkov <legion>
Status: CLOSED WONTFIX QA Contact: qa-sisyphus
Severity: normal    
Priority: P2 CC: glebfm, ldv, legion, placeholder
Version: unstable   
Hardware: all   
OS: Linux   

Description enp 2006-07-11 08:18:38 MSD
В /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 Dmitry V. Levin 2006-07-12 02:07:07 MSD
Файл /etc/profile живёт в пакете setup.
Comment 2 Dmitry V. Levin 2006-07-12 02:15:13 MSD
Речь идёт об изменении, сделанном в 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 enp 2006-07-12 08:44:29 MSD
дело в том, что:

$ 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 Dmitry V. Levin 2006-12-04 00:24:47 MSK
Например, положить в качестве /etc/profile.d/j2se.sh файл, который будет просто
включать другой файл.
Comment 5 Dmitry V. Levin 2010-05-26 18:15:24 MSD
Apparently WONTFIX.