You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by sa...@apache.org on 2007/06/28 11:22:21 UTC
svn commit: r551513 -
/webservices/axis2/trunk/c/util/src/platforms/unix/uuid_gen_unix.c
Author: sahan
Date: Thu Jun 28 02:22:21 2007
New Revision: 551513
URL: http://svn.apache.org/viewvc?view=rev&rev=551513
Log:
Fixing a bug in get_mac_addr logic ("eth0" was hardcoded)
Modified:
webservices/axis2/trunk/c/util/src/platforms/unix/uuid_gen_unix.c
Modified: webservices/axis2/trunk/c/util/src/platforms/unix/uuid_gen_unix.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/util/src/platforms/unix/uuid_gen_unix.c?view=diff&rev=551513&r1=551512&r2=551513
==============================================================================
--- webservices/axis2/trunk/c/util/src/platforms/unix/uuid_gen_unix.c (original)
+++ webservices/axis2/trunk/c/util/src/platforms/unix/uuid_gen_unix.c Thu Jun 28 02:22:21 2007
@@ -212,25 +212,50 @@
axutil_uuid_get_mac_addr()
{
struct ifreq ifr;
+ struct ifreq *IFR;
+ struct ifconf ifc;
struct sockaddr *sa;
int s = 0;
int i = 0;
char *buffer = NULL;
+ char buf[1024];
+ int ok = AXIS2_FALSE;
if ((s = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
return NULL;
- sprintf(ifr.ifr_name, "eth0");
- if (ioctl(s, SIOCGIFHWADDR, &ifr) < 0)
+
+ ifc.ifc_len = sizeof(buf);
+ ifc.ifc_buf = buf;
+ ioctl(s, SIOCGIFCONF, &ifc);
+
+ IFR = ifc.ifc_req;
+
+ for(i = ifc.ifc_len/sizeof(struct ifreq); --i >=0; IFR++)
{
- close(s);
- return NULL;
+ strcpy(ifr.ifr_name, IFR->ifr_name);
+
+ /*sprintf(ifr.ifr_name, "eth0");*/
+ if (ioctl(s, SIOCGIFFLAGS, &ifr) == 0)
+ {
+ if(!(ifr.ifr_flags & IFF_LOOPBACK))
+ {
+
+ if (ioctl(s, SIOCGIFHWADDR, &ifr) == 0)
+ {
+ ok = AXIS2_TRUE;
+ break;
+ }
+ }
+ }
+ }
+ if(ok)
+ {
+ buffer = (char*)malloc(6 * sizeof(char));
+ sa = (struct sockaddr *) & ifr.ifr_addr;
+ for (i = 0; i < 6; i++)
+ buffer[i] = (unsigned char)(sa->sa_data[i] & 0xff);
}
- buffer = (char*)malloc(6 * sizeof(char));
-
- sa = (struct sockaddr *) & ifr.ifr_addr;
- for (i = 0; i < 6; i++)
- buffer[i] = (unsigned char)(sa->sa_data[i] & 0xff);
close(s);
return buffer;
}
@@ -304,8 +329,8 @@
char * AXIS2_CALL
axutil_uuid_get_mac_addr()
{
- char hostname[MAXHOSTNAMELEN];
- char *data_ptr;
+ char hostname[MAXHOSTNAMELEN];
+ char *data_ptr;
struct hostent *he;
struct arpreq ar;
struct sockaddr_in *sa;
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org