Skip to content

Commit 44e210c

Browse files
committed
Load libwin32-0.16 into trunk.
1 parent 20650f5 commit 44e210c

File tree

3 files changed

+87
-38
lines changed

3 files changed

+87
-38
lines changed

Changes

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
Revision history for Perl extension Win32::NetAdmin.
22

3+
0.07 Mon May 22 21:22:33 2000
4+
- support for passing Unicode strings to methods (thanks to
5+
Doug Lankshear <[email protected]>)
6+
37
0.062 Wed Aug 4 7:51:33 1999
48
- added docs to EXAMPLE
59

NetAdmin.pm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ package Win32::NetAdmin;
55
#Written by [email protected]
66
#
77

8-
$VERSION = '0.062';
8+
$VERSION = '0.07';
99

1010
require Exporter;
1111
require DynaLoader;

NetAdmin.xs

Lines changed: 82 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
#include "perl.h"
3434
#include "XSUB.h"
3535

36+
#include "../ppport.h"
37+
3638
#define RETURNRESULT(x) if ((x)){ XST_mYES(0); }\
3739
else { XST_mNO(0); }\
3840
XSRETURN(1)
@@ -575,6 +577,7 @@ WCTMB(LPWSTR lpwStr, LPSTR lpStr, int size)
575577
return WideCharToMultiByte(CP_ACP,NULL,lpwStr,-1,lpStr,size,NULL,NULL);
576578
}
577579

580+
/*
578581
void AddStringToHV(HV *hv, char *key, char *value)
579582
{
580583
char buffer[256];
@@ -598,27 +601,57 @@ void AddDwordToHV(HV *hv, char *key, DWORD value )
598601
hv_store(hv, key, strlen(key), newSVnv((double)value), 0);
599602
return;
600603
}
604+
*/
605+
606+
DWORD GetAccountSIDA(LPCSTR lpSystemName, LPCSTR lpAccountName, PSID *pSid)
607+
{
608+
DWORD sidSize;
609+
char refDomain[256];
610+
DWORD refDomainSize;
611+
DWORD returnValue;
612+
SID_NAME_USE snu;
613+
614+
sidSize = 0;
615+
refDomainSize=255;
616+
LookupAccountNameA(lpSystemName, lpAccountName, *pSid,
617+
&sidSize, refDomain,
618+
&refDomainSize, &snu);
619+
returnValue = GetLastError();
620+
if(ERROR_INSUFFICIENT_BUFFER != returnValue)
621+
return returnValue;
622+
623+
*pSid = (PSID)malloc(sidSize);
624+
refDomainSize = 255;
625+
if (!LookupAccountNameA(lpSystemName, lpAccountName, *pSid, &sidSize,
626+
refDomain, &refDomainSize, &snu))
627+
{
628+
free(*pSid);
629+
return GetLastError();
630+
}
631+
632+
return ERROR_SUCCESS;
633+
}
601634

602-
DWORD GetAccountSID(LPCTSTR lpSystemName, LPCTSTR lpAccountName, PSID *pSid)
635+
DWORD GetAccountSIDW(LPCWSTR lpSystemName, LPCWSTR lpAccountName, PSID *pSid)
603636
{
604637
DWORD sidSize;
605-
TCHAR refDomain[256];
638+
WCHAR refDomain[256];
606639
DWORD refDomainSize;
607640
DWORD returnValue;
608641
SID_NAME_USE snu;
609642

610643
sidSize = 0;
611644
refDomainSize=255;
612-
LookupAccountName(lpSystemName, lpAccountName, *pSid,
645+
LookupAccountNameW(lpSystemName, lpAccountName, *pSid,
613646
&sidSize, refDomain,
614-
&refDomainSize, &snu );
647+
&refDomainSize, &snu);
615648
returnValue = GetLastError();
616-
if(ERROR_INSUFFICIENT_BUFFER != returnValue )
649+
if(ERROR_INSUFFICIENT_BUFFER != returnValue)
617650
return returnValue;
618651

619652
*pSid = (PSID)malloc(sidSize);
620653
refDomainSize = 255;
621-
if (!LookupAccountName (lpSystemName, lpAccountName, *pSid, &sidSize,
654+
if (!LookupAccountNameW(lpSystemName, lpAccountName, *pSid, &sidSize,
622655
refDomain, &refDomainSize, &snu))
623656
{
624657
free(*pSid);
@@ -654,7 +687,7 @@ XS(XS_NT__NetAdmin_GetDomainController)
654687
AllocWideName((char*)SvPV(ST(1),n_a), lpwDomain);
655688
lastError = NetGetDCName(lpwServer, lpwDomain, (LPBYTE *)&lpwPrimaryDC);
656689
if (lastError == 0) {
657-
WCTMB(lpwPrimaryDC, buffer, sizeof(buffer));
690+
W2AHELPER(lpwPrimaryDC, buffer, sizeof(buffer));
658691
SETPV(2, buffer);
659692
NetApiBufferFree(lpwPrimaryDC);
660693
}
@@ -679,7 +712,7 @@ XS(XS_NT__NetAdmin_GetAnyDomainController)
679712
AllocWideName((char*)SvPV(ST(1),n_a), lpwDomain);
680713
lastError = NetGetAnyDCName(lpwServer, lpwDomain, (LPBYTE *)&lpwAnyDC);
681714
if (lastError == 0) {
682-
WCTMB(lpwAnyDC, buffer, sizeof(buffer));
715+
W2AHELPER(lpwAnyDC, buffer, sizeof(buffer));
683716
SETPV(2, buffer);
684717
NetApiBufferFree(lpwAnyDC);
685718
}
@@ -775,16 +808,16 @@ XS(XS_NT__NetAdmin_UserGetAttributes)
775808
AllocWideName((char*)SvPV(ST(1),n_a), lpwUser);
776809
lastError = NetUserGetInfo(lpwServer, lpwUser, 1, (LPBYTE*)&puiUser);
777810
if (lastError == 0) {
778-
WCTMB(puiUser->usri1_password, buffer, sizeof(buffer));
811+
W2AHELPER(puiUser->usri1_password, buffer, sizeof(buffer));
779812
SETPV(2, buffer);
780813
SETIV(3, puiUser->usri1_password_age);
781814
SETIV(4, puiUser->usri1_priv);
782-
WCTMB(puiUser->usri1_home_dir, buffer, sizeof(buffer));
815+
W2AHELPER(puiUser->usri1_home_dir, buffer, sizeof(buffer));
783816
SETPV(5, buffer);
784-
WCTMB(puiUser->usri1_comment, buffer, sizeof(buffer));
817+
W2AHELPER(puiUser->usri1_comment, buffer, sizeof(buffer));
785818
SETPV(6, buffer);
786819
SETIV(7, puiUser->usri1_flags);
787-
WCTMB(puiUser->usri1_script_path, buffer, sizeof(buffer));
820+
W2AHELPER(puiUser->usri1_script_path, buffer, sizeof(buffer));
788821
SETPV(8, buffer);
789822
NetApiBufferFree(puiUser);
790823
}
@@ -914,7 +947,7 @@ XS(XS_NT__NetAdmin_GetUsers)
914947
if (lastError != 0 && lastError != ERROR_MORE_DATA)
915948
break;
916949
for (index = 0; index < entriesRead; ++index) {
917-
WCTMB(pwzUsers[index].usri0_name, buffer, sizeof(buffer));
950+
W2AHELPER(pwzUsers[index].usri0_name, buffer, sizeof(buffer));
918951
av_push((AV*)sv, newSVpv(buffer, 0));
919952
}
920953
NetApiBufferFree(pwzUsers);
@@ -932,8 +965,8 @@ XS(XS_NT__NetAdmin_GetUsers)
932965
if (lastError != 0 && lastError != ERROR_MORE_DATA)
933966
break;
934967
for (index = 0; index < entriesRead; ++index) {
935-
WCTMB(pwzUsers10[index].usri10_name, buffer, sizeof(buffer));
936-
WCTMB(pwzUsers10[index].usri10_full_name, buffer1,
968+
W2AHELPER(pwzUsers10[index].usri10_name, buffer, sizeof(buffer));
969+
W2AHELPER(pwzUsers10[index].usri10_full_name, buffer1,
937970
sizeof(buffer1));
938971
hv_store((HV*)sv, buffer, strlen(buffer),
939972
newSVpv(buffer1,0), 0 );
@@ -982,7 +1015,7 @@ XS(XS_NT__NetAdmin_GetTransports)
9821015
if (lastError != 0 && lastError != ERROR_MORE_DATA)
9831016
break;
9841017
for (index = 0; index < entriesRead; ++index) {
985-
WCTMB(pws[index].wkti0_transport_name, buffer,
1018+
W2AHELPER(pws[index].wkti0_transport_name, buffer,
9861019
sizeof(buffer));
9871020
av_push((AV*)sv, newSVpv(buffer, 0));
9881021
}
@@ -1010,12 +1043,12 @@ XS(XS_NT__NetAdmin_GetTransports)
10101043
"number_of_vcs",
10111044
strlen("number_of_vcs"),
10121045
newSViv((long)pws[index].wkti0_number_of_vcs), 0);
1013-
WCTMB(pws[index].wkti0_transport_name, buffer, sizeof(buffer));
1046+
W2AHELPER(pws[index].wkti0_transport_name, buffer, sizeof(buffer));
10141047
hv_store(hvTemp,
10151048
"transport_name",
10161049
strlen("transport_name"),
10171050
newSVpv((char*) buffer, strlen((char *)buffer)), 0);
1018-
WCTMB(pws[index].wkti0_transport_address,buffer1,sizeof(buffer1));
1051+
W2AHELPER(pws[index].wkti0_transport_address,buffer1,sizeof(buffer1));
10191052
hv_store(hvTemp,
10201053
"transport_address",
10211054
strlen("transport_address"),
@@ -1073,7 +1106,7 @@ XS(XS_NT__NetAdmin_LoggedOnUsers)
10731106
if (lastError != 0 && lastError != ERROR_MORE_DATA)
10741107
break;
10751108
for (index = 0; index < entriesRead; ++index) {
1076-
WCTMB(pwzUser0[index].wkui0_username, buffer, sizeof(buffer));
1109+
W2AHELPER(pwzUser0[index].wkui0_username, buffer, sizeof(buffer));
10771110
av_push((AV*)sv, newSVpv(buffer, 0));
10781111
}
10791112
NetApiBufferFree(pwzUser0);
@@ -1091,10 +1124,10 @@ XS(XS_NT__NetAdmin_LoggedOnUsers)
10911124
if (lastError != 0 && lastError != ERROR_MORE_DATA)
10921125
break;
10931126
for (index = 0; index < entriesRead; ++index) {
1094-
WCTMB(pwzUser1[index].wkui1_username, buffer, sizeof(buffer));
1095-
WCTMB(pwzUser1[index].wkui1_logon_domain, logon_domain,
1127+
W2AHELPER(pwzUser1[index].wkui1_username, buffer, sizeof(buffer));
1128+
W2AHELPER(pwzUser1[index].wkui1_logon_domain, logon_domain,
10961129
sizeof(logon_domain));
1097-
WCTMB(pwzUser1[index].wkui1_logon_server, logon_server,
1130+
W2AHELPER(pwzUser1[index].wkui1_logon_server, logon_server,
10981131
sizeof(logon_server));
10991132
sprintf(buffer1,"%s;%s;%s", buffer, logon_domain,
11001133
logon_server);
@@ -1172,7 +1205,7 @@ XS(XS_NT__NetAdmin_GroupGetAttributes)
11721205
lastError = NetGroupGetInfo(lpwServer, lpwGroup, 2,
11731206
(LPBYTE*)&pgroupInfo);
11741207
if (lastError == 0) {
1175-
WCTMB(pgroupInfo->grpi2_comment, buffer, sizeof(buffer));
1208+
W2AHELPER(pgroupInfo->grpi2_comment, buffer, sizeof(buffer));
11761209
SETPV(2, buffer);
11771210
NetApiBufferFree(pgroupInfo);
11781211
}
@@ -1386,7 +1419,7 @@ XS(XS_NT__NetAdmin_GroupGetMembers)
13861419
if (lastError != 0 && lastError != ERROR_MORE_DATA)
13871420
break;
13881421
for (index = 0; index < entriesRead; ++index) {
1389-
WCTMB(pwzGroupUsers[index].grui0_name,
1422+
W2AHELPER(pwzGroupUsers[index].grui0_name,
13901423
buffer, sizeof(buffer));
13911424
av_push((AV*)sv, newSVpv(buffer, 0));
13921425
}
@@ -1460,7 +1493,7 @@ XS(XS_NT__NetAdmin_LocalGroupGetAttributes)
14601493
AllocWideName((char*)SvPV(ST(1),n_a), lpwGroup);
14611494
lastError = NetLocalGroupGetInfo(lpwServer, lpwGroup, 1, (LPBYTE*)&pgroupInfo);
14621495
if (lastError == 0) {
1463-
WCTMB(pgroupInfo->lgrpi1_comment, buffer, sizeof(buffer));
1496+
W2AHELPER(pgroupInfo->lgrpi1_comment, buffer, sizeof(buffer));
14641497
SETPV(2, buffer);
14651498
NetApiBufferFree(pgroupInfo);
14661499
}
@@ -1605,9 +1638,19 @@ XS(XS_NT__NetAdmin_LocalGroupIsMember)
16051638
STRLEN n_a;
16061639
#if 1
16071640
PSID pSid;
1608-
lastError = GetAccountSID((LPCTSTR)SvPV(ST(0),n_a),
1609-
(LPCTSTR)SvPV(ST(2),n_a),
1610-
&pSid);
1641+
if (USING_WIDE()) {
1642+
WCHAR wSystemName[MAX_PATH+1];
1643+
WCHAR wAccountName[MAX_PATH+1];
1644+
A2WHELPER((LPCTSTR)SvPV(ST(0),n_a), wSystemName, sizeof(wSystemName));
1645+
A2WHELPER((LPCTSTR)SvPV(ST(2),n_a), wAccountName, sizeof(wAccountName));
1646+
lastError = GetAccountSIDW(wSystemName,
1647+
wAccountName,
1648+
&pSid);
1649+
}
1650+
else
1651+
lastError = GetAccountSIDA((LPCTSTR)SvPV(ST(0),n_a),
1652+
(LPCTSTR)SvPV(ST(2),n_a),
1653+
&pSid);
16111654
if(ERROR_SUCCESS != lastError)
16121655
XSRETURN_NO;
16131656

@@ -1630,6 +1673,8 @@ XS(XS_NT__NetAdmin_LocalGroupIsMember)
16301673
NetApiBufferFree(pwzMembersInfo);
16311674
} while(bReturn == FALSE &&
16321675
(lastError == ERROR_MORE_DATA || resumeHandle != 0));
1676+
1677+
free(pSid);
16331678
FreeWideName(lpwServer);
16341679
FreeWideName(lpwGroup);
16351680
#else
@@ -1695,7 +1740,7 @@ XS(XS_NT__NetAdmin_LocalGroupGetMembers)
16951740
if (lastError != 0 && lastError != ERROR_MORE_DATA)
16961741
break;
16971742
for (index = 0; index < entriesRead; ++index) {
1698-
WCTMB(pwzMembersInfo[index].lgrmi1_name, buffer,
1743+
W2AHELPER(pwzMembersInfo[index].lgrmi1_name, buffer,
16991744
sizeof(buffer));
17001745
av_push((AV*)sv, newSVpv(buffer, 0));
17011746
}
@@ -1746,7 +1791,7 @@ XS(XS_NT__NetAdmin_LocalGroupGetMembersWithDomain)
17461791
if (lastError != 0 && lastError != ERROR_MORE_DATA)
17471792
break;
17481793
for (index = 0; index < entriesRead; ++index) {
1749-
WCTMB(pwzMembersInfo[index].lgrmi2_domainandname, buffer,
1794+
W2AHELPER(pwzMembersInfo[index].lgrmi2_domainandname, buffer,
17501795
sizeof(buffer));
17511796
av_push((AV*)sv, newSVpv(buffer, 0));
17521797
}
@@ -1768,7 +1813,7 @@ XS(XS_NT__NetAdmin_LocalGroupGetMembersWithDomain)
17681813
if (lastError != 0 && lastError != ERROR_MORE_DATA)
17691814
break;
17701815
for (index = 0; index < entriesRead; ++index) {
1771-
WCTMB(pwzMembersInfo[index].lgrmi2_domainandname, buffer,
1816+
W2AHELPER(pwzMembersInfo[index].lgrmi2_domainandname, buffer,
17721817
sizeof(buffer));
17731818
sprintf(buffer1, "%d", pwzMembersInfo[index].lgrmi2_sidusage );
17741819
hv_store((HV*)sv, buffer, strlen(buffer),
@@ -1822,7 +1867,7 @@ XS(XS_NT__NetAdmin_GetServers)
18221867
if (lastError != 0 && lastError != ERROR_MORE_DATA)
18231868
break;
18241869
for (index = 0; index < entriesRead; ++index) {
1825-
WCTMB(pwzServerInfo[index].sv100_name, buffer,
1870+
W2AHELPER(pwzServerInfo[index].sv100_name, buffer,
18261871
sizeof(buffer));
18271872
av_push((AV*)sv, newSVpv(buffer, 0));
18281873
}
@@ -1844,9 +1889,9 @@ XS(XS_NT__NetAdmin_GetServers)
18441889
if (lastError != 0 && lastError != ERROR_MORE_DATA)
18451890
break;
18461891
for (index = 0; index < entriesRead; ++index) {
1847-
WCTMB(pwzServerInfo101[index].sv101_name, buffer,
1892+
W2AHELPER(pwzServerInfo101[index].sv101_name, buffer,
18481893
sizeof(buffer));
1849-
WCTMB(pwzServerInfo101[index].sv101_comment, buffer1,
1894+
W2AHELPER(pwzServerInfo101[index].sv101_comment, buffer1,
18501895
sizeof(buffer1));
18511896
hv_store((HV*)sv, buffer, strlen(buffer),
18521897
newSVpv(buffer1,0), 0 );
@@ -1897,7 +1942,7 @@ XS(XS_NT__NetAdmin_GetServerDisks)
18971942
break;
18981943
p = disks;
18991944
for (index = 0; index < entriesRead; ++index) {
1900-
WCTMB(p, buffer, sizeof(buffer));
1945+
W2AHELPER(p, buffer, sizeof(buffer));
19011946
av_push((AV*)sv, newSVpv(buffer, strlen(buffer)));
19021947
p += 3;
19031948
}
@@ -1947,7 +1992,7 @@ XS(XS_NT__NetAdmin_GetAliasFromRID)
19471992
}
19481993
if(bSuccess)
19491994
{
1950-
WCTMB(Name, buffer, sizeof(buffer));
1995+
W2AHELPER(Name, buffer, sizeof(buffer));
19511996
SETPV(2,buffer);
19521997
}
19531998
FreeWideName(lpwServer);
@@ -2032,7 +2077,7 @@ XS(XS_NT__NetAdmin_GetUserGroupFromRID)
20322077
NetApiBufferFree(umi2);
20332078
if(bSuccess)
20342079
{
2035-
WCTMB(Name, buffer, sizeof(buffer));
2080+
W2AHELPER(Name, buffer, sizeof(buffer));
20362081
SETPV(2,buffer);
20372082
}
20382083
FreeWideName(lpwServer);

0 commit comments

Comments
 (0)