diff --git a/lib/netrc.c b/lib/netrc.c index 7e0447d23..b069c8c49 100644 --- a/lib/netrc.c +++ b/lib/netrc.c @@ -61,11 +61,6 @@ enum host_lookup_state { HOSTEND /* LAST enum */ }; -/* make sure we have room for at least this size: */ -#define LOGINSIZE 64 -#define PASSWORDSIZE 64 - -/* returns -1 on failure, 0 if the host is found, 1 is the host isn't found */ int Curl_parsenetrc(const char *host, char *login, char *password, diff --git a/lib/netrc.h b/lib/netrc.h index 5406d4c5d..4db764df2 100644 --- a/lib/netrc.h +++ b/lib/netrc.h @@ -7,7 +7,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2010, Daniel Stenberg, , et al. + * Copyright (C) 1998 - 2011, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -21,6 +21,12 @@ * KIND, either express or implied. * ***************************************************************************/ + +/* Make sure we have room for at least this size: */ +#define LOGINSIZE 64 +#define PASSWORDSIZE 64 + +/* returns -1 on failure, 0 if the host is found, 1 is the host isn't found */ int Curl_parsenetrc(const char *host, char *login, char *password, diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index 2f4c4bcdc..3f8196d57 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -69,7 +69,8 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \ test569 test570 test571 test572 test804 test805 test806 test807 test573 \ test313 test1115 test578 test579 test1116 test1200 test1201 test1202 \ test1203 test1117 test1118 test1119 test1120 test1300 test1301 test1302 \ - test1303 test320 test321 test322 test323 test324 test1121 test581 test580 + test1303 test320 test321 test322 test323 test324 test1121 test581 test580 \ + test1304 filecheck: @mkdir test-place; \ diff --git a/tests/data/test1304 b/tests/data/test1304 new file mode 100644 index 000000000..572e03302 --- /dev/null +++ b/tests/data/test1304 @@ -0,0 +1,31 @@ + + + +unittest +netrc + + + +# +# Client-side + + +none + + +unittest +netrc_debug + + +netrc parsing unit tests + + +unit1304 + + +machine example.com login admin password passwd +machine curl.example.com login none password none + + + + diff --git a/tests/unit/Makefile.inc b/tests/unit/Makefile.inc index 0db217d86..6dd7a4165 100644 --- a/tests/unit/Makefile.inc +++ b/tests/unit/Makefile.inc @@ -3,9 +3,10 @@ UNITFILES = curlcheck.h # These are all unit test programs -noinst_PROGRAMS = unit1300 unit1301 unit1302 unit1303 +noinst_PROGRAMS = unit1300 unit1301 unit1302 unit1303 unit1304 unit1300_SOURCES = unit1300.c $(UNITFILES) unit1301_SOURCES = unit1301.c $(UNITFILES) unit1302_SOURCES = unit1302.c $(UNITFILES) unit1303_SOURCES = unit1303.c $(UNITFILES) +unit1304_SOURCES = unit1304.c $(UNITFILES) diff --git a/tests/unit/unit1304.c b/tests/unit/unit1304.c new file mode 100644 index 000000000..e7d55a565 --- /dev/null +++ b/tests/unit/unit1304.c @@ -0,0 +1,125 @@ +#include +#include "curl_config.h" +#include "setup.h" + +#include "netrc.h" +#include "curlcheck.h" + +char login[LOGINSIZE]; +char password[PASSWORDSIZE]; + +static CURLcode unit_setup(void) +{ + password[0] = 0; + login[0] = 0; + return CURLE_OK; +} + +static void unit_stop(void) +{ +} + +UNITTEST_START + int result; + + /* + * TODO: We don't specify the filename as it is + * overriden when running the test. + */ + + /* + * Test a non existent host in our netrc file. + */ + result = Curl_parsenetrc("test.example.com", login, password, NULL); + fail_unless(result == 1, "Host not found should return 1"); + fail_unless(password[0] == 0, "password should not have been changed"); + fail_unless(login[0] == 0, "login should not have been changed"); + + /* + * Test a non existent login in our netrc file. + */ + memcpy(login, "me", 2); + result = Curl_parsenetrc("example.com", login, password, NULL); + fail_unless(result == 0, "Host should be found"); + fail_unless(password[0] == 0, "password should not have been changed"); + fail_unless(strncmp(login, "me", 2) == 0, "login should not have been changed"); + + /* + * Test a non existent login and host in our netrc file. + */ + memcpy(login, "me", 2); + result = Curl_parsenetrc("test.example.com", login, password, NULL); + fail_unless(result == 1, "Host should be found"); + fail_unless(password[0] == 0, "password should not have been changed"); + fail_unless(strncmp(login, "me", 2) == 0, "login should not have been changed"); + + /* + * Test a non existent login (substring of an existing one) in our + * netrc file. + */ + memcpy(login, "admi", 4); + result = Curl_parsenetrc("example.com", login, password, NULL); + fail_unless(result == 0, "Host should be found"); + fail_unless(password[0] == 0, "password should not have been changed"); + fail_unless(strncmp(login, "admi", 4) == 0, "login should not have been changed"); + + /* + * Test a non existent login (superstring of an existing one) + * in our netrc file. + */ + memcpy(login, "adminn", 6); + result = Curl_parsenetrc("example.com", login, password, NULL); + fail_unless(result == 0, "Host should be found"); + fail_unless(password[0] == 0, "password should not have been changed"); + fail_unless(strncmp(login, "adminn", 6) == 0, "login should not have been changed"); + + /* + * Test for the first existing host in our netrc file + * with login[0] = 0. + */ + login[0] = 0; + result = Curl_parsenetrc("example.com", login, password, NULL); + fail_unless(result == 0, "Host should have been found"); + fail_unless(strncmp(password, "passwd", 6) == 0, + "password should be 'passwd'"); + fail_unless(strncmp(login, "admin", 5) == 0, "login should be 'admin'"); + + /* + * Test for the first existing host in our netrc file + * with login[0] != 0. + */ + password[0] = 0; + result = Curl_parsenetrc("example.com", login, password, NULL); + fail_unless(result == 0, "Host should have been found"); + fail_unless(strncmp(password, "passwd", 6) == 0, + "password should be 'passwd'"); + fail_unless(strncmp(login, "admin", 5) == 0, "login should be 'admin'"); + + /* + * Test for the second existing host in our netrc file + * with login[0] = 0. + */ + password[0] = 0; + login[0] = 0; + result = Curl_parsenetrc("curl.example.com", login, password, NULL); + fail_unless(result == 0, "Host should have been found"); + fail_unless(strncmp(password, "none", 4) == 0, + "password should be 'none'"); + fail_unless(strncmp(login, "none", 4) == 0, "login should be 'none'"); + + /* + * Test for the second existing host in our netrc file + * with login[0] != 0. + */ + password[0] = 0; + result = Curl_parsenetrc("curl.example.com", login, password, "log/netrc"); + fail_unless(result == 0, "Host should have been found"); + fail_unless(strncmp(password, "none", 4) == 0, + "password should be 'none'"); + fail_unless(strncmp(login, "none", 4) == 0, "login should be 'none'"); + + /* TODO: + * Test over the size limit password / login! + * Test files with a bad format + */ +UNITTEST_STOP