- No more %as.
This commit is contained in:
parent
394ed3fb17
commit
a07602c4fd
2 changed files with 48 additions and 85 deletions
126
src/protocol.c
126
src/protocol.c
|
@ -17,7 +17,7 @@
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
|
||||||
$Id: protocol.c,v 1.28.4.63 2000/11/22 18:54:08 guus Exp $
|
$Id: protocol.c,v 1.28.4.64 2000/11/22 19:55:50 guus Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
@ -191,8 +191,9 @@ int id_h(connection_t *cl)
|
||||||
{
|
{
|
||||||
connection_t *old;
|
connection_t *old;
|
||||||
config_t const *cfg;
|
config_t const *cfg;
|
||||||
|
char name[MAX_STRING_SIZE];
|
||||||
cp
|
cp
|
||||||
if(sscanf(cl->buffer, "%*d %as %d %lx %hd", &cl->name, &cl->protocol_version, &cl->options, &cl->port) != 4)
|
if(sscanf(cl->buffer, "%*d "MAX_STRING" %d %lx %hd", name, &cl->protocol_version, &cl->options, &cl->port) != 4)
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad ID from %s"), cl->hostname);
|
syslog(LOG_ERR, _("Got bad ID from %s"), cl->hostname);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -209,12 +210,16 @@ cp
|
||||||
|
|
||||||
/* Check if identity is a valid name */
|
/* Check if identity is a valid name */
|
||||||
|
|
||||||
if(check_id(cl->name))
|
if(check_id(name))
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Peer %s uses invalid identity name"), cl->hostname);
|
syslog(LOG_ERR, _("Peer %s uses invalid identity name"), cl->hostname);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Copy string to cl */
|
||||||
|
|
||||||
|
cl->name = xstrdup(name);
|
||||||
|
|
||||||
/* Load information about peer */
|
/* Load information about peer */
|
||||||
|
|
||||||
if(read_host_config(cl))
|
if(read_host_config(cl))
|
||||||
|
@ -316,10 +321,10 @@ cp
|
||||||
|
|
||||||
int challenge_h(connection_t *cl)
|
int challenge_h(connection_t *cl)
|
||||||
{
|
{
|
||||||
char *buffer;
|
char buffer[MAX_STRING_SIZE];
|
||||||
int len;
|
int len;
|
||||||
cp
|
cp
|
||||||
if(sscanf(cl->buffer, "%*d %as", &buffer) != 1)
|
if(sscanf(cl->buffer, "%*d "MAX_STRING, buffer) != 1)
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad CHALLENGE from %s (%s)"), cl->name, cl->hostname);
|
syslog(LOG_ERR, _("Got bad CHALLENGE from %s (%s)"), cl->name, cl->hostname);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -332,7 +337,6 @@ cp
|
||||||
if(strlen(buffer) != len*2)
|
if(strlen(buffer) != len*2)
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Intruder: wrong challenge length from %s (%s)"), cl->name, cl->hostname);
|
syslog(LOG_ERR, _("Intruder: wrong challenge length from %s (%s)"), cl->name, cl->hostname);
|
||||||
free(buffer);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -350,7 +354,6 @@ cp
|
||||||
if(RSA_private_decrypt(len, buffer, cl->mychallenge, myself->rsa_key, RSA_NO_PADDING) != len) /* See challenge() */
|
if(RSA_private_decrypt(len, buffer, cl->mychallenge, myself->rsa_key, RSA_NO_PADDING) != len) /* See challenge() */
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Error during encryption of challenge for %s (%s)"), cl->name, cl->hostname);
|
syslog(LOG_ERR, _("Error during encryption of challenge for %s (%s)"), cl->name, cl->hostname);
|
||||||
free(buffer);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -361,8 +364,6 @@ cp
|
||||||
syslog(LOG_DEBUG, _("Received random challenge (unencrypted): %s"), buffer);
|
syslog(LOG_DEBUG, _("Received random challenge (unencrypted): %s"), buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(buffer);
|
|
||||||
|
|
||||||
/* Rest is done by send_chal_reply() */
|
/* Rest is done by send_chal_reply() */
|
||||||
cp
|
cp
|
||||||
return send_chal_reply(cl);
|
return send_chal_reply(cl);
|
||||||
|
@ -400,13 +401,12 @@ cp
|
||||||
|
|
||||||
int chal_reply_h(connection_t *cl)
|
int chal_reply_h(connection_t *cl)
|
||||||
{
|
{
|
||||||
char *hishash;
|
char hishash[MAX_STRING_SIZE];
|
||||||
char myhash[SHA_DIGEST_LENGTH];
|
char myhash[SHA_DIGEST_LENGTH];
|
||||||
cp
|
cp
|
||||||
if(sscanf(cl->buffer, "%*d %as", &hishash) != 1)
|
if(sscanf(cl->buffer, "%*d "MAX_STRING, hishash) != 1)
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad CHAL_REPLY from %s (%s)"), cl->name, cl->hostname);
|
syslog(LOG_ERR, _("Got bad CHAL_REPLY from %s (%s)"), cl->name, cl->hostname);
|
||||||
free(hishash);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -415,7 +415,6 @@ cp
|
||||||
if(strlen(hishash) != SHA_DIGEST_LENGTH*2)
|
if(strlen(hishash) != SHA_DIGEST_LENGTH*2)
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Intruder: wrong challenge reply length from %s (%s)"), cl->name, cl->hostname);
|
syslog(LOG_ERR, _("Intruder: wrong challenge reply length from %s (%s)"), cl->name, cl->hostname);
|
||||||
free(hishash);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -438,13 +437,10 @@ cp
|
||||||
hishash[SHA_DIGEST_LENGTH*2] = '\0';
|
hishash[SHA_DIGEST_LENGTH*2] = '\0';
|
||||||
syslog(LOG_DEBUG, _("Expected challenge reply: %s"), hishash);
|
syslog(LOG_DEBUG, _("Expected challenge reply: %s"), hishash);
|
||||||
}
|
}
|
||||||
free(hishash);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
free(hishash);
|
|
||||||
|
|
||||||
/* Identity has now been positively verified.
|
/* Identity has now been positively verified.
|
||||||
If we are accepting this new connection, then send our identity,
|
If we are accepting this new connection, then send our identity,
|
||||||
if we are making this connecting, acknowledge.
|
if we are making this connecting, acknowledge.
|
||||||
|
@ -517,10 +513,10 @@ cp
|
||||||
|
|
||||||
int metakey_h(connection_t *cl)
|
int metakey_h(connection_t *cl)
|
||||||
{
|
{
|
||||||
char *buffer;
|
char buffer[MAX_STRING_SIZE];
|
||||||
int len;
|
int len;
|
||||||
cp
|
cp
|
||||||
if(sscanf(cl->buffer, "%*d %as", &buffer) != 1)
|
if(sscanf(cl->buffer, "%*d "MAX_STRING, buffer) != 1)
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad METAKEY from %s (%s)"), cl->name, cl->hostname);
|
syslog(LOG_ERR, _("Got bad METAKEY from %s (%s)"), cl->name, cl->hostname);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -533,7 +529,6 @@ cp
|
||||||
if(strlen(buffer) != len*2)
|
if(strlen(buffer) != len*2)
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Intruder: wrong meta key length from %s (%s)"), cl->name, cl->hostname);
|
syslog(LOG_ERR, _("Intruder: wrong meta key length from %s (%s)"), cl->name, cl->hostname);
|
||||||
free(buffer);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -554,7 +549,6 @@ cp
|
||||||
if(RSA_private_decrypt(len, buffer, cl->cipher_inkey, myself->rsa_key, RSA_NO_PADDING) != len) /* See challenge() */
|
if(RSA_private_decrypt(len, buffer, cl->cipher_inkey, myself->rsa_key, RSA_NO_PADDING) != len) /* See challenge() */
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Error during encryption of meta key for %s (%s)"), cl->name, cl->hostname);
|
syslog(LOG_ERR, _("Error during encryption of meta key for %s (%s)"), cl->name, cl->hostname);
|
||||||
free(buffer);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -565,8 +559,6 @@ cp
|
||||||
syslog(LOG_DEBUG, _("Received random meta key (unencrypted): %s"), buffer);
|
syslog(LOG_DEBUG, _("Received random meta key (unencrypted): %s"), buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(buffer);
|
|
||||||
|
|
||||||
EVP_DecryptInit(cl->cipher_inctx, EVP_bf_cfb(), cl->cipher_inkey, cl->cipher_inkey + EVP_bf_cfb()->key_len);
|
EVP_DecryptInit(cl->cipher_inctx, EVP_bf_cfb(), cl->cipher_inkey, cl->cipher_inkey + EVP_bf_cfb()->key_len);
|
||||||
|
|
||||||
cp
|
cp
|
||||||
|
@ -678,16 +670,15 @@ cp
|
||||||
|
|
||||||
int add_subnet_h(connection_t *cl)
|
int add_subnet_h(connection_t *cl)
|
||||||
{
|
{
|
||||||
char *subnetstr;
|
char subnetstr[MAX_STRING_SIZE];
|
||||||
char *name;
|
char name[MAX_STRING_SIZE];
|
||||||
connection_t *owner, *p;
|
connection_t *owner, *p;
|
||||||
subnet_t *subnet;
|
subnet_t *subnet;
|
||||||
rbl_t *rbl;
|
rbl_t *rbl;
|
||||||
cp
|
cp
|
||||||
if(sscanf(cl->buffer, "%*d %as %as", &name, &subnetstr) != 2)
|
if(sscanf(cl->buffer, "%*d "MAX_STRING" "MAX_STRING, name, subnetstr) != 2)
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad ADD_SUBNET from %s (%s)"), cl->name, cl->hostname);
|
syslog(LOG_ERR, _("Got bad ADD_SUBNET from %s (%s)"), cl->name, cl->hostname);
|
||||||
free(name); free(subnetstr);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -696,7 +687,6 @@ cp
|
||||||
if(check_id(name))
|
if(check_id(name))
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad ADD_SUBNET from %s (%s): invalid identity name"), cl->name, cl->hostname);
|
syslog(LOG_ERR, _("Got bad ADD_SUBNET from %s (%s): invalid identity name"), cl->name, cl->hostname);
|
||||||
free(name); free(subnetstr);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -705,19 +695,15 @@ cp
|
||||||
if(!(subnet = str2net(subnetstr)))
|
if(!(subnet = str2net(subnetstr)))
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad ADD_SUBNET from %s (%s): invalid subnet string"), cl->name, cl->hostname);
|
syslog(LOG_ERR, _("Got bad ADD_SUBNET from %s (%s): invalid subnet string"), cl->name, cl->hostname);
|
||||||
free(name); free(subnetstr);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
free(subnetstr);
|
|
||||||
|
|
||||||
/* Check if somebody tries to add a subnet of ourself */
|
/* Check if somebody tries to add a subnet of ourself */
|
||||||
|
|
||||||
if(!strcmp(name, myself->name))
|
if(!strcmp(name, myself->name))
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Warning: got ADD_SUBNET from %s (%s) for ourself, restarting"),
|
syslog(LOG_ERR, _("Warning: got ADD_SUBNET from %s (%s) for ourself, restarting"),
|
||||||
cl->name, cl->hostname);
|
cl->name, cl->hostname);
|
||||||
free(name);
|
|
||||||
sighup = 1;
|
sighup = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -728,18 +714,6 @@ cp
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got ADD_SUBNET for %s from %s (%s) which is not in our connection list"),
|
syslog(LOG_ERR, _("Got ADD_SUBNET for %s from %s (%s) which is not in our connection list"),
|
||||||
name, cl->name, cl->hostname);
|
name, cl->name, cl->hostname);
|
||||||
cp_trace();
|
|
||||||
dump_connection_list();
|
|
||||||
{
|
|
||||||
connection_t cl;
|
|
||||||
rbl_t *rbl;
|
|
||||||
cl.name = name;
|
|
||||||
rbl = rbl_search_rbl(connection_tree, &cl);
|
|
||||||
syslog(LOG_ERR, "rbl_search_rbl: %p", rbl);
|
|
||||||
if(rbl)
|
|
||||||
syslog(LOG_ERR, "rbl->data->name: %s", ((connection_t *)rbl->data)->name);
|
|
||||||
}
|
|
||||||
free(name);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -773,16 +747,15 @@ cp
|
||||||
|
|
||||||
int del_subnet_h(connection_t *cl)
|
int del_subnet_h(connection_t *cl)
|
||||||
{
|
{
|
||||||
char *subnetstr;
|
char subnetstr[MAX_STRING_SIZE];
|
||||||
char *name;
|
char name[MAX_STRING_SIZE];
|
||||||
connection_t *owner, *p;
|
connection_t *owner, *p;
|
||||||
subnet_t *subnet;
|
subnet_t *subnet;
|
||||||
rbl_t *rbl;
|
rbl_t *rbl;
|
||||||
cp
|
cp
|
||||||
if(sscanf(cl->buffer, "%*d %as %as", &name, &subnetstr) != 3)
|
if(sscanf(cl->buffer, "%*d "MAX_STRING" "MAX_STRING, name, subnetstr) != 3)
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad DEL_SUBNET from %s (%s)"), cl->name, cl->hostname);
|
syslog(LOG_ERR, _("Got bad DEL_SUBNET from %s (%s)"), cl->name, cl->hostname);
|
||||||
free(name); free(subnetstr);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -791,7 +764,6 @@ cp
|
||||||
if(check_id(name))
|
if(check_id(name))
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad DEL_SUBNET from %s (%s): invalid identity name"), cl->name, cl->hostname);
|
syslog(LOG_ERR, _("Got bad DEL_SUBNET from %s (%s): invalid identity name"), cl->name, cl->hostname);
|
||||||
free(name); free(subnetstr);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -800,7 +772,6 @@ cp
|
||||||
if(!(subnet = str2net(subnetstr)))
|
if(!(subnet = str2net(subnetstr)))
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad DEL_SUBNET from %s (%s): invalid subnet string"), cl->name, cl->hostname);
|
syslog(LOG_ERR, _("Got bad DEL_SUBNET from %s (%s): invalid subnet string"), cl->name, cl->hostname);
|
||||||
free(name); free(subnetstr);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -812,7 +783,6 @@ cp
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Warning: got DEL_SUBNET from %s (%s) for ourself, restarting"),
|
syslog(LOG_ERR, _("Warning: got DEL_SUBNET from %s (%s) for ourself, restarting"),
|
||||||
cl->name, cl->hostname);
|
cl->name, cl->hostname);
|
||||||
free(name);
|
|
||||||
sighup = 1;
|
sighup = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -823,7 +793,6 @@ cp
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got DEL_SUBNET for %s from %s (%s) which is not in our connection list"),
|
syslog(LOG_ERR, _("Got DEL_SUBNET for %s from %s (%s) which is not in our connection list"),
|
||||||
name, cl->name, cl->hostname);
|
name, cl->name, cl->hostname);
|
||||||
free(name);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -855,11 +824,12 @@ cp
|
||||||
int add_host_h(connection_t *cl)
|
int add_host_h(connection_t *cl)
|
||||||
{
|
{
|
||||||
connection_t *old, *new, *p;
|
connection_t *old, *new, *p;
|
||||||
|
char name[MAX_STRING_SIZE];
|
||||||
rbl_t *rbl;
|
rbl_t *rbl;
|
||||||
cp
|
cp
|
||||||
new = new_connection();
|
new = new_connection();
|
||||||
|
|
||||||
if(sscanf(cl->buffer, "%*d %as %lx:%d %lx", &new->name, &new->address, &new->port, &new->options) != 4)
|
if(sscanf(cl->buffer, "%*d "MAX_STRING" %lx:%d %lx", name, &new->address, &new->port, &new->options) != 4)
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad ADD_HOST from %s (%s)"), cl->name, cl->hostname);
|
syslog(LOG_ERR, _("Got bad ADD_HOST from %s (%s)"), cl->name, cl->hostname);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -867,7 +837,7 @@ cp
|
||||||
|
|
||||||
/* Check if identity is a valid name */
|
/* Check if identity is a valid name */
|
||||||
|
|
||||||
if(check_id(new->name))
|
if(check_id(name))
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad ADD_HOST from %s (%s): invalid identity name"), cl->name, cl->hostname);
|
syslog(LOG_ERR, _("Got bad ADD_HOST from %s (%s): invalid identity name"), cl->name, cl->hostname);
|
||||||
free_connection(new);
|
free_connection(new);
|
||||||
|
@ -890,13 +860,13 @@ cp
|
||||||
|
|
||||||
/* Check if the new host already exists in the connnection list */
|
/* Check if the new host already exists in the connnection list */
|
||||||
|
|
||||||
if((old = lookup_id(new->name)))
|
if((old = lookup_id(name)))
|
||||||
{
|
{
|
||||||
if((new->address == old->address) && (new->port == old->port))
|
if((new->address == old->address) && (new->port == old->port))
|
||||||
{
|
{
|
||||||
if(debug_lvl >= DEBUG_CONNECTIONS)
|
if(debug_lvl >= DEBUG_CONNECTIONS)
|
||||||
syslog(LOG_NOTICE, _("Got duplicate ADD_HOST for %s (%s) from %s (%s)"),
|
syslog(LOG_NOTICE, _("Got duplicate ADD_HOST for %s (%s) from %s (%s)"),
|
||||||
old->name, old->hostname, new->name, new->hostname);
|
old->name, old->hostname, name, new->hostname);
|
||||||
free_connection(new);
|
free_connection(new);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -912,6 +882,7 @@ cp
|
||||||
|
|
||||||
/* Hook it up into the connection */
|
/* Hook it up into the connection */
|
||||||
|
|
||||||
|
new->name = xstrdup(name);
|
||||||
connection_add(new);
|
connection_add(new);
|
||||||
id_add(new);
|
id_add(new);
|
||||||
|
|
||||||
|
@ -949,14 +920,14 @@ cp
|
||||||
|
|
||||||
int del_host_h(connection_t *cl)
|
int del_host_h(connection_t *cl)
|
||||||
{
|
{
|
||||||
char *name;
|
char name[MAX_STRING_SIZE];
|
||||||
ip_t address;
|
ip_t address;
|
||||||
port_t port;
|
port_t port;
|
||||||
long int options;
|
long int options;
|
||||||
connection_t *old, *p;
|
connection_t *old, *p;
|
||||||
rbl_t *rbl;
|
rbl_t *rbl;
|
||||||
cp
|
cp
|
||||||
if(sscanf(cl->buffer, "%*d %as %lx:%d %lx", &name, &address, &port, &options) != 4)
|
if(sscanf(cl->buffer, "%*d "MAX_STRING" %lx:%d %lx", name, &address, &port, &options) != 4)
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad DEL_HOST from %s (%s)"),
|
syslog(LOG_ERR, _("Got bad DEL_HOST from %s (%s)"),
|
||||||
cl->name, cl->hostname);
|
cl->name, cl->hostname);
|
||||||
|
@ -968,7 +939,6 @@ cp
|
||||||
if(check_id(name))
|
if(check_id(name))
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad DEL_HOST from %s (%s): invalid identity name"), cl->name, cl->hostname);
|
syslog(LOG_ERR, _("Got bad DEL_HOST from %s (%s): invalid identity name"), cl->name, cl->hostname);
|
||||||
free(name);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -978,7 +948,6 @@ cp
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Warning: got DEL_HOST from %s (%s) for ourself, restarting"),
|
syslog(LOG_ERR, _("Warning: got DEL_HOST from %s (%s) for ourself, restarting"),
|
||||||
cl->name, cl->hostname);
|
cl->name, cl->hostname);
|
||||||
free(name);
|
|
||||||
sighup = 1;
|
sighup = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -989,7 +958,6 @@ cp
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got DEL_HOST from %s (%s) for %s which is not in our connection list"),
|
syslog(LOG_ERR, _("Got DEL_HOST from %s (%s) for %s which is not in our connection list"),
|
||||||
name, cl->name, cl->hostname);
|
name, cl->name, cl->hostname);
|
||||||
free(name);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1032,9 +1000,9 @@ cp
|
||||||
int status_h(connection_t *cl)
|
int status_h(connection_t *cl)
|
||||||
{
|
{
|
||||||
int statusno;
|
int statusno;
|
||||||
char *statusstring;
|
char statusstring[MAX_STRING_SIZE];
|
||||||
cp
|
cp
|
||||||
if(sscanf(cl->buffer, "%*d %d %as", &statusno, &statusstring) != 2)
|
if(sscanf(cl->buffer, "%*d %d "MAX_STRING, &statusno, statusstring) != 2)
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad STATUS from %s (%s)"),
|
syslog(LOG_ERR, _("Got bad STATUS from %s (%s)"),
|
||||||
cl->name, cl->hostname);
|
cl->name, cl->hostname);
|
||||||
|
@ -1048,7 +1016,6 @@ cp
|
||||||
}
|
}
|
||||||
|
|
||||||
cp
|
cp
|
||||||
free(statusstring);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1063,9 +1030,9 @@ cp
|
||||||
int error_h(connection_t *cl)
|
int error_h(connection_t *cl)
|
||||||
{
|
{
|
||||||
int errno;
|
int errno;
|
||||||
char *errorstring;
|
char errorstring[MAX_STRING_SIZE];
|
||||||
cp
|
cp
|
||||||
if(sscanf(cl->buffer, "%*d %d %as", &errno, &errorstring) != 2)
|
if(sscanf(cl->buffer, "%*d %d "MAX_STRING, &errno, errorstring) != 2)
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad ERROR from %s (%s)"),
|
syslog(LOG_ERR, _("Got bad ERROR from %s (%s)"),
|
||||||
cl->name, cl->hostname);
|
cl->name, cl->hostname);
|
||||||
|
@ -1078,7 +1045,6 @@ cp
|
||||||
cl->name, cl->hostname, strerror(errno), errorstring);
|
cl->name, cl->hostname, strerror(errno), errorstring);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(errorstring);
|
|
||||||
terminate_connection(cl);
|
terminate_connection(cl);
|
||||||
cp
|
cp
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1148,10 +1114,10 @@ cp
|
||||||
|
|
||||||
int key_changed_h(connection_t *cl)
|
int key_changed_h(connection_t *cl)
|
||||||
{
|
{
|
||||||
char *from_id;
|
char from_id[MAX_STRING_SIZE];
|
||||||
connection_t *from;
|
connection_t *from;
|
||||||
cp
|
cp
|
||||||
if(sscanf(cl->buffer, "%*d %as", &from_id) != 1)
|
if(sscanf(cl->buffer, "%*d "MAX_STRING, from_id) != 1)
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad KEY_CHANGED from %s (%s)"),
|
syslog(LOG_ERR, _("Got bad KEY_CHANGED from %s (%s)"),
|
||||||
cl->name, cl->hostname);
|
cl->name, cl->hostname);
|
||||||
|
@ -1162,12 +1128,9 @@ cp
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got KEY_CHANGED from %s (%s) origin %s which does not exist in our connection list"),
|
syslog(LOG_ERR, _("Got KEY_CHANGED from %s (%s) origin %s which does not exist in our connection list"),
|
||||||
cl->name, cl->hostname, from_id);
|
cl->name, cl->hostname, from_id);
|
||||||
free(from_id);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
free(from_id);
|
|
||||||
|
|
||||||
from->status.validkey = 0;
|
from->status.validkey = 0;
|
||||||
from->status.waitingforkey = 0;
|
from->status.waitingforkey = 0;
|
||||||
|
|
||||||
|
@ -1185,11 +1148,12 @@ cp
|
||||||
|
|
||||||
int req_key_h(connection_t *cl)
|
int req_key_h(connection_t *cl)
|
||||||
{
|
{
|
||||||
char *from_id, *to_id;
|
char from_id[MAX_STRING_SIZE];
|
||||||
|
char to_id[MAX_STRING_SIZE];
|
||||||
connection_t *from, *to;
|
connection_t *from, *to;
|
||||||
char pktkey[129];
|
char pktkey[129];
|
||||||
cp
|
cp
|
||||||
if(sscanf(cl->buffer, "%*d %as %as", &from_id, &to_id) != 2)
|
if(sscanf(cl->buffer, "%*d "MAX_STRING" "MAX_STRING, from_id, to_id) != 2)
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad REQ_KEY from %s (%s)"),
|
syslog(LOG_ERR, _("Got bad REQ_KEY from %s (%s)"),
|
||||||
cl->name, cl->hostname);
|
cl->name, cl->hostname);
|
||||||
|
@ -1200,7 +1164,6 @@ cp
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got REQ_KEY from %s (%s) origin %s which does not exist in our connection list"),
|
syslog(LOG_ERR, _("Got REQ_KEY from %s (%s) origin %s which does not exist in our connection list"),
|
||||||
cl->name, cl->hostname, from_id);
|
cl->name, cl->hostname, from_id);
|
||||||
free(from_id); free(to_id);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1218,7 +1181,6 @@ cp
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got REQ_KEY from %s (%s) destination %s which does not exist in our connection list"),
|
syslog(LOG_ERR, _("Got REQ_KEY from %s (%s) destination %s which does not exist in our connection list"),
|
||||||
cl->name, cl->hostname, to_id);
|
cl->name, cl->hostname, to_id);
|
||||||
free(from_id); free(to_id);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1232,7 +1194,6 @@ cp
|
||||||
send_req_key(from, to);
|
send_req_key(from, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(from_id); free(to_id);
|
|
||||||
cp
|
cp
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1246,11 +1207,13 @@ cp
|
||||||
|
|
||||||
int ans_key_h(connection_t *cl)
|
int ans_key_h(connection_t *cl)
|
||||||
{
|
{
|
||||||
char *from_id, *to_id, *pktkey;
|
char from_id[MAX_STRING_SIZE];
|
||||||
|
char to_id[MAX_STRING_SIZE];
|
||||||
|
char pktkey[MAX_STRING_SIZE];
|
||||||
int keylength;
|
int keylength;
|
||||||
connection_t *from, *to;
|
connection_t *from, *to;
|
||||||
cp
|
cp
|
||||||
if(sscanf(cl->buffer, "%*d %as %as %as", &from_id, &to_id, &pktkey) != 3)
|
if(sscanf(cl->buffer, "%*d "MAX_STRING" "MAX_STRING" "MAX_STRING, from_id, to_id, pktkey) != 3)
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad ANS_KEY from %s (%s)"),
|
syslog(LOG_ERR, _("Got bad ANS_KEY from %s (%s)"),
|
||||||
cl->name, cl->hostname);
|
cl->name, cl->hostname);
|
||||||
|
@ -1261,7 +1224,6 @@ cp
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got ANS_KEY from %s (%s) origin %s which does not exist in our connection list"),
|
syslog(LOG_ERR, _("Got ANS_KEY from %s (%s) origin %s which does not exist in our connection list"),
|
||||||
cl->name, cl->hostname, from_id);
|
cl->name, cl->hostname, from_id);
|
||||||
free(from_id); free(to_id); free(pktkey);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1273,7 +1235,6 @@ cp
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad ANS_KEY from %s (%s) origin %s: invalid key length"),
|
syslog(LOG_ERR, _("Got bad ANS_KEY from %s (%s) origin %s: invalid key length"),
|
||||||
cl->name, cl->hostname, from->name);
|
cl->name, cl->hostname, from->name);
|
||||||
free(from_id); free(to_id); free(pktkey);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1285,7 +1246,6 @@ cp
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got ANS_KEY from %s (%s) destination %s which does not exist in our connection list"),
|
syslog(LOG_ERR, _("Got ANS_KEY from %s (%s) destination %s which does not exist in our connection list"),
|
||||||
cl->name, cl->hostname, to_id);
|
cl->name, cl->hostname, to_id);
|
||||||
free(from_id); free(to_id);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
send_ans_key(from, to, pktkey);
|
send_ans_key(from, to, pktkey);
|
||||||
|
@ -1296,15 +1256,13 @@ cp
|
||||||
if(from->cipher_pktkey)
|
if(from->cipher_pktkey)
|
||||||
free(from->cipher_pktkey);
|
free(from->cipher_pktkey);
|
||||||
|
|
||||||
|
from->cipher_pktkey = xstrdup(pktkey);
|
||||||
keylength /= 2;
|
keylength /= 2;
|
||||||
hex2bin(pktkey, pktkey, keylength);
|
hex2bin(pktkey, pktkey, keylength);
|
||||||
pktkey[keylength] = '\0';
|
pktkey[keylength] = '\0';
|
||||||
from->cipher_pktkey = pktkey;
|
|
||||||
|
|
||||||
from->status.validkey = 1;
|
from->status.validkey = 1;
|
||||||
from->status.waitingforkey = 0;
|
from->status.waitingforkey = 0;
|
||||||
|
|
||||||
free(from_id); free(to_id);
|
|
||||||
cp
|
cp
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
|
||||||
$Id: protocol.h,v 1.5.4.16 2000/11/20 19:12:16 guus Exp $
|
$Id: protocol.h,v 1.5.4.17 2000/11/22 19:55:53 guus Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __TINC_PROTOCOL_H__
|
#ifndef __TINC_PROTOCOL_H__
|
||||||
|
@ -45,6 +45,11 @@ enum {
|
||||||
LAST /* Guardian for the highest request number */
|
LAST /* Guardian for the highest request number */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Maximum size of strings in a request */
|
||||||
|
|
||||||
|
#define MAX_STRING_SIZE 1024
|
||||||
|
#define MAX_STRING "%1024s"
|
||||||
|
|
||||||
extern int (*request_handlers[])(connection_t*);
|
extern int (*request_handlers[])(connection_t*);
|
||||||
|
|
||||||
extern int send_id(connection_t*);
|
extern int send_id(connection_t*);
|
||||||
|
|
Loading…
Add table
Reference in a new issue