BEGIN {
$| = 1;
require
Win32
unless
defined
&Win32::IsAdminUser
;
printf
"1..%d\n"
, Win32::IsAdminUser() ? 18 : 4;
}
END {
print
"not ok 1\n"
unless
$loaded
;}
$loaded
= 1;
print
"ok 1\n"
;
require
Win32
unless
defined
&Win32::LoginName
;
$userName
= Win32::LoginName();
print
"not "
unless
$userName
=~ /
$ENV
{
'USERNAME'
}/i;
print
"ok 2\n"
;
$dc
=
""
;
print
"# ignore test 3 failure if network has no Primary Domain Controller\n"
;
print
"ok 3\n"
;
print
"# ignore test 4 failure if network has no Primary Domain Controller\n"
;
print
"ok 4\n"
;
undef
%testUserInfo3
;
exit
unless
Win32::IsAdminUser();
$testUserName
=
"qwerty$$"
;
$testUserFlags
=( UF_ACCOUNTDISABLE() |
UF_NORMAL_ACCOUNT() |
UF_SCRIPT() );
@testLogonHours
=( 255 ) x 21;
%testUserInfo3
=(
'name'
=>
$testUserName
,
'password'
=>
"password"
,
'passwordAge'
=> 0,
'priv'
=> USER_PRIV_USER(),
'homeDir'
=>
$ENV
{
'TEMP'
},
'comment'
=>
"What do you expect for sixpence"
,
'flags'
=>
$testUserFlags
,
'scriptPath'
=>
""
,
'authFlags'
, => 0,
'fullName'
, =>
"Temp. user for AccNT module testing - delete me"
,
'usrComment'
, =>
"Usr Comment!"
,
'parms'
, =>
""
,
'workstations'
, =>
""
,
'lastLogon'
, => 0,
'lastLogoff'
, => 0,
'acctExpires'
, => -1,
'maxStorage'
, => -1,
'unitsPerWeek'
, => 0,
'logonHours'
, => \
@testLogonHours
,
'badPwCount'
, => 0,
'numLogons'
, => 0,
'logonServer'
, =>
""
,
'countryCode'
, => 0,
'codePage'
, => 0,
'userId'
=> 0,
'primaryGroupId'
=> 513,
'profile'
=>
""
,
'homeDirDrive'
=>
""
,
'passwordExpired'
=>0
);
$fie
=0;
unless
(UserAdd(
$dc
, 3, \
%testUserInfo3
,
$fie
)) {
print
<<EOM;
not ok 5
Can't add a user so there really isn't any point in continuing...
EOM
exit
;
}
print
"ok 5\n"
;
print
"not "
unless
UserGetInfo(
$dc
,
$testUserName
, 3, \
%userInfo3
);
print
"ok 6\n"
;
undef
%userInfo3
;
$currentUserName
=
$testUserName
;
$testUserName
.=
"renamed"
;
%testUserInfo0
=(
'name'
=>
$testUserName
);
print
"not "
unless
UserSetInfo(
$dc
,
$currentUserName
, 0,
\
%testUserInfo0
,
$fie
);
print
"ok 7\n"
;
print
"not "
unless
UserGetInfo(
$dc
,
$testUserName
, 3, \
%testLogonHours
);
print
"ok 8\n"
;
undef
%testLogonHours
;
print
"not "
unless
UserEnum(
$dc
, \
@users
);
print
"ok 9\n"
;
print
"not "
unless
UserEnum(
$dc
, \
@users
, FILTER_NORMAL_ACCOUNT());
print
"ok 10\n"
;
print
"not "
unless
LocalGroupEnum(
""
, \
@localGroups
);
print
"ok 11\n"
;
$Administrators
=
$localGroups
[0];
$Guests
=
$localGroups
[2];
undef
@localGroups
;
sub
GroupName {
my
(
$wmi
,
$name
,
$sid
)=
@_
;
my
$account
=
$wmi
->ExecQuery(
<<QUERY);
SELECT * FROM Win32_Group
WHERE Domain = '$name' AND SID = '$sid'
QUERY
return
Win32::OLE::Enum->new(
$account
)->Next->Name;
}
my
$name
= Win32::NodeName;
my
$wmi
= Win32::OLE->GetObject(
"winmgmts:\\\\$name\\root\\cimv2"
);
if
(
$wmi
) {
$Administrators
= GroupName(
$wmi
,
$name
,
"S-1-5-32-544"
);
$Guests
= GroupName(
$wmi
,
$name
,
"S-1-5-32-546"
);
}
}
print
"not "
unless
LocalGroupGetInfo(
$dc
,
$Administrators
, 1,
\
%localGroupInfo
);
print
"ok 12\n"
;
undef
%localGroupInfo
;
$localGroupName
=
"##Freds"
;
%localGroup
=(
'name'
=>
$localGroupName
,
'comment'
=>
'All the freds'
);
print
"not "
unless
LocalGroupAdd(
""
, 1, \
%localGroup
,
$fie
);
print
"ok 13\n"
;
@localGroupMembers
=(
$testUserName
,
$Guests
);
print
"not "
unless
LocalGroupAddMembers(
""
,
$localGroupName
,
\
@localGroupMembers
);
print
"ok 14\n"
;
print
"not "
unless
LocalGroupGetInfo(
""
,
$localGroupName
, 1, \
%lgInfo
);
print
"ok 15\n"
;
print
"not "
unless
LocalGroupGetMembers(
""
,
$localGroupName
, \
@lgMembers
);
print
"ok 16\n"
;
undef
%lgMembers
;
@localGroupDelMembers
=(
$Guests
);
print
"not "
unless
LocalGroupDelMembers(
""
,
$localGroupName
,
\
@localGroupDelMembers
);
print
"ok 17\n"
;
%lgInfo
=(
'name'
=>
$localGroupName
,
'comment'
=>
'What-else'
);
print
"not "
unless
LocalGroupSetInfo(
""
,
$localGroupName
, 1, \
%lgInfo
,
$fie
);
print
"ok 18\n"
;
print
"not "
unless
LocalGroupDel(
""
,
$localGroupName
);
print
"not "
unless
UserDel(
$dc
,
$testUserName
);