From db4455f6c945e9b19dcdd4003080f53df9eeac7a Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Thu, 16 Feb 2012 20:50:42 -0700 Subject: [PATCH] add -p flag --- eris.c | 19 +++++++++++++++---- tests/{empty:80 => empty}/.empty | 0 tests/test.py | 26 ++++++++++++++++---------- 3 files changed, 31 insertions(+), 14 deletions(-) rename tests/{empty:80 => empty}/.empty (100%) diff --git a/eris.c b/eris.c index 507d181..28ffc95 100644 --- a/eris.c +++ b/eris.c @@ -1456,13 +1456,14 @@ main(int argc, char *argv[], const char *const *envp) int docgi = 0; int dirlist = 0; int redirect = 0; + int portappend = 0; int len; int in; { int opt; - while (-1 != (opt = getopt(argc, argv, "cdr"))) { + while (-1 != (opt = getopt(argc, argv, "cdrp"))) { switch (opt) { case 'c': docgi = 1; @@ -1473,8 +1474,11 @@ main(int argc, char *argv[], const char *const *envp) case 'r': redirect = 1; break; + case 'p': + portappend = 1; + break; default: - fprintf(stderr, "Usage: %s [-c] [-d] [-r]\n", argv[0]); + fprintf(stderr, "Usage: %s [-c] [-d] [-r] [-p]\n", argv[0]); return 69; } } @@ -1651,13 +1655,20 @@ main(int argc, char *argv[], const char *const *envp) ip = "127.0.0.1"; if (strlen(ip) + strlen(port) > 90) exit(101); - sprintf(Buf, "%s:%s", ip, port); + if (portappend) { + sprintf(Buf, "%s:%s", ip, port); + } else { + strcpy(Buf, ip); + } host = Buf; } else { char *colon = strchr(host, ':'); - if (!colon) { + + if (portappend && !colon) { sprintf(Buf, "%s:%s", host, port); host = Buf; + } else if (!portappend && colon) { + *colon = '\0'; } } for (i = strlen(host); i >= 0; --i) diff --git a/tests/empty:80/.empty b/tests/empty/.empty similarity index 100% rename from tests/empty:80/.empty rename to tests/empty/.empty diff --git a/tests/test.py b/tests/test.py index 8a5695c..f117089 100755 --- a/tests/test.py +++ b/tests/test.py @@ -16,7 +16,7 @@ class ArgTests(unittest.TestCase): p = eris(*args) so, se = p.communicate(b'GET / HTTP/1.0\r\n\r\n') self.assertRegexpMatches(so, b'HTTP/1.0 200 OK\r\nServer: eris/2\r\nContent-Type: text/html; charset=UTF-8\r\nContent-Length: 6\r\nLast-Modified: (Mon|Tue|Wed|Thu|Fri|Sat|Sun), .. (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) 2... ..:..:.. GMT\r\n\r\njames\n') - self.assertEqual(se, b'10.1.2.3 200 6 127.0.0.1:80 (null) (null) /index.html\n') + self.assertEqual(se, b'10.1.2.3 200 6 127.0.0.1 (null) (null) /index.html\n') def testArgs(self): "Make sure index.html is the same for all arguments" @@ -26,6 +26,12 @@ class ArgTests(unittest.TestCase): self.check_index('-r') self.check_index('-c') + def testPortAppend(self): + p = eris('-p') + so, se = p.communicate(b'GET / HTTP/1.0\r\n\r\n') + self.assertRegexpMatches(so, b'HTTP/1.0 200 OK\r\nServer: eris/2\r\nContent-Type: text/html; charset=UTF-8\r\nContent-Length: 6\r\nLast-Modified: (Mon|Tue|Wed|Thu|Fri|Sat|Sun), .. (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) 2... ..:..:.. GMT\r\n\r\njames\n') + self.assertEqual(se, b'10.1.2.3 200 6 127.0.0.1:80 (null) (null) /index.html\n') + def testBadArgs(self): "Make sure bad arguments actually fail" @@ -57,18 +63,18 @@ class DirTests(BasicTests): def testRootDir(self): so, se = self.get('/', 'empty') self.assertEqual(so, b'HTTP/1.0 200 OK\r\nServer: eris/2\r\nConnection: close\r\nContent-Type: text/html; charset=utf-8\r\n\r\n

Directory Listing: /

\n
\n
\n') - self.assertEqual(se, b'10.1.2.3 200 32 empty:80 (null) (null) /\n') + self.assertEqual(se, b'10.1.2.3 200 32 empty (null) (null) /\n') def testNoTrailingSlash(self): so, se = self.get('/files', 'default') self.assertEqual(so, b'HTTP/1.0 404 Not Found\r\nConnection: close\r\nContent-Length: 50\r\nContent-Type: text/html\r\n\r\nNot FoundNo such file or directory.') - self.assertEqual(se, b'10.1.2.3 404 0 default:80 (null) (null) /files\n') + self.assertEqual(se, b'10.1.2.3 404 0 default (null) (null) /files\n') def testFiles(self): so, se = self.get('/files/', 'default') self.assertEqual(so, b'HTTP/1.0 200 OK\r\nServer: eris/2\r\nConnection: close\r\nContent-Type: text/html; charset=utf-8\r\n\r\n

Directory Listing: /files/

\n
\nParent directory\n[TXT] 1.txt\n
\n') - self.assertEqual(se, b'10.1.2.3 200 110 default:80 (null) (null) /files/\n') + self.assertEqual(se, b'10.1.2.3 200 110 default (null) (null) /files/\n') class CGITests(BasicTests): @@ -76,18 +82,18 @@ class CGITests(BasicTests): def testSet(self): so, se = self.get('/cgi/set.cgi', 'default') - self.assertEqual(so, b'HTTP/1.0 200 OK\r\nServer: eris/2\r\nPragma: no-cache\r\nConnection: close\r\nContent-Type: text/plain\r\n\r\nGATEWAY_INTERFACE:CGI/1.1\nSERVER_PROTOCOL:HTTP/1.0\nSERVER_SOFTWARE:eris/2\nSERVER_NAME:default:80\nSERVER_PORT:80\nREQUEST_METHOD:GET\nREQUEST_URI:/cgi/set.cgi\nSCRIPT_NAME:/cgi/set.cgi\nREMOTE_ADDR:10.1.2.3\nREMOTE_PORT:5858\n') - self.assertEqual(se, b'10.1.2.3 200 245 default:80 (null) (null) /cgi/set.cgi\n') + self.assertEqual(so, b'HTTP/1.0 200 OK\r\nServer: eris/2\r\nPragma: no-cache\r\nConnection: close\r\nContent-Type: text/plain\r\n\r\nGATEWAY_INTERFACE:CGI/1.1\nSERVER_PROTOCOL:HTTP/1.0\nSERVER_SOFTWARE:eris/2\nSERVER_NAME:default\nSERVER_PORT:80\nREQUEST_METHOD:GET\nREQUEST_URI:/cgi/set.cgi\nSCRIPT_NAME:/cgi/set.cgi\nREMOTE_ADDR:10.1.2.3\nREMOTE_PORT:5858\n') + self.assertEqual(se, b'10.1.2.3 200 242 default (null) (null) /cgi/set.cgi\n') def testSetArgs(self): so, se = self.get('/cgi/set.cgi?a=1&b=2&c=3', 'default') - self.assertEqual(so, b'HTTP/1.0 200 OK\r\nServer: eris/2\r\nPragma: no-cache\r\nConnection: close\r\nContent-Type: text/plain\r\n\r\nGATEWAY_INTERFACE:CGI/1.1\nSERVER_PROTOCOL:HTTP/1.0\nSERVER_SOFTWARE:eris/2\nSERVER_NAME:default:80\nSERVER_PORT:80\nREQUEST_METHOD:GET\nREQUEST_URI:/cgi/set.cgi\nSCRIPT_NAME:/cgi/set.cgi\nREMOTE_ADDR:10.1.2.3\nREMOTE_PORT:5858\nQUERY_STRING:a=1&b=2&c=3\n') - self.assertEqual(se, b'10.1.2.3 200 270 default:80 (null) (null) /cgi/set.cgi\n') + self.assertEqual(so, b'HTTP/1.0 200 OK\r\nServer: eris/2\r\nPragma: no-cache\r\nConnection: close\r\nContent-Type: text/plain\r\n\r\nGATEWAY_INTERFACE:CGI/1.1\nSERVER_PROTOCOL:HTTP/1.0\nSERVER_SOFTWARE:eris/2\nSERVER_NAME:default\nSERVER_PORT:80\nREQUEST_METHOD:GET\nREQUEST_URI:/cgi/set.cgi\nSCRIPT_NAME:/cgi/set.cgi\nREMOTE_ADDR:10.1.2.3\nREMOTE_PORT:5858\nQUERY_STRING:a=1&b=2&c=3\n') + self.assertEqual(se, b'10.1.2.3 200 267 default (null) (null) /cgi/set.cgi\n') def testPost(self): so, se = self.post('/cgi/set.cgi', 'default', 'a=1&b=2&c=3') - self.assertEqual(so, b'HTTP/1.0 200 OK\r\nServer: eris/2\r\nPragma: no-cache\r\nConnection: close\r\nContent-Type: text/plain\r\n\r\nGATEWAY_INTERFACE:CGI/1.1\nSERVER_PROTOCOL:HTTP/1.0\nSERVER_SOFTWARE:eris/2\nSERVER_NAME:default:80\nSERVER_PORT:80\nREQUEST_METHOD:POST\nREQUEST_URI:/cgi/set.cgi\nSCRIPT_NAME:/cgi/set.cgi\nREMOTE_ADDR:10.1.2.3\nREMOTE_PORT:5858\nCONTENT_TYPE:application/x-www-form-urlencoded\nCONTENT_LENGTH:11\nForm data: a=1&b=2&c=3') - self.assertEqual(se, b'10.1.2.3 200 333 default:80 (null) (null) /cgi/set.cgi\n') + self.assertEqual(so, b'HTTP/1.0 200 OK\r\nServer: eris/2\r\nPragma: no-cache\r\nConnection: close\r\nContent-Type: text/plain\r\n\r\nGATEWAY_INTERFACE:CGI/1.1\nSERVER_PROTOCOL:HTTP/1.0\nSERVER_SOFTWARE:eris/2\nSERVER_NAME:default\nSERVER_PORT:80\nREQUEST_METHOD:POST\nREQUEST_URI:/cgi/set.cgi\nSCRIPT_NAME:/cgi/set.cgi\nREMOTE_ADDR:10.1.2.3\nREMOTE_PORT:5858\nCONTENT_TYPE:application/x-www-form-urlencoded\nCONTENT_LENGTH:11\nForm data: a=1&b=2&c=3') + self.assertEqual(se, b'10.1.2.3 200 330 default (null) (null) /cgi/set.cgi\n') unittest.main()