remove code duplication between telnet-client / telnet-client-ipa

We now simply use the original telnet-client.c with one small callback
into the ipaccess authentication layer
diff --git a/util/ipaccess-auth.c b/util/ipaccess-auth.c
new file mode 100644
index 0000000..e550f4a
--- /dev/null
+++ b/util/ipaccess-auth.c
@@ -0,0 +1,80 @@
+/* ipaccess nanoBTS proprietary telnet authentication,
+ * written by Dieter Spaar <spaar@mirider.augusta.de> */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+
+#include <openssl/md5.h>
+
+#define CLI_USER "CLICLIENT\n"
+#define KEY "Sh1n30nY0uCra2yD1am0nd"
+
+static void compute_response(unsigned char *ubChallenge, unsigned char *ubResponse) 
+{
+	MD5_CTX md5;
+	int i;
+
+	MD5_Init(&md5);
+
+	for(i = 0; i < 4; i++) {
+		MD5_Update(&md5, (unsigned char *)KEY, strlen(KEY));
+		MD5_Update(&md5, ubChallenge, 16);
+	}
+	MD5_Final(ubResponse, &md5);
+}
+
+// nanoBTS Challenge/Response
+int ipaccess_telnet_auth(int sock)
+{
+	char buffer[512];
+	int rs;
+        unsigned char  ubResponse[18];
+    
+        // send client name
+        
+    	if ((rs = send(sock, CLI_USER, strlen(CLI_USER), 0)) == -1) {
+			fprintf(stderr, "send() failed: %s\n", strerror(errno));
+			exit(1);
+		} else if (rs == 0) {
+			fprintf(stderr, "send() unexpectedly returned 0\n");
+			exit(1);
+		}
+		
+        // receive challenge
+
+        if ((rs = recv(sock, buffer, sizeof(buffer), 0)) > 0) {
+            if(rs != 18 || buffer[0] != '<' || buffer[17] != '>') {
+              fprintf(stderr, "unexpected response\n");
+              exit(1);
+            }
+        } else if (rs == 0) {
+			fprintf(stderr, "recv(client) unexpectedly returned 0\n");
+			exit(1);
+        } else {
+            fprintf(stderr, "recv(client) failed: %s\n",
+                    strerror(errno));
+            exit(1);
+        }
+        
+        // calculate response
+        
+        memset(&ubResponse, 0, sizeof(ubResponse));
+  		compute_response(buffer + 1, ubResponse + 1);
+        ubResponse[0] = '<';
+        ubResponse[17] = '>';
+        
+        // send response
+        if ((rs = send(sock, ubResponse, sizeof(ubResponse), 0)) == -1) {
+		fprintf(stderr, "send() failed: %s\n", strerror(errno));
+		exit(1);
+	} else if (rs == 0) {
+		fprintf(stderr, "send() unexpectedly returned 0\n");
+		exit(1);
+	}        
+}