Kann nicht Löschen über FTP

  • Hi
    Kann mir mal jemand erklären warum ich bestimmte Dateien per FTP nicht aus dem /pub/mp3 -Ordner löschen kann?
    Eine Datei die ich nicht löschen kann heisst zum Beispiel '10 - Vollmond.mp3'
    Mein FTP-Client (probiert mit TotalCommander und SmartFTP) hat folgendes im Log stehen:
    DELE 10 - Vollmond.mp3
    501 Error in Parameters

    Es liegt wahrscheinlich an den Leerzeichen im Dateinamen.
    Ich frag mich ob nun der StupidFTP-Server dran Schuld ist oder die Clients die ich verwende.
    Kann von Euch jemand Dateien mit solchen Namen per FTP löschen?

    Gruß
    Jarny

    PS: Von Hand kann man die Dateien natürlich löschen, es liegt also nicht an irgendwelchen Rechten. Andere Dateien aus dem Ordner zB. Vollmond.mp3 kann ich problemlos löschen.
    Irgendwie kann ich es nicht ganz glauben dass so ein banaler Fehler (Böse überraschende Leerzeichen im Dateinamen) in StupidFTP bzw. den FTP-Clients steckt.

    MLD 3.0.3 Server. Aufnahmen schaue ich mit einem separaten XBMC (OpenElec Distribution) im Wohnzimmer am 47 Zoll HD Fernseher

  • Es liegt vermutlich an dem Leerzeichen vor dem "-". Der FTP-Daemon wird das wohl nicht richtig umsetzen.

    Wenn möglich, probiere das dochmal mit einem anderen Server aus.

    Oder gibt den Dateienamen in einfachen oder doppelten Anführungszeichen ein. Oder Escape die Leerzeichen aus, also so:

    rm 10\ -\ Vollmond.mp3

    Außerdem wird dieses geniale Lied nicht gelöscht! :hat2

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P

    Edited 2 times, last by knebb (February 17, 2006 at 7:58 PM).

  • Moin moin,

    schau Dir die Datei /etc/stupid-ftpd/stupid-ftpd.conf ab Zeile 61 ff. an. Dort kannst Du auch Rechte an die Benutzer vergeben. Der Benutzer "video" darf per default nicht löschen.

    Gruß

    Merten

    SilverStone SST-LC10B-E mit Kram drin damit läuft.
    yaVDR 0.4

  • neves: Die Rechte stimmen ja. Ich kann prinzipiell Dateien löschen. Nur speziell alle mp3s die das Minuszeichen oder Leerstellen im Namen haben gehen nicht zu löschen.
    Ich finds ziemlich peinlich das dieses Problem bei jahrealten Programmen besteht. Als ob plötzlich jemand im Jahr 2006 Dateien mit 'Minuszeichen' oder 'Leerzeichen' löschen will und diese Problematik quasi zum ersten mal auftritt.

    knebb: Ich probiere mal weitere FTP-Clients aus. Anscheinend bin ich der erste der solche Dateien besitzt die ein Leerzeichen vor dem "-" haben. Keine Ahnung warum meine FTP-Clients nicht von selbst Escapen.

    Einen anderen FTP-Server kann ich nur schwerlich verwenden. Ich benutze halt LinVDR und da ist StupidFTP dabei und läuft eigentlich zufriedenstellend wenn diese dumme Sache nicht wäre. Ob jetzt die Clients oder der Server schuld ist frag ich mich.
    Kennt jemand einen FTP-Client für Windows der die Leerzeichen mit Escape-Zeichen umwandelt, so dass alle FTP-Server damit umgehen können?
    Warum nimmt der StupidFTP denn eigentlich nicht den String bis zum letzten Zeichen? Weitere Parameter sind doch eh nicht erlaubt beim DELE-Befehl.

    Gruß
    Jarny

    MLD 3.0.3 Server. Aufnahmen schaue ich mit einem separaten XBMC (OpenElec Distribution) im Wohnzimmer am 47 Zoll HD Fernseher

  • Jaja, immer die böse, böse, schlecht programierte Software...

    Quote

    Keine Ahnung warum meine FTP-Clients nicht von selbst Escapen.


    Wie sollten sie ahnen, was du evtl. meinen könntest? Drück dich klar aus, dann wissen auch die Programme, was du von ihnen willst. Mit anderen Worten: Benutz entweder keine Dateinamen mit Leerzeichen, Escape sie wie alle anderen Benutzer das auch tun, oder benutz nen FTP-Client, der Tab-Completion beherrscht (wobei du auch da sicher hin und wieder noch von Hand escapen musst).

    Quote

    Ob jetzt die Clients oder der Server schuld ist frag ich mich.


    Weder noch, das Problem sitzt mal wieder vor der Tastatur. Die Programme tun ganz genau das, was du von ihnen verlangst, nur bedienst du sie falsch. Der Befehl "rm 10 - Vollmond.mp3" bedeutet nun einmal, dass du 3 Dateien löschen willst -- 10, - und Vollmond.mp3.

    Quote

    Kennt jemand einen FTP-Client für Windows der die Leerzeichen mit Escape-Zeichen umwandelt


    Einen solchen FTP-Client gibt es nicht. Es gibt maximal FTP-Clients mit Tab-Completion, aber auch die Escapen nicht alle Leerzeichen. Zu Recht, weil sonst wäre es nie möglich, mehrere Dateinamen als Parameter zu übergeben.

    Quote

    Warum nimmt der StupidFTP denn eigentlich nicht den String bis zum letzten Zeichen? Weitere Parameter sind doch eh nicht erlaubt beim DELE-Befehl.


    Deswegen meckert Stupid-FTP ja auch: Er bekommt für nen Befehl, der nur einen Parameter verlangt, vom FTP-Client drei Parameter übermittelt -- nämlich 10, - und Vollmond.mp3. Damit kann er aber nichts anfangen.

    Sorry, aber deine Probleme sind Hausgemacht und haben mit der Software überhaupt nichts zu tun -- die funktioniert einwandfrei, nur ist der Anwender offenbar nicht in der Lage, sie korrekt zu bedienen. Wie wär's, wenn du einfach einen grafischen FTP-Client benutzt? Dann brauchst du nur noch klicken und nicht fehlerträchtig Befehle von Hand einzugeben. Programme gibt's dafür genug.

    Viele Grüße, Mirko

  • Quote

    Original von cooper
    Wie wär's, wenn du einfach einen grafischen FTP-Client benutzt? Dann brauchst du nur noch klicken und nicht fehlerträchtig Befehle von Hand einzugeben.

    Äh ... hat er doch:

    Quote

    Original von jarny
    Mein FTP-Client (probiert mit TotalCommander und SmartFTP) hat folgendes im Log stehen:
    DELE 10 - Vollmond.mp3
    501 Error in Parameters

    Das ist offenbar das "rohe" FTP-DELE, das nur einen Dateinamen annimmt, kein im Client eingetippter Befehl. Denselben Befehl schicken ncftp und der ftp-Client aus dem Linux NetKit, wenn man im Client delete "10 - Vollmond.mp3" eintippt (geprüft mit Ethereal). Mit vsftpd funktioniert's auch. StupidFTP habe ich zur Gegenprobe nicht hier ...

    EDIT: Nachtrag:
    Habe mir mal die aktuellste Version (1.5beta vom 31.1.2006) runtergeladen und nachgeschaut. Schön klein ist er ja, aber wenn in LinVDR keine gepatchte Version drin ist, dann ist wohl klar der FTP-Server schuld ...

    ftpcommand.c Zeile 1290ff:

    Code
    case REQ_DELE:
          if (pchild[nr]->perm & PERM_ERASE) {
            if (param) {
              param[512]=0;
              if (strchr(param,' ')) *strchr(param,' ')=0;
              if (!do_dele(nr,param)) 
                user_return(nr,RET_259);

    Die Zeichenkette wird einfach an der Leerstelle abgeschnitten, so dass es schlicht nicht möglich sein wird, Dateien mit Leerstellen zu löschen. Ohne RFC959 jetzt komplett gelesen zu haben würde ich das als klaren Fehler des Server betrachten, da der DELE Befehl einen "pathname" erwartet und ein "pathname" als String mit beliebigen ASCII-Zeichen außer <CR> und <LF> definiert ist.

    Edited once, last by Greywolf (February 18, 2006 at 12:56 AM).

  • Quote

    Original von cooper

    ......

    Sorry, aber deine Probleme sind Hausgemacht und haben mit der Software überhaupt nichts zu tun -- die funktioniert einwandfrei, nur ist der Anwender offenbar nicht in der Lage, sie korrekt zu bedienen. Wie wär's, wenn du einfach einen grafischen FTP-Client benutzt? Dann brauchst du nur noch klicken und nicht fehlerträchtig Befehle von Hand einzugeben. Programme gibt's dafür genug.

    Viele Grüße, Mirko


    Greywolf hats richtig erkannt. Ich benutze doch grafische FTP-Clients. Was diese wegsenden kann ich nicht beeinflussen. Mir gehts ja gerade darum einen grafischen Client zu haben wo ich mal schnell mit der Maus ein paar Dateien und Verzeichnisse markieren kann und dann auf Löschen klicke - Fertig - (Wenn da nicht die Fehlermeldung käm).

    Also wenn Greywolf das im Sourcecode so richtig erkannt hat kommt dieser Fehler bei allen Dateinamen die ein Leerzeichen haben. Das ist bei nahezu allen Mp3s der Fall. Ich habs auch nochmal probiert mit umgebenden Anführungszeichen per Konsolen-FTP aber das kann ja dann auch nicht klappen weil er das Leerzeichen da trotzdem findet und abschneidet.
    Dumm gelaufen für mich, ärgerlicher Bug.

    Danke für die Aufklärung, da brauch ich nicht mehr weitere Clients durchprobieren.
    Gruß
    Jarny


    Quote

    Original von cooper
    Wie sollten sie ahnen, was du evtl. meinen könntest? Drück dich klar aus, dann wissen auch die Programme, was du von ihnen willst. Mit anderen Worten: Benutz entweder keine Dateinamen mit Leerzeichen, Escape sie wie alle anderen Benutzer das auch tun, oder benutz nen FTP-Client, der Tab-Completion beherrscht (wobei du auch da sicher hin und wieder noch von Hand escapen musst).


    Oder gibt es doch ne Möglichkeit zu escapen oder zu quoten? Wie kannst du per FTP auf dem LinVDR eine Datei mit Leerzeichen löschen?

    Edit: Übrigens kommt die Meldung '501 Error in Parameters' auch wenn man zB. delete Vollmond.mp3 eingibt (was ja von den Parametern völlig richtig ist) und die Datei nicht vorhanden ist. Da würde man ja eigentlich sowas wie 'File not found' oder so erwarten, wie das zB. bei dem Befehl 'put' der Fall ist.

    MLD 3.0.3 Server. Aufnahmen schaue ich mit einem separaten XBMC (OpenElec Distribution) im Wohnzimmer am 47 Zoll HD Fernseher

    Edited once, last by jarny (February 18, 2006 at 10:55 AM).

  • Quote

    Original von jarny
    Oder gibt es doch ne Möglichkeit zu escapen oder zu quoten?

    Sieht (soweit ich das erkenne ;) ) im Sourcecode nicht so aus.

    Quote

    Edit: Übrigens kommt die Meldung '501 Error in Parameters' auch wenn man zB. delete Vollmond.mp3 eingibt (was ja von den Parametern völlig richtig ist) und die Datei nicht vorhanden ist. Da würde man ja eigentlich sowas wie 'File not found' oder so erwarten, wie das zB. bei dem Befehl 'put' der Fall ist.

    Ziemlich irreführend, ja. Ist aber der einzige Fehlercode, der zurückgegeben wird, wenn in obiger Codezeile 6 das do_dele fehlschlägt (in Zeile 8 käme "else user_return(nr,RET_501)")

    vsftpd liefert in solch einem Fall "550 Delete operation failed." ... was auch wieder dem RFC entsprechen dürfte:

    Quote

    RFC 959
    550 Requested action not taken.
    File unavailable (e.g., file not found, no access).

    Auch wenn der Server wohl auf "möglichst klein und einfach" getrimmt ist ... irgendwie bekommt man den Eindruck, der Name des Server hätte einen tieferen Sinn. :D

    Edited once, last by Greywolf (February 18, 2006 at 2:31 PM).

  • Quote

    Original von Greywolf
    Auch wenn der Server wohl auf "möglichst klein und einfach" getrimmt ist ... irgendwie bekommt man den Eindruck, der Name des Server hätte einen tieferen Sinn. :D


    Ja, natürlich ist keine Software fehlerfrei. Aber ich dachte, dass eine Grundfunktion wie 'Löschen' richtig funktioniert. Ich hätte nicht vermutet, dass ich der erste bin der mit StupidFTP solche Dateien löschen will oder patcht sich hier jeder das Teil selbst bzw. verzichtet auf das Löschen von Dateien mit Leerzeichen?
    Gruß
    Jarny

    PS: Wenn jemand ein Patch für StupidFTP hat würde es mich sehr freuen und ich wäre sehr dankbar. Allerdings kann ich nur Binarys benutzen.

    MLD 3.0.3 Server. Aufnahmen schaue ich mit einem separaten XBMC (OpenElec Distribution) im Wohnzimmer am 47 Zoll HD Fernseher

  • Weiss jemand den tieferen Grund warum da mit:

    Code
    if (strchr(param,' ')) *strchr(param,' ')=0;

    der Dateinamen abgeschnitten wird und somit alle Dateien mit Leerzeichen nicht mehr funktionieren?
    Wenn man die Zeile einfach rausnimmt sollte es klappen.
    Vielleicht kann ja jemand beim nächsten Kompiliervorgang diesen 'Patch' mal ausprobieren. (Zeile 1294 in ftpcommand.c aus der 1.5beta)
    Wenns jemand kompiliert hat und hier reinstellt kann ich auch gerne testen.

    Gruß
    Jarny

    MLD 3.0.3 Server. Aufnahmen schaue ich mit einem separaten XBMC (OpenElec Distribution) im Wohnzimmer am 47 Zoll HD Fernseher

  • Servus,

    auch ich hab noch mal nachgesehen -- und es ist tatsächlich ein Bug im Stupid-FTP. Hat bislang wohl kaum jemand gemerkt. Solte mal jemand melden, vielleicht wird da ja mal was geändert.

    Der Dateiname wird abgeschnitten, weil der String einfach beim ersten Leerzeichen terminiert wird -- ohne nachzusehen, ob er ggf. gequoted ist, so wie die meisten anderen Daemons das tun. strchr sucht eben nach dem ersten Leerzeichen.

    Viele Grüße, Mirko

  • Quote

    Original von cooper
    Der Dateiname wird abgeschnitten, weil der String einfach beim ersten Leerzeichen terminiert wird -- ohne nachzusehen, ob er ggf. gequoted ist, so wie die meisten anderen Daemons das tun. strchr sucht eben nach dem ersten Leerzeichen.
    Viele Grüße, Mirko

    Meine Frage war etwas missverständlich gestellt. Mir ist klar warum der String mit dieser Zeile abgeschnitten wird d.h. wie das technisch mit strchr funktioniert. Meine eigentliche Frage ist vielmehr warum wird der String vom Programmautor abgeschnitten? Wenn er sich nix dabei gedacht hat (es sozusagen einfach ein Bug ist) dann kann man ja die Zeile einfach rausnehmen. Ich hab im Programmcode nicht komplett zurückverfolgt wie das Array 'param' gefüllt wird, aber wenn dort der Dateiname mit Leerzeichen drinsteht und dieser am echten Ende nullterminiert ist sollte es eigentlich funktionieren. Wenn das Array allerdings mit Leerzeichen aufgefüllt ist (was ich nicht glaube) muss man sich eine andere Strategie beim Terminieren ausdenken (von hinten nach dem ersten Zeichen suchen welches ungleich dem Leerzeichen ist)

    Übrigens quotet kein von mir getesteter (grafischer) Client beim Löschen. Die schicken alle nur ein reines unbeeinfussbares DELE Dateiname mit Leerzeichen. Der Server muss das also auch ohne Quotes abkönnen.

    Also wenn es sich jemand zutraut und Lust darauf hat kann man diese Änderung mal ausprobieren. Wenn mir jemand das Binary zusendet probiere ich es aus.

    Gruß
    Jarny

    PS: Ich würd mal sagen, dass alle Windowsuser ihre Mp3s mittels FTP auf den LinVDR übertragen und somit auch alle dieses Löschproblem haben. Hat sich wohl bisher keiner getraut zu fragen. Gewundert hab ich mich schon lange darüber.

    LeoManiac: Welche Upload-Probleme meinst du?

    MLD 3.0.3 Server. Aufnahmen schaue ich mit einem separaten XBMC (OpenElec Distribution) im Wohnzimmer am 47 Zoll HD Fernseher

  • Dateinamen mit Leerzeichen im Namen behalten den Namen <Name>.<ext>.part also sie werden zum Schluss nicht unbenannt und ich bekomm dann immer ne Fehlermeldung das der Upload gescheitert ist obwohl die Datei existiert und auch vollständig hochgeladen wurde.

  • Quote

    Original von LeoManiac
    Dateinamen mit Leerzeichen im Namen behalten den Namen <Name>.<ext>.part also sie werden zum Schluss nicht unbenannt und ich bekomm dann immer ne Fehlermeldung das der Upload gescheitert ist obwohl die Datei existiert und auch vollständig hochgeladen wurde.


    Dieses Problem kenn ich nicht. Bei mir funktioniert der Upload (also auf den VDR) bisher immer. Mit und ohne Leerzeichen.

    Eben hab ich nochmal getestet. Ganz normales Rename geht auch schief, weil das Kommando gar nicht implementiert ist!

    Ich mach mir langsam Gedanken über ne Alternative für StupidFTP weil ich die Delete-Funktion oft brauche (auf das Rename kann ich verzichten). Hat jemand ein guten Tipp für einen FTP-Server den man auf dem LinVDR einfach nachinstallieren kann?

    Gruß
    Jarny

    MLD 3.0.3 Server. Aufnahmen schaue ich mit einem separaten XBMC (OpenElec Distribution) im Wohnzimmer am 47 Zoll HD Fernseher

  • Quote

    Original von jarny
    Hat jemand ein guten Tipp für einen FTP-Server den man auf dem LinVDR einfach nachinstallieren kann?

    Also ich selber benutze vsftpd ... allerdings kein LinVDR, insofern kann ich nichts zur Installierbarkeit oder fertigen Paketen sagen ...

    Im Unterschied zu Stupid-FTP bringt dieser allerdings keine eigene Nutzerverwaltung mit, sondern greift auf die Systemaccounts zurück (über PAM, sofern vorhanden, ginge es auch anders).

    Kannst ja einfach mal das Slackware Paket probieren. Das ist eine einfache .tar.gz Datei. Entweder direkt in "/" entpacken oder (besser) nur die Dateien /etc/vsftpd.conf.new und /usr/sbin/vsftpd rauskopieren (und das Verzeichnis "/usr/share/empty" anlegen). Da könnten natürlich Libraries fehlen oder nicht passen, insbesondere OpenSSL wird von dem Paket benötigt.

  • ProFTPD

    läuft definitiv auf LinVDR ich hatte vor einiger Zeit mal das Linux XAMPP Packet von Apachefriends.de auf den VDR kopiert und das lief alles problemlos...

    Hardware: Elitegroup 741GX-M + AMD Athlon 1400 (läuft auf 1200 wegen Temperaturgründen) + Technotrend FF + IR Empfänger

  • Ok, dann schau ich mal, ob ich am Wochenende den ProFTPD ans laufen bekomme. Danke für die Tipps
    Gruß
    Jarny

    MLD 3.0.3 Server. Aufnahmen schaue ich mit einem separaten XBMC (OpenElec Distribution) im Wohnzimmer am 47 Zoll HD Fernseher

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!