1 #include "cgichk.h"
2 
3 /*----------------------------------------------------------------*/
4 // I'm going to keep the old code here...just in case.
5 // You know: for kids.
waitafew(unsigned int del)6 void waitafew(unsigned int del)
7 {
8  /*
9   clock_t  prevtime = clock();
10 
11   while(1)
12     {
13       if ((clock() - prevtime) >= (CLOCKS_PER_SEC * del)) return;
14     }
15 */
16 	sleep(del);
17 }
18 /*----------------------------------------------------------------*/
PRINT(char * arg,...)19 void PRINT(char *arg, ...)
20 {
21 	va_list	v;
22 	char 	*buff;
23 
24 	buff = (char*)malloc(8192);
25 
26 	va_start(v, arg);
27 	vsprintf(buff, arg, v);
28 	va_end(v);
29 
30 	fprintf(parms.OUTPUT, "%s", buff);
31 	fflush(parms.OUTPUT);
32 	free(buff);
33 }
34 /*----------------------------------------------------------------*/
CPRINT(char * arg,...)35 void CPRINT(char *arg, ...)
36 {
37 	va_list v;
38 	char 	*buff;
39 
40 	if (parms.OUTPUT != stdout)
41 		return;
42 
43 	buff = (char*)malloc(8192);
44 
45 	va_start(v, arg);
46 	vsprintf(buff, arg, v);
47 	va_end(v);
48 
49 	printf("%s", buff);
50 	fflush(parms.OUTPUT);
51 	free(buff);
52 }
53 
54 /*----------------------------------------------------------------*/
55 
56 // _url  = string containing full/partial URL
57 // _host = string to put host info in
58 // hl    = max length of _host string
59 // _port = integer to recieve port #
60 // defport = default port #
61 // _path = string containing file path info
62 // pl    = length of _path string
63 
breakup_url(char * _url,char * _host,int hl,int * _port,int defport,char * _path,int pl)64 void breakup_url(	char *_url,
65 					char *_host,	int hl,
66 					int  *_port, 	int defport,
67 					char *_path, 	int pl)
68 {
69 	char 	*u, *t;
70 	int		hasport = 0,
71 			haspath = 0;
72 	char	*end;
73 
74 	// Check for null's
75 	//if (_url == NULL || _host == NULL || _port == NULL  || _path == NULL)
76 	//	return;
77 
78 	memset(_host, 0, hl);
79 	memset(_path, 0, pl);
80 
81 	u 		= _url;
82 	end 	= _url + strlen(_url);
83 
84 	*_port = defport;
85 
86 	if ((t = (char *)strstr(u, "://")))				// skip past http bit
87 		u = t + 3;
88 
89 	// parse hostname and port
90 
91 	if ((t = (char *)index(u, ':')))						// does host have a port #?
92 		hasport = 1;
93 
94 	if ((t = (char *)index(u, '/')))						// does host have path?
95 		haspath = 1;
96 
97 	if (hasport)
98 		t = (char *)index(u, ':');
99 	else
100 		t = (char *)index(u, '/');
101 
102 	if (t == NULL) // found neither :port nor /path
103 	{
104 		if (_host)
105 			strcpy(_host, u);
106 		return;
107 	}
108 
109 	if (_host)
110 		strncpy(_host, u, (t-u));
111 
112 	u = t;
113 
114 	// have hostname at this point
115 
116 	if (hasport)
117 	{
118 		if ((t = (char *)index(u, '/')) == NULL)	// check for path seperator
119 			t = end;								// if none, grab to end of url
120 		else
121 			*t = 0;
122 
123 		u++;
124 
125 		if (_port)
126 			*_port = atoi(u);
127 
128 		u = t;
129 		// FIXME: Convert ascii to int and store in 'port'
130 	}
131 
132 	if (u == end)
133 		return;						// had just host/port, shows over
134 
135 	if (*t == 0)
136 		*t = '/';					// *snicker*
137 									// have port at this point
138 	if (_path)
139 		strcpy(_path, u);
140 }
141 
142 /*----------------------------------------------------------------
143 // FIXME: This needs to be rewritten, or at least have the port number
144 //        be found in the right place.
145 
146 void OLD_breakup_url(char *url, char *base, char *dir, unsigned int *port)
147 {
148   char *a, *b, *p;
149 
150   if ((!url) || (!base) || (!dir) || (!port)) return;
151 
152   a = (char*)strstr(url, "://");
153   if (a)
154     {
155       a+=3;                  // skip http://
156     }
157   else
158     {
159       a = url;
160     }
161                                  //FIXME: ports normally come after the
162                                  //       domain name in URL's, not after dir
163   p = (char*)strchr(a, ':');     // look for port number
164   if (p)
165     {
166       *port = atoi(p+1);
167     }
168   else
169     {
170       *port = 80;
171     }
172 
173   b = (char*)strchr(a, '/');     // look for first directory slash, if any
174   if (b)                         // has it
175     {
176       memcpy(base, a, b-a);
177       a = b;
178       if (p)
179         {
180           memcpy(dir, a, p - a);
181         }
182       else
183         {
184           memcpy(dir, a, strlen(a));
185         }
186     }
187   else                // doesn't have it
188     {
189       if (p)
190         {
191           memcpy(base, a, p - a);
192         }
193       else
194         {
195           memcpy(base, a, strlen(a));
196         }
197     }
198 }
199 */
200 /*----------------------------------------------------------------*/
lowerstr(char * str)201 char *lowerstr(char *str)
202 {
203 	int	x;
204 
205 	for (x = 0; x < strlen(str); x++)
206 	{
207 		str[x] = tolower(str[x]);
208 	}
209 	return str;
210 }
211 /*----------------------------------------------------------------*/
cgichk_strnstr(const char * HAYSTACK,const char * NEEDLE)212 char *cgichk_strnstr(const char *HAYSTACK, const char *NEEDLE)
213 {
214   char	*h, *n, *res;
215 
216   h = (char *)strdup(HAYSTACK);
217   n = (char *)strdup(NEEDLE);
218   lowerstr(h);
219   lowerstr(n);
220 
221   res = (char*)strstr(h, n);
222   free(h);
223   free(n);
224   return res;
225 }
226