MCPcopy Create free account
hub / github.com/F-Stack/f-stack / ParseFtpPortCommand

Function ParseFtpPortCommand

freebsd/netinet/libalias/alias_ftp.c:340–411  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

338}
339
340static int
341ParseFtpPortCommand(struct libalias *la, char *sptr, int dlen)
342{
343 char ch;
344 int i, state;
345 u_int32_t addr;
346 u_short port;
347 u_int8_t octet;
348
349 /* Format: "PORT A,D,D,R,PO,RT". */
350
351 /* Return if data length is too short. */
352 if (dlen < 18)
353 return (0);
354
355 if (strncasecmp("PORT ", sptr, 5))
356 return (0);
357
358 addr = port = octet = 0;
359 state = 0;
360 for (i = 5; i < dlen; i++) {
361 ch = sptr[i];
362 switch (state) {
363 case 0:
364 if (isspace(ch))
365 break;
366 else
367 state++;
368 case 1:
369 case 3:
370 case 5:
371 case 7:
372 case 9:
373 case 11:
374 if (isdigit(ch)) {
375 octet = ch - '0';
376 state++;
377 } else
378 return (0);
379 break;
380 case 2:
381 case 4:
382 case 6:
383 case 8:
384 if (isdigit(ch))
385 octet = 10 * octet + ch - '0';
386 else if (ch == ',') {
387 addr = (addr << 8) + octet;
388 state++;
389 } else
390 return (0);
391 break;
392 case 10:
393 case 12:
394 if (isdigit(ch))
395 octet = 10 * octet + ch - '0';
396 else if (ch == ',' || state == 12) {
397 port = (port << 8) + octet;

Callers 2

AliasHandleFtpOutFunction · 0.85
AliasHandleFtpInFunction · 0.85

Calls 3

strncasecmpFunction · 0.85
isspaceFunction · 0.85
isdigitFunction · 0.85

Tested by

no test coverage detected