Re: r308432: Capsicumized `basename` make zsh prompt broken

From: Conrad Meyer <cem_at_freebsd.org>
Date: Sun, 27 Nov 2016 23:08:35 -0800
Hi Iblis,

Yes, I think caph_limit_stdio will break many similar programs in
similar use.  I think we'll need to change that behavior.  Something
like this:

https://reviews.freebsd.org/D8657

Best,
Conrad

On Sun, Nov 27, 2016 at 10:40 PM, iblis <iblis_at_hs.ntnu.edu.tw> wrote:
> Hi Conrad,
>    Thanks for your reply.
>
>    I revert the basename.c and `< /dev/null` do the trick!
>    I'm also curious that will `caph_limit_stdio` break lots of program work
> with some shell scripts?
>
> --
> Iblis Lin
>
>
> On 11/28/2016 12:55, Conrad Meyer wrote:
>>
>> Hi Iblis,
>>
>> I see no such problem running 'basename $HOME' in a normal shell
>> environment:
>>
>>> $ basename $HOME
>>> cmeyer
>>
>>
>> I suppose in your use, perhaps stdin is already closed?  I think this
>> is a limitation of caph_limit_stdio() in general.
>>
>> Can you try instead:
>>
>> function set_prompt {
>>     prompt="$(basename $HOME < /dev/null) >"
>> }
>>
>> And see if it resolves the issue?
>>
>> Thanks,
>> Conrad
>>
>> On Sun, Nov 27, 2016 at 8:33 PM, iblis <iblis_at_hs.ntnu.edu.tw> wrote:
>>>
>>> Hi,
>>> Here is a minimal config of zsh prompt invoking `basename`:
>>> ```
>>> └─[iblis_at_abeing]% cat /home/ib-test/.zshenv
>>>
>>> function set_prompt {
>>>     prompt="$(basename $HOME) >"
>>> }
>>>
>>> function zle-line-init zle-keymap-select {
>>>         set_prompt
>>>         zle reset-prompt
>>> }
>>>
>>> zle -N zle-line-init
>>> zle -N zle-keymap-select
>>>
>>> set_prompt
>>> ```
>>>
>>> and launching zsh will get something like this:
>>>
>>> ```
>>> └─[iblis_at_abeing]% sudo su ib-test
>>>
>>> ib-test >basename: capsicum: Bad file descriptor
>>>>
>>>>
>>>> basename: capsicum: Bad file descriptor
>>>>
>>> ```
>>>
>>>
>>> To be honest, I have no idea about what casper/caspicum is. I just
>>> changed
>>> the `basename.c` and zsh work again.
>>>
>>> Index: basename.c
>>> ===================================================================
>>> --- basename.c (revision 309213)
>>> +++ basename.c (working copy)
>>> _at__at_ -65,7 +65,7 _at__at_
>>>
>>> setlocale(LC_ALL, "");
>>>
>>> - if (caph_limit_stdio() < 0 || (cap_enter() < 0 && errno != ENOSYS))
>>> + if (cap_enter() < 0 && errno != ENOSYS)
>>> err(1, "capsicum");
>>>
>>> aflag = 0;
>>>
>>>
>>> Any idea?
>>>
>>> --
>>> Iblis Lin
>>> _______________________________________________
>>> freebsd-current_at_freebsd.org mailing list
>>> https://lists.freebsd.org/mailman/listinfo/freebsd-current
>>> To unsubscribe, send any mail to
>>> "freebsd-current-unsubscribe_at_freebsd.org"
>>
>> _______________________________________________
>> freebsd-current_at_freebsd.org mailing list
>> https://lists.freebsd.org/mailman/listinfo/freebsd-current
>> To unsubscribe, send any mail to "freebsd-current-unsubscribe_at_freebsd.org"
>>
>
Received on Mon Nov 28 2016 - 06:08:43 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:09 UTC