/*
 * Copyright (c) 2003, PostgreSQL Global Development Group
 * See the LICENSE file in the project root for more information.
 */
// Copyright (c) 2004, Open Cloud Limited.

package org.postgresql.sspi;

import com.sun.jna.LastErrorException;
import com.sun.jna.WString;
import com.sun.jna.ptr.IntByReference;

public class NTDSAPIWrapper {

  static final NTDSAPIWrapper instance = new NTDSAPIWrapper();

  
Convenience wrapper for NTDSAPI DsMakeSpn with Java friendly string and exception handling.
Params:
  • serviceClass – See MSDN
  • serviceName – See MSDN
  • instanceName – See MSDN
  • instancePort – See MSDN
  • referrer – See MSDN
Throws:
See Also:
Returns:SPN generated
/** * Convenience wrapper for NTDSAPI DsMakeSpn with Java friendly string and exception handling. * * @param serviceClass See MSDN * @param serviceName See MSDN * @param instanceName See MSDN * @param instancePort See MSDN * @param referrer See MSDN * @return SPN generated * @throws LastErrorException If buffer too small or parameter incorrect * @see <a href="https://msdn.microsoft.com/en-us/library/ms676007(v=vs.85).aspx"> * https://msdn.microsoft.com/en-us/library/ms676007(v=vs.85).aspx</a> */
public String DsMakeSpn(String serviceClass, String serviceName, String instanceName, short instancePort, String referrer) throws LastErrorException { IntByReference spnLength = new IntByReference(2048); char[] spn = new char[spnLength.getValue()]; final int ret = NTDSAPI.instance.DsMakeSpnW( new WString(serviceClass), new WString(serviceName), instanceName == null ? null : new WString(instanceName), instancePort, referrer == null ? null : new WString(referrer), spnLength, spn); if (ret != NTDSAPI.ERROR_SUCCESS) { /* Should've thrown LastErrorException, but just in case */ throw new RuntimeException("NTDSAPI DsMakeSpn call failed with " + ret); } return new String(spn, 0, spnLength.getValue()); } }