there's nothing to do, for a user, that is. vb works via templates, and this hack modifies the user control panel templates, as well as a bit of code underneath to do the actual UPDATE and keep track of who changed their username.
here's a sample vb user table:
CREATE TABLE user (
userid int(10) unsigned NOT NULL auto_increment,
usergroupid smallint(5) unsigned NOT NULL default '0',
username varchar(50) NOT NULL default '',
password varchar(50) NOT NULL default '',
email varchar(50) NOT NULL default '',
styleid smallint(5) unsigned NOT NULL default '0',
parentemail varchar(50) NOT NULL default '',
coppauser smallint(6) NOT NULL default '0',
homepage varchar(100) NOT NULL default '',
icq varchar(20) NOT NULL default '',
aim varchar(20) NOT NULL default '',
yahoo varchar(20) NOT NULL default '',
signature mediumtext NOT NULL,
adminemail smallint(6) NOT NULL default '0',
showemail smallint(6) NOT NULL default '0',
invisible smallint(6) NOT NULL default '0',
usertitle varchar(250) NOT NULL default '',
customtitle smallint(6) NOT NULL default '0',
joindate int(10) unsigned NOT NULL default '0',
cookieuser smallint(6) NOT NULL default '0',
daysprune smallint(6) NOT NULL default '0',
lastvisit int(10) unsigned NOT NULL default '0',
lastactivity int(10) unsigned NOT NULL default '0',
lastpost int(10) unsigned NOT NULL default '0',
posts smallint(5) unsigned NOT NULL default '0',
timezoneoffset varchar(4) NOT NULL default '',
emailnotification smallint(6) NOT NULL default '0',
buddylist mediumtext NOT NULL,
ignorelist mediumtext NOT NULL,
pmfolders mediumtext NOT NULL,
receivepm smallint(6) NOT NULL default '0',
emailonpm smallint(6) NOT NULL default '0',
pmpopup smallint(6) NOT NULL default '0',
avatarid smallint(6) NOT NULL default '0',
options smallint(6) NOT NULL default '15',
birthday date NOT NULL default '0000-00-00',
maxposts smallint(6) NOT NULL default '-1',
startofweek smallint(6) NOT NULL default '1',
ipaddress varchar(20) NOT NULL default '',
referrerid int(10) unsigned NOT NULL default '0',
nosessionhash smallint(6) NOT NULL default '0',
inforum smallint(5) unsigned NOT NULL default '0',
receivebulletin smallint(5) unsigned NOT NULL default '1',
receivebulletin_type smallint(5) unsigned NOT NULL default '1',
starlevel varchar(5) NOT NULL default '0',
starimg varchar(25) NOT NULL default '0',
rooms varchar(128) NOT NULL default '',
reg_time int(11) NOT NULL default '0',
gender tinyint(1) NOT NULL default '0',
PRIMARY KEY (userid),
KEY usergroupid (usergroupid),
KEY username (username),
KEY inforum (inforum),
KEY referrerid (referrerid)
) TYPE=MyISAM;
and a sample vb post table:
CREATE TABLE post (
postid int(10) unsigned NOT NULL auto_increment,
threadid int(10) unsigned NOT NULL default '0',
username varchar(50) NOT NULL default '',
userid int(10) unsigned NOT NULL default '0',
title varchar(100) NOT NULL default '',
dateline int(10) unsigned NOT NULL default '0',
attachmentid smallint(5) unsigned NOT NULL default '0',
pagetext longtext NOT NULL,
allowsmilie smallint(6) NOT NULL default '0',
showsignature smallint(6) NOT NULL default '0',
ipaddress varchar(16) NOT NULL default '',
iconid smallint(5) unsigned NOT NULL default '0',
visible smallint(6) NOT NULL default '0',
edituserid int(10) unsigned NOT NULL default '0',
editdate int(10) unsigned NOT NULL default '0',
editreason varchar(200) NOT NULL default '',
PRIMARY KEY (postid),
KEY iconid (iconid),
KEY userid (userid),
KEY threadid (threadid,userid)
) TYPE=MyISAM;