Files
@ eee9474aa604
Branch filter:
Location: DistRen/src/client/distren.c
eee9474aa604
3.1 KiB
text/plain
Cruddy commit, watch out!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | /*
Copyright 2008 Nathan Phillip Brink, Ethan Zonca, Matt Orlando
This file is a part of DistRen.
DistRen is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
DistRen is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with DistRen. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h> /* sprintf, printf */
#include <stdlib.h> /* malloc, free */
#include "options.h"
#include "execio.h"
#include <libxml/tree.h> /* Happy fun XML time */
#include <libxml/xmlwriter.h>
#include <confuse.h>
#include<string.h> // for strcat
int main(int argc, char *argv[])
{
// parseconf(); /* calls the confuse parser from options.c */
// So I couldn't figure out how to get a function to return multiple variables, so
// I tossed the code from options.c right in here to save me the trouble. Fix if you wish, if possible... :D
/* Conf File Parser */
cfg_opt_t opts[] =
{
CFG_STR("username", "guest", CFGF_NONE),
CFG_STR("hostname", "protofusion.org", CFGF_NONE),
CFG_STR("name", "Guest", CFGF_NONE),
CFG_STR("email", "guest@protofusion.org", CFGF_NONE),
CFG_END()
};
cfg_t *cfg;
cfg = cfg_init(opts, CFGF_NONE);
if(cfg_parse(cfg, "distren.conf") == CFG_PARSE_ERROR)
return 1;
/* End Conf File Parser */
int x = 1; // hehe for testing
// Please find a better way of doing this :( you can't strcat multiple strings.. meh
char *username = cfg_getstr(cfg, "username");
char *hostname = cfg_getstr(cfg, "hostname");
strcat(username, "@");
strcat(username, hostname);
if( x == 1 ){
// Create new account on the server if no username exists
// THIS no longer SEGFAULTS!! YAY
char buf[10];
struct execio *testrem;
char *execargv[] =
{
"ssh",
username, //cfg_getstr(cfg, "username") . "@" . cfg_getstr(cfg, "hostname"),
"-i guest.rsa", //yeaaaah enay better ideas?
"sh",
"-c",
"\"echo hello from ${HOSTNAME}\"", // "\"useradd -M -c" strcat( cfg_getstr(cfg, "name") cfg_getstr(cfg, "email")) "-d /home/distren --gid 537" cfg_getstr(cfg, "username") "\"",
(char *)NULL
};
size_t readlen;
fprintf(stderr, "execio madness is occuring!");
fprintf(stderr, "execio_open returns %d\n", execio_open(&testrem, "ssh", execargv));
buf[9] = '\0';
while(!execio_read(testrem, buf, 9, &readlen))
{
if(readlen > 9)
{
fprintf(stderr, "execio_read doesn't set readlen correctly or read() is messed up\n");
return 1;
}
buf[readlen] = '\0';
fprintf(stderr, "read \"%s\"\n", buf);
}
return 0;
}
else
{
printf("Well now, you must have registered!\n");
/* put code here to ssh to zserver2 w/ execio as the user from the conf file */
return 0;
}
cfg_free(cfg);
};
|