X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?p=ossec-hids.git;a=blobdiff_plain;f=src%2Fmonitord%2Fmain.c;fp=src%2Fmonitord%2Fmain.c;h=fdf18e684c888f2f5f323b833a6d9801e75c85ac;hp=e3f4d5de411bee982dcbe32f482b670ee8f12ada;hb=3f728675941dc69d4e544d3a880a56240a6e394a;hpb=927951d1c1ad45ba9e7325f07d996154a91c911b diff --git a/src/monitord/main.c b/src/monitord/main.c old mode 100755 new mode 100644 index e3f4d5d..fdf18e6 --- a/src/monitord/main.c +++ b/src/monitord/main.c @@ -1,6 +1,3 @@ -/* @(#) $Id: ./src/monitord/main.c, 2011/09/08 dcid Exp $ - */ - /* Copyright (C) 2009 Trend Micro Inc. * All rights reserved. * @@ -10,36 +7,58 @@ * Foundation */ - #include "shared.h" #include "config/config.h" #include "monitord.h" #include "os_net/os_net.h" +/* Prototypes */ +static void help_monitord(void) __attribute__((noreturn)); + + +/* Print help statement */ +static void help_monitord() +{ + print_header(); + print_out(" %s: -[Vhdtf] [-u user] [-g group] [-c config] [-D dir]", ARGV0); + print_out(" -V Version and license message"); + print_out(" -h This help message"); + print_out(" -d Execute in debug mode. This parameter"); + print_out(" can be specified multiple times"); + print_out(" to increase the debug level."); + print_out(" -t Test configuration"); + print_out(" -f Run in foreground"); + print_out(" -u User to run as (default: %s)", USER); + print_out(" -g Group to run as (default: %s)", GROUPGLOBAL); + print_out(" -c Configuration file to use (default: %s)", DEFAULTCPATH); + print_out(" -D Directory to chroot into (default: %s)", DEFAULTDIR); + print_out(" "); + exit(1); +} int main(int argc, char **argv) { int c, test_config = 0, run_foreground = 0; - int uid=0,gid=0; - char *dir = DEFAULTDIR; - char *user = USER; - char *group = GROUPGLOBAL; - char *cfg = DEFAULTCPATH; - - /* Initializing global variables */ + uid_t uid; + gid_t gid; + const char *dir = DEFAULTDIR; + const char *user = USER; + const char *group = GROUPGLOBAL; + const char *cfg = DEFAULTCPATH; + + /* Initialize global variables */ mond.a_queue = 0; - /* Setting the name */ + /* Set the name */ OS_SetName(ARGV0); - - while((c = getopt(argc, argv, "Vdhtfu:g:D:c:")) != -1){ - switch(c){ + while ((c = getopt(argc, argv, "Vdhtfu:g:D:c:")) != -1) { + switch (c) { case 'V': print_version(); break; case 'h': - help(ARGV0); + help_monitord(); break; case 'd': nowDebug(); @@ -48,166 +67,151 @@ int main(int argc, char **argv) run_foreground = 1; break; case 'u': - if(!optarg) - ErrorExit("%s: -u needs an argument",ARGV0); - user=optarg; + if (!optarg) { + ErrorExit("%s: -u needs an argument", ARGV0); + } + user = optarg; break; case 'g': - if(!optarg) - ErrorExit("%s: -g needs an argument",ARGV0); - group=optarg; + if (!optarg) { + ErrorExit("%s: -g needs an argument", ARGV0); + } + group = optarg; break; case 'D': - if(!optarg) - ErrorExit("%s: -D needs an argument",ARGV0); - dir=optarg; + if (!optarg) { + ErrorExit("%s: -D needs an argument", ARGV0); + } + dir = optarg; break; case 'c': - if(!optarg) - ErrorExit("%s: -c needs an argument",ARGV0); + if (!optarg) { + ErrorExit("%s: -c needs an argument", ARGV0); + } cfg = optarg; break; case 't': test_config = 1; break; default: - help(ARGV0); + help_monitord(); break; } } - /* Starting daemon */ - debug1(STARTED_MSG,ARGV0); + /* Start daemon */ + debug1(STARTED_MSG, ARGV0); /*Check if the user/group given are valid */ uid = Privsep_GetUser(user); gid = Privsep_GetGroup(group); - if((uid < 0)||(gid < 0)) - ErrorExit(USER_ERROR,ARGV0,user,group); - - - /* Getting config options */ - mond.day_wait = getDefine_Int("monitord", - "day_wait", - 5,240); - mond.compress = getDefine_Int("monitord", - "compress", - 0,1); - mond.sign = getDefine_Int("monitord","sign",0,1); - - mond.monitor_agents = getDefine_Int("monitord","monitor_agents",0,1); + if (uid == (uid_t) - 1 || gid == (gid_t) - 1) { + ErrorExit(USER_ERROR, ARGV0, user, group); + } + /* Get config options */ + mond.day_wait = (unsigned short) getDefine_Int("monitord", "day_wait", 5, 240); + mond.compress = (short) getDefine_Int("monitord", "compress", 0, 1); + mond.sign = (short) getDefine_Int("monitord", "sign", 0, 1); + mond.monitor_agents = (short) getDefine_Int("monitord", "monitor_agents", 0, 1); + mond.notify_time = getDefine_Int("monitord", "notify_time", 60, 3600); mond.agents = NULL; mond.smtpserver = NULL; mond.emailfrom = NULL; mond.emailidsname = NULL; - c = 0; - c|= CREPORTS; - if(ReadConfig(c, cfg, &mond, NULL) < 0) - { + c |= CREPORTS; + if (ReadConfig(c, cfg, &mond, NULL) < 0) { ErrorExit(CONFIG_ERROR, ARGV0, cfg); } /* If we have any reports configured, read smtp/emailfrom */ - if(mond.reports) - { + if (mond.reports) { OS_XML xml; char *tmpsmtp; - const char *(xml_smtp[])={"ossec_config", "global", "smtp_server", NULL}; - const char *(xml_from[])={"ossec_config", "global", "email_from", NULL}; - const char *(xml_idsname[])={"ossec_config", "global", "email_idsname", NULL}; + const char *(xml_smtp[]) = {"ossec_config", "global", "smtp_server", NULL}; + const char *(xml_from[]) = {"ossec_config", "global", "email_from", NULL}; + const char *(xml_idsname[]) = {"ossec_config", "global", "email_idsname", NULL}; - if(OS_ReadXML(cfg, &xml) < 0) - { + if (OS_ReadXML(cfg, &xml) < 0) { ErrorExit(CONFIG_ERROR, ARGV0, cfg); } - tmpsmtp = OS_GetOneContentforElement(&xml,xml_smtp); - mond.emailfrom = OS_GetOneContentforElement(&xml,xml_from); - mond.emailidsname = OS_GetOneContentforElement(&xml,xml_idsname); + tmpsmtp = OS_GetOneContentforElement(&xml, xml_smtp); + mond.emailfrom = OS_GetOneContentforElement(&xml, xml_from); + mond.emailidsname = OS_GetOneContentforElement(&xml, xml_idsname); - if(tmpsmtp && mond.emailfrom) - { + if (tmpsmtp && mond.emailfrom) { mond.smtpserver = OS_GetHost(tmpsmtp, 5); - if(!mond.smtpserver) - { + if (!mond.smtpserver) { merror(INVALID_SMTP, ARGV0, tmpsmtp); - if(mond.emailfrom) free(mond.emailfrom); + if (mond.emailfrom) { + free(mond.emailfrom); + } mond.emailfrom = NULL; merror("%s: Invalid SMTP server. Disabling email reports.", ARGV0); } - } - else - { - if(tmpsmtp) free(tmpsmtp); - if(mond.emailfrom) free(mond.emailfrom); + } else { + if (tmpsmtp) { + free(tmpsmtp); + } + if (mond.emailfrom) { + free(mond.emailfrom); + } mond.emailfrom = NULL; - merror("%s: SMTP server or 'email from' missing. Disabling email reports.", ARGV0); } OS_ClearXML(&xml); } - /* Exit here if test config is set */ - if(test_config) + if (test_config) { exit(0); + } - - if (!run_foreground) - { + if (!run_foreground) { /* Going on daemon mode */ nowDaemon(); goDaemon(); } - /* Privilege separation */ - if(Privsep_SetGroup(gid) < 0) - ErrorExit(SETGID_ERROR,ARGV0,group); - + if (Privsep_SetGroup(gid) < 0) { + ErrorExit(SETGID_ERROR, ARGV0, group, errno, strerror(errno)); + } - /* chrooting */ - if(Privsep_Chroot(dir) < 0) - ErrorExit(CHROOT_ERROR,ARGV0,dir); + /* chroot */ + if (Privsep_Chroot(dir) < 0) { + ErrorExit(CHROOT_ERROR, ARGV0, dir, errno, strerror(errno)); + } nowChroot(); + /* Change user */ + if (Privsep_SetUser(uid) < 0) { + ErrorExit(SETUID_ERROR, ARGV0, user, errno, strerror(errno)); + } - - /* Changing user */ - if(Privsep_SetUser(uid) < 0) - ErrorExit(SETUID_ERROR,ARGV0,user); - - - debug1(PRIVSEP_MSG,ARGV0,dir,user); - - + debug1(CHROOT_MSG, ARGV0, dir); + debug1(PRIVSEP_MSG, ARGV0, user); /* Signal manipulation */ StartSIG(ARGV0); - - - /* Creating PID files */ - if(CreatePID(ARGV0, getpid()) < 0) - ErrorExit(PID_ERROR,ARGV0); - + /* Create PID files */ + if (CreatePID(ARGV0, getpid()) < 0) { + ErrorExit(PID_ERROR, ARGV0); + } /* Start up message */ verbose(STARTUP_MSG, ARGV0, (int)getpid()); - - /* the real daemon now */ + /* The real daemon now */ Monitord(); exit(0); } - - -/* EOF */