diff options
author | Bill Nottingham <notting@redhat.com> | 2006-07-19 14:55:04 +0000 |
---|---|---|
committer | Bill Nottingham <notting@redhat.com> | 2006-07-19 14:55:04 +0000 |
commit | 338d390986d219a996e8c7e854e58a9344ee9346 (patch) | |
tree | d82e8cf94b5bd3c7ed74b22becea3af0f47870fd /src/rename_device.c | |
parent | b9d47ad29e0af2b71725d5da3dc853495c58328e (diff) | |
download | initscripts-338d390986d219a996e8c7e854e58a9344ee9346.tar initscripts-338d390986d219a996e8c7e854e58a9344ee9346.tar.gz initscripts-338d390986d219a996e8c7e854e58a9344ee9346.tar.bz2 initscripts-338d390986d219a996e8c7e854e58a9344ee9346.tar.xz initscripts-338d390986d219a996e8c7e854e58a9344ee9346.zip |
don't loop if there are multiple devices with the same hwaddr (#199242, <markmc@redhat.com>)
Diffstat (limited to 'src/rename_device.c')
-rw-r--r-- | src/rename_device.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/rename_device.c b/src/rename_device.c index 00b14475..295e4461 100644 --- a/src/rename_device.c +++ b/src/rename_device.c @@ -177,15 +177,21 @@ char *get_hwaddr(char *device) { return NULL; } -char *get_config_by_hwaddr(char *hwaddr) { +char *get_config_by_hwaddr(char *hwaddr, char *current) { struct netdev *config; + char *first = NULL; if (!hwaddr) return NULL; - for (config = configs; config; config = config->next) - if (!strcasecmp(config->hwaddr, hwaddr)) + for (config = configs; config; config = config->next) { + if (strcasecmp(config->hwaddr, hwaddr) != 0) + continue; + if (!current || !strcasecmp(config->dev, current)) return config->dev; - return NULL; + if (!first) + first = config->dev; + } + return first; } char *get_device_by_hwaddr(char *hwaddr) { @@ -212,6 +218,7 @@ int do_rename(char *src, char *target) { g_strlcpy(ifr.ifr_name, src, IFNAMSIZ); g_strlcpy(ifr.ifr_newname, target, IFNAMSIZ); ret = ioctl(sock, SIOCSIFNAME, &ifr); + close(sock); return ret; } @@ -240,7 +247,7 @@ void rename_device(char *src, char *target, struct netdev *current) { return; } - nconfig = get_config_by_hwaddr(hw); + nconfig = get_config_by_hwaddr(hw, NULL); curdev = get_device_by_hwaddr(hw); if (nconfig) { @@ -320,7 +327,7 @@ int main(int argc, char **argv) { hw = get_hwaddr(src); if (!hw) goto out_unlock; - target = get_config_by_hwaddr(hw); + target = get_config_by_hwaddr(hw, src); if (!target || !strcmp(src,target)) goto out_unlock; |