/* This file is in the public domain. */ #include #include #include #include extern const char *__progname; #include "errf.h" #include "msgs.h" #include "hkdb.h" #include "panic.h" #include "client.h" #include "server.h" #include "keygen.h" #include "config.h" #include "pollloop.h" #include "keyutils.h" #include "connshare.h" #include "agent-int.h" #include "agent-server.h" #include "agent-client.h" static FILE *dbg_stdin; static FILE *dbg_stdout; static FILE *dbg_stderr; int main(int, char **); int main(int ac, char **av) { dbg_stdin = stdin; dbg_stdout = stdout; dbg_stderr = stderr; errf_setup(); config_init(); handleargs(ac,av); switch ((OPMODE)config_key("opmode")) { case OPMODE_CLIENT: client_setup(); break; case OPMODE_KEYGEN: gen_key(); exit(0); break; case OPMODE_SETPASS: set_passphrase(); exit(0); break; case OPMODE_SETCOMM: set_comment(); exit(0); break; case OPMODE_AGENT: init_polling(); agent_setup(); break; case OPMODE_ADD: agent_add(); exit(0); break; case OPMODE_LIST: agent_list(); exit(0); break; case OPMODE_DELETE: agent_delete(); exit(0); break; case OPMODE_DELETE_ALL: agent_delete_all(); exit(0); break; case OPMODE_SERVER: init_polling(); server_setup(); break; case OPMODE_IMPORT: do_import(); exit(0); break; case OPMODE_EXPORT: do_export(); exit(0); break; case OPMODE_FPRINT: do_fingerprint(); exit(0); break; case OPMODE_SHAREKILL: share_op(MOUSSH_SHARE_OP_KILL); exit(0); break; case OPMODE_SHARESTOP: share_op(MOUSSH_SHARE_OP_STOP); exit(0); break; case OPMODE_SHAREDROP: share_op(MOUSSH_SHARE_OP_DROP); exit(0); break; case OPMODE_INTAGENT: init_polling(); agent_interactive_setup(); break; case OPMODE_KH: known_hosts_op(); exit(0); break; default: panic("bad opmode"); break; } while (1) { pre_poll(); if (do_poll() < 0) { if (errno == EINTR) continue; logmsg(LM_ERR|LM_PEER,"poll: %s",strerror(errno)); exit(1); } post_poll(); } }