SilcPrivateKey prv_key;
SilcRng rng;
unsigned char *key;
- unsigned int key_len;
+ uint32 key_len;
char line[256];
char *pkfile = NULL, *prvfile = NULL;
rng = silc_rng_alloc();
silc_rng_init(rng);
- silc_math_primegen_init();
+ silc_rng_global_init(rng);
if (!public_key) {
memset(line, 0, sizeof(line));
memset(key, 0, sizeof(key_len));
silc_free(key);
- silc_math_primegen_uninit();
silc_rng_free(rng);
silc_pkcs_free(pkcs);
int silc_client_check_silc_dir()
{
char filename[256], file_public_key[256], file_private_key[256];
- char servfilename[256];
+ char servfilename[256], clientfilename[256];
char *identifier;
struct stat st;
struct passwd *pw;
snprintf(filename, sizeof(filename) - 1, "%s/.silc/", pw->pw_dir);
snprintf(servfilename, sizeof(servfilename) - 1, "%s/.silc/serverkeys",
pw->pw_dir);
+ snprintf(clientfilename, sizeof(clientfilename) - 1, "%s/.silc/clientkeys",
+ pw->pw_dir);
/*
* Check ~/.silc directory
}
}
+ /*
+ * Check ~./silc/clientkeys directory
+ */
+ if ((stat(clientfilename, &st)) == -1) {
+ /* If dir doesn't exist */
+ if (errno == ENOENT) {
+ if (pw->pw_uid == geteuid()) {
+ if ((mkdir(clientfilename, 0755)) == -1) {
+ fprintf(stderr, "Couldn't create `%s' directory\n", clientfilename);
+ return FALSE;
+ }
+ } else {
+ fprintf(stderr, "Couldn't create `%s' directory due to a wrong uid!\n",
+ clientfilename);
+ return FALSE;
+ }
+ } else {
+ fprintf(stderr, "%s\n", strerror(errno));
+ return FALSE;
+ }
+ }
+
/*
* Check Public and Private keys
*/