Hi, I just found the same bug while I was trying to connect to the iodined from a debian stable using the iodine client from the source code (version 0.5.1).
I have seen in the code, that it checks the version number, but it isn't done correctly. I know that the last version of this code have solved this issue, but the current version in debian stable has this bug, and it is very dangerous. I attach a patch that solves the segmentation fault. Greetings. -- Albert Sellarès GPG id: 0x13053FFE http://www.wekk.net [email protected] Linux User: 324456
diff -bBur a/iodined.c b/iodined.c
--- a/iodined.c 2008-08-06 22:26:36.000000000 +0200
+++ b/iodined.c 2009-04-26 12:55:55.000000000 +0200
@@ -189,7 +188,6 @@
((unpacked[3] & 0xff)));
}
- if (version == VERSION) {
userid = find_available_user();
if (userid >= 0) {
struct sockaddr_in *tempin;
@@ -201,15 +199,16 @@
memcpy(&(users[userid].q), q, sizeof(struct query));
users[userid].encoder = get_base32_encoder();
+ if (version == VERSION) {
send_version_response(dns_fd, VERSION_ACK, users[userid].seed, &users[userid]);
+ } else {
+ send_version_response(dns_fd, VERSION_NACK, VERSION, &users[userid]);
+ }
users[userid].q.id = 0;
} else {
/* No space for another user */
send_version_response(dns_fd, VERSION_FULL, USERS, NULL);
}
- } else {
- send_version_response(dns_fd, VERSION_NACK, VERSION, NULL);
- }
} else if(in[0] == 'L' || in[0] == 'l') {
read = unpack_data(unpacked, sizeof(unpacked), &(in[1]), read - 1, b32);
/* Login phase, handle auth */
signature.asc
Description: Això és una part d'un missatge signada digitalment

