jcifs.smb.NtlmPasswordAuthentication Java Examples

The following examples show how to use jcifs.smb.NtlmPasswordAuthentication. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: SmbURLStreamHandlerService.java    From elexis-3-core with Eclipse Public License 1.0 5 votes vote down vote up
@Override
public URLConnection openConnection(URL url) throws IOException{
	SingletonContext context = SingletonContext.getInstance();
	NtlmPasswordAuthentication ntlmPasswordAuthentication =
		new NtlmPasswordAuthentication(context, url.getUserInfo());
	CIFSContext credentials =
		SingletonContext.getInstance().withCredentials(ntlmPasswordAuthentication);
	return new SmbFile(url, credentials);
	
}
 
Example #2
Source File: NtlmHttpFilter.java    From jcifs with GNU Lesser General Public License v2.1 5 votes vote down vote up
/**
 * This method simply calls <tt>negotiate( req, resp, false )</tt>
 * and then <tt>chain.doFilter</tt>. You can override and call
 * negotiate manually to achive a variety of different behavior.
 */
@Override
public void doFilter ( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse resp = (HttpServletResponse) response;
    NtlmPasswordAuthentication ntlm;

    if ( ( ntlm = negotiate(req, resp, false) ) == null ) {
        return;
    }

    chain.doFilter(new NtlmHttpServletRequest(req, ntlm), response);
}
 
Example #3
Source File: Samba1FileSystem.java    From iaf with Apache License 2.0 5 votes vote down vote up
@Override
public void configure() throws ConfigurationException {
	if (getShare() == null)
		throw new ConfigurationException("server share endpoint is required");
	if (!getShare().startsWith("smb://"))
		throw new ConfigurationException("attribute share must begin with [smb://]");

	//Setup credentials if applied, may be null.
	//NOTE: When using NtmlPasswordAuthentication without username it returns GUEST
	CredentialFactory cf = new CredentialFactory(getAuthAlias(), getUsername(), getPassword());
	if (StringUtils.isNotEmpty(cf.getUsername())) {
		auth = new NtlmPasswordAuthentication(getDomain(), cf.getUsername(), cf.getPassword());
		log.debug("setting authentication to [" + auth.toString() + "]");
	}
}
 
Example #4
Source File: DownloadTaskHelper.java    From Amphitheatre with Apache License 2.0 5 votes vote down vote up
public static List<SmbFile> getFiles(String user, String password, String path) {
    NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("", user, password);

    List<SmbFile> files = Collections.emptyList();
    try {
        files = VideoUtils.getFilesFromDir(path, auth);
    } catch (Exception e) {
        e.printStackTrace();
    }

    return files;
}
 
Example #5
Source File: NtlmHttpFilter.java    From jcifs-ng with GNU Lesser General Public License v2.1 5 votes vote down vote up
/**
 * This method simply calls <tt>negotiate( req, resp, false )</tt>
 * and then <tt>chain.doFilter</tt>. You can override and call
 * negotiate manually to achive a variety of different behavior.
 */
@Override
public void doFilter ( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse resp = (HttpServletResponse) response;
    NtlmPasswordAuthentication ntlm;

    if ( ( ntlm = negotiate(req, resp, false) ) == null ) {
        return;
    }

    chain.doFilter(new NtlmHttpServletRequest(req, ntlm), response);
}
 
Example #6
Source File: VideoUtils.java    From Amphitheatre with Apache License 2.0 5 votes vote down vote up
public static List<SmbFile> getFilesFromDir(String path, NtlmPasswordAuthentication auth) throws Exception {
    List<SmbFile> results = new ArrayList<SmbFile>();
    Set<SmbFile> seen = new LinkedHashSet<SmbFile>();
    Deque<SmbFile> queue = new ArrayDeque<SmbFile>();

    SmbFile baseDir = new SmbFile(path, auth);
    queue.add(baseDir);

    while (!queue.isEmpty()) {
        SmbFile file = queue.removeFirst();
        seen.add(file);

        if (file.isDirectory()) {
            Set<SmbFile> smbFiles = new LinkedHashSet<SmbFile>();
            Collections.addAll(smbFiles, file.listFiles());

            for (SmbFile child : smbFiles) {
                if (!seen.contains(child)) {
                    queue.add(child);
                }
            }
        } else if (VideoUtils.isVideoFile(file.getName())) {
            results.add(file);
        }
    }

    return results;
}
 
Example #7
Source File: SharedNamedPipe.java    From jTDS with GNU Lesser General Public License v2.1 5 votes vote down vote up
/**
 * Creates a new instance of <code>SharedNamedPipe</code>.
 *
 * @param connection
 * @throws IOException if the named pipe or its input or output streams do
 *                     not open
 * @throws UnknownHostException if host cannot be found for the named pipe
 */
public SharedNamedPipe(JtdsConnection connection) throws IOException {
    super(connection.getBufferDir(), connection.getTdsVersion(), connection.getServerType());

    // apply socketTimeout as responseTimeout
    int timeout = connection.getSocketTimeout() * 1000;
    String val = String.valueOf(timeout > 0 ? timeout : Integer.MAX_VALUE);
    Config.setProperty("jcifs.smb.client.responseTimeout", val);
    Config.setProperty("jcifs.smb.client.soTimeout", val);

    NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(
            connection.getDomainName(), connection.getUser(), connection.getPassword());

    StringBuilder url = new StringBuilder(32);

    url.append("smb://");
    url.append(connection.getServerName());
    url.append("/IPC$");

    final String instanceName = connection.getInstanceName();
    if (instanceName != null && instanceName.length() != 0) {
        if(!instanceName.startsWith("LOCALDB"))
        	url.append("/MSSQL$");
        else
            url.append("/");
        url.append(instanceName);
    }
    String namedPipePath = DefaultProperties.getNamedPipePath(connection.getServerType(), instanceName);
    url.append(namedPipePath);

    setPipe(new SmbNamedPipe(url.toString(), SmbNamedPipe.PIPE_TYPE_RDWR, auth));

    setOut(new DataOutputStream(getPipe().getNamedPipeOutputStream()));

    final int bufferSize = Support.calculateNamedPipeBufferSize(
            connection.getTdsVersion(), connection.getPacketSize());
    setIn(new DataInputStream(
            new BufferedInputStream(
                    getPipe().getNamedPipeInputStream(), bufferSize)));
}
 
Example #8
Source File: NtlmAuthenticationHandler.java    From cas4.0.x-server-wechat with Apache License 2.0 4 votes vote down vote up
@Override
protected final HandlerResult doAuthentication(
        final Credential credential) throws GeneralSecurityException, PreventedException {

    final SpnegoCredential ntlmCredential = (SpnegoCredential) credential;
    final byte[] src = ntlmCredential.getInitToken();

    UniAddress dc = null;

    boolean success = false;
    try {
        if (this.loadBalance) {
            // find the first dc that matches the includepattern
            if(this.includePattern != null){
                NbtAddress [] dcs  = NbtAddress.getAllByName(this.domainController, 0x1C, null, null);
                for (NbtAddress dc2 : dcs) {
                    if(dc2.getHostAddress().matches(this.includePattern)){
                        dc = new UniAddress(dc2);
                        break;
                    }
                }
            } else {
                dc = new UniAddress(NbtAddress.getByName(this.domainController,
                        0x1C, null));
            }
        } else {
            dc = UniAddress.getByName(this.domainController, true);
        }
        final byte[] challenge = SmbSession.getChallenge(dc);

        switch (src[8]) {
            case 1:
                logger.debug("Type 1 received");
                final Type1Message type1 = new Type1Message(src);
                final Type2Message type2 = new Type2Message(type1,
                        challenge, null);
                logger.debug("Type 2 returned. Setting next token.");
                ntlmCredential.setNextToken(type2.toByteArray());
            case 3:
                logger.debug("Type 3 received");
                final Type3Message type3 = new Type3Message(src);
                final byte[] lmResponse = type3.getLMResponse() == null ? new byte[0] : type3.getLMResponse();
                byte[] ntResponse = type3.getNTResponse() == null ? new byte[0] : type3.getNTResponse();
                final NtlmPasswordAuthentication ntlm = new NtlmPasswordAuthentication(
                        type3.getDomain(), type3.getUser(), challenge,
                        lmResponse, ntResponse);
                logger.debug("Trying to authenticate {} with domain controller", type3.getUser());
                try {
                    SmbSession.logon(dc, ntlm);
                    ntlmCredential.setPrincipal(new SimplePrincipal(type3.getUser()));
                    success = true;
                } catch (final SmbAuthException sae) {
                    throw new FailedLoginException(sae.getMessage());
                }
            default:
                logger.debug("Unknown type: {}", src[8]);
        }
    } catch (final Exception e) {
        throw new FailedLoginException(e.getMessage());
    }

    if (!success) {
        throw new FailedLoginException();
    }
    return new HandlerResult(this, new BasicCredentialMetaData(ntlmCredential), ntlmCredential.getPrincipal());
}
 
Example #9
Source File: SambaSenderOld.java    From iaf with Apache License 2.0 4 votes vote down vote up
@Override
public void configure() throws ConfigurationException {
	super.configure();

	if (getShare() == null)
		throw new ConfigurationException(getLogPrefix() + "server share endpoint is required");
	if (!getShare().startsWith("smb://"))
		throw new ConfigurationException(getLogPrefix() + "url must begin with [smb://]");

	if (getAction() == null)
		throw new ConfigurationException(getLogPrefix() + "action must be specified");
	if (!actions.contains(getAction()))
		throw new ConfigurationException(getLogPrefix() + "unknown or invalid action ["
				+ getAction() + "] supported actions are " + actions.toString() + "");

	//Check if necessarily parameters are available
	ParameterList parameterList = getParameterList();
	if (getAction().equals("upload")
			&& (parameterList == null || parameterList.findParameter("file") == null))
		throw new ConfigurationException(getLogPrefix()
				+ "the upload action requires the file parameter to be present");
	if (getAction().equals("rename")
			&& (parameterList == null || parameterList.findParameter("destination") == null))
		throw new ConfigurationException(getLogPrefix()
				+ "the rename action requires a destination parameter to be present");

	//Setup credentials if applied, may be null.
	//NOTE: When using NtmlPasswordAuthentication without username it returns GUEST
	CredentialFactory cf = new CredentialFactory(getAuthAlias(), getUsername(), getPassword());
	if (StringUtils.isNotEmpty(cf.getUsername())) {
		auth = new NtlmPasswordAuthentication(getAuthDomain(), cf.getUsername(),
				cf.getPassword());
		log.debug("setting authentication to [" + auth.toString() + "]");
	}

	try {
		//Try to initially connect to the host and create the SMB session.
		//The session automatically closes and re-creates when required.
		smbContext = new SmbFile(getShare(), auth);
	} catch (MalformedURLException e) {
		throw new ConfigurationException(e);
	}
}
 
Example #10
Source File: SambaFileSystemTestHelper.java    From iaf with Apache License 2.0 4 votes vote down vote up
@Override
public void setUp() throws ConfigurationException, IOException, FileSystemException {
	NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(domain, username, password);
	context = new SmbFile(share, auth);
	
}
 
Example #11
Source File: NtlmSsp.java    From jcifs-ng with GNU Lesser General Public License v2.1 4 votes vote down vote up
/**
 * Performs NTLM authentication for the servlet request.
 * 
 * @param tc
 *            context to use
 *
 * @param req
 *            The request being serviced.
 * @param resp
 *            The response.
 * @param challenge
 *            The domain controller challenge.
 * @return credentials passed in the servlet request
 * @throws IOException
 *             If an IO error occurs.
 */
public static NtlmPasswordAuthentication authenticate ( CIFSContext tc, HttpServletRequest req, HttpServletResponse resp, byte[] challenge )
        throws IOException {
    String msg = req.getHeader("Authorization");
    if ( msg != null && msg.startsWith("NTLM ") ) {
        byte[] src = Base64.decode(msg.substring(5));
        if ( src[ 8 ] == 1 ) {
            Type1Message type1 = new Type1Message(src);
            Type2Message type2 = new Type2Message(tc, type1, challenge, null);
            msg = new String(Base64.encode(type2.toByteArray()), "US-ASCII");
            resp.setHeader("WWW-Authenticate", "NTLM " + msg);
        }
        else if ( src[ 8 ] == 3 ) {
            Type3Message type3 = new Type3Message(src);
            byte[] lmResponse = type3.getLMResponse();
            if ( lmResponse == null )
                lmResponse = new byte[0];
            byte[] ntResponse = type3.getNTResponse();
            if ( ntResponse == null )
                ntResponse = new byte[0];
            return new NtlmPasswordAuthentication(type3.getDomain(), type3.getUser(), challenge, lmResponse, ntResponse);
        }
    }
    else {
        resp.setHeader("WWW-Authenticate", "NTLM");
    }
    resp.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
    resp.setContentLength(0);
    resp.flushBuffer();
    return null;
}
 
Example #12
Source File: NTLMAuthenticator.java    From MyVirtualDirectory with Apache License 2.0 4 votes vote down vote up
public void bind(BindInterceptorChain chain, DistinguishedName dn,
		Password pwd, LDAPConstraints constraints) throws LDAPException {
	Vector<RDN> rdns = dn.getDN().getRDNs();
	
	
	String domain = rdns.get(1).getValue();
	String user = rdns.get(0).getValue();
	
	
	
	try {
		SmbSession.logon(this.addr,new NtlmPasswordAuthentication(domain,user,new String(pwd.getValue())));
	} catch (SmbException e) {
		e.printStackTrace();
		throw new LDAPException(e.toString(),LDAPException.INVALID_CREDENTIALS,"");
	}
	
	chain.getSession().put(SessionVariables.BOUND_INTERCEPTORS,this.name);

}
 
Example #13
Source File: NTLMAuthenticator.java    From MyVirtualDirectory with Apache License 2.0 4 votes vote down vote up
public void bind(BindInterceptorChain chain, DistinguishedName dn,
		Password pwd, LDAPConstraints constraints) throws LDAPException {
	Vector<RDN> rdns = dn.getDN().getRDNs();
	
	
	String domain = rdns.get(1).getValue();
	String user = rdns.get(0).getValue();
	
	
	
	try {
		SmbSession.logon(this.addr,new NtlmPasswordAuthentication(domain,user,new String(pwd.getValue())));
	} catch (SmbException e) {
		e.printStackTrace();
		throw new LDAPException(e.toString(),LDAPException.INVALID_CREDENTIALS,"");
	}
	
	chain.getSession().put(SessionVariables.BOUND_INTERCEPTORS,this.name);

}
 
Example #14
Source File: NtlmSsp.java    From jcifs with GNU Lesser General Public License v2.1 4 votes vote down vote up
/**
 * Performs NTLM authentication for the servlet request.
 * 
 * @param tc
 *            context to use
 *
 * @param req
 *            The request being serviced.
 * @param resp
 *            The response.
 * @param challenge
 *            The domain controller challenge.
 * @return credentials passed in the servlet request
 * @throws IOException
 *             If an IO error occurs.
 */
public static NtlmPasswordAuthentication authenticate ( CIFSContext tc, HttpServletRequest req, HttpServletResponse resp, byte[] challenge )
        throws IOException {
    String msg = req.getHeader("Authorization");
    if ( msg != null && msg.startsWith("NTLM ") ) {
        byte[] src = Base64.decode(msg.substring(5));
        if ( src[ 8 ] == 1 ) {
            Type1Message type1 = new Type1Message(src);
            Type2Message type2 = new Type2Message(tc, type1, challenge, null);
            msg = new String(Base64.encode(type2.toByteArray()), "US-ASCII");
            resp.setHeader("WWW-Authenticate", "NTLM " + msg);
        }
        else if ( src[ 8 ] == 3 ) {
            Type3Message type3 = new Type3Message(src);
            byte[] lmResponse = type3.getLMResponse();
            if ( lmResponse == null )
                lmResponse = new byte[0];
            byte[] ntResponse = type3.getNTResponse();
            if ( ntResponse == null )
                ntResponse = new byte[0];
            return new NtlmPasswordAuthentication(type3.getDomain(), type3.getUser(), challenge, lmResponse, ntResponse);
        }
    }
    else {
        resp.setHeader("WWW-Authenticate", "NTLM");
    }
    resp.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
    resp.setContentLength(0);
    resp.flushBuffer();
    return null;
}
 
Example #15
Source File: NtlmAuthenticationHandler.java    From springboot-shiro-cas-mybatis with MIT License 4 votes vote down vote up
@Override
protected final HandlerResult doAuthentication(
        final Credential credential) throws GeneralSecurityException, PreventedException {

    final SpnegoCredential ntlmCredential = (SpnegoCredential) credential;
    final byte[] src = ntlmCredential.getInitToken();

    UniAddress dc = null;

    boolean success = false;
    try {
        if (this.loadBalance) {
            // find the first dc that matches the includepattern
            if (this.includePattern != null) {
                final NbtAddress[] dcs= NbtAddress.getAllByName(this.domainController, NBT_ADDRESS_TYPE, null, null);
                for (final NbtAddress dc2 : dcs) {
                    if(dc2.getHostAddress().matches(this.includePattern)){
                        dc = new UniAddress(dc2);
                        break;
                    }
                }
            } else {
                dc = new UniAddress(NbtAddress.getByName(this.domainController, NBT_ADDRESS_TYPE, null));
            }
        } else {
            dc = UniAddress.getByName(this.domainController, true);
        }
        final byte[] challenge = SmbSession.getChallenge(dc);

        switch (src[NTLM_TOKEN_TYPE_FIELD_INDEX]) {
            case NTLM_TOKEN_TYPE_ONE:
                logger.debug("Type 1 received");
                final Type1Message type1 = new Type1Message(src);
                final Type2Message type2 = new Type2Message(type1,
                        challenge, null);
                logger.debug("Type 2 returned. Setting next token.");
                ntlmCredential.setNextToken(type2.toByteArray());
                break;
            case NTLM_TOKEN_TYPE_THREE:
                logger.debug("Type 3 received");
                final Type3Message type3 = new Type3Message(src);
                final byte[] lmResponse = type3.getLMResponse() == null ? new byte[0] : type3.getLMResponse();
                final byte[] ntResponse = type3.getNTResponse() == null ? new byte[0] : type3.getNTResponse();
                final NtlmPasswordAuthentication ntlm = new NtlmPasswordAuthentication(
                        type3.getDomain(), type3.getUser(), challenge,
                        lmResponse, ntResponse);
                logger.debug("Trying to authenticate {} with domain controller", type3.getUser());
                try {
                    SmbSession.logon(dc, ntlm);
                    ntlmCredential.setPrincipal(this.principalFactory.createPrincipal(type3.getUser()));
                    success = true;
                } catch (final SmbAuthException sae) {
                    throw new FailedLoginException(sae.getMessage());
                }
                break;
            default:
                logger.debug("Unknown type: {}", src[NTLM_TOKEN_TYPE_FIELD_INDEX]);
        }
    } catch (final Exception e) {
        throw new FailedLoginException(e.getMessage());
    }

    if (!success) {
        throw new FailedLoginException();
    }
    return new DefaultHandlerResult(this, new BasicCredentialMetaData(ntlmCredential), ntlmCredential.getPrincipal());
}
 
Example #16
Source File: NtlmSsp.java    From jcifs-ng with GNU Lesser General Public License v2.1 2 votes vote down vote up
/**
 * Calls the static {@link #authenticate(CIFSContext, HttpServletRequest,
 * HttpServletResponse, byte[])} method to perform NTLM authentication
 * for the specified servlet request.
 * 
 * @param tc
 *
 * @param req
 *            The request being serviced.
 * @param resp
 *            The response.
 * @param challenge
 *            The domain controller challenge.
 * @return credentials passed in the servlet request
 * @throws IOException
 *             If an IO error occurs.
 */
public NtlmPasswordAuthentication doAuthentication ( CIFSContext tc, HttpServletRequest req, HttpServletResponse resp, byte[] challenge )
        throws IOException {
    return authenticate(tc, req, resp, challenge);
}
 
Example #17
Source File: NtlmSsp.java    From jcifs with GNU Lesser General Public License v2.1 2 votes vote down vote up
/**
 * Calls the static {@link #authenticate(CIFSContext, HttpServletRequest,
 * HttpServletResponse, byte[])} method to perform NTLM authentication
 * for the specified servlet request.
 * 
 * @param tc
 *
 * @param req
 *            The request being serviced.
 * @param resp
 *            The response.
 * @param challenge
 *            The domain controller challenge.
 * @return credentials passed in the servlet request
 * @throws IOException
 *             If an IO error occurs.
 */
public NtlmPasswordAuthentication doAuthentication ( CIFSContext tc, HttpServletRequest req, HttpServletResponse resp, byte[] challenge )
        throws IOException {
    return authenticate(tc, req, resp, challenge);
}