X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?p=ossec-hids.git;a=blobdiff_plain;f=src%2Faddagent%2Fmain.c;h=1334da665fd89ac58af52d2a7f6e6fa5911cdbb5;hp=ad6b8ba83606bff464e0a1e25a8765dfc51c487e;hb=6ef2f786c6c8ead94841b5f93baf9f43421f08c8;hpb=301048b51990573e58a30dc4a5bb4ec285cad554 diff --git a/src/addagent/main.c b/src/addagent/main.c index ad6b8ba..1334da6 100755 --- a/src/addagent/main.c +++ b/src/addagent/main.c @@ -1,4 +1,5 @@ -/* @(#) $Id$ */ +/* @(#) $Id: ./src/addagent/main.c, 2011/09/08 dcid Exp $ + */ /* Copyright (C) 2009 Trend Micro Inc. * All rights reserved. @@ -12,7 +13,7 @@ #include "manage_agents.h" - +#include /** help **/ void helpmsg() @@ -23,7 +24,8 @@ void helpmsg() printf("\t-V Display OSSEC version.\n"); printf("\t-l List available agents.\n"); printf("\t-e Extracts key for an agent (Manager only).\n"); - printf("\t-i Import authentication key (Agent only).\n\n"); + printf("\t-i Import authentication key (Agent only).\n"); + printf("\t-f Bulk generate client keys from file. (Manager only).\n\n"); exit(1); } @@ -70,19 +72,20 @@ int main(int argc, char **argv) int c = 0, cmdlist = 0; char *cmdexport = NULL; char *cmdimport = NULL; - + char *cmdbulk = NULL; + #ifndef WIN32 char *dir = DEFAULTDIR; char *group = GROUPGLOBAL; int gid; #endif - + /* Setting the name */ OS_SetName(ARGV0); - - while((c = getopt(argc, argv, "Vhle:i:")) != -1){ + + while((c = getopt(argc, argv, "Vhle:i:f:")) != -1){ switch(c){ case 'V': print_version(); @@ -109,6 +112,15 @@ int main(int argc, char **argv) ErrorExit("%s: -i needs an argument",ARGV0); cmdimport = optarg; break; + case 'f': + #ifdef CLIENT + ErrorExit("%s: You can't bulk generate keys on an agent.", ARGV0); + #endif + if(!optarg) + ErrorExit("%s: -f needs an argument",ARGV0); + cmdbulk = optarg; + printf("Bulk load file: %s\n", cmdbulk); + break; case 'l': cmdlist = 1; break; @@ -118,30 +130,30 @@ int main(int argc, char **argv) } } - - + + /* Getting currently time */ time1 = time(0); restart_necessary = 0; - - - #ifndef WIN32 + + + #ifndef WIN32 /* Getting the group name */ gid = Privsep_GetGroup(group); if(gid < 0) { ErrorExit(USER_ERROR, ARGV0, "", group); } - - + + /* Setting the group */ if(Privsep_SetGroup(gid) < 0) { ErrorExit(SETGID_ERROR, ARGV0, group); } - - + + /* Chrooting to the default directory */ if(Privsep_Chroot(dir) < 0) { @@ -173,6 +185,11 @@ int main(int argc, char **argv) k_extract(cmdexport); exit(0); } + else if(cmdbulk) + { + k_bulkload(cmdbulk); + exit(0); + } @@ -181,9 +198,17 @@ int main(int argc, char **argv) { int leave_s = 0; print_banner(); - - user_msg = read_from_user(); - + + /* Get ACTION from the environment. If ACTION is specified, + * we must set leave_s = 1 to ensure that the loop will end */ + user_msg = getenv("OSSEC_ACTION"); + if (user_msg == NULL) { + user_msg = read_from_user(); + } + else{ + leave_s = 1; + } + /* All the allowed actions */ switch(user_msg[0]) { @@ -198,11 +223,11 @@ int main(int argc, char **argv) case 'i': case 'I': k_import(NULL); - break; + break; case 'l': case 'L': list_agents(0); - break; + break; case 'r': case 'R': remove_agent(); @@ -212,20 +237,20 @@ int main(int argc, char **argv) leave_s = 1; break; case 'V': - print_version(); + print_version(); break; - default: + default: printf("\n ** Invalid Action ** \n\n"); - break; + break; } if(leave_s) { - break; + break; } - + continue; - + } /* Checking if restart message is necessary */ @@ -238,7 +263,7 @@ int main(int argc, char **argv) printf("\n"); } printf(EXIT); - + return(0); }