home *** CD-ROM | disk | FTP | other *** search
- #!/usr/bin/perl
- #
- # Script for updating the fileshares of GO
- #
- ## TODO REWRITE THIS SCRIPT - USE PHP !!!
-
- use POSIX;
-
- # Fork once and let the parent exit.
- my $pid = fork;
- exit if $pid;
- die "Couldn't fork: $!" unless defined($pid);
-
- # Dissociate from the controlling terminal that started us and stop being
- # part of whatever process group we had been a member of.
- POSIX::setsid()
- or die "Can't start a new session: $!";
-
-
- # Connecting to the database...
- use DBI;
- my $database = "groupoffice";
- $user = "root";
- $pw = "letmein";
- my $dbh = DBI -> connect("DBI:mysql:$database", $user, $pw);
- die "Can't connect: $DBI::errstr\n" unless (defined $dbh);
-
- # Open the pipe...
- #$fifo = '/var/log/dav/fifo.log';
- #sysopen(FIFO, $fifo, O_RDONLY) or die "Can't open $fifo: $!";
-
-
- # Logfile
- $logfile = '/var/www/groupoffice/log/davpl.log';
-
-
- # Reading the pipe...
- #while ($line = <FIFO>) {
- while ($line = <STDIN>) {
-
- # Splitting the input...
- @felder = split(/ /,$line);
- ##print "User: @felder[0] Action: @felder[1] Directory: @felder[2]\n";
- $user = @felder[0];
- $action = @felder[1];
- $directory = @felder[2];
- $freigaben = "/dav/$user/freigaben"; $equal = 0; if ( $freigaben eq $directory ) { $equal = 1; }
- ##print "dir: #$directory# freigaben: #$freigaben# Equal? $equal\n";
- $necessary = 1;
-
- # The NOTMOVEABLE Sharedirectory was renamed...
- if ( $action =~ /MOVE/ && $equal ) {
-
- ##print " The Sharedirectory must not be renamed...\n"; $count = 1;
- # Next Entry; There should be the new Directory-Name
- do {
- ##sysopen(FIFO_MOVED, $fifo, O_RDONLY) or die "Can't open $fifo: $!";
- @new_fields = split(/ /,<STDIN>);
- ##close FIFO_MOVED;
- ##print " User: @new_fields[0] Action: @new_fields[1] Directory: @new_fields[2]\n";
-
- $newfields_user = @new_fields[0];
- ##print " The $count.Line after is being checked...\n"; $count++;
- } while ( $user != $newfields_user );
-
- ##print " Move /var@new_fields[2] back to /var@felder[2]... \n";
- system "test -d /var@new_fields[2] && mv /var@new_fields[2] /var@felder[2]";
-
- open(LOG, ">>$logfile") or die "Can't write to Logfile..."; $date = `date`;
- print LOG "Moved ShareDir /var@new_fields[2] back to /var@felder[2] - $newfields_user - $date";
- close LOG;
-
- $necessary = 0;
- }
-
-
- # Something was renamed/moved, maybe a share!?
- if ( $line =~ /MOVE/ && $necessary ) {
-
- ##print " Something was renamed/moved, maybe a share!?\n";
- # Getting the Shares from the database...
- my $sth = $dbh->prepare(q{SELECT path FROM fsShares}) or die "Can't prepare the query: " . $dbh->errstr . "\n";
- $sth->execute or die "Can't execute the query: " . $dbh->errstr . "\n";
- $i = 0;
- while (my $ref = $sth->fetchrow_arrayref) {
- #...and put it into an array!
- @shares[$i] = $ref->[0];
- $i++;
- }
- $sth->finish;
-
- # If the User has permission to delete/rename the Folder...
- ##if (@felder != "-") { ($old_go_sharedir = @felder[2]) =~ s#dav/@felder[0]/freigaben#var/www/groupoffice/writeable#; }
- if (@felder != "-") { ($old_go_sharedir = @felder[2]) =~ s#dav#var/www/groupoffice/writeable#; }
- $old_share = substr($old_go_sharedir, rindex($old_go_sharedir, "writeable/") + 10, length($old_go_sharedir));
-
- # Look if the directory is a share...
- $i = 0; $if_share = 0;
- ##print " Share to check: $old_go_sharedir\n";
- while ( @shares[$i] ) {
- if ($old_go_sharedir =~ /@shares[$i]/) {$if_share = 1};
- $i++;
- }
- ##print(" Is it a share? $if_share\n");
-
- if ( $if_share ) {
-
- ##print " What is the new name of the directory?\n"; $count = 1;
- do {
- ## TODO : FLAG SETZEN !!! ABCHECKEN ...
- ##sysopen(FIFO_MOVED, $fifo, O_RDONLY) or die "Can't open $fifo: $!";
- @new_fields = split(/ /,<STDIN>);
- ##close FIFO_MOVED;
- ##print " User: @new_fields[0] Action: @new_fields[1] Directory: @new_fields[2]\n";
-
- ##print " The $count.Line after is being checked...\n"; $count++;
- $newfields_user = @new_fields[0];
- } while ( $user != $newfields_user );
-
- ##($new_go_sharedir = @new_fields[2]) =~ s#dav/@new_fields[0]/freigaben#var/www/groupoffice/writeable#;
- ($new_go_sharedir = @new_fields[2]) =~ s#dav#var/www/groupoffice/writeable#;
- $new_share = substr($new_go_sharedir, rindex($new_go_sharedir, "writeable/") + 10, length($new_go_sharedir));
-
- # Update the Sharename in the database
- my $mvd = $dbh->prepare(q{UPDATE fsShares SET path = ? WHERE path = ? })
- or die "Can't prepare the query: " . $dbh->errstr . "\n";
- $mvd->execute($new_go_sharedir, $old_go_sharedir) or die "Can't execute the query: " . $dbh->errstr . "\n";
- $mvd->finish;
-
- #Rename the softlinks in the sharing-folders of each linker...
- system "grep Linkers $new_go_sharedir/.htaccess > linkers";
- open (ACCESS, "< linkers") or die "Can't open accessfile: $!";
- $linkerliste = <ACCESS>; close ACCESS; system "rm linkers"; $j = 1;
- @linkers = split(/ /,$linkerliste);
-
- ##print " Move $old_go_sharedir to $new_go_sharedir... \n";
- system "test -d $old_go_sharedir && mv $old_go_sharedir $new_go_sharedir";
-
- open(LOG, ">>$logfile") or die "Can't write to Logfile..."; $date = `date`;
- print LOG "Moved $old_go_sharedir to $new_go_sharedir - $newfields_user - $date";
- close LOG;
-
- foreach (@linkers) {
- $nLinker = $_;
- if ( $nLinker =~ /#/ ) {
- } else {
-
- $old_dav = "/var/dav/$nLinker/freigaben/$old_share";
- $new_dav = "/var/dav/$nLinker/freigaben/$new_share";
-
- system "test -h $new_dav && rm $new_dav && ln -s $new_go_sharedir $new_dav";
- system "test -h $old_dav && rm $old_dav && ln -s $new_go_sharedir $new_dav";
-
- $j++;
- }
- }
- }
- }
- ##print "Checked the Line... \n";
- }
-
- # Closing all connections...
- #close FIFO;
- $dbh->disconnect;
-