[ 
https://issues.apache.org/jira/browse/DIRSERVER-1931?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Emmanuel Lécharny updated DIRSERVER-1931:
-----------------------------------------
    Description: 
These are odd options, the PXE spec requires nul termination of the strings in 
these, but no other options. It also requires the strings to be in NETASCII 
(best JDK approximation is probably ISO8859_1). ApacheDS fills in simple, 
nonterminated strings, therefore these options cannot be parsed by many (most?) 
PXE implementations.

{code}
    /** DHCP options 66 and 67 require nul termination. */
    @Nonnull
    private byte[] toNulTerminatedString(@Nonnull String text) {
        return ArrayUtils.add(text.getBytes(Charsets.ISO_8859_1), (byte) 0);
    }

    protected void addBootParameters(@Nonnull Lease lease,
            @Nonnull InterfaceAddress interfaceAddress, @Nonnull DhcpMessage 
request,
            @Nonnull InetAddress bootServerAddress, @Nonnull String 
bootFileName) {
        byte[] bootServerName = 
toNulTerminatedString(InetAddresses.toAddrString(bootServerAddress));
        DhcpUtils.setUnknownOption(lease.getOptions(), new 
TftpServerName().getTag(), bootServerName);
        DhcpUtils.setUnknownOption(lease.getOptions(), new 
BootfileName().getTag(), toNulTerminatedString(bootFileName));
    }
{code}

Note also the only way to get the tags is 'new X().getTag()' since the field 
tag is not a static public field.

  was:
These are odd options, the PXE spec requires nul termination of the strings in 
these, but no other options. It also requires the strings to be in NETASCII 
(best JDK approximation is probably ISO8859_1). ApacheDS fills in simple, 
nonterminated strings, therefore these options cannot be parsed by many (most?) 
PXE implementations.


    /** DHCP options 66 and 67 require nul termination. */
    @Nonnull
    private byte[] toNulTerminatedString(@Nonnull String text) {
        return ArrayUtils.add(text.getBytes(Charsets.ISO_8859_1), (byte) 0);
    }

    protected void addBootParameters(@Nonnull Lease lease,
            @Nonnull InterfaceAddress interfaceAddress, @Nonnull DhcpMessage 
request,
            @Nonnull InetAddress bootServerAddress, @Nonnull String 
bootFileName) {
        byte[] bootServerName = 
toNulTerminatedString(InetAddresses.toAddrString(bootServerAddress));
        DhcpUtils.setUnknownOption(lease.getOptions(), new 
TftpServerName().getTag(), bootServerName);
        DhcpUtils.setUnknownOption(lease.getOptions(), new 
BootfileName().getTag(), toNulTerminatedString(bootFileName));
    }

Note also the only way to get the tags is 'new X().getTag()' since the field 
tag is not a static public field.


> Dhcp: TftpServerName and BootfileName need NUL termination
> ----------------------------------------------------------
>
>                 Key: DIRSERVER-1931
>                 URL: https://issues.apache.org/jira/browse/DIRSERVER-1931
>             Project: Directory ApacheDS
>          Issue Type: Bug
>          Components: dhcp
>            Reporter: Shevek
>            Priority: Major
>
> These are odd options, the PXE spec requires nul termination of the strings 
> in these, but no other options. It also requires the strings to be in 
> NETASCII (best JDK approximation is probably ISO8859_1). ApacheDS fills in 
> simple, nonterminated strings, therefore these options cannot be parsed by 
> many (most?) PXE implementations.
> {code}
>     /** DHCP options 66 and 67 require nul termination. */
>     @Nonnull
>     private byte[] toNulTerminatedString(@Nonnull String text) {
>         return ArrayUtils.add(text.getBytes(Charsets.ISO_8859_1), (byte) 0);
>     }
>     protected void addBootParameters(@Nonnull Lease lease,
>             @Nonnull InterfaceAddress interfaceAddress, @Nonnull DhcpMessage 
> request,
>             @Nonnull InetAddress bootServerAddress, @Nonnull String 
> bootFileName) {
>         byte[] bootServerName = 
> toNulTerminatedString(InetAddresses.toAddrString(bootServerAddress));
>         DhcpUtils.setUnknownOption(lease.getOptions(), new 
> TftpServerName().getTag(), bootServerName);
>         DhcpUtils.setUnknownOption(lease.getOptions(), new 
> BootfileName().getTag(), toNulTerminatedString(bootFileName));
>     }
> {code}
> Note also the only way to get the tags is 'new X().getTag()' since the field 
> tag is not a static public field.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to