#recycle - Papierkorb

Status
Für weitere Antworten geschlossen.

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Zwar noch kein spk Paket ;), aber ein, zwei features eingebaut:

1) Freigaben werden direkt aus der smb.conf ausgelesen
2) Abfangen wenn Freigabe keinen .recycle oder einen leeren .recycle hat
3) Probleme beim Auslesen der smb.conf abgefangen resp Warnung wenn keine Freigaben gefunden wurden
4) Formular Buttons werden nur angezeigt, wenn etwas zum löschen gefunden wurde

Anbei mal wieder der aktuellste Code
PHP:
<?php
$liste = array();
$return = array();
$tmp = array();
$recycle = '.recycle';
$smbpath = '/opt/etc/samba/smb.conf';

exec('cat '.$smbpath,$tmp);
foreach($tmp as $wert){
  if(stripos($wert,'path=') !== false && strpos($wert,'%') === false){
    $liste[] = trim(str_replace('path=','',$wert));
  }
}

if(count($liste) < 1){
  die('Es wurden keine smb Freigaben gefunden. Zumindest scheint nix in der smb.conf gewesen zu sein. Stimmt denn dieser Pfad: <strong>'.$smbpath.'</strong>?');
}

foreach($liste as $wert){
  $handle = @opendir($wert.'/'.$recycle);
  if($handle === false){
    $return[$wert] = false;
    continue;
  }
  $return[$wert] = array();
  while (false !== ($file = readdir($handle))) {
    if($file != '..' && $file != '.'){
      $return[$wert][$file] = array();
      $size = exec('du -sch '.$wert.'/'.$recycle.'/'.$file);
      $return[$wert][$file] = $size;
    }
  }
}
if(!isset($_POST['del']) || !isset($_POST['send'])){
?>
  <html>
  <head>
  <title>Manage the Samba Garbage</title>
  </head>
  <body>
  <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">  
<?php
  $count = 0;
  foreach($return as $key=>$wert){
    echo $key;
    echo '<br />';
    if($wert === false){
      echo '  <strong>Diese Freigabe besitzt keinen Papierkorb</strong><br /><br />';
      continue;
    }elseif(count($wert) === 0){
      echo '  <strong>Diese Freigabe besitzt einen leeren Papierkorb</strong><br /><br />';
      continue;
    }
    foreach($wert as $schl=>$bla){
      $count++;
      echo '  '.$schl.'  '.$bla.'<input type="checkbox" name="del[]" value="'.$key.'/'.$recycle.'/'.$schl.'" /><br />';
    }
    echo '<br />';
  }
  if($count > 0){
?>
  <br />
  <input type="submit" name="send" value="Löschen" />  <input type="reset" value="Stop" />
<?php
  }else{
?>
  </form>
  </body>
  </html>
<?php
  }
}else{
  foreach($_POST['del'] as $wert){
    if(file_exists($wert)){
      $check = false;
      foreach($liste as $w){
        $check = strpos($wert,$w);
        if($check === 0) break;
      }
      if($check === 0){
        exec('rm -R '.$wert);
      }else{
        die('Hacker Alarm ;-)');
      }
    }else{
      die('Hacker Alarm ;-)');
    }
  }
  header('Location: '.$_SERVER['PHP_SELF']);
  exit;
}
?>
So schaut es momentan aus

Gruss

tobi
 

Anhänge

  • smb.jpg
    smb.jpg
    40,7 KB · Aufrufe: 132

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Ich würde den Lösch-Button jeweils hinter den jeweiligen Papierkorb machen ;)

Das ist einfacher zu verstehen ... auch wenn man dann mehrfach klicken muss, um mehrere Papierkörbe zu leeren. Im DS-Manager gibt es einen Knopf, um alle Papierkörbe zu löschen .... das heißt, dies brächte man nicht unbedingt einbauen.

Itari
 

Trolli

Benutzer
Mitglied seit
12. Jul 2007
Beiträge
9.848
Punkte für Reaktionen
1
Punkte
0
So - ich hab die ganze Diskussion dann mal in den 3rd-Party Bereich verlagert.

Sehr schöne Sache die Du da machst, Tobi! Danke!
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
14
Punkte
84

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Wiedermal die aktuellste Version des Codes. Es gibt jetzt für jeden Papierkorb einen Button zum Löschen. Ebenfalls gibt es einen Button pro Userverzeichnis im Papierkorb zu Löschen. Das ganze funzt jetzt leider nur noch, wenn Javascript aktiviert ist.
PHP:
<?php
$liste = array();
$return = array();
$tmp = array();
$recycle = '.recycle';
$smbpath = '/opt/etc/samba/smb.conf';

exec('cat '.$smbpath,$tmp);
foreach($tmp as $wert){
  if(stripos($wert,'path=') !== false && strpos($wert,'%') === false){
    $liste[] = trim(str_replace('path=','',$wert));
  }
}

if(count($liste) < 1){
  die('Es wurden keine smb Freigaben gefunden. Zumindest scheint nix in der smb.conf gewesen zu sein. Stimmt denn dieser Pfad: <strong>'.$smbpath.'</strong>?');
}

foreach($liste as $wert){
  $handle = @opendir($wert.'/'.$recycle);
  if($handle === false){
    $return[$wert] = false;
    continue;
  }
  $return[$wert] = array();
  while (false !== ($file = readdir($handle))) {
    if($file != '..' && $file != '.'){
      $return[$wert][$file] = array();
      $size = exec('du -sch '.$wert.'/'.$recycle.'/'.$file);
      $return[$wert][$file] = $size;
    }
  }
}
if(!isset($_POST['dell']) || $_POST['dell'] == '/foo/bar'){
?>
  <html>
  <head>
  <title>Manage the Samba Garbage</title>
  <script type="text/javascript">
  <!--
  function sendForm(pathToDel){
    document.getElementById('dell').value = pathToDel;
    document.getElementById('formular').submit();
  }
  -->
  </script>
  </head>
  <body>
  <form id="formular" action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
  <input name="dell" id="dell" type="hidden" value="/for/bar" />
<?php
  $count = 0;
  foreach($return as $key=>$wert){
    if($wert === false){
      echo $key;
      echo '  <strong>Diese Freigabe besitzt keinen Papierkorb</strong><br /><br />';
      continue;
    }
    echo $key.'/'.$recycle.'    <input type="button" name="weg" value="Löschen" onclick="sendForm(\''.$key.'/'.$recycle.'\');" /><br />';
    echo '<br />';
    if(count($wert) === 0){
      echo '  <strong>Diese Freigabe besitzt einen leeren Papierkorb</strong><br /><br />';
      continue;
    }
    foreach($wert as $schl=>$bla){
      $count++;
      echo '  '.$schl.'  '.$bla.'    <input type="button" name="weg" value="Löschen" onclick="sendForm(\''.$key.'/'.$recycle.'/'.$schl.'\');" /><br />';
    }
    echo '<br />';
  }
?>
  </form>
  </body>
  </html>
<?php
}else{
  //var_dump($_POST);
  //exit;
  $wert = $_POST['dell'];
  if(file_exists($wert)){
    $check = false;
    foreach($liste as $w){
      $check = strpos($wert,$w);
      if($check === 0) break;
    }
    if($check === 0){
      exec('rm -R '.$wert);
    }else{
      die('Hacker Alarm ;-)');
    }
  }else{
    die('Hacker Alarm ;-)');
  }
  header('Location: '.$_SERVER['PHP_SELF']);
  exit;
}
?>
und das sieht dann so aus
 

Anhänge

  • smb.jpg
    smb.jpg
    26 KB · Aufrufe: 99

floho

Benutzer
Mitglied seit
23. Sep 2009
Beiträge
149
Punkte für Reaktionen
0
Punkte
16
Hallo!

Ich würde gerne diese Thema noch einmal kurz aufwärmen. Vorne weg: ich bin absoluter Linux/Telnet/SSH-Unwissender.

Mein Problem: Ich würde gerne einen Dateityp vom Papierkorb ausschließen, da eine Anwendung beim (automatischen) Speichern temporäre Dateien erstellt und dann wieder löscht. Da die temp. Dateien gerne mal mehrere MB groß sind, müllt mir dass den Papierkorb binnen kürzester Zeit voll.

Inzwischen weiß ich, dass dies durch einen Eintrag in der smb.conf möglich ist.

Dieser muß für meine speziellen Dateien folgendermaßen aussehen:

Rich (BBCode):
recycle:exclude=*VWTMP.vwx

Fagen:

  • Kann ich diese Zeile nun einfach in die smb.conf bei der entsprechenden Share eintragen?
  • Genügt dieser eine Eintrag in der smb.conf oder muss noch weitere Einträge ergänzen?
  • Müssen noch andere andere Konfigurationsdateien geändert werden?
  • Bleiben die änderungen bei einem Reboot erhalten?
  • Kann ich mit der vorhanden Samba-Installation arbeiten oder benötige ich eine eigene/neue Installation?

Und vor allem: Wie bearbeite ich die Dateien am einfachsten. Immerhin bin ich schon in der Lage, entsprechende Dateien per Telnet anzeigen zu lassen. Aber ändern??

Vielen Dank für Eure Hilfe!

Gruß Flo
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Dieser muß für meine speziellen Dateien folgendermaßen aussehen:

Rich (BBCode):
recycle:exclude=*VWTMP.vwx
Fagen:

  • Kann ich diese Zeile nun einfach in die smb.conf bei der entsprechenden Share eintragen?
  • Genügt dieser eine Eintrag in der smb.conf oder muss noch weitere Einträge ergänzen?
  • Müssen noch andere andere Konfigurationsdateien geändert werden?
  • Bleiben die änderungen bei einem Reboot erhalten?
  • Kann ich mit der vorhanden Samba-Installation arbeiten oder benötige ich eine eigene/neue Installation?
Code:
 recycle:exclude=*.tmp|*.temp|*.o|*.obj|~$*|*.vwx
würde ich mal probieren.
Diese Zeile in die smb.conf zusammen mit den anderen Vars, die für den Papierkorb nötig sind.
Die Änderungen sollten nach dem Reboot immer noch da sein. Ein Firmware Upgrade könnte jedoch die Änderungen in der smb.conf löschen
 

floho

Benutzer
Mitglied seit
23. Sep 2009
Beiträge
149
Punkte für Reaktionen
0
Punkte
16
Du meinst,

Rich (BBCode):
recycle:exclude=*VWTMP.vwx

geht nicht? Ich möchte ja .vwx-Dateien icht ausschließen, sonden nur die temp. vwx-Dateien.

Welche sind die rstlichen recycle-Einstellunegn? Werden die vorh. recycle-Einstellungen nicht übernommen und nicht nur der exclude-Eintrag ergänzt?

Wie editiere ich die smb.conf am besten?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Du meinst,

Rich (BBCode):
recycle:exclude=*VWTMP.vwx
geht nicht? Ich möchte ja .vwx-Dateien icht ausschließen, sonden nur die temp. vwx-Dateien.
Doch das sollte auch gehen, aber wenn die Datei genau VWTMP.vwx heisst, dann brauchst du den führenden Stern nicht.

Welche sind die rstlichen recycle-Einstellunegn? Werden die vorh. recycle-Einstellungen nicht übernommen und nicht nur der exclude-Eintrag ergänzt?
Die recyle Einstellungen sollten in der Config pro Share stehen. Afaik braucht jede Share, die einen Papierkorb enthalten soll, alle Einstellungen
Wie editiere ich die smb.conf am besten?
Am besten direkt auf der Konsole als root mit einem Editor wie vi oder nano. Schau mal in unser Wiki, dort steht mehr zur Konsole
Hoffe es hilft
Gruss

tobi
 

floho

Benutzer
Mitglied seit
23. Sep 2009
Beiträge
149
Punkte für Reaktionen
0
Punkte
16
Welche sind die rstlichen recycle-Einstellunegn? Werden die vorh. recycle-Einstellungen nicht übernommen und nicht nur der exclude-Eintrag ergänzt?
Die recyle Einstellungen sollten in der Config pro Share stehen. Afaik braucht jede Share, die einen Papierkorb enthalten soll, alle Einstellungen

Dass man die Einstllungen für jede Share separat angeben muss, ist mir klar. Nur funktioniert der Papierkorb ja bereits (nur kommen da eben ale Dateien rein).
D.h. irgendwo müssen diese (allgemeinen) Einstellungen für den Papierkorb ja schon stehen (default). Ich dachte mir, ich könnte durch den o.g. Eintrag diese vorh. Einstellungen einfach um die exclude-Einstellung ergänzen.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Dass man die Einstllungen für jede Share separat angeben muss, ist mir klar. Nur funktioniert der Papierkorb ja bereits (nur kommen da eben ale Dateien rein).
D.h. irgendwo müssen diese (allgemeinen) Einstellungen für den Papierkorb ja schon stehen (default). Ich dachte mir, ich könnte durch den o.g. Eintrag diese vorh. Einstellungen einfach um die exclude-Einstellung ergänzen.
Dann hast du den Papierkorb im DSM aktiviert? Ich kenne es jetzt nur von ipkg Samba her (hab nur damit rumprobiert), aber auch der Syno Samba müsste die Papierkorbeinstellungen in der Konfig pro Share komplett haben. Afaik gibt es keine Papierkorbeinstellungen im globalen Bereich der smb.conf. Aber schau mal in die Datei wie es Synology gemacht hat.
 

floho

Benutzer
Mitglied seit
23. Sep 2009
Beiträge
149
Punkte für Reaktionen
0
Punkte
16
In der /usr/syno/etc/smb.conf steht gar nichts, was mit dem Recycler zu tun hat, ebensowenig in der /usr/syno/etc.defaults/smb.conf

Wo könnte ich da noch etwas finden?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
gibt's ne Datei Namens recycle_share.conf? Gemäss http://www.informatik-archiv.de/samba/samba.html wurde die Konfig in Samba Versionen < 3 in dieser Datei erstellt. In den neueren Versionen > 3 sollte jedoch die Konfig des Papierkorbs in der smb.conf erfolgen.
 

floho

Benutzer
Mitglied seit
23. Sep 2009
Beiträge
149
Punkte für Reaktionen
0
Punkte
16
Ich hab alles durchsucht... soweit ich das beurteilen kann... aber eine recycle_share.conf habe ich nicht gefunden.... und nu?
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Wahrscheinlich kann man da nicht weiter konfigurieren ... hab mal im Binary des smbd gerumgesucht und den Schalter für den Papierkorb da drin gefunden:

Rich (BBCode):
Synology> string smbd | grep cifs_recycle_bin_enabled
cifs_recycle_bin_enabled

Man kann auch den smbd mal direkt befragen, da kommt ja noch was zu Tage, allerdings hab ich da nichts mehr gefunden: smbd -b:

Rich (BBCode):
Paths:
   SBINDIR: /usr/syno/sbin
   BINDIR: /usr/syno/bin
   SWATDIR: /usr/syno/swat
   CONFIGFILE: /usr/syno/etc/smb.conf
   LOGFILEBASE: /var/log
   LMHOSTSFILE: /usr/syno/etc/lmhosts
   LIBDIR: /usr/syno/etc
   SHLIBEXT: so
   LOCKDIR: /var/run
   PIDDIR: /var/run
   SMB_PASSWD_FILE: /usr/syno/etc/private/smbpasswd
   PRIVATE_DIR: /usr/syno/etc/private

Itari
 

floho

Benutzer
Mitglied seit
23. Sep 2009
Beiträge
149
Punkte für Reaktionen
0
Punkte
16
Ich dachte, dass auf Grund der Art wie Samba Konfigurationsparameter sucht, Werte für die Freigaben auch in der Section [global] definiert werden können. Diese Werte werden dann genutzt/gelten global, wenn sie in den Freigaben nicht überschrieben werden.

Frage: Kann ich dann nicht einfach NUR

Rich (BBCode):
recycle:exclude = *.wasauchimmer

in die /usr/syno/etc/smb.conf reinschreiben und das funktioniert dann?

Wenn ich mir den Tread nochmal durchlese, hast du so was in der Art ja schon mal versucht und dann hattest du keinen Zugriff mehr auf die Shares. Oder hab ich da was falsch verstanden.

Dann ich das gefahrlos ausprobieren?

Problem: das NAS läuft bereits in produktiver Umgebung und darf auf keinen Fall ausfallen.


EDIT: Ich hab das jetzt mal mit der /usr/syno/etc/smb.conf ausprobiert. Änderungen sind nach einen Neustart des Systems wieder weg :-(
 
Zuletzt bearbeitet:

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
14
Punkte
84
Ich hab auch ein wenig getüfftelt und habe es irgendwie geschafft ;)
Wichtig: Den Papierkorb nicht per DSM aktivieren!!!

In der Freigabe in der du den Papierkorb benutzen möchtest schreibe folgendes (z.B. unten dran):
Rich (BBCode):
vfs object = recycle
recycle:repository = .recycle
recycle:maxsize = 0
recycle:versions = yes
recycle:touch = yes
recycle:keeptree = yes
recycle:exclude = *.tmp,*.temp,*.o,*.obj,~$*,*.~??,~*.tmp
recycle:exclude_dir = /tmp,/temp,/cache
recycle:noversions = *.doc,*.xls,*.ppt
Default Verzeichnis bei Synology DS: #recycle
Musst natürlich nicht alle Optionen benutzen, wichtig ist nur der 1. Eintrag vfs object = recycle

Anschließend Samba restarten mit:
Rich (BBCode):
/usr/syno/etc/rc.d/S80samba.sh restart
Leider wird die smb.conf nach einem Neustart überschrieben (eventuell mit dem Inhalt aus share_right.map). Man kann es austricksen, indem man die funktionierende Kopie im Verzeichnis /usr/syno/etc/samba/ ablegt (war bei mir vorhanden aber leer). Dann die Datei /usr/syno/etc/rc.d/S99zbootok.sh öffnen und folgendes am Ende anhängen:
Rich (BBCode):
if [ -f /usr/syno/etc/samba/smb.conf ]; then
    /usr/syno/etc/rc.d/S80samba.sh stop
    sleep 5
    cp -f /usr/syno/etc/samba/smb.conf /usr/syno/etc/smb.conf
    /usr/syno/etc/rc.d/S80samba.sh start
fi
Die Datei S99zbootok.sh wird als letztes nach einem Neustart ausgeführt. Der Code prüft auf Vorhandensein der Kopie in /usr/syno/etc/samba/, beendet samba, wartet kurz, überschreibt mit der Kopie die Datei in /usr/syno/etc/ und startet anschließend wieder samba.
Vorteil: Papierkorb ist auch nach dem Start wieder aktiv, Einstellungen bleiben erhalten.
Nachteil: Bei einer Änderung der smb.conf muss man dran denken, die Kopie zu aktualisieren. Nach einem Firmware Update muss man es erneut einbauen.

kurze Erklärung der Parameter Quelle http://www.informatik-archiv.de/samba/samba.html:
  • repository
    Möglicherweise ein anderer Speicherort? (Ja, ist es)
  • keeptree
    Erstellt die passende Verzeichnishierarchie auch im Papierkorb
  • versions
    Bei gleichen Dateinamen, Berücksichtigung verschiedener Versionen!
  • touch
    Ändert die Zugriffszeit der Datei beim Sichern im Papierkorb
  • maxsize
    Maximale Größe (in Bytes) der Dateien, die in den Papierkorb verschoben werden sollen. Dateien größer als maxsize werden nicht in den Papierkorb verschoben. Vorsicht! an dieser Stelle erwähnte ich irrtümlich etwas von einer Maximalgröße des Papierkorbs. Das ist definitiv falsch! Eine Maximalgröße ist nicht vorgesehen! Sie kann über quota und/oder über cronjobs realisiert werden. Ich weiß, das ist nicht toll, aber ich kann nichts dafür.
  • exclude
    Syntax scheint die Aneinanderreihung der Extensionen (Dateierweiterungen) mit dem Oder-Zeichen "|" zu sein: *.xls|*.doc usw.
    Schliesst bestimmte Dateien von der Sicherung im Papierkorb aus.
  • excludedir
    Syntax scheint ähnlich wie bei exclude die Aneinanderreihung der Ordnernahmen zu sein, z. B. /temp|/temp usw.
    Schliesst bestimmte Ordner von der Sicherung im Papierkorb aus.
  • noversions
    Wenn der Modus Versions aktiviert ist, kann man damit bestimmte Dateien von diesem Modus ausschliessen.
    Syntax wieder wie bei exclude.
 
Zuletzt bearbeitet:

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
@QTip
Du kannst auch das Startscript des Samba anpassen.
Code:
/usr/syno/sbin/nmbd -D --configfile=/opt/etc/smb.conf
/usr/syno/sbin/smbd -D --configfile=/opt/etc/smb.conf
Werden bei deiner Version nicht alle Änderungen die man im DSM gemacht hat beim nächsten Boot wieder überschrieben? Der Papierkorb bleibt, aber sonst keine Änderung... imho müsstest du die Konfig beim Herunterfahren in dein alternatives Verzeichnis kopieren
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
14
Punkte
84
ja, leider führt jede Änderung an den Shares per DSM zur Löschung der manuell gemachten Änderungen. Mal überlegen wie man das abfängt oder umbauen kann.

Man könnte durchaus das Script im Samba Startscript anpassen...
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat