From 1d2fcf87bcc73e697198fb07493174df550d71c5 Mon Sep 17 00:00:00 2001 From: damitha Date: Tue, 31 May 2011 09:05:26 +0000 Subject: Initial commit of ntlm authentication code git-svn-id: http://svn.apache.org/repos/asf/axis/axis2/c/core/trunk@1129578 13f79535-47bb-0310-9956-ffa450edef68 --- .../http/sender/ntlm/test/mock_server/Makefile.am | 25 ++++ .../sender/ntlm/test/mock_server/mock_server.c | 128 +++++++++++++++++++++ .../http/sender/ntlm/test/mock_server/run.sh | 2 + 3 files changed, 155 insertions(+) create mode 100644 src/core/transport/http/sender/ntlm/test/mock_server/Makefile.am create mode 100644 src/core/transport/http/sender/ntlm/test/mock_server/mock_server.c create mode 100755 src/core/transport/http/sender/ntlm/test/mock_server/run.sh (limited to 'src/core/transport/http/sender/ntlm/test/mock_server') diff --git a/src/core/transport/http/sender/ntlm/test/mock_server/Makefile.am b/src/core/transport/http/sender/ntlm/test/mock_server/Makefile.am new file mode 100644 index 0000000..3bf50fa --- /dev/null +++ b/src/core/transport/http/sender/ntlm/test/mock_server/Makefile.am @@ -0,0 +1,25 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +TESTS = +noinst_PROGRAMS = mock_server +check_PROGRAMS = mock_server +SUBDIRS = +AM_CFLAGS = -g -O2 +mock_server_SOURCES = mock_server.c + +mock_server_LDADD = $(top_builddir)/util/src/libaxutil.la + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/util/include diff --git a/src/core/transport/http/sender/ntlm/test/mock_server/mock_server.c b/src/core/transport/http/sender/ntlm/test/mock_server/mock_server.c new file mode 100644 index 0000000..3911b0d --- /dev/null +++ b/src/core/transport/http/sender/ntlm/test/mock_server/mock_server.c @@ -0,0 +1,128 @@ +/* tcpserver.c */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int main() +{ + int port = 8080; + int sock, connected, bytes_recieved , true = 1; + char recv_data[10024]; + char *send_data = NULL; + const axutil_env_t *env = NULL; + int flip = 0; + + env = axutil_env_create_all("mock_server.log", AXIS2_LOG_LEVEL_TRACE); + struct sockaddr_in server_addr,client_addr; + unsigned int sin_size; + + if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) { + perror("Socket"); + exit(1); + } + + if (setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&true,sizeof(int)) == -1) { + perror("Setsockopt"); + exit(1); + } + + server_addr.sin_family = AF_INET; + server_addr.sin_port = htons(port); + server_addr.sin_addr.s_addr = INADDR_ANY; + bzero(&(server_addr.sin_zero),8); + + if (bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) + == -1) { + perror("Unable to bind"); + exit(1); + } + + if (listen(sock, 5) == -1) { + perror("Listen"); + exit(1); + } + + printf("\nTCPServer Waiting for client on port %d \n", port); + fflush(stdout); + + + while(1) + { + sin_size = sizeof(struct sockaddr_in); + + connected = accept(sock, (struct sockaddr *)&client_addr, &sin_size); + + printf("\nGot a connection from (%s , %d) \n", + inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port)); + + while (1) + { + int mark = 0; + bytes_recieved = recv(connected,recv_data,10024,0); + recv_data[bytes_recieved] = '\0'; + if(strstr(recv_data, "GET")) + { + mark = 1; + } + if( mark == 1 && strstr(recv_data, "Authorization: NTLM ")) + { + if(flip == 0) + { + send_data = "HTTP/1.1 401 Unauthorized\n"\ + "Content-Type: text/html; charset=us-ascii\n"\ + "Server: Microsoft-HTTPAPI/2.0\n"\ + "WWW-Authenticate: NTLM TlRMTVNTUAACAAAADAAMADAAAAABAgEAf39/f39/f38AAAAAAAAAAAAAAAA8AAAARABPAE0AQQBJAE4A\n"\ + "Date: Thu, 31 Mar 2011 17:41:03 GMT\n"\ + "Content-Length: 341\n\n"; + flip = 1; + } + else if(flip == 1) + { + send_data = "HTTP/1.1 200 OK\n"\ + "Cache-Control: private, max-age=0\n"\ + "Content-Type: text/xml; charset=utf-8\n"\ + "Server: Microsoft-IIS/7.5\n"\ + "X-AspNet-Version: 2.0.50727\n"\ + "Persistent-Auth: true\n"\ + "X-Powered-By: ASP.NET\n"\ + "Date: Thu, 31 Mar 2011 17:41:04 GMT\n"\ + "Content-Length: 2827\n\n"; + flip = 0; + } + printf("sent:%s\n", send_data); + fflush(stdout); + send(connected, send_data,strlen(send_data), 0); + } + else if(mark == 1) + { + send_data = "HTTP/1.1 401 Unauthorized\n"\ + "Content-Type: text/html\n"\ + "Server: Microsoft-IIS/7.5\n"\ + "WWW-Authenticate: NTLM\n"\ + "X-Powered-By: ASP.NET\n"\ + "Date: Thu, 31 Mar 2011 17:41:03 GMT\n"\ + "Content-Length: 1293\n\n"; + printf("sent:%s\n", send_data); + fflush(stdout); + send(connected, send_data,strlen(send_data), 0); + } + else + { + break; + } + } + } + + close(sock); + return 0; +} + diff --git a/src/core/transport/http/sender/ntlm/test/mock_server/run.sh b/src/core/transport/http/sender/ntlm/test/mock_server/run.sh new file mode 100755 index 0000000..c22c556 --- /dev/null +++ b/src/core/transport/http/sender/ntlm/test/mock_server/run.sh @@ -0,0 +1,2 @@ +export LD_LIBRARY_PATH=/tmp/heimdal/lib:/axis2c/deploy/lib +./mock_server -- cgit v1.1-32-gdbae