CBL-Mariner/SPECS/net-tools/CVS-20030911-nameif.c_sync....

91 строка
2.4 KiB
Diff

Sync with upstream CVS, complete log:
Revision 1.4 - Thu Sep 11 03:46:49 2003 UTC by ak
Fix off by one in name length checking
Revision 1.3 - Thu Mar 6 23:26:52 2003 UTC by ecki
Fix Debian Bug#178209, Fix RedHat Bug#85748: nameif segfaults
Revision 1.2 - Sun Nov 25 06:55:06 2001 UTC by ecki
fixed debian bug#111642 reported by Jonathan Amery <jdamery@pick.ucam.org>
(newline missing in nameif usage)
Index: net-tools/nameif.c
===================================================================
--- net-tools.orig/nameif.c
+++ net-tools/nameif.c
@@ -3,7 +3,7 @@
* Writen 2000 by Andi Kleen.
* Subject to the Gnu Public License, version 2.
* TODO: make it support token ring etc.
- * $Id: nameif.c,v 1.1 2000/10/18 17:26:29 ak Exp $
+ * $Id: nameif.c,v 1.4 2003/09/11 03:46:49 ak Exp $
*/
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
@@ -117,7 +117,8 @@ int getmac(char *name, unsigned char *ma
}
struct change {
- struct change *next,**pprev;
+ struct change *next;
+ int found;
char ifname[IFNAMSIZ+1];
unsigned char mac[6];
};
@@ -139,10 +140,7 @@ int addchange(char *p, struct change *ch
ch->ifname, pos);
if (parsemac(p,ch->mac) < 0)
complain(_("cannot parse MAC `%s' at %s"), p, pos);
- if (clist)
- clist->pprev = &ch->next;
ch->next = clist;
- ch->pprev = &clist;
clist = ch;
return 0;
}
@@ -177,7 +175,7 @@ void readconf(void)
if (*p == '\0')
continue;
n = strcspn(p, " \t");
- if (n > IFNAMSIZ)
+ if (n > IFNAMSIZ-1)
complain(_("interface name too long at line %d"), line);
memcpy(ch->ifname, p, n);
ch->ifname[n] = 0;
@@ -200,7 +198,7 @@ struct option lopt[] = {
void usage(void)
{
- fprintf(stderr, _("usage: nameif [-c configurationfile] [-s] {ifname macaddress}"));
+ fprintf(stderr, _("usage: nameif [-c configurationfile] [-s] {ifname macaddress}\n"));
exit(1);
}
@@ -277,21 +275,21 @@ int main(int ac, char **av)
ch = lookupmac(mac);
if (!ch)
continue;
-
- *ch->pprev = ch->next;
+
+ ch->found = 1;
if (strcmp(p, ch->ifname)) {
if (setname(p, ch->ifname) < 0)
complain(_("cannot change name of %s to %s: %s"),
p, ch->ifname, strerror(errno));
}
- free(ch);
}
fclose(ifh);
while (clist) {
struct change *ch = clist;
clist = clist->next;
- warning(_("interface '%s' not found"), ch->ifname);
+ if (!ch->found)
+ warning(_("interface '%s' not found"), ch->ifname);
free(ch);
}