1 |
#!/usr/bin/perl -w |
2 |
|
3 |
# perl script to add users to Document Manager's users table in RDBMS |
4 |
|
5 |
use Digest::MD5 qw(md5_hex); |
6 |
use DBI; |
7 |
|
8 |
# php dbi to Perl dbi translation of database drivers (DBDs) |
9 |
my %dbi_trans = ( |
10 |
"pgsql" => "Pg", |
11 |
"mysql" => "mysql", |
12 |
"odbc" => "ODBC", |
13 |
"oracle" => "Oracle" |
14 |
); |
15 |
|
16 |
my $login = shift @ARGV; |
17 |
|
18 |
if (defined $login && $login eq "-h") { |
19 |
print "Usage: $0 [login] [full name] [password] [email]\n"; |
20 |
exit; |
21 |
} |
22 |
|
23 |
while (! $login) { |
24 |
print "login: "; |
25 |
$login=<STDIN>; chomp $login; |
26 |
} |
27 |
|
28 |
my $fullname = shift @ARGV; |
29 |
while (! $fullname) { |
30 |
print "full name: "; |
31 |
$fullname=<STDIN>; chomp $fullname; |
32 |
} |
33 |
|
34 |
my $passwd = shift @ARGV; |
35 |
if (! $passwd) { |
36 |
print "password [auth_pop3]: "; |
37 |
$passwd=<STDIN>; chomp $passwd; |
38 |
if ($passwd eq "") { |
39 |
$passwd="auth_pop3"; |
40 |
} |
41 |
} |
42 |
if (substr($passwd,0,5) ne "auth_") { |
43 |
$passwd=md5_hex($login.$passwd); |
44 |
} |
45 |
|
46 |
my $email = shift @ARGV; |
47 |
while (! $email || $email !~ /\w@\w/) { |
48 |
print "e-mail: "; |
49 |
$email=<STDIN>; chomp $email; |
50 |
print "e-mail address needs to have user\@domain for auth_pop3", |
51 |
" to work!\n" if ($email !~ /\w@\w/); |
52 |
} |
53 |
|
54 |
my $conffile=".docman.conf"; |
55 |
|
56 |
while (! -e $conffile) { |
57 |
print "docman conf file [docman.conf]: "; |
58 |
$conffile=<STDIN>; chomp $conffile; |
59 |
if ($conffile eq "") { |
60 |
$conffile="docman.conf"; |
61 |
} |
62 |
} |
63 |
|
64 |
my $dbi_sql; # this will be filled from docman's config file |
65 |
my $dbi; # this will be filled with connect string |
66 |
|
67 |
open(CONF,$conffile) || die "open $conffile: $!"; |
68 |
while(<CONF>) { |
69 |
chomp; |
70 |
if (/(\$dbi[^;]+;)/i) { |
71 |
eval $1; |
72 |
} |
73 |
} |
74 |
close(CONF); |
75 |
|
76 |
if (! defined $dbi) { |
77 |
print STDERR "ERROR: can't find DBI connect docman conf file, aborting!\n"; |
78 |
exit 1; |
79 |
} else { |
80 |
($php_dbd,$db,$db_login,$db_passwd) = split(/:/,$dbi); |
81 |
} |
82 |
|
83 |
if (! defined $dbi_sql) { |
84 |
print STDERR "ERROR: can't find SQL query in docman conf file, aborting!\n"; |
85 |
exit 1; |
86 |
} else { |
87 |
if ($dbi_sql =~ m/select\s+(.+)\s+from\s+(.+)/i) { |
88 |
($cols,$table) = ($1,$2); |
89 |
} else { |
90 |
print STDERR "ERROR: can't parse SQL query '$dbi_sql', aborting!\n"; |
91 |
exit 1; |
92 |
} |
93 |
} |
94 |
|
95 |
my $dbh = DBI->connect("DBI:".$dbi_trans{$php_dbd}.":dbname=$db","$db_login","$db_passwd") || die $DBI::errstr; |
96 |
my $sql = "insert into $table ($cols) values ('$login','$fullname','$passwd','$email')"; |
97 |
$dbh->do("$sql") || die $dbh->errstr(); |
98 |
$dbh->disconnect; |
99 |
|