package org.ovirt.engine.core.utils.jwin32;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.WString;
import com.sun.jna.Structure;
import com.sun.jna.ptr.PointerByReference;
import org.ovirt.engine.core.compat.LogCompat;
import org.ovirt.engine.core.compat.LogFactoryCompat;
public abstract class NetStruct extends Structure {
private static LogCompat log = LogFactoryCompat.getLog(USER_INFO_20.class);
protected String getSID(WString strAccountName) throws ConvertSidException {
log.debug("getSID entry");
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.LookupAccountNameW(
new WString(""),
strAccountName,
sid,
cbSid,
referencedDomainName,
cchReferencedDomainName,
peUse
)) {
log.error(
"LookupAccountNameA failed for " + strAccountName +
" GetLastError=" + jwin32.kernel32.GetLastError()
);
throw new ConvertSidException("LookupAccountNameA failed for" + strAccountName);
}
if (!jwin32.advapi32.ConvertSidToStringSidA(sid, stringSID)) {
log.error(
"ConvertSidToStringSidA failed for " + strAccountName +
" GetLastError=" + jwin32.kernel32.GetLastError()
);
throw new ConvertSidException("ConvertSidToStringSidA failed for" + strAccountName);
}
retSID = stringSID.getValue().getString(0, false);
jwin32.kernel32.LocalFree(stringSID.getValue());
return (retSID);
}
}