#!/usr/bin/perl
#
# Validazione dell'input
#
if (exists $ARGV[0]){
    $path=$ARGV[0];
    #
    # Ridondante ma si può lasciare
    #
    chomp($path);
    #
    # Listiamo tutti i file in $path, ad esclusione della riga che recita "total nnnn"
    # OLD: @contenuto=qx(ls -l $path | head -n +2);
    #
    @contenuto=qx(ls -l $path | tail -n +2);
    #
    #  Qui probabilmente si voleva creare il file permissions.log
    #
    # OLD: qx(permissions.log); 
    # La creazione di permissions.log non è dannosa ma è superflua
    qx{touch permissions.log};

    foreach (@contenuto) {
        @splittedInfo = split(/\s+/, $_);
        $valido=1;
        #
        # Non dannosa ma ridondante 
        #
        chomp($splittedInfo[8]);
        #
        # Espressione regolare corretta
        #
        # OLD: if ($splittedInfo[0]=~ /(^[d-])(\d{3})(\d{3})(\d{3})/){
        # 
        #if ($splittedInfo[0]=~ /^([d\-])([rwx\-]{3})([rwx\-]{3})([rwx\-]{3})/){
        if ($splittedInfo[0]=~ /^([d\-])([r\-][w\-][x\-])([r\-][w\-][x\-])([r\-][w\-][x\-])/){


        # OLD:    if($1=="d"){
            if($1 eq "d"){
                # OLD: $perm=755; # "rwxr-xr-x"
                $perm = "rwxr-xr-x"
                $perm_da_impostare = "u=rwx g=rx o=rx"; # "u+rwx g+rx g-w o+rx o-w"
            } else {
                # OLD: $perm=644; # "rw-r--r--"
                $perm = "rw-r--r--";
                $perm_da_impostare = "u=rw g=r o=r";
            }
            # OLD: if malposto e non specifico per file e cartelle
            #if ($2 ne "rwx" and $3 ne "r-x" and $4 ne "r-x" ){
            #    $valido=0;
            #}
            if ($2.$3.$4 ne $perm)
                { $valido = 0 }

            if ($valido == 0){
                $new_line=$splittedInfo[8];
                #OLD: $error_text=qx(chmod $perm_da_impostare $new_line);
                #
                # Faccio un dry-run per essere sicuro di non fare danni
                #
                #print "qx(chmod $perm_da_impostare $new_line 2>&1)";
                $error_text=qx(chmod $perm_da_impostare $new_line 2>&1);
                # OLD: $toAdd=$new_line."\nchmod $perm $new_line\n";
                $toAdd=$new_line."\nchmod $perm_da_impostare $new_line\n";
                if ($error_text eq ""){
                    # $toAdd = $toAdd . "OPERAZIONE OK\n";
                    $toAdd .= "OPERAZIONE OK\n";
                } else {
                    $toAdd .= $error_text."\n"
                }

                # OLD: qx(echo "$toAdd" > permissions.log);
                qx(echo "$toAdd" >> permissions.log);
            }
        }
        
    }
        
} else {
    die "Non hai passato il path \n";
}