chiark
/
gitweb
/
~mdw
/
tripe
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
server: Correct handling of interface names in tun interface.
[tripe]
/
server
/
tun-linux.c
diff --git
a/server/tun-linux.c
b/server/tun-linux.c
index 3cfa5d72d03778362fc59eef55163f606e7d8b04..42503548b94ee2bfdf7085fbb3de9769effd1ff1 100644
(file)
--- a/
server/tun-linux.c
+++ b/
server/tun-linux.c
@@
-46,7
+46,6
@@
struct tunnel {
const tunnel_ops *ops; /* Pointer to operations */
sel_file f; /* Selector for TUN/TAP device */
struct peer *p; /* Pointer to my peer */
const tunnel_ops *ops; /* Pointer to operations */
sel_file f; /* Selector for TUN/TAP device */
struct peer *p; /* Pointer to my peer */
- char ifn[IFNAMSIZ]; /* Interface name buffer */
};
/* --- @t_read@ --- *
};
/* --- @t_read@ --- *
@@
-68,7
+67,7
@@
static void t_read(int fd, unsigned mode, void *v)
n = read(fd, buf_i, sizeof(buf_i));
if (n < 0) {
n = read(fd, buf_i, sizeof(buf_i));
if (n < 0) {
- a_warn("TUN", "%s",
t->ifn
, "read-error", "?ERRNO", A_END);
+ a_warn("TUN", "%s",
p_ifname(t->p)
, "read-error", "?ERRNO", A_END);
return;
}
IF_TRACING(T_TUNNEL, {
return;
}
IF_TRACING(T_TUNNEL, {
@@
-94,13
+93,14
@@
static void t_init(void) { return; }
/* --- @t_create@ --- *
*
* Arguments: @peer *p@ = pointer to peer block
/* --- @t_create@ --- *
*
* Arguments: @peer *p@ = pointer to peer block
+ * @char **ifn@ = where to put the interface name
*
* Returns: A tunnel block if it worked, or null on failure.
*
* Use: Initializes a new tunnel.
*/
*
* Returns: A tunnel block if it worked, or null on failure.
*
* Use: Initializes a new tunnel.
*/
-static tunnel *t_create(peer *p)
+static tunnel *t_create(peer *p
, char **ifn
)
{
int fd;
int f;
{
int fd;
int f;
@@
-128,21
+128,12
@@
static tunnel *t_create(peer *p)
sel_initfile(&sel, &t->f, fd, SEL_READ, t_read, t);
sel_addfile(&t->f);
iff.ifr_name[IFNAMSIZ - 1] = 0;
sel_initfile(&sel, &t->f, fd, SEL_READ, t_read, t);
sel_addfile(&t->f);
iff.ifr_name[IFNAMSIZ - 1] = 0;
-
strcpy(t->ifn,
iff.ifr_name);
+
*ifn = xstrdup(
iff.ifr_name);
T( trace(T_TUNNEL, "tun-linux: attached interface %s to peer `%s'",
T( trace(T_TUNNEL, "tun-linux: attached interface %s to peer `%s'",
-
t->
ifn, p_name(p)); )
+
*
ifn, p_name(p)); )
return (t);
}
return (t);
}
-/* --- @t_ifname@ --- *
- *
- * Arguments: @tunnel *t@ = pointer to tunnel block
- *
- * Returns: A pointer to the tunnel's interface name.
- */
-
-static const char *t_ifname(tunnel *t) { return (t->ifn); }
-
/* --- @t_inject@ --- *
*
* Arguments: @tunnel *t@ = pointer to tunnel block
/* --- @t_inject@ --- *
*
* Arguments: @tunnel *t@ = pointer to tunnel block
@@
-182,7
+173,7
@@
const tunnel_ops tun_linux = {
"linux",
t_init,
t_create,
"linux",
t_init,
t_create,
-
t_ifname
,
+
0
,
t_inject,
t_destroy
};
t_inject,
t_destroy
};