diff -pruN freehoo-3.1.1/src/yahoo-backend.c freehoo-3.1.1-patch/src/yahoo-backend.c --- freehoo-3.1.1/src/yahoo-backend.c 2005-01-26 03:25:16.000000000 +0530 +++ freehoo-3.1.1-patch/src/yahoo-backend.c 2005-01-26 23:25:36.000000000 +0530 @@ -157,7 +157,8 @@ get_local_addresses () { static char addresses[1024]; char buff[1024]; - char gateway[16]; + char interface[16]; + char popen_cmd[32]; char *c = NULL; struct hostent *hn; int i; @@ -167,11 +168,17 @@ get_local_addresses () goto IP_TEST_2; while (fgets (buff, sizeof (buff), f) != NULL) { - c = strtok (buff, " "); + c = strtok (buff, " "); /* dest */ if ((strstr (c, "default") || strstr (c, "0.0.0.0")) && !strstr (c, "127.0.0")) { - c = strtok (NULL, " "); + c = strtok (NULL, " "); /* gateway */ + c = strtok (NULL, " "); /* mask */ + c = strtok (NULL, " "); /* flags */ + c = strtok (NULL, " "); /* mss */ + c = strtok (NULL, " "); /* window */ + c = strtok (NULL, " "); /* irtt */ + c = strtok (NULL, " "); /* iface */ pclose (f); break; } @@ -182,23 +189,19 @@ get_local_addresses () if (!c || !c[0]) goto IP_TEST_2; - strncpy (gateway, c, 16); + strncpy (interface, c, 16); + interface[16] = '\0'; /* just in case */ + if(interface[strlen(interface)-1] == '\n') + interface[strlen(interface)-1] = '\0'; - for (i = strlen (gateway); gateway[i] != '.'; i--) - gateway[i] = 0; - - gateway[i] = 0; - - for (i = strlen (gateway); gateway[i] != '.'; i--) - gateway[i] = 0; - - f = popen ("/sbin/ifconfig -a", "r"); + sprintf(popen_cmd,"/sbin/ifconfig %s",interface); + f = popen (popen_cmd, "r"); if ((int) f < 1) goto IP_TEST_2; while (fgets (buff, sizeof (buff), f) != NULL) { - if (strstr (buff, "inet") && strstr (buff, gateway)) + if (strstr (buff, "inet")) break; } pclose (f);