diff --git a/include/ccnet/ccnet-client.h b/include/ccnet/ccnet-client.h index 72d889c..67e6ce1 100644 --- a/include/ccnet/ccnet-client.h +++ b/include/ccnet/ccnet-client.h @@ -3,10 +3,6 @@ #ifndef CCNET_CLIENT_SESSION_H #define CCNET_CLIENT_SESSION_H - -#define SESSION_ID_LENGTH 40 - - #include #include diff --git a/include/ccnet/ccnet-session-base.h b/include/ccnet/ccnet-session-base.h index 4cc6737..7365bb9 100644 --- a/include/ccnet/ccnet-session-base.h +++ b/include/ccnet/ccnet-session-base.h @@ -23,8 +23,6 @@ struct _CcnetSessionBase { char id[41]; unsigned char id_sha1[20]; - char *user_name; - char *name; int public_port; diff --git a/include/ccnet/option.h b/include/ccnet/option.h index 02efdd6..160d917 100644 --- a/include/ccnet/option.h +++ b/include/ccnet/option.h @@ -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 diff --git a/lib/ccnet-client.c b/lib/ccnet-client.c index 5344959..a94e191 100644 --- a/lib/ccnet-client.c +++ b/lib/ccnet-client.c @@ -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); diff --git a/lib/ccnet-session-base.c b/lib/ccnet-session-base.c index 3287485..3f8cc33 100644 --- a/lib/ccnet-session-base.c +++ b/lib/ccnet-session-base.c @@ -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)); diff --git a/net/common/session.c b/net/common/session.c index cbca8d9..ed6fc7d 100644 --- a/net/common/session.c +++ b/net/common/session.c @@ -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) { diff --git a/net/common/session.h b/net/common/session.h index f224978..998fe7c 100644 --- a/net/common/session.h +++ b/net/common/session.h @@ -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 ()) diff --git a/tools/ccnet-init.c b/tools/ccnet-init.c index f67fba1..28e173c 100644 --- a/tools/ccnet-init.c +++ b/tools/ccnet-init.c @@ -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= 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);