src.com.sun.jna.platform.win32.Secur32Util Maven / Gradle / Ivy
/* Copyright (c) 2010 Daniel Doubrovkine, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32;
import java.util.ArrayList;
import com.sun.jna.Native;
import com.sun.jna.platform.win32.Sspi.PSecPkgInfo;
import com.sun.jna.platform.win32.Sspi.SecPkgInfo;
import com.sun.jna.ptr.IntByReference;
/**
* Secur32 Utility API.
* @author dblock[at]dblock.org
*/
public abstract class Secur32Util {
/**
* An SSPI package.
*/
public static class SecurityPackage {
/**
* Package name.
*/
public String name;
/**
* Package comment.
*/
public String comment;
}
/**
* Retrieves the name of the user or other security principal associated
* with the calling thread.
*
* @param format User name format.
* @return User name in a given format.
*/
public static String getUserNameEx(int format) {
char[] buffer = new char[128];
IntByReference len = new IntByReference(buffer.length);
boolean result = Secur32.INSTANCE.GetUserNameEx(format, buffer, len);
if (! result) {
int rc = Kernel32.INSTANCE.GetLastError();
switch(rc) {
case W32Errors.ERROR_MORE_DATA:
buffer = new char[len.getValue() + 1];
break;
default:
throw new Win32Exception(Native.getLastError());
}
result = Secur32.INSTANCE.GetUserNameEx(format, buffer, len);
}
if (! result) {
throw new Win32Exception(Native.getLastError());
}
return Native.toString(buffer);
}
/**
* Get the security packages installed on the current computer.
* @return
* An array of SSPI security packages.
*/
public static SecurityPackage[] getSecurityPackages() {
IntByReference pcPackages = new IntByReference();
PSecPkgInfo.ByReference pPackageInfo = new PSecPkgInfo.ByReference();
int rc = Secur32.INSTANCE.EnumerateSecurityPackages(pcPackages, pPackageInfo);
if(W32Errors.SEC_E_OK != rc) {
throw new Win32Exception(rc);
}
SecPkgInfo[] packagesInfo = pPackageInfo.toArray(pcPackages.getValue());
ArrayList packages = new ArrayList(pcPackages.getValue());
for(SecPkgInfo packageInfo : packagesInfo) {
SecurityPackage securityPackage = new SecurityPackage();
securityPackage.name = packageInfo.Name.toString();
securityPackage.comment = packageInfo.Comment.toString();
packages.add(securityPackage);
}
rc = Secur32.INSTANCE.FreeContextBuffer(pPackageInfo.pPkgInfo.getPointer());
if(W32Errors.SEC_E_OK != rc) {
throw new Win32Exception(rc);
}
return packages.toArray(new SecurityPackage[0]);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy