changeset 166:3c055da4d050

add authenticate AuthAccess
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Mon, 24 Oct 2011 19:50:30 +0900
parents 13458f88d8c9
children 1d16dcf966e1
files .hgignore~ build.xml~ src/myVncProxy/MyRfbProto.java src/myVncProxy/RfbProto.java src/myVncProxy/VncProxyService.java
diffstat 5 files changed, 101 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgignore~	Mon Oct 24 19:50:30 2011 +0900
@@ -0,0 +1,6 @@
+syntax: glob
+*.jar
+GPATH
+GRTAGS
+GSYMS
+GTAGS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/build.xml~	Mon Oct 24 19:50:30 2011 +0900
@@ -0,0 +1,27 @@
+<project name="tightVNCClient" default="all" basedir=".">
+
+
+	<property name="source" value="./src/" />
+	<property name="dir" value="./bin/" />
+	<property name="mfdir" value="./Makefile/" />
+
+	<target name="all" depends="init,compile,mkjar" />
+
+	<target name="init">
+		<mkdir dir="${dir}" />
+	</target>
+
+
+	<target name="compile">
+		<javac encoding="UTF-8" srcdir="${source}" destdir="${dir}" />
+	</target>
+
+	<target name="mkjar">
+		<jar jarfile="VncProxyService.jar" basedir="${dir}" manifest="${mfdir}MANIFEST.MF">
+		</jar>
+		<jar jarfile="VncViewer.jar" basedir="${dir}" manifest="${mfdir}MANIFEST2.MF">
+		</jar>
+	</target>
+
+
+</project>
--- a/src/myVncProxy/MyRfbProto.java	Wed Oct 12 06:45:04 2011 +0900
+++ b/src/myVncProxy/MyRfbProto.java	Mon Oct 24 19:50:30 2011 +0900
@@ -39,6 +39,15 @@
 	 * CheckMillis is one of new msgType for RFB 3.855. 
 	 */
 	final static byte SpeedCheckMillis = 4;
+
+	// Secyrity type of OS X
+	final static int SecTypeReqAccess = 32;
+
+	// Supported authentication types
+	final static int AuthAccess = 32;
+
+	
+	
 	private static final int INFLATE_BUFSIZE = 1024*100;
 	boolean printStatusFlag = false;
 	long startCheckTime;
@@ -129,6 +138,28 @@
 		servSock = new ServerSocket(port);
 		acceptPort = port;
 	}
+	
+	void authenticationRequestAccess() throws IOException {
+
+		byte[] inBuf = new byte[260];
+		int i = 0;
+		readFully(inBuf);
+
+//		int[] data = {109, -98, -21, -71, -16, 54, 116, 53, -42, -46, -58, 71, 3, -59, 92, 29, -115, -67, -96, 97, -125, -55, 49, 91, 85, -54, 56, -11, 105, -68, -102, 5, 126, 60, -93, -12, 97, 4, 71, -12, -63, 36, 18, -111, -55, -24, -21, 89, 48, -104, 62, -55, 6, -49, -69, 126, -110, -26, -116, 3, 52, -91, 75, 112, 124, -103, -79, -50, 6, 21, 46, -119, -42, 100, 42, -42, -16, -9, -123, -101, 7, 83, 60, 102, -43, 112, -8, 61, -40, -46, 123, 76, -105, 98, -54, -59, 116, 81, 52, -60, 81, -107, -61, 101, -104, 18, 82, -71, -82, -25, 4, -64, 77, 25, 99, 10, -122, 4, -111, 79, -82, -114, 46, -14, 62, 100, -116, 103, 117, -102, -117, -32, 103, 110, 25, 23, 65, 30, -113, -36, -47, 115, 92, 55, -45, -98, -84, -120, -3, -1, -55, 87, -40, 62, 39, 32, -71, 96, 105, -109, 107, -3, 9, 84, 28, 14, -115, 1, -45, -94, 31, -57, 45, -20, 39, -109, -63, -57, 121, -127, -45, -96, 113, -103, 113, -36, -88, 72, -55, -22, -87, 24, -50, -57, -57, -125, -27, 42, 72, -78, 11, 43, -96, -111, 2, -43, 21, -87, 9, -49, -110, 126, 29, 62, -36, 84, 124, 30, -20, -38, -8, -9, -4, 114, -62, 29, -40, 41, 105, 22, 104, -51, -41, -28, -38, 96, -98, -119, -53, 2, 42, 6, 32, 92, -86, 127, 81, 59, -45, -24, -7, -88, 111, -41, -75, 16};
+		byte[] outBuf = new byte[256]; 
+		os.write(outBuf);
+		os.flush();
+
+		int result = readU32();
+		if(result == 1) {
+			System.out.println("faild authentication  ");
+			throw new IOException();
+		}
+		
+		
+		
+		
+	}
 
 	/*
 	 *  default port number is 5999. 
@@ -280,14 +311,42 @@
 		// security-types
 		// 1:None
 		os.write(1);
+
+/*
+ 		os.write(4);
+		os.write(30);
+		os.write(31);
+		os.write(32);
+		os.write(35);
+		os.flush();
+*/		
 	}
 
 	void readSecType(InputStream is) throws IOException {
 		byte[] b = new byte[1];
 		is.read(b);
+	}
+
+
+	void readSecType(InputStream is, OutputStream os) throws IOException {
+		byte[] b = new byte[1];
+		is.read(b);
+
+		int count = 260;
+		int[] data = {0, 2, 0, -128, -1, -1, -1, -1, -1, -1, -1, -1, -55, 15, -38, -94, 33, 104, -62, 52, -60, -58, 98, -117, -128, -36, 28, -47, 41, 2, 78, 8, -118, 103, -52, 116, 2, 11, -66, -90, 59, 19, -101, 34, 81, 74, 8, 121, -114, 52, 4, -35, -17, -107, 25, -77, -51, 58, 67, 27, 48, 43, 10, 109, -14, 95, 20, 55, 79, -31, 53, 109, 109, 81, -62, 69, -28, -123, -75, 118, 98, 94, 126, -58, -12, 76, 66, -23, -90, 55, -19, 107, 11, -1, 92, -74, -12, 6, -73, -19, -18, 56, 107, -5, 90, -119, -97, -91, -82, -97, 36, 17, 124, 75, 31, -26, 73, 40, 102, 81, -20, -26, 83, -127, -1, -1, -1, -1, -1, -1, -1, -1, -111, 73, -29, 30, 57, -67, -75, -77, -49, -50, -99, -76, -80, -80, 14, 65, 57, -105, -103, -54, -102, 3, 39, -44, 39, 35, 118, -84, -64, 37, -117, -21, 89, -31, -68, 70, 5, 122, -92, -119, 9, 121, 63, -112, -60, 122, -46, -69, -36, 92, -103, -92, 74, 92, -73, 87, 120, -8, 116, -47, 111, 20, -41, 110, 122, -3, -94, 14, 42, -51, -59, 48, -54, -125, 117, 60, 77, -52, -31, 98, 32, -2, -102, -15, -29, 58, -14, -106, -116, -32, -86, 50, -32, -16, -3, -123, 87, 88, -118, 10, 120, -107, -37, 125, -110, 59, 87, 93, -24, 124, -99, 18, 78, -13, -49, -34, -24, -27, 1, 114, -67, -98, -56, -3, 85, -67, -126, 77};		
+		for(int i=0; i<count; i++ ) {
+			os.write((byte)data[i]);
+			os.flush();
+		}
+		
+		byte[] c = new byte[256];
+		is.read(c);
+		
+		System.out.println(new String(c));
 
 	}
 
+	
 	void sendSecResult(OutputStream os) throws IOException {
 		byte[] b = castIntByte(0);
 		os.write(b);
@@ -774,6 +833,8 @@
 			public void run() {
 				writerRunning.set(1);
 				try {
+					requestThreadNotify();
+
 					/**
 					 *  initial connection of RFB protocol
 					 */
@@ -787,7 +848,6 @@
 					sendInitData(os);
 					new Thread(reader).start(); // discard incoming packet here after.
 //					writeFramebufferUpdateRequest(0,0, framebufferWidth, framebufferHeight, false );
-					requestThreadNotify();
 					for (;;) {
 						LinkedList<ByteBuffer> bufs = c.poll();
 						int inputIndex = 0;
--- a/src/myVncProxy/RfbProto.java	Wed Oct 12 06:45:04 2011 +0900
+++ b/src/myVncProxy/RfbProto.java	Mon Oct 24 19:50:30 2011 +0900
@@ -349,7 +349,9 @@
 
 		// Find first supported security type.
 		for (int i = 0; i < nSecTypes; i++) {
-			if (secTypes[i] == SecTypeNone || secTypes[i] == SecTypeVncAuth) {
+//			if (secTypes[i] == SecTypeNone || secTypes[i] == SecTypeVncAuth) {
+			if (secTypes[i] == SecTypeNone || secTypes[i] == SecTypeVncAuth 
+				|| secTypes[i] == MyRfbProto.SecTypeReqAccess ) {
 				secType = secTypes[i];
 				break;
 			}
--- a/src/myVncProxy/VncProxyService.java	Wed Oct 12 06:45:04 2011 +0900
+++ b/src/myVncProxy/VncProxyService.java	Mon Oct 24 19:50:30 2011 +0900
@@ -301,6 +301,10 @@
 		}
 
 		switch (authType) {
+		case MyRfbProto.AuthAccess:
+			rfb.authenticationRequestAccess();
+			System.out.println("authenticateion Request right of Acces");
+			break;
 		case RfbProto.AuthNone:
 			showConnectionStatus("No authentication needed");
 			rfb.authenticateNone();