diff --git a/src/server/slavefuncs.c b/src/server/slavefuncs.c --- a/src/server/slavefuncs.c +++ b/src/server/slavefuncs.c @@ -21,9 +21,12 @@ * Registration on server. Needs attention. Prevent account spamming. * distrenslave -c username email@example.com */ +#include "blendjob.h" + #include #include #include +#include /*< malloc(), free() */ int ssh_keygen(){ fprintf(stderr, "We're generating your SSH key. Please be patient.\n"); @@ -91,33 +94,52 @@ int register_user(char *username, char * } -int login_user(char *username){ - // TODO: Why does this segfault??? - fprintf(stderr, "Logging you in..."); - char *userhost = strcpy(userhost, username); - char *userkey = strcpy(userkey, username); +int login_user(char *username) +{ + char *userhost; + char *userkey; + char buf[10]; + struct execio *testrem; + char *execargv[] = + { + "ssh", + + "-i", + (char *)NULL, // Key created from registeruser() + "-p", + "23", + (char *)NULL,// username and hostname + "echo", + "hello", // This should eventually open a non-terminating connection to the server for communication, + + (char *)NULL + }; + size_t readlen; + + /*< @TODO remove being tied to protofusion.org for no reason */ + userhost = malloc(strlen(username) + strlen("@protofusion.org") + 1); + if(!userhost) + return 43; + + strcpy(userhost, username); strcat(userhost, "@protofusion.org"); // Throws @protofusion.org after the username + + userkey = malloc(strlen(username) + strlen(".rsa") + 1); + if(!userkey) + { + free(userhost); + return 44; + } + + strcpy(userkey, username); strcat(userkey,".rsa"); - fprintf(stderr, "i'm here"); + + + fprintf(stderr, "Logging you in to %s using key %s\n", userhost, userkey); if(fopen(userkey, "r") == NULL){ fprintf(stderr,"Your key, %s, has not been found! Re-register or somehow regenerate your key! We need a way to regenerate keys coded in, but we don't have the facilities yet!",userkey); return 0; } - char buf[10]; - struct execio *testrem; - char *execargv[] = - { - "ssh", - userhost, // username and hostname - "-i", - userkey, // Key created from registeruser() - "-p", - "23", - "echo", - "hello", // This should eventually open a non-terminating connection to the server for communication - (char *)NULL - }; - size_t readlen; fprintf(stderr, "Opening stream:\n", execio_open(&testrem, "ssh", execargv)); buf[9] = '\0'; // null-terminating the array... while(!execio_read(testrem, buf, 9, &readlen)) // What's with the readlen stuff?