mirror of
https://github.com/haiwen/ccnet-server.git
synced 2025-04-27 18:25:06 +00:00
Merge pull request #42 from haiwen/clear_ccnet_conf
Clean ccnet_conf and mykey.peer.
This commit is contained in:
commit
4ae8ea222f
@ -3,10 +3,6 @@
|
||||
#ifndef CCNET_CLIENT_SESSION_H
|
||||
#define CCNET_CLIENT_SESSION_H
|
||||
|
||||
|
||||
#define SESSION_ID_LENGTH 40
|
||||
|
||||
|
||||
#include <glib.h>
|
||||
#include <glib-object.h>
|
||||
|
||||
|
@ -23,8 +23,6 @@ struct _CcnetSessionBase {
|
||||
char id[41];
|
||||
unsigned char id_sha1[20];
|
||||
|
||||
char *user_name;
|
||||
|
||||
char *name;
|
||||
|
||||
int public_port;
|
||||
|
@ -29,8 +29,6 @@ static inline char *GetDeafaultDir()
|
||||
#define PREFS_FILE_NAME "prefs.conf"
|
||||
#endif
|
||||
|
||||
#define PEER_KEYFILE "mykey.peer"
|
||||
|
||||
#define MAX_USERNAME_LEN 20
|
||||
#define MIN_USERNAME_LEN 2
|
||||
|
||||
|
@ -47,7 +47,8 @@
|
||||
|
||||
G_DEFINE_TYPE (CcnetClient, ccnet_client, CCNET_TYPE_SESSION_BASE);
|
||||
|
||||
|
||||
#define DEFAULT_NAME "server"
|
||||
#define DEFAULT_ID "8e4b13b49ca79f35732d9f44a0804940d985627c"
|
||||
|
||||
static void handle_packet (ccnet_packet *packet, void *vclient);
|
||||
static void ccnet_client_free (GObject *object);
|
||||
@ -134,8 +135,7 @@ int
|
||||
ccnet_client_load_confdir (CcnetClient *client, const char *central_config_dir_r, const char *config_dir_r)
|
||||
{
|
||||
char *config_file = NULL, *config_dir = NULL, *central_config_dir = NULL;
|
||||
char *id = NULL, *name = NULL, *port_str = NULL,
|
||||
*user_name = NULL, *service_url = NULL;
|
||||
char *port_str = NULL, *service_url = NULL;
|
||||
unsigned char sha1[20];
|
||||
GKeyFile *key_file;
|
||||
CcnetSessionBase *base = CCNET_SESSION_BASE(client);
|
||||
@ -169,28 +169,20 @@ ccnet_client_load_confdir (CcnetClient *client, const char *central_config_dir_r
|
||||
goto onerror;
|
||||
}
|
||||
|
||||
id = ccnet_util_key_file_get_string (key_file, "General", "ID");
|
||||
user_name = ccnet_util_key_file_get_string (key_file, "General", "USER_NAME");
|
||||
name = ccnet_util_key_file_get_string (key_file, "General", "NAME");
|
||||
service_url = ccnet_util_key_file_get_string (key_file, "General", "SERVICE_URL");
|
||||
port_str = ccnet_util_key_file_get_string (key_file, "Client", "PORT");
|
||||
|
||||
if ( (id == NULL) || (strlen (id) != SESSION_ID_LENGTH)
|
||||
|| (ccnet_util_hex_to_sha1 (id, sha1) < 0) )
|
||||
{
|
||||
ccnet_error ("Wrong ID\n");
|
||||
g_key_file_free (key_file);
|
||||
goto onerror;
|
||||
}
|
||||
|
||||
|
||||
memcpy (base->id, id, 40);
|
||||
memcpy (base->id, DEFAULT_ID, 40);
|
||||
base->id[40] = '\0';
|
||||
base->user_name = g_strdup(user_name);
|
||||
base->name = g_strdup(name);
|
||||
if (ccnet_util_hex_to_sha1 (base->id, sha1) < 0) {
|
||||
ccnet_error ("Failed to get sha1 of ID.\n");
|
||||
g_key_file_free (key_file);
|
||||
goto onerror;
|
||||
}
|
||||
memcpy (base->id_sha1, sha1, 20);
|
||||
if (service_url)
|
||||
base->service_url = g_strdup(service_url);
|
||||
base->name = DEFAULT_NAME;
|
||||
|
||||
client->config_file = g_strdup(config_file);
|
||||
client->config_dir = config_dir;
|
||||
@ -199,9 +191,6 @@ ccnet_client_load_confdir (CcnetClient *client, const char *central_config_dir_r
|
||||
if (port_str)
|
||||
client->daemon_port = atoi (port_str);
|
||||
|
||||
g_free (id);
|
||||
g_free (name);
|
||||
g_free (user_name);
|
||||
g_free (port_str);
|
||||
g_free (config_file);
|
||||
g_free (service_url);
|
||||
@ -209,9 +198,6 @@ ccnet_client_load_confdir (CcnetClient *client, const char *central_config_dir_r
|
||||
return 0;
|
||||
|
||||
onerror:
|
||||
g_free (id);
|
||||
g_free (name);
|
||||
g_free (user_name);
|
||||
g_free (port_str);
|
||||
g_free (config_file);
|
||||
g_free (service_url);
|
||||
|
@ -8,7 +8,6 @@ G_DEFINE_TYPE (CcnetSessionBase, ccnet_session_base, G_TYPE_OBJECT);
|
||||
|
||||
enum {
|
||||
P_ID = 1,
|
||||
P_USER_NAME,
|
||||
P_NAME,
|
||||
P_PUBLIC_PORT,
|
||||
P_NET_STATUS,
|
||||
@ -31,10 +30,6 @@ set_property (GObject *object, guint property_id,
|
||||
g_free (session->name);
|
||||
session->name = g_strdup (g_value_get_string(v));
|
||||
break;
|
||||
case P_USER_NAME:
|
||||
g_free (session->user_name);
|
||||
session->user_name = g_strdup (g_value_get_string(v));
|
||||
break;
|
||||
case P_PUBLIC_PORT:
|
||||
session->public_port = g_value_get_int (v);
|
||||
break;
|
||||
@ -63,9 +58,6 @@ get_property (GObject *object, guint property_id,
|
||||
case P_ID:
|
||||
g_value_set_string (v, session->id);
|
||||
break;
|
||||
case P_USER_NAME:
|
||||
g_value_set_string (v, session->user_name);
|
||||
break;
|
||||
case P_NAME:
|
||||
g_value_set_string (v, session->name);
|
||||
break;
|
||||
@ -89,7 +81,6 @@ finalize(GObject *gobject)
|
||||
{
|
||||
CcnetSessionBase *s = CCNET_SESSION_BASE(gobject);
|
||||
|
||||
g_free (s->user_name);
|
||||
g_free (s->name);
|
||||
g_free (s->relay_id);
|
||||
|
||||
@ -110,10 +101,6 @@ ccnet_session_base_class_init (CcnetSessionBaseClass *klass)
|
||||
g_param_spec_string ("id", NULL, "ID",
|
||||
NULL, G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class, P_USER_NAME,
|
||||
g_param_spec_string ("user-name", NULL, "User Name",
|
||||
NULL, G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class, P_NAME,
|
||||
g_param_spec_string ("name", NULL, "Name",
|
||||
NULL, G_PARAM_READWRITE));
|
||||
|
@ -28,6 +28,36 @@
|
||||
#include "log.h"
|
||||
|
||||
#define THREAD_POOL_SIZE 50
|
||||
#define DEFAULT_NAME "server"
|
||||
#define DEFAULT_ID "8e4b13b49ca79f35732d9f44a0804940d985627c"
|
||||
static char PRIVATE_KEY[] =
|
||||
"-----BEGIN RSA PRIVATE KEY-----\n"
|
||||
"MIIEpAIBAAKCAQEAuZFwgxkKQGaqYyFMxIUz1JHnZPaOgEQ+fX/jRVYbGMiHkSbX\n"
|
||||
"K9X3XUHUGEjUt8b3zW6UZJGjgyV5S08YuaN0eE5z6Q6bnuWEhkTmgZgXaybc9Hiu\n"
|
||||
"y2WAHpKj+qbXcmewE0WEys/Ov9AIe0TRXmvL6r1793VcLSzgb/aIQA2WFg97DfEA\n"
|
||||
"hGAHo5BesKRfEEvXL6ZB9cGxXP9qIy0ObTvLXlOgbYchfV4rrXJk0u9xWjRyXABv\n"
|
||||
"2Myv3fgxmGmTR+TAw2G5GCKeh9IoIuWVMGPyjSlERGMqQYymNz3NgyWFayyZ5HQS\n"
|
||||
"tihCnflOGEiMHRkOwIczB16YZhan2YqKpsjHGwIBIwKCAQEArvbXzBBLfoyvR4XM\n"
|
||||
"Cb9rYgXozOh3usQAZ7MYHM2HQ0C6VahHN/WgFhl+1RF4Gv1tTKoW4nqwHJEL9oxn\n"
|
||||
"xPkzTNxBZrYAcT7NaKdc/diLG+LQVDdFuHWkrxyL+vUUR0vR5kjcSjGlrYmhmMvb\n"
|
||||
"WQaNEIbFVwhA92TTnMPfjNmcI2wRKI1K9NEKDAMIPSwW/sgkls2h4KW3Y7DooJ0k\n"
|
||||
"l0apjN/rlaR4ohZp6oMVifW8GFY43Xau+4dIrYTnvvSyvGvtB+8cWuhqqvWHRZdM\n"
|
||||
"rFjgOJoZH5l0zxt2dYW2WFiqgT7xXsvu6L+nylXktEMxC33rehYdPrd427J409A6\n"
|
||||
"caO5cwKBgQDyrBQ8UXu7cDAktiKTwH7+pA0wNyTvKsGYw0RcFILccpxty2r5gYhI\n"
|
||||
"eLFPVyjoYxwauW6vX3cSAYLKR+2PlYvkPpEvBQIJbaurx++ejez/KxYD65ZeFTfs\n"
|
||||
"Kb9A08hgMxCvJmnRvojhez1OZmmmWYPT57XeZXnCiNoyJWKA0mMNvwKBgQDDwn02\n"
|
||||
"o5n7ugetXIlV1PiStVogPPTBobh9jsXooQFh4fB+lsrO082hapMlbVVNG1gLzvTY\n"
|
||||
"V0oDM/AzdnC6feZlAEdM+IcruinVnMnbnhiwPVDInCJIhvmJ/XScvkTsgHwRiAss\n"
|
||||
"Tlf8wH/uGXiaeVV/KMlkKRK6h54znTPq37/VpQKBgQDkziG1NuJgRTS05j3bxB/3\n"
|
||||
"Z3omJV1Wh2YTsMtswuHIiVGpWWTcnrOyC2VZb2+2iVUDQR83oycfmwZJsYg27BYu\n"
|
||||
"+SnNPzxvSiWEtTJiS00rGf7QfwoeMUNbAspEb+jPux5b/6WZ34hfkXRRO/02cagu\n"
|
||||
"Mj3DDzhJtDtxG+8pAOEM9QKBgQC+KqWFiPv72UlJUpQKPJmzFpIQsD44cTbgXs7h\n"
|
||||
"+32viwbhX0irqS4nxp2SEnAfBJ6sYqS05xSyp3uftOKJRxpTfJ0I8W1drYe5kP6a\n"
|
||||
"1Bf7qUcpRzc/JAhaKWn3Wb9MJQrPM7MVGOfCVJmINgAhCCcrEa2xwX/oZnxsp1cB\n"
|
||||
"a6RpIwKBgQDW15IebNwVOExTqtfh6UvIjMSrk9OoHDyjoPLI3eyPt3ujKdXFJ8qF\n"
|
||||
"CWg9ianQyE5Y8vfDI+x1YRCOwq2WapeXzkSO8CzVFHgz5kFqJQolr4+o6wr5mLLC\n"
|
||||
"+6iW9u81/X3bMAWshtNfsWbRSFLT1WNVTKRg+xO7YG/3wcyeIeqigA==\n"
|
||||
"-----END RSA PRIVATE KEY-----\n";
|
||||
|
||||
static void ccnet_service_free (CcnetService *service);
|
||||
|
||||
@ -60,25 +90,17 @@ ccnet_session_init (CcnetSession *session)
|
||||
|
||||
static int load_rsakey(CcnetSession *session)
|
||||
{
|
||||
char *path;
|
||||
FILE *fp;
|
||||
RSA *key;
|
||||
RSA *key = NULL;
|
||||
BIO *bufio = NULL;
|
||||
|
||||
path = g_build_filename(session->config_dir, PEER_KEYFILE, NULL);
|
||||
if (!g_file_test(path, G_FILE_TEST_EXISTS))
|
||||
ccnet_error ("Can't load rsa private key from %s\n", path);
|
||||
if ((fp = g_fopen(path, "rb")) == NULL)
|
||||
ccnet_error ("Can't open private key file %s: %s\n", path,
|
||||
strerror(errno));
|
||||
if ((key = PEM_read_RSAPrivateKey(fp, NULL, NULL, NULL)) == NULL)
|
||||
ccnet_error ("Can't open load key file %s: format error\n", path);
|
||||
fclose(fp);
|
||||
bufio = BIO_new_mem_buf((void*)PRIVATE_KEY, -1);
|
||||
PEM_read_bio_RSAPrivateKey(bufio, &key, NULL, NULL);
|
||||
BIO_free (bufio);
|
||||
|
||||
session->privkey = key;
|
||||
session->pubkey = private_key_to_pub(key);
|
||||
g_free(path);
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void save_pubinfo (CcnetSession *session);
|
||||
@ -96,12 +118,9 @@ ccnet_session_load_config (CcnetSession *session,
|
||||
{
|
||||
int ret = 0;
|
||||
char *config_file = NULL, *config_dir = NULL, *central_config_dir = NULL;
|
||||
char *id = NULL, *name = NULL, *port_str = NULL,
|
||||
*user_name = NULL;
|
||||
#ifdef CCNET_SERVER
|
||||
char *service_url;
|
||||
#endif
|
||||
int port;
|
||||
unsigned char sha1[20];
|
||||
GKeyFile *key_file;
|
||||
|
||||
@ -136,35 +155,19 @@ ccnet_session_load_config (CcnetSession *session,
|
||||
return -1;
|
||||
}
|
||||
|
||||
id = ccnet_key_file_get_string (key_file, "General", "ID");
|
||||
user_name = ccnet_key_file_get_string (key_file, "General", "USER_NAME");
|
||||
name = ccnet_key_file_get_string (key_file, "General", "NAME");
|
||||
#ifdef CCNET_SERVER
|
||||
service_url = ccnet_key_file_get_string (key_file, "General", "SERVICE_URL");
|
||||
#endif
|
||||
port_str = ccnet_key_file_get_string (key_file, "Network", "PORT");
|
||||
|
||||
if (port_str == NULL) {
|
||||
port = 0;
|
||||
} else {
|
||||
port = atoi (port_str);
|
||||
if (port <= 0 || port > 65535) {
|
||||
port = DEFAULT_PORT;
|
||||
}
|
||||
}
|
||||
|
||||
if ( (id == NULL) || (strlen (id) != SESSION_ID_LENGTH)
|
||||
|| (hex_to_sha1 (id, sha1) < 0) ) {
|
||||
ccnet_error ("Wrong ID\n");
|
||||
ret = -1;
|
||||
goto onerror;
|
||||
}
|
||||
|
||||
memcpy (session->base.id, id, 40);
|
||||
memcpy (session->base.id, DEFAULT_ID, 40);
|
||||
session->base.id[40] = '\0';
|
||||
session->base.name = g_strdup(name);
|
||||
session->base.user_name = g_strdup(user_name);
|
||||
session->base.public_port = port;
|
||||
if (hex_to_sha1 (session->base.id, sha1) < 0) {
|
||||
ccnet_error ("Failed to get sha1 of ID.\n");
|
||||
ret = -1;
|
||||
goto onerror;
|
||||
}
|
||||
session->base.name = DEFAULT_NAME;
|
||||
session->base.public_port = DEFAULT_PORT;
|
||||
#ifdef CCNET_SERVER
|
||||
session->base.service_url = g_strdup(service_url);
|
||||
#endif
|
||||
@ -178,10 +181,6 @@ ccnet_session_load_config (CcnetSession *session,
|
||||
ret = 0;
|
||||
|
||||
onerror:
|
||||
g_free (id);
|
||||
g_free (name);
|
||||
g_free (user_name);
|
||||
g_free (port_str);
|
||||
#ifdef CCNET_SERVER
|
||||
g_free (service_url);
|
||||
#endif
|
||||
@ -295,18 +294,10 @@ ccnet_session_save_config (CcnetSession *session)
|
||||
session->saving_pub = 0;
|
||||
}
|
||||
|
||||
g_key_file_set_string (session->keyf, "General", "NAME",
|
||||
session->base.name);
|
||||
g_key_file_set_string (session->keyf, "General", "ID",
|
||||
session->base.id);
|
||||
g_key_file_set_string (session->keyf, "General", "USER_NAME",
|
||||
session->base.user_name);
|
||||
#ifdef CCNET_SERVER
|
||||
g_key_file_set_string (session->keyf, "General", "SERVICE_URL",
|
||||
session->base.service_url?session->base.service_url:"");
|
||||
#endif
|
||||
g_key_file_set_integer (session->keyf, "Network", "PORT",
|
||||
session->base.public_port);
|
||||
|
||||
str = g_key_file_to_data (session->keyf, NULL, &error);
|
||||
if (error) {
|
||||
|
@ -28,7 +28,6 @@
|
||||
|
||||
#define SESSION_CONFIG_FILENAME "ccnet.conf"
|
||||
#define SESSION_PEERDB_NAME "peer-db"
|
||||
#define SESSION_ID_LENGTH 40
|
||||
|
||||
|
||||
#define CCNET_TYPE_SESSION (ccnet_session_get_type ())
|
||||
|
@ -25,7 +25,6 @@
|
||||
|
||||
enum {
|
||||
ERR_NAME_NULL = 1,
|
||||
ERR_NAME_INVALID,
|
||||
ERR_PERMISSION,
|
||||
ERR_CONF_FILE,
|
||||
};
|
||||
@ -38,14 +37,7 @@ static int quiet = 0;
|
||||
|
||||
static char *identity_file_peer = NULL;
|
||||
|
||||
static RSA *peer_privkey = NULL;
|
||||
static RSA *peer_pubkey = NULL;
|
||||
|
||||
static char *user_name = NULL;
|
||||
static char *peer_name = NULL;
|
||||
static char *peer_id = NULL;
|
||||
static char *host_str = NULL;
|
||||
static char *port_str = NULL;
|
||||
|
||||
/* argv0 */
|
||||
static char *program_name = NULL;
|
||||
@ -53,31 +45,12 @@ static char *program_name = NULL;
|
||||
|
||||
static void make_configure_file (const char *config_file);
|
||||
|
||||
void
|
||||
save_privkey (RSA *key, const char *file)
|
||||
{
|
||||
FILE *f;
|
||||
f = g_fopen (file, "wb");
|
||||
PEM_write_RSAPrivateKey(f, key, NULL, NULL, 0, NULL, NULL);
|
||||
fclose (f);
|
||||
}
|
||||
|
||||
static void
|
||||
create_peerkey ()
|
||||
{
|
||||
peer_privkey = generate_private_key (bits);
|
||||
peer_pubkey = private_key_to_pub (peer_privkey);
|
||||
}
|
||||
|
||||
|
||||
static const char *short_opts = "hc:n:H:P:F:";
|
||||
static const char *short_opts = "hc:H:F:";
|
||||
static const struct option long_opts[] = {
|
||||
{ "help", no_argument, NULL, 'h' },
|
||||
{ "config-dir", required_argument, NULL, 'c' },
|
||||
{ "central-config-dir", required_argument, NULL, 'F' },
|
||||
{ "name", required_argument, NULL, 'n' },
|
||||
{ "host", required_argument, NULL, 'H' },
|
||||
{ "port", required_argument, NULL, 'P' },
|
||||
{ 0, 0, 0, 0 },
|
||||
};
|
||||
|
||||
@ -95,32 +68,12 @@ void usage (int exit_status)
|
||||
" directory. Default is ~/.ccnet\n"
|
||||
, stdout);
|
||||
fputs (""
|
||||
" -n, --name=NAME your public name\n"
|
||||
, stdout);
|
||||
fputs (""
|
||||
" -H, --host=<ip or domain> Public addr. Only useful for server.\n"
|
||||
, stdout);
|
||||
fputs (""
|
||||
" -P, --port=port Public port. Only useful for server.\n"
|
||||
" Default 10001.\n"
|
||||
, stdout);
|
||||
|
||||
exit (exit_status);
|
||||
}
|
||||
|
||||
static int
|
||||
is_valid_username (const char *name)
|
||||
{
|
||||
const char *p = name;
|
||||
while (*p) {
|
||||
if (!isalnum(*p) && *p != '_' && *p != '-')
|
||||
return 0;
|
||||
++p;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
@ -128,7 +81,6 @@ main(int argc, char **argv)
|
||||
char *central_config_dir = NULL;
|
||||
char *config_file;
|
||||
int c;
|
||||
char *name = NULL;
|
||||
|
||||
program_name = argv[0];
|
||||
|
||||
@ -146,15 +98,9 @@ main(int argc, char **argv)
|
||||
case 'c':
|
||||
config_dir = strdup(optarg);
|
||||
break;
|
||||
case 'n':
|
||||
name = strdup (optarg);
|
||||
break;
|
||||
case 'H':
|
||||
host_str = strdup (optarg);
|
||||
break;
|
||||
case 'P':
|
||||
port_str = strdup (optarg);
|
||||
break;
|
||||
default:
|
||||
usage(1);
|
||||
}
|
||||
@ -172,23 +118,6 @@ main(int argc, char **argv)
|
||||
if (bits == 0)
|
||||
bits = DEFAULT_BITS;
|
||||
|
||||
/* create peer key */
|
||||
if (!name) {
|
||||
usage(-ERR_NAME_NULL);
|
||||
}
|
||||
if (strlen(name) < 2 || strlen (name) > 16
|
||||
|| !is_valid_username(name)) {
|
||||
fprintf (stderr, "The user name should be more than 2 bytes and less than 16 bytes, only digits, alphabetes and '-', '_' are allowed");
|
||||
exit(-ERR_NAME_INVALID);
|
||||
}
|
||||
|
||||
user_name = name;
|
||||
peer_name = g_strdup (name);
|
||||
|
||||
create_peerkey ();
|
||||
peer_id = id_from_pubkey (peer_pubkey);
|
||||
identity_file_peer = g_build_filename (config_dir, PEER_KEYFILE, NULL);
|
||||
|
||||
/* create dir */
|
||||
if (ccnet_mkdir(config_dir, 0700) < 0) {
|
||||
fprintf (stderr, "Make dir %s error: %s\n",
|
||||
@ -204,9 +133,6 @@ main(int argc, char **argv)
|
||||
exit(-ERR_PERMISSION);
|
||||
}
|
||||
|
||||
/* save key */
|
||||
save_privkey (peer_privkey, identity_file_peer);
|
||||
|
||||
/* make configure file */
|
||||
config_file = g_build_filename (central_config_dir ? central_config_dir : config_dir, CONFIG_FILE_NAME, NULL);
|
||||
make_configure_file (config_file);
|
||||
@ -228,18 +154,9 @@ make_configure_file (const char *config_file)
|
||||
}
|
||||
|
||||
fprintf (fp, "[General]\n");
|
||||
fprintf (fp, "USER_NAME = %s\n", user_name);
|
||||
fprintf (fp, "ID = %s\n", peer_id);
|
||||
fprintf (fp, "NAME = %s\n", peer_name);
|
||||
if (host_str)
|
||||
fprintf (fp, "SERVICE_URL = http://%s:8000\n", host_str);
|
||||
|
||||
if (port_str) {
|
||||
fprintf (fp, "\n");
|
||||
fprintf (fp, "[Network]\n");
|
||||
fprintf (fp, "PORT = %s\n", port_str);
|
||||
}
|
||||
|
||||
fprintf (fp, "\n");
|
||||
fclose (fp);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user