File: main.cc

package info (click to toggle)
stealth 4.04.00-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,540 kB
  • sloc: cpp: 2,759; sh: 151; makefile: 111; ansic: 52
file content (102 lines) | stat: -rw-r--r-- 2,816 bytes parent folder | download
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
/*
                              stealth.cc
*/

#include "main.ih"

namespace{

ArgConfig::LongOption longOption[] =
{
    // Kept for backward compatibility, but a warning is genereated when
    // used
    {"echo-commands", 'e'},             // discont., use --log
    {"keep-alive", Arg::NoArg},          // discont.: use --daemon
    {"only-stdout", Arg::NoArg},         // discont.: use --stdout
    {"parse-config-file", 'c'},         // discont.: use --parse-policy-file
    {"quiet", 'q'},                     // discont.: use --verbosity 0
    {"suppress", Arg::NoArg},            // discont.: use --suspend


    {"max-size", Arg::Required},         // 10m by default


    {"log",  'L'},              // : new

    {"log-mail", Arg::NoArg},    // new
    {"no-mail", Arg::NoArg},     // new

    {"parse-policy-file", 'p'}, // was: 'c'

    {"random-interval", 'i'},   // :
    {"run-command", 'r'},       // :

    {"skip-files", 's'},        // :
    {"stdout", 'o'},            // new

    {"syslog", Arg::NoArg},              // new (block)
    {"syslog-facility", Arg::Required},
    {"syslog-priority", Arg::Required},
    {"syslog-tag", Arg::Required},

    {"time-stamp", 't'},        // : new
    {"verbosity", 'V'},         // : new

    {"version", 'v'},
    {"help", 'h'},

    {"repeat", Arg::Required},

    {"daemon", 'd'},

    {"dry-run", Arg::NoArg},             // new

    {"ping", Arg::NoArg},                // arg[0] is the uds filename
    {"rerun", Arg::NoArg},               // also for this and the next options
    {"resume", Arg::NoArg},
    {"suspend", Arg::NoArg},
    {"reload", Arg::NoArg},
    {"terminate", Arg::NoArg},
};

auto endLongOption = longOption + sizeof(longOption) / sizeof(longOption[0]);

}   // anonymous namespace ends
    
int main(int argc, char **argv)
try
{                                       // construct Arg object to process
    ArgConfig &arg = ArgConfig::initialize(
                                "d:hL:opi:r:s:t:vV:"
                                "ecq",
                                longOption, endLongOption, 
                                argc, argv); 

    arg.versionHelp(Options::usage, Icmbuild::version, 1);

    Stealth stealth;

    if (stealth.ipcMode())
        return 0;

    stealth.policyMode();       // do all policy-file related tasks
}
catch (exception const &err)
{
    cout << err.what() << endl;
    return 1;
}
catch (int ret)
{
    return ArgConfig::instance().option("hv") ? 0 : ret;
}
catch (...)
{
    cout << "\n"
            "Stealth terminated with an UNEXPECTED EXCEPTION.\n" <<
            "This should not have happened, please report this error and the "
                                                            "circumstances\n" 
            "causing it to Stealth's author\n";

    return 1;
}