Tuesday, August 26, 2025, 3:48:16 PM, you wrote:

> On 26.08.25 13:41, Anthony Pankov wrote:
>> Hello,
>>
>> I've developing some own jail management solution based on naming jail as a 
>> number in hexadecimal form.
>> On a half way I encountered an error with digit only jail name (in my case - 
>> 47777). Discussion via hackers@ reveal that despite the error itself kernel 
>> part of a jail would treat numeric name as a JID and nothing can be done 
>> with it.
>>
>> It's a very disappointing because jail(8)  contain nothing about numeric 
>> only case:
>>
>>       name    The jail name.  This is an arbitrary string that identifies a
>>               jail (except it may not contain a ďż˝.ďż˝).
>>
>> May be there is a way to solve the problem?
> If the jail name is a decimal number it's interpreted as the jail ID instead. 
> In a jail.conf(5) jail block e.g. `23 { path = "/jails/foo"; }` the $name 
> parameter remains unbound and can be assigned like this `23 { name = "foo"; 
> path = "/jails/$name"; }`. Yes this is confusing and should be better 
> documented. This behavior if you prefix the hex numbers with the common "0x" 
> prefix it will always be interpreted as a name. If you want a stable jail id 
> for your jail manager I would recommend setting it in the jail.conf(5) and 
> only picking jail ids above one million, because the range from 1 to one 
> million is used for automatic jail id selection by the kernel. The dot 
> character is not available for use in a jail name since it encodes the 
> parent-child relation between jails similar to / in unix paths. You can work 
> around this by escaping the dot character. A simple scheme would be to just 
> replace dots with underscores, but then users must be trusted not to use 
> "foo.bar" and "foo_bar" for different jails. A proper bijective escaping 
> function is also possible, but it would result in uglier jail names when 
> viewing the system state with base system tools like jls.
>>
>> for reference:
>> On 2025-08-09 04:01, Anthony Pankov wrote:
>>>> This is an artifact of how numeric names work.  When you use a purely >> 
>>>> numeric name, it's taken as both the jid and the name.  jail(8) has >> 
>>>> some logic up-front that will set one or the other variable based on >> 
>>>> the name, but it omits the other.
>>>> I think to prevent ambiguity there must be a possibility or requirement > 
>>>> to quote jail name to force interpretation as a string.
>>> Using "47777" instead of 47777 doesn't help for now.
>> That's fine for user space.  But in the kernel, you still have a numeric 
>> name, and that's only allowed if the name is the same as the jid.  The work 
>> to make the $jid and $name parameters available to jail(8) is good, but 
>> that's separate from the kernel level.
> If you want to use numeric names you have to prefix/suffix them with 
> something so that the name isn't interpreted as a decimal number.


Thank you very much. Your answer is very helpful for me.

-- 
Best regards,
Anthony Pankov


Reply via email to