ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/JSOC/proj/util/scripts/ckdbpass.pl
Revision: 1.2
Committed: Wed Jul 31 23:44:27 2013 UTC (10 years, 1 month ago) by arta
Content type: text/plain
Branch: MAIN
CVS Tags: Ver_8-8, Ver_8-11, Ver_8-2, Ver_8-10, Ver_8-1, Ver_8-6, Ver_LATEST, Ver_8-4, Ver_9-41, Ver_8-3, Ver_8-5, Ver_8-12, Ver_8-7, Ver_9-5, Ver_9-4, Ver_9-3, Ver_9-2, Ver_9-1, Ver_9-0, HEAD
Changes since 1.1: +1 -1 lines
Log Message:
Update the exe path for ActiveState updates.

File Contents

# Content
1 #!/home/jsoc/bin/linux_x86_64/activeperl
2
3 use strict;
4 use warnings;
5 use File::Basename;
6 use FindBin qw($Bin);
7 use DBI;
8 use DBD::Pg;
9 use lib "$Bin/../../../base/libs/perl";
10 use Data::Dumper;
11 use drmsArgs;
12 use drmsRunProg;
13
14 # Arguments
15 use constant kArgDbname => "dbname";
16 use constant kArgDbhost => "dbhost";
17 use constant kArgDbport => "dbport";
18 use constant kArgDbuser => "dbuser";
19 use constant kArgPword => "password";
20 use constant kOptDoit => "doit";
21
22 # Return values
23 use constant kRetSuccess => 0;
24 use constant kRetInvalidArgs => 1;
25 use constant kRetDbconnect => 2;
26 use constant kRetDbQuery => 3;
27
28 my($argsinH);
29 my($optsinH);
30 my(@args);
31 my($opts);
32 my($dsn);
33 my($dbh);
34 my($dbname); # name of the db instance to connect to
35 my($dbhost); # name of the db host on which the db instance resides
36 my($dbport); # port on $dbhost through which connections are made
37 my($dbuser); # database user name (to log-in as)
38 my($pass); # the password to test
39 my($doit); # If set, then modify database
40 my($stmnt);
41 my($rows);
42 my(@rowarr);
43 my($tstdbh);
44 my($user);
45 my($rv);
46
47 $rv = &kRetSuccess;
48
49 # Collect arguments
50 $argsinH =
51 {
52 &kArgDbname => 's',
53 &kArgDbhost => 's',
54 &kArgDbport => 's',
55 &kArgDbuser => 's',
56 &kArgPword => 's'
57 };
58
59 @args = GetArgs($argsinH);
60
61 $optsinH =
62 {
63 &kOptDoit => 'noval'
64 };
65
66 $opts = GetOpts($optsinH);
67
68 if (@args)
69 {
70 ($dbname, $dbhost, $dbport, $dbuser, $pass) = @args;
71
72 $doit = 0;
73 if (defined($opts))
74 {
75 $doit = $opts->Get(&kOptDoit);
76 if (!defined($doit))
77 {
78 $doit = 0;
79 }
80 }
81
82 $dsn = "dbi:Pg:dbname=$dbname;host=$dbhost;port=$dbport";
83 $dbh = DBI->connect($dsn, $dbuser, '', {AutoCommit => 0}); # will need to put pass in .pg_pass
84
85 if (defined($dbh))
86 {
87 # Get a list of all db users
88 $stmnt = "SELECT rolname FROM pg_catalog.pg_roles";
89
90 $rows = $dbh->selectall_arrayref($stmnt, undef);
91 if (NoErr($rows, \$dbh, $stmnt))
92 {
93 @rowarr = @$rows;
94 foreach my $row (@rowarr)
95 {
96 $user = $row->[0];
97
98 # Try to login as $user.
99 $tstdbh = DBI->connect($dsn, $user, $pass, {AutoCommit => 0, PrintError => 0});
100 if (defined($tstdbh))
101 {
102 print "!!! User $user has bad password '$pass' !!!\n";
103 $tstdbh->rollback();
104 }
105 }
106 }
107 else
108 {
109 print STDERR "Unable to obtain user names from db.\n";
110 $rv = &kRetDbquery;
111 }
112
113 if ($rv == &kRetSuccess && $doit)
114 {
115 # Commit the db changes.
116 print "Committing changes.\n";
117 $dbh->commit();
118 }
119 else
120 {
121 print "Rolling back changes, error code $rv.\n";
122 $dbh->rollback();
123 }
124 }
125 else
126 {
127 print STDERR "Unable to connect to db to get user names.\n";
128 $rv = &kRetDbconnect;
129 }
130
131 exit($rv);
132 }
133
134 sub GetArgs
135 {
136 my($argsinH) = @_;
137 my($args);
138 my($arg);
139 my(@rv);
140
141 $args = new drmsArgs($argsinH, 1);
142
143 if (defined($args))
144 {
145 $arg = $args->Get(&kArgDbname);
146 if (defined($arg))
147 {
148 push(@rv, $arg);
149 $arg = $args->Get(&kArgDbhost);
150 if (defined($arg))
151 {
152 push(@rv, $arg);
153 $arg = $args->Get(&kArgDbport);
154 if (defined($arg))
155 {
156 push(@rv, $arg);
157 $arg = $args->Get(&kArgDbuser);
158 if (defined($arg))
159 {
160 push(@rv, $arg);
161 $arg = $args->Get(&kArgPword);
162 if (defined($arg))
163 {
164 push(@rv, $arg);
165 }
166 }
167 }
168 }
169 }
170 }
171
172 return @rv;
173 }
174
175 sub GetOpts
176 {
177 my($argsinH) = @_;
178 my($rv);
179
180 $rv = new drmsArgs($optsinH, 0);
181 }
182
183 sub NoErr
184 {
185 my($rv) = $_[0];
186 my($dbh) = $_[2];
187 my($stmnt) = $_[2];
188 my($ok) = 1;
189
190 if (!defined($rv) || !$rv)
191 {
192 if (defined($$dbh) && defined($$dbh->err))
193 {
194 print STDERR "Error " . $$dbh->errstr . ": Statement '$stmnt' failed.\n";
195 }
196
197 $ok = 0;
198 }
199
200 return $ok;
201 }
202
203 sub ExeStmnt
204 {
205 my($dbh, $stmnt, $doit, $printit, $diag) = @_;
206 my($rsp);
207 my($res);
208 my($rv);
209
210 $rv = &kRetSuccess;
211
212 if ($doit)
213 {
214 if ($printit)
215 {
216 print $diag;
217 }
218
219 $res = $dbh->do($stmnt);
220 if (!NoErr($res, $dbh, $stmnt))
221 {
222 $rv = &kRetDbQuery;
223 }
224 }
225 else
226 {
227 print $diag;
228 }
229
230 return $rv;
231 }