Vor Senden von UDP in bytes wandeln.
send_udp() benoetigt (natuerlich) eine Byte-Sequenz. Und klassisch
wird im Intermud nur ASCII benutzt, daher Wandlung nach ASCII-only.
Eigentlich waere deutlich vorher praktischer (da man dann auch
transliterieren kann), aber dazu muesste man den Code deutlich
umbauen.
Change-Id: I39b9644e067589e53a72d3658854950dc31571a4
diff --git a/secure/inetd.c b/secure/inetd.c
index 921a41e..31a63de 100644
--- a/secure/inetd.c
+++ b/secure/inetd.c
@@ -596,11 +596,15 @@
}
header = encode(indices[i]);
body = encode(data[indices[i]]);
+ // Eigentlich sollte encode auch die Wandlung in bytes uebernehmen und
+ // dabei nach ASCII wandeln und ggf. transliterieren. Aber sscanf
+ // braucht wieder strings, daher muss es spaeter passieren (direkt vor
+ // Senden).
if (sscanf(header, "%s:%s", t1, t2) ||
sscanf(header + body, "%s" + DELIMITER + "%s", t1, t2)
)
return 0;
-
+
ret += ({ header + ":" + body });
}
if (data_flag)
@@ -719,7 +723,7 @@
PACKET + ":" + lower_case(LOCAL_NAME) + ":" +
((expect_reply || data[REQUEST] != REPLY)&& data[ID] ?
data[ID] : ++packet_id) + ":";
-
+
/* Allow 8 extra chars: 3 digits + "/" + 3 digits + DELIMITER */
packet_arr = explode_packet(packet,
MAX_PACKET_LEN - (sizeof(header) + 8));
@@ -728,12 +732,15 @@
packet_arr[i] =
header + (i+1) + "/" + max + DELIMITER + packet_arr[i];
}
-
+
for(i = sizeof(packet_arr); i--; )
{
ZDEBUG(sprintf("%O <- %.500O\n",host_data[HOST_IP], packet_arr[i]));
- if (!send_udp(
- host_data[HOST_IP], host_data[HOST_UDP_PORT], packet_arr[i]))
+ // Transliterationen koennten in : oder DELIMETER
+ // resultieren, weswegen das (hier) nicht geht. Daher bleibt nur
+ // uebrig, alles nicht-ASCII wegzuwerfen.
+ if (!send_udp(host_data[HOST_IP], host_data[HOST_UDP_PORT],
+ to_bytes(packet_arr[i], "ASCII")))
return "inetd: Error in sending packet.\n";
}
return 0;