package jcifs.smb; import org.ietf.jgss.GSSException; import org.ietf.jgss.Oid; // >>SmbAuthenticator /** * This class is used to parse the name of context initiator and * context acceptor which are retrieved from GSSContext. * * @author Shun * */ class MIEName { private static byte[] TOK_ID = {04, 01}; private static int TOK_ID_SIZE = 2; private static int MECH_OID_LEN_SIZE = 2; private static int NAME_LEN_SIZE = 4; private Oid oid; private String name; /** * Instance a <code>MIEName</code> object. * * @param buf the name of context initiator or acceptor */ MIEName(byte[] buf){ int i; int len; if(buf.length<TOK_ID_SIZE+MECH_OID_LEN_SIZE){ throw new IllegalArgumentException(); } // TOK_ID for (i = 0; i < TOK_ID.length; i++) { if(TOK_ID[i]!=buf[i]){ throw new IllegalArgumentException(); } } // MECH_OID_LEN len = 0xff00 & (buf[i++] << 8); len |= 0xff & buf[i++]; // MECH_OID if(buf.length<i+len){ throw new IllegalArgumentException(); } byte[] bo = new byte[len]; System.arraycopy(buf, i, bo, 0, len); i += len; try{ oid = new Oid(bo); }catch (GSSException e) { throw new IllegalArgumentException(e.getMessage()); } // NAME_LEN if(buf.length<i+NAME_LEN_SIZE){ throw new IllegalArgumentException(); } len = 0xff000000 & (buf[i++] << 24); len |= 0x00ff0000 & (buf[i++] << 16); len |= 0x0000ff00 & (buf[i++] << 8); len |= 0x000000ff & buf[i++]; // NAME if(buf.length<i+len){ throw new IllegalArgumentException(); } name = new String(buf, i, len); } MIEName(Oid oid, String name){ this.oid = oid; this.name = name; } /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ public boolean equals(Object arg0) { try{ MIEName terg = (MIEName) arg0; if(oid.equals(terg.oid)&&name.equalsIgnoreCase(terg.name)){ return true; } }catch (Throwable e) {} return false; } /* (non-Javadoc) * @see java.lang.Object#hashCode() */ public int hashCode() { return oid.hashCode(); } /* (non-Javadoc) * @see java.lang.Object#toString() */ public String toString() { return name; } } // SmbAuthenticator<<