Everyone knows what a great product Movable Type is. But if you find yourself in care of a Movable Type deployment that nobody seems to be able to login to with superuser privileges, it may seem pretty hopeless; if you need to perform privileged operations, especially if the installation is backended by a sleepycat, er, Oracle BerkelyDB database, the data is somewhat opaque. AFAIK, MT doesn't seem to ship with any "break glass with this little hammer if the superuser was hit by a bus" contingencies and with BerkelyDB there's no SQL command prompt; in fact, the only way to dig into it is to write some code. So I was fiddling with just such a MT-3.33 installation; I had an account but not much in the way of privileges. After opening the BerkeleyDB files with DB_File, dumping contents with Data::Dumper and going through some of the MT libraries, I found what I was looking for. Here's the Perl I hacked up to grant myself superuser privileges:
#!/usr/bin/perl use strict; use DB_File; use lib qw( /path/to/MT-3.33/lib ); use MT; use MT::Serialize; use MT::ConfigMgr; my $serializer = MT::Serialize->new(MT::ConfigMgr->instance->Serializer); my %hash; tie %hash, 'DB_File', '/path/to/MT-3.33/author.db', O_CREAT|O_RDWR, 0666, $DB_BTREE or die $!; my $data; while (my($k,$v) = each %hash) { my $rec = $serializer->unserialize($v); if (${$rec}->{'name'} eq 'Ian Kallen') { $data = ${$rec}; last; } } $data->{'is_superuser'} = 1; my $frozen = $serializer->serialize( \$data ); $hash{'12'} = $frozen; untie %hash;For other fixes to Movable Installations, consider MT-Medic. ( Oct 29 2006, 09:35:21 PM PST ) Permalink