package org.ovirt.engine.core.utils.jwin32;
import com.sun.jna.WString;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import org.ovirt.engine.core.compat.*;
/**
* Unit test for simple App.
*/
public class AppTest {
private static boolean isRunningOnWindows() {
String osName = System.getProperty("os.name");
return osName.contains("Windows");
}
/**
* Rigourous Test :-)
*/
/*
* public void testApp() { IntByReference i = new IntByReference();
*
* assertTrue ( advapi32.INSTANCE.LogonUserA ( "TestUser", "", "TestUser", 2, 0, i ) );
*
* assertTrue ( advapi32.INSTANCE.LogonUserW ( new WString("TestUser"), new WString(""), new WString("TestUser"), 2,
* advapi32.LOGON32_PROVIDER_DEFAULT, i ) ); }
*/
public static String getAccountSid(String account) {
if (!isRunningOnWindows()) {
System.out.println("getAccountSid should be run on windows");
return null;
}
byte[] sid;
String retSID = "";
IntByReference cbSid;
PointerByReference peUse;
IntByReference cchReferencedDomainName;
PointerByReference stringSID = new PointerByReference();
char[] referencedDomainName;
cbSid = new IntByReference(jwin32.SECURITY_MAX_SID_SIZE);
sid = new byte[cbSid.getValue()];
cchReferencedDomainName = new IntByReference(100);
referencedDomainName = new char[cchReferencedDomainName.getValue()];
peUse = new PointerByReference();
if (!jwin32.advapi32.LookupAccountNameA(
"",
account,
sid,
cbSid,
referencedDomainName,
cchReferencedDomainName,
peUse
)) {
System.out.println("Error");
}
if (!jwin32.advapi32.ConvertSidToStringSidA(sid, stringSID)) {
// ERROR
System.out.println("!ERROR=!" + jwin32.kernel32.GetLastError() + " cbSid=" + cbSid.getValue());
}
retSID = stringSID.getValue().getString(0, false);
jwin32.kernel32.LocalFree(stringSID.getValue());
return (retSID);
}
@org.junit.Test
public void testGroupsEnum() throws UnsupportedEncodingException {
if (!isRunningOnWindows()) {
System.out.println("testGroupsEnum should be run on windows");
return;
}
int nStatus;
PointerByReference pGI0 = new PointerByReference();
PointerByReference pGI1 = new PointerByReference();
IntByReference nEntriesRead = new IntByReference();
IntByReference nTotalEntries = new IntByReference();
IntByReference nResumeHandle = new IntByReference();
PrintStream out = new PrintStream(System.out, true, "UTF-8");
try {
nStatus = jwin32.netapi32.NetLocalGroupEnum(
new WString(""),
0,
pGI0,
jwin32.MAX_PREFERRED_LENGTH,
nEntriesRead,
nTotalEntries,
null
);
System.out.println("NetGroupEnum return=" + nStatus + " nEntriesRead=" + nEntriesRead.getValue());
if (nStatus == jwin32.NERR_Success ||
nStatus == jwin32.ERROR_MORE_DATA) {
LOCAL_GROUP_INFO_0 groupsArr = new LOCAL_GROUP_INFO_0(pGI0.getValue());
LOCAL_GROUP_INFO_0[] groups = (LOCAL_GROUP_INFO_0[]) groupsArr.toArray(nEntriesRead.getValue());
for (LOCAL_GROUP_INFO_0 group : groups) {
String retSID;
PointerByReference group_sid;
PointerByReference stringSID = new PointerByReference();
IntByReference nSIDSize = new IntByReference();
out.println("!Group name=" + group.lgrpi0_name.toString() + "!");
out.println("! sid=!" + getAccountSid(group.lgrpi0_name.toString()));
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public static byte[] toByta(long data) {
return new byte[] {
(byte) ((data >> 56) & 0xff),
(byte) ((data >> 48) & 0xff),
(byte) ((data >> 40) & 0xff),
(byte) ((data >> 32) & 0xff),
(byte) ((data >> 24) & 0xff),
(byte) ((data >> 16) & 0xff),
(byte) ((data >> 8) & 0xff),
(byte) ((data >> 0) & 0xff), };
}
@org.junit.Test
public void testSidtoGuid() throws UnsupportedEncodingException {
if (!isRunningOnWindows()) {
System.out.println("testSidtoGuid should be run on windows");
return;
}
String strSid = getAccountSid("Administrator");
int x = 0;
PrintStream out = new PrintStream(System.out, true, "UTF-8");
try {
ByteBuffer bb = ByteBuffer.allocate(16);
bb.order(ByteOrder.LITTLE_ENDIAN);
String[] arrSidParts = strSid.split("-");
for (int i = 4; i < arrSidParts.length; i++) {
bb.putInt((int) Long.parseLong(arrSidParts[i]));
}
Guid guid = new Guid(bb.array(), false);
out.println(guid.toString());
} catch (Exception e) {
out.println("!" + e.getMessage() + "!");
e.printStackTrace();
}
}
@org.junit.Test
public void testGroupDisplay() {
try {
if (!isRunningOnWindows()) {
System.out.println("test should be run on windows");
return;
}
PointerByReference pNDG = new PointerByReference();
IntByReference nEntriesRead = new IntByReference();
int nStatus = jwin32.netapi32.NetQueryDisplayInformation(
new WString(""),
3,
0,
100,
jwin32.MAX_PREFERRED_LENGTH,
nEntriesRead,
pNDG);
System.out.println("NetQueryDisplayInformation return " + nStatus);
if (nStatus == jwin32.NERR_Success ||
nStatus == jwin32.ERROR_MORE_DATA) {
System.out.println("Returned " + nEntriesRead.getValue() + " entries ");
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}