Never send origin to server. Fixes #122.
authorJelmer Vernooij <jelmer@samba.org>
Sat, 14 Apr 2007 23:10:35 +0000 (01:10 +0200)
committerJelmer Vernooij <jelmer@samba.org>
Sat, 14 Apr 2007 23:10:35 +0000 (01:10 +0200)
NEWS
src/client.c
src/linestack.c
src/network.c

diff --git a/NEWS b/NEWS
index 40d0b19f851b217585c7634f1beb94016ad35241..0b25bd6ef60ea69062ed22bd4d1248179357875c 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -51,6 +51,8 @@ Ctrlproxy 3.0.2 UNRELEASED
 
        * Don't use CHARSETs by default (#117).
 
+       * Never send origin to the server (#122).
+
   FEATURES
 
     * More advanced help support
index a45d82044cc39b9e40efede158d5d94baa82fa6e..2c7bef500474a5d35abbd4ba39e856cdbf70aa05 100644 (file)
@@ -87,7 +87,7 @@ static gboolean process_from_client(struct client *c, struct line *l)
        if (!run_client_filter(c, l, TO_SERVER)) 
                return TRUE;
 
-       g_assert(l->args[0]);
+       g_assert(l->args[0] != NULL);
 
        if(!g_strcasecmp(l->args[0], "QUIT")) {
                disconnect_client(c, "Client exiting");
index 1b43dac3a8e0bf223d9be7c0018b9408433f2f4d..4e1d475fe04cbd60d129a1e7197a507402f3cf7a 100644 (file)
@@ -179,10 +179,8 @@ struct linestack_marker *linestack_get_marker(struct linestack_context *ctx)
        if (ctx == NULL)
                return NULL;
 
-       if (ctx->ops == NULL) 
-               return NULL;
-
-       g_assert(ctx->ops->get_marker != NULL);
+       g_assert (ctx->ops != NULL);
+       g_assert (ctx->ops->get_marker != NULL);
 
        return wrap_linestack_marker(ctx, ctx->ops->get_marker(ctx));
 }
index 5e472bb29e8318ca16e2bddf9fbadff6ed142a2b..46f9c5efb9f85cf4d36a0700a5a3391fab0b251e 100644 (file)
@@ -390,8 +390,10 @@ static gboolean server_send_queue(GIOChannel *ch, GIOCondition cond, gpointer us
        return FALSE;
 }
 
-static gboolean network_send_line_direct(struct network *s, struct client *c, const struct line *l)
+static gboolean network_send_line_direct(struct network *s, struct client *c, const struct line *ol)
 {
+       struct line nl, *l;
+
        g_assert(s->config);
 
        g_assert(s->config->type == NETWORK_TCP ||
@@ -399,13 +401,17 @@ static gboolean network_send_line_direct(struct network *s, struct client *c, co
                 s->config->type == NETWORK_IOCHANNEL ||
                 s->config->type == NETWORK_VIRTUAL);
 
+       l = &nl;
+       memcpy(l, ol, sizeof(struct line));
+       nl.origin = NULL;
+
+       g_assert(l->origin == NULL); /* origin lines should never be sent to the server */
+
        if (s->config->type == NETWORK_VIRTUAL) {
                if (!s->connection.data.virtual.ops) 
                        return FALSE;
                return s->connection.data.virtual.ops->to_server(s, c, l);
-       }
-
-       if (s->connection.outgoing_id == 0) {
+       } else if (s->connection.outgoing_id == 0) {
                GError *error = NULL;
 
                GIOStatus status = irc_send_line(s->connection.outgoing, s->connection.outgoing_iconv, l, &error);
@@ -421,8 +427,9 @@ static gboolean network_send_line_direct(struct network *s, struct client *c, co
 
                s->connection.last_line_sent = time(NULL);
                return TRUE;
-       } else 
+       } else {
                g_queue_push_tail(s->connection.pending_lines, linedup(l));
+       }
 
        return TRUE;
 }
@@ -449,7 +456,7 @@ gboolean network_send_line(struct network *s, struct client *c,
                tmp = l.origin = g_strdup(s->state->me.nick);
        }
 
-       if (l.origin) {
+       if (l.origin != NULL) {
                if (!run_server_filter(s, &l, TO_SERVER)) {
                        g_free(tmp);
                        return TRUE;