Imported Upstream version 7.50.2
[platform/upstream/curl.git] / tests / unit / unit1304.c
1 /***************************************************************************
2  *                                  _   _ ____  _
3  *  Project                     ___| | | |  _ \| |
4  *                             / __| | | | |_) | |
5  *                            | (__| |_| |  _ <| |___
6  *                             \___|\___/|_| \_\_____|
7  *
8  * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
9  *
10  * This software is licensed as described in the file COPYING, which
11  * you should have received as part of this distribution. The terms
12  * are also available at https://curl.haxx.se/docs/copyright.html.
13  *
14  * You may opt to use, copy, modify, merge, publish, distribute and/or sell
15  * copies of the Software, and permit persons to whom the Software is
16  * furnished to do so, under the terms of the COPYING file.
17  *
18  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19  * KIND, either express or implied.
20  *
21  ***************************************************************************/
22 #include "curlcheck.h"
23 #include "netrc.h"
24 #include "memdebug.h" /* LAST include file */
25
26 static char *login;
27 static char *password;
28 static char filename[64];
29
30 static CURLcode unit_setup(void)
31 {
32   password = strdup("");
33   login = strdup("");
34   if(!password || !login) {
35     Curl_safefree(password);
36     Curl_safefree(login);
37     return CURLE_OUT_OF_MEMORY;
38   }
39   return CURLE_OK;
40 }
41
42 static void unit_stop(void)
43 {
44   Curl_safefree(password);
45   Curl_safefree(login);
46 }
47
48 UNITTEST_START
49   int result;
50
51   static const char* const filename1 = "log/netrc1304";
52   memcpy(filename, filename1, strlen(filename1));
53
54   /*
55    * Test a non existent host in our netrc file.
56    */
57   result = Curl_parsenetrc("test.example.com", &login, &password, filename);
58   fail_unless(result == 1, "Host not found should return 1");
59   abort_unless(password != NULL, "returned NULL!");
60   fail_unless(password[0] == 0, "password should not have been changed");
61   abort_unless(login != NULL, "returned NULL!");
62   fail_unless(login[0] == 0, "login should not have been changed");
63
64   /*
65    * Test a non existent login in our netrc file.
66    */
67   free(login);
68   login = strdup("me");
69   abort_unless(login != NULL, "returned NULL!");
70   result = Curl_parsenetrc("example.com", &login, &password, filename);
71   fail_unless(result == 0, "Host should be found");
72   abort_unless(password != NULL, "returned NULL!");
73   fail_unless(password[0] == 0, "password should not have been changed");
74   abort_unless(login != NULL, "returned NULL!");
75   fail_unless(strncmp(login, "me", 2) == 0,
76               "login should not have been changed");
77
78   /*
79    * Test a non existent login and host in our netrc file.
80    */
81   free(login);
82   login = strdup("me");
83   abort_unless(login != NULL, "returned NULL!");
84   result = Curl_parsenetrc("test.example.com", &login, &password, filename);
85   fail_unless(result == 1, "Host should be found");
86   abort_unless(password != NULL, "returned NULL!");
87   fail_unless(password[0] == 0, "password should not have been changed");
88   abort_unless(login != NULL, "returned NULL!");
89   fail_unless(strncmp(login, "me", 2) == 0,
90               "login should not have been changed");
91
92   /*
93    * Test a non existent login (substring of an existing one) in our
94    * netrc file.
95    */
96   free(login);
97   login = strdup("admi");
98   abort_unless(login != NULL, "returned NULL!");
99   result = Curl_parsenetrc("example.com", &login, &password, filename);
100   fail_unless(result == 0, "Host should be found");
101   abort_unless(password != NULL, "returned NULL!");
102   fail_unless(password[0] == 0, "password should not have been changed");
103   abort_unless(login != NULL, "returned NULL!");
104   fail_unless(strncmp(login, "admi", 4) == 0,
105               "login should not have been changed");
106
107   /*
108    * Test a non existent login (superstring of an existing one)
109    * in our netrc file.
110    */
111   free(login);
112   login = strdup("adminn");
113   abort_unless(login != NULL, "returned NULL!");
114   result = Curl_parsenetrc("example.com", &login, &password, filename);
115   fail_unless(result == 0, "Host should be found");
116   abort_unless(password != NULL, "returned NULL!");
117   fail_unless(password[0] == 0, "password should not have been changed");
118   abort_unless(login != NULL, "returned NULL!");
119   fail_unless(strncmp(login, "adminn", 6) == 0,
120               "login should not have been changed");
121
122   /*
123    * Test for the first existing host in our netrc file
124    * with login[0] = 0.
125    */
126   free(login);
127   login = strdup("");
128   abort_unless(login != NULL, "returned NULL!");
129   result = Curl_parsenetrc("example.com", &login, &password, filename);
130   fail_unless(result == 0, "Host should have been found");
131   abort_unless(password != NULL, "returned NULL!");
132   fail_unless(strncmp(password, "passwd", 6) == 0,
133               "password should be 'passwd'");
134   abort_unless(login != NULL, "returned NULL!");
135   fail_unless(strncmp(login, "admin", 5) == 0, "login should be 'admin'");
136
137   /*
138    * Test for the first existing host in our netrc file
139    * with login[0] != 0.
140    */
141   free(password);
142   password = strdup("");
143   abort_unless(password != NULL, "returned NULL!");
144   result = Curl_parsenetrc("example.com", &login, &password, filename);
145   fail_unless(result == 0, "Host should have been found");
146   abort_unless(password != NULL, "returned NULL!");
147   fail_unless(strncmp(password, "passwd", 6) == 0,
148               "password should be 'passwd'");
149   abort_unless(login != NULL, "returned NULL!");
150   fail_unless(strncmp(login, "admin", 5) == 0, "login should be 'admin'");
151
152   /*
153    * Test for the second existing host in our netrc file
154    * with login[0] = 0.
155    */
156   free(password);
157   password = strdup("");
158   abort_unless(password != NULL, "returned NULL!");
159   free(login);
160   login = strdup("");
161   abort_unless(login != NULL, "returned NULL!");
162   result = Curl_parsenetrc("curl.example.com", &login, &password, filename);
163   fail_unless(result == 0, "Host should have been found");
164   abort_unless(password != NULL, "returned NULL!");
165   fail_unless(strncmp(password, "none", 4) == 0,
166               "password should be 'none'");
167   abort_unless(login != NULL, "returned NULL!");
168   fail_unless(strncmp(login, "none", 4) == 0, "login should be 'none'");
169
170   /*
171    * Test for the second existing host in our netrc file
172    * with login[0] != 0.
173    */
174   free(password);
175   password = strdup("");
176   abort_unless(password != NULL, "returned NULL!");
177   result = Curl_parsenetrc("curl.example.com", &login, &password, filename);
178   fail_unless(result == 0, "Host should have been found");
179   abort_unless(password != NULL, "returned NULL!");
180   fail_unless(strncmp(password, "none", 4) == 0,
181               "password should be 'none'");
182   abort_unless(login != NULL, "returned NULL!");
183   fail_unless(strncmp(login, "none", 4) == 0, "login should be 'none'");
184
185   /* TODO:
186    * Test over the size limit password / login!
187    * Test files with a bad format
188    */
189 UNITTEST_STOP