001: package org.esupportail.cas.server.handlers.nt;
002:
003: import org.dom4j.Element;
004: import org.esupportail.cas.server.util.RedundantHandler;
005: import org.esupportail.cas.server.util.Server;
006: import org.esupportail.cas.server.util.log.Log;
007:
008: /**
009: * This class implements a NIS (Network Information Service) server.
010: *
011: * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
012: */
013: public final class NtServer extends Server {
014:
015: /**
016: * The server hostname or IP address.
017: */
018: private String host;
019:
020: /**
021: * Constructor.
022: *
023: * @param handlerDebug debugging mode of the handler
024: * @param handler the handler the server will be used by
025: * @param serverElement the XML element that declares the server
026: * @throws Exception Exception
027: */
028: public NtServer(final Boolean handlerDebug,
029: final RedundantHandler handler, final Element serverElement)
030: throws Exception {
031: super (handlerDebug, handler, serverElement);
032: traceBegin();
033:
034: host = getServerSubElementContent(serverElement, "host", true/*needed*/);
035: trace("host = " + host);
036:
037: Log
038: .warn("NtHandler is not implemented in this version; users will never be authenticted this way.");
039:
040: traceEnd();
041: }
042:
043: /**
044: * Try to authenticate a user (by searching into a NT domain).
045: *
046: * @param username the user's name
047: * @param password the user's password
048: *
049: * @return Server.AUTHENTICATE_SUCCESS, Server.AUTHENTICATE_NOAUTH
050: * or Server.AUTHENTICATE_FAILURE.
051: */
052: public int authenticate(final String username, final String password) {
053: traceBegin();
054: // TODO add Todd's code
055: NtHandler handler = (NtHandler) getHandler();
056:
057: // remove this later:
058: traceEnd("AUTHENTICATE_FAILURE");
059: return AUTHENTICATE_FAILURE;
060:
061: // Todd, all the rest is the NIS authentication, maybe you can use it as a frame
062: //
063: // String url = "nis://" + _host + "/" + handler.getDomain();
064: // String map = handler.getMap();
065: //
066: // try {
067: // trace("Connecting to the NIS domain...");
068: // Hashtable hashtable = new Hashtable(5, 0.75f);
069: // hashtable.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.nis.NISCtxFactory");
070: // hashtable.put(Context.PROVIDER_URL, url);
071: // hashtable.put(Context.SECURITY_AUTHENTICATION, "simple");
072: // InitialContext context = new InitialDirContext(hashtable);
073: //
074: // trace("Retrieving the information corresponding to the user...");
075: // String nisEntry = context.lookup("system/" + map + "/" + username).toString();
076: //
077: // // we've got all needed information, close the context
078: // context.close();
079: //
080: // trace("Username found, checking password (" + handler.getEncryption() + ")...");
081: // // extracting the encrypted password
082: // String[] nisFields = nisEntry.split(":");
083: // String nisEncryptedPassword = nisFields[1];
084: //
085: // // compare the passwords
086: // boolean match = Crypt.match(handler.getEncryption(),password, nisEncryptedPassword);
087: //
088: // if (Crypt.match(handler.getEncryption(),password, nisEncryptedPassword)) {
089: // trace("Password matches.");
090: // traceEnd("AUTHENTICATE_SUCCESS");
091: // return AUTHENTICATE_SUCCESS;
092: // } else {
093: // trace("Password does not match.");
094: // traceEnd("AUTHENTICATE_NOAUTH");
095: // return AUTHENTICATE_NOAUTH;
096: // }
097: // } catch (javax.naming.NoInitialContextException e) {
098: // warn(e.toString());
099: // warn("JNDI nis provider (nis.jar) is probably not installed");
100: // traceEnd("AUTHENTICATE_FAILURE");
101: // return AUTHENTICATE_FAILURE;
102: // } catch (javax.naming.ConfigurationException e) {
103: // warn("Bad NIS configuration: " + e.getMessage());
104: // traceEnd("AUTHENTICATE_FAILURE");
105: // return AUTHENTICATE_FAILURE;
106: // } catch (javax.naming.CommunicationException e) {
107: // warn("NIS server not responding.");
108: // traceEnd("AUTHENTICATE_FAILURE");
109: // return AUTHENTICATE_FAILURE;
110: // } catch (javax.naming.CannotProceedException e) {
111: // warn("Can not proceed: " + e.getMessage());
112: // traceEnd("AUTHENTICATE_NOAUTH");
113: // return AUTHENTICATE_NOAUTH;
114: // } catch (javax.naming.NameNotFoundException e) {
115: // trace("Username not found: " + e.getMessage());
116: // traceEnd("AUTHENTICATE_NOAUTH");
117: // return AUTHENTICATE_NOAUTH;
118: // } catch (Exception e) {
119: // warn("Failure: " + e.toString());
120: // traceEnd("AUTHENTICATE_FAILURE");
121: // return AUTHENTICATE_FAILURE;
122: // }
123: }
124:
125: }
|