Forum: PC Hard- und Software TFTP-Server zero-padded-Dateinamen


von Stefan H. (Firma: dm2sh) (stefan_helmert)


Lesenswert?

Hallo,

wie kann man bei tftp-hda einstellen, dass der Server die Datei auch 
herausgibt, wenn der Client eine beliebige Anzahl an <NUL>-Bytes an den 
Dateinamen anhängt? Es können unter Umständen über 1024 <NUL>-Bytes 
sein.

von Stefan L. (timpi)


Lesenswert?

Moin,

welcher Client macht denn sowas?

Ich kenne allerdings keine Möglichkeit (mal abgesehen von einem Eingriff 
in die Sourcen). Warum auch, nach dem Null-terminiertem Dateinamen kommt 
ja noch der, ebenfalls Null-terminierte, Mode-String. Danach können noch 
beliebig viele Nullen kommen, die werden ignoriert (Option-Felder).

timpi.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Der Aufbau des RRQ/WRQ-Pakets ist in RFC 1350 definiert, und zwar mit 
genau einem NUL-Byte als Trennzeichen zwischen Dateiname und Mode-Feld 
und genau einem NUL-Byte nach dem Mode-Feld. Alles andere wäre eben kein 
TFTP. Natürlich kann das UDP-Paket, dass diesen Request enthält, 
wesentlich länger sein, aber das Längenfeld der Nutzdaten darf im 
UDP-Header natürlich nur die Länge des Requests umfassen.

von Stefan H. (Firma: dm2sh) (stefan_helmert)


Lesenswert?

Ich habe es doch noch lösen können. Falls es noch jemand braucht, 
schreibe ich die Lösung.

Stefan L. schrieb:
> welcher Client macht denn sowas?

so ca. 50 % aller PXE-Clients! Nur wenige halten sich an den Standard. 
Andere liefern eine <NUL> nach dem Name zuviel, wieder andere hängen 
über 1000 <NUL>-Bytes an.

Andreas S. schrieb:
> Der Aufbau des RRQ/WRQ-Pakets ist in RFC 1350 definiert

Naja, ist ja kein Standard nur ein Request for Comment ;)

Lösung:

https://github.com/TheTesla/pxe_salt

Man muss tftpd-hpa mit der Option für regex starten:

tftpd-hpa -m regex_tftpd

Die Datei regex_tftpd mit dem regex drin anlegen:

rg  [^[:print:]]

Es ersetzt nicht druckbare Zeichen gegen nichts. Man muss das regex 
wirklich so formulieren. [ [:cntrl:]] ging nicht, obwohl es korrekt ist.

Für die Suchmaschine:

PXE-T00 filename too long
PXE-T01 file not found

: Bearbeitet durch User
von Stefan L. (timpi)


Lesenswert?

Vielen Dank, gut zu wissen.

> so ca. 50 % aller PXE-Clients!

Na, da hab' ich wohl bislang fast immer die anderen 50% erwischt. Ein 
Problem hatte ich zwar mal mit dem Dateinamen, das wurde aber gelöst 
indem ich auf DHCP-Serverseite den Bootfilenamen <NUL>-terminiert habe 
(statt "pxelinux.0"  "pxelinux.0\000" eingetragen).

timpi.

von Daniel A. (daniel-a)


Lesenswert?

Stefan H. schrieb:
> Andreas S. schrieb:
>> Der Aufbau des RRQ/WRQ-Pakets ist in RFC 1350 definiert
>
> Naja, ist ja kein Standard nur ein Request for Comment ;)

Doch, dass ist ein Standard. Auch fast jedes andere Protokoll, inklusive 
TCP, IP, UDP, etc. existiert als RFC, dass ist nicht nur eine 
empfehlung, sonst würde ja garnichts richtig funktionnieren.

von Stefan H. (Firma: dm2sh) (stefan_helmert)


Lesenswert?

Stefan L. schrieb:
> indem ich auf DHCP-Serverseite den Bootfilenamen <NUL>-terminiert

Ich habe das DHCP-Paket angeschaut, da war alles mit <NUL> aufgefüllt. 
Das sind immer 128 Bytes für den namen.

Daniel A. schrieb:
> Doch, dass ist ein Standard.

Danke, das hilft auch den anderen, die meinen Ironie-Smiley übersehen 
haben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.