Projet

Général

Profil

« Précédent | Suivant » 

Révision bcfab93f

Ajouté par Ermal il y a presque 10 ans

Correct check_reload_status behaviour but correcting the pointer arithmetic! Also while here add more error checking

Voir les différences:

pfPorts/check_reload_status/files/fcgicli.c
132 132
			socketpath = optarg;
133 133
			break;
134 134
		case 'o':
135
			if (!strcasecmp(optarg, "POST"))
135
			if (!strcasecmp(optarg, "POST")) {
136 136
				ispost = 1;
137
			else if(!strcasecmp(optarg, "GET"))
137
				printf("POST mode is not yet implemented\n");
138
				exit(-2);
139
			} else if(!strcasecmp(optarg, "GET"))
138 140
				ispost = 0;
139 141
			else
140 142
				usage();
......
197 199

  
198 200
	uname(&uts);
199 201

  
200
	if (ispost) {
201
		printf("POST is not yet implemented\n");
202
		tmpl = NULL;
203
		
204
	} else {
205
		sbtmp2 = sbuf_new_auto();
206
		if (sbtmp2 == NULL)
207
			errx(-3, "Could not allocate memory\n");
208
		build_nvpair(sbtmp2, "GATEWAY_INTERFACE", (char *)"FastCGI/1.0");
209
		build_nvpair(sbtmp2, "REQUEST_METHOD", (char *)"GET");
210
		build_nvpair(sbtmp2, "NO_HEADERS", (char *)"1");
202
	sbtmp2 = sbuf_new_auto();
203
	if (sbtmp2 == NULL)
204
		errx(-3, "Could not allocate memory\n");
205
	build_nvpair(sbtmp2, "GATEWAY_INTERFACE", (char *)"FastCGI/1.0");
206
	build_nvpair(sbtmp2, "REQUEST_METHOD", (char *)"GET");
207
	build_nvpair(sbtmp2, "NO_HEADERS", (char *)"1");
208
	sbtmp = sbuf_new_auto();
209
	sbuf_printf(sbtmp, "/%s", basename(script));
210
	sbuf_finish(sbtmp);
211
	build_nvpair(sbtmp2, "SCRIPT_FILENAME", script);
212
	build_nvpair(sbtmp2, "SCRIPT_NAME", sbuf_data(sbtmp));
213
	if (data == NULL) {
214
		build_nvpair(sbtmp2, "REQUEST_URI", sbuf_data(sbtmp));
215
	}
216
	build_nvpair(sbtmp2, "DOCUMENT_URI", sbuf_data(sbtmp));
217
	sbuf_delete(sbtmp);
218
	if (data) {
219
		build_nvpair(sbtmp2, "QUERY_STRING", data); 
211 220
		sbtmp = sbuf_new_auto();
212
		sbuf_printf(sbtmp, "/%s", basename(script));
221
		sbuf_printf(sbtmp, "/%s?%s", basename(script), data);
213 222
		sbuf_finish(sbtmp);
214
		build_nvpair(sbtmp2, "SCRIPT_FILENAME", script);
215
		build_nvpair(sbtmp2, "SCRIPT_NAME", sbuf_data(sbtmp));
216
		if (data == NULL) {
217
			build_nvpair(sbtmp2, "REQUEST_URI", sbuf_data(sbtmp));
218
		}
219
		build_nvpair(sbtmp2, "DOCUMENT_URI", sbuf_data(sbtmp));
223
		build_nvpair(sbtmp2, "REQUEST_URI", sbuf_data(sbtmp));
220 224
		sbuf_delete(sbtmp);
221
		if (data) {
222
			build_nvpair(sbtmp2, "QUERY_STRING", data); 
223
			sbtmp = sbuf_new_auto();
224
			sbuf_printf(sbtmp, "/%s?%s", basename(script), data);
225
			sbuf_finish(sbtmp);
226
			build_nvpair(sbtmp2, "REQUEST_URI", sbuf_data(sbtmp));
227
			sbuf_delete(sbtmp);
228
		}
229
		sbuf_finish(sbtmp2);
230

  
231
		len = (3 * sizeof(FCGI_Header)) + sizeof(FCGI_BeginRequestRecord) + sbuf_len(sbtmp2);
232
		buf = calloc(1, len);
233
		if (buf == NULL)
234
			errx(-4, "Cannot allocate memory");
235

  
236
		bHeader = (FCGI_BeginRequestRecord *)buf;
237
		prepare_packet(&bHeader->header, FCGI_BEGIN_REQUEST, sizeof(bHeader->body), 1);
238
		bHeader->body.roleB0 = (unsigned char)FCGI_RESPONDER;
239
		bHeader->body.flags = (unsigned char)(keepalive ? FCGI_KEEP_CONN : 0);
240
		bHeader++;
241
		tmpl = (FCGI_Header *)bHeader;
242
		prepare_packet(tmpl, FCGI_PARAMS, sbuf_len(sbtmp2), 1);
243
		tmpl++;
244
		memcpy((char *)tmpl, sbuf_data(sbtmp2), sbuf_len(sbtmp2));
245
		tmpl = (FCGI_Header *)(((char *)tmpl) + sbuf_len(sbtmp2));
246
		sbuf_delete(sbtmp2);
247 225
	}
226
	sbuf_finish(sbtmp2);
227

  
228
	len = (3 * sizeof(FCGI_Header)) + sizeof(FCGI_BeginRequestRecord) + sbuf_len(sbtmp2);
229
	buf = calloc(1, len);
230
	if (buf == NULL)
231
		errx(-4, "Cannot allocate memory");
232

  
233
	bHeader = (FCGI_BeginRequestRecord *)buf;
234
	prepare_packet(&bHeader->header, FCGI_BEGIN_REQUEST, sizeof(bHeader->body), 1);
235
	bHeader->body.roleB0 = (unsigned char)FCGI_RESPONDER;
236
	bHeader->body.flags = (unsigned char)(keepalive ? FCGI_KEEP_CONN : 0);
237
	bHeader++;
238
	tmpl = (FCGI_Header *)bHeader;
239
	prepare_packet(tmpl, FCGI_PARAMS, sbuf_len(sbtmp2), 1);
240
	tmpl++;
241
	memcpy((char *)tmpl, sbuf_data(sbtmp2), sbuf_len(sbtmp2));
242
	tmpl = (FCGI_Header *)(((char *)tmpl) + sbuf_len(sbtmp2));
243
	sbuf_delete(sbtmp2);
248 244
	prepare_packet(tmpl, FCGI_PARAMS, 0, 1);
249 245
	tmpl++;
250 246
	prepare_packet(tmpl, FCGI_STDIN, 0, 1);

Formats disponibles : Unified diff