Alexander (HH): chmod auf fernem Server

Beitrag lesen

Moin Moin!

Kann es sein, dass hier chmod vom Provider für Perl gesperrt ist, oder habe ich etwas übersehen?

Nein. Perl hat keine so bekloppten Beschränkungsmodi wie PHP. Wenn chmod gesperrt ist, dann irgendwo unterhalb von Perl. Ich frage mich nur, warum jemand so etwas überhaupt versuchen wollen sollte. Es hat keinen Sinn, und ich kenne kein gängiges Betriebssystem, das chmod für einen stinknormalen User sperrt. (Selbst nobody ist ein normaler User, nur ohne Home-Verzeichnis, ohne Shell und ohne gültiges Passwort!)

my $report;
    $[0] or return( "Need a File or Folder!".NL );
    $
[1] or return( "Need a Oktstring!".NL );
    eval{ chmod( $[1], $[0] )
    } or do {
     return( $@ . NL
        . sprintf ("FAILURE chmod %o on %s", $[1],$[0] ).NL);
    };

  
Das hier ist extrem wirr. Laß das eval weg, chmod stribt nicht gleich, wenn etwas schief läuft. do gehört hier auch nicht hin. Keine Ahnung, wo Du einen dermaßen perversen Ersatz für if-then-else gefunden hast, aber gewöhn Dir das besser gleich wieder ab. Und chmod erwartet KEINEN String für die Permissions, sondern eine Zahl, vorzugsweise in oktaler Notation.  
  
  
Die ersten drei Zeilen Deines Scripts sollten ziemlich genau so aussehen. Über den Pfad zum Perl-Executable können wir diskutieren, über den Rest nicht.  
  
~~~perl
  
#!/usr/bin/perl -T  
use strict;  
use warnings;  

So lange Du nur testest, und nicht produktiv arbeitest, kannst Du noch folgende Zeile hinzufügen. Bevor Du produktiv arbeitest, entfernst Du sie wieder.

  
use CGI::Carp qw(fatalsToBrowser);  

Und dann rufst Du chmod mal bitte ohne das ganze Theater auf, stumpf nach Handbuch:

  
my $fn='/path/to/foobar.txt';  
chmod 0600,$fn or die "Could not chmod $fn: $!";  

Von mir aus können wir für Testzwecke auch mal auf ein reines print statt die zurückstufen, das spart die Sicherheitslücke CGI::Carp:

  
chmod 0600,$fn or print "Could not chmod $fn: $!";  

Und zum Überprüfen nutzt Du bitte mal stat, ebenfalls stumpf nach Handbuch:

  
my $mode=(stat($fn))[2];  
printf "Permissions are %04o\n",$mode & 07777;  

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".