#!/usr/bin/perl use strict; use Cwd 'abs_path'; use DBI(); my $basedir= "..."; my $socket=".../mysqld.sock"; my $database="infodb"; my $table="files"; my $sqluser= getpwuid($<); my $pass=""; $#ARGV >= 1 or die "usage: $0 [-f] ...\n" . "Adds entry to infodb database. If it exists, keywords are appended\n" . "except when -f (force) is given, when they are replaced.\n"; my ($db, $dbstring, $query, $rowref, $insertstr); my ($force, $fname, $pwd, $name, $path, $keywordstr); my @keywords; $fname= shift @ARGV; if( $fname =~ /^-/ ) { $fname =~ /^-f$/ or die "$0: Unknown option `$fname'"; $force= 1; $#ARGV >= 1 or die "$0: At least one keyword has to be given\n"; $fname= shift @ARGV; } else { $force= 0; } $fname= abs_path($fname); # print "$fname\n"; $fname =~ /^$basedir/ or die "$0: File `$fname' not in info directory\n"; -e $fname or die "$0: File `$fname' doesn't exist\n"; if( -d $fname ) { $name= "/"; $fname =~ /^$basedir(.*)/; $path= $1; } else { $fname =~ /([^\/]*$)/; $name= $1; $fname =~ /^$basedir(.*)$name/; $path= $1; $path =~ s/\/$//; } # print "path: $path; name: $name\n"; for (@ARGV) { s/,$//; } $keywordstr= join ", ", @ARGV; $dbstring= "DBI:mysql:database=$database;mysql_socket=$socket"; $db= DBI->connect( $dbstring, $sqluser, $pass ); $query= $db->prepare("select * from $table where name = '$name' and path = '$path';"); $query->execute or die "$0: Error querying database\n"; if( $query->rows ) { $rowref= $query->fetchrow_arrayref; if( $force ) { $insertstr= "update $table set keywords='$keywordstr' where name='$name' and path='$path';"; } else { $insertstr= "update $table set keywords='$$rowref[2], $keywordstr' where name='$name' and path='$path';"; } } else { $insertstr= "insert into $table values ('$name', '$path', '$keywordstr');"; } $query->finish; $query= $db->prepare($insertstr); $query->execute or die "$0: Could not insert/update database entry\n"; $query->finish; $db->disconnect;