8b1c35dcfcd55d8faff5863de62c7d217db5f008
Stefan Schuermans move most sources into libp...

Stefan Schuermans authored 4 years ago

1) #include <permissioner/Config.h>
Stefan Schuermans begin of permissioner confi...

Stefan Schuermans authored 4 years ago

2) 
Stefan Schuermans finish binaries, add readme

Stefan Schuermans authored 4 years ago

3) #include <chrono>
4) #include <csignal>
Stefan Schuermans begin of permissioner confi...

Stefan Schuermans authored 4 years ago

5) #include <cstdlib>
6) #include <iostream>
7) #include <stdexcept>
8) #include <string>
Stefan Schuermans finish binaries, add readme

Stefan Schuermans authored 4 years ago

9) #include <thread>
10) 
11) static int go_on = 1;
12) 
13) void sighandler(int) {
14)   go_on = 0;
15) }
Stefan Schuermans begin of permissioner confi...

Stefan Schuermans authored 4 years ago

16) 
17) int main(int argc, char const **argv) {
18)   if (argc != 2) {
19)     std::cerr << "usage: " << argv[0] << " <config file>" << std::endl;
20)     return EXIT_FAILURE;
21)   }
22)   std::string configFileName(argv[1]);
23) 
Stefan Schuermans finish binaries, add readme

Stefan Schuermans authored 4 years ago

24)   // load configuration
25)   Config config;
Stefan Schuermans begin of permissioner confi...

Stefan Schuermans authored 4 years ago

26)   try {
27)     config.parseFile(configFileName);
28)   } catch (std::exception const &e) {
29)     std::cerr << "error: " << e.what() << std::endl;
30)     return EXIT_FAILURE;
31)   }
32) 
Stefan Schuermans finish binaries, add readme

Stefan Schuermans authored 4 years ago

33)   // catch signals to exit properly on Ctrl-C and so on
34)   signal(SIGINT, sighandler);
35)   signal(SIGPIPE, sighandler);
36)   signal(SIGQUIT, sighandler);
37)   signal(SIGTERM, sighandler);
38) 
39)   std::cout << "permissionerd (" << configFileName << ") starting"
40)             << std::endl;
41) 
42)   // continuously set ownership and permissions
43)   int ret = EXIT_SUCCESS;
44)   while (go_on) {
45) 
46)     // set owneship and permissions, measure time it takes
47)     std::cout << "permissionerd (" << configFileName
48)               << "): setting ownership and permissions" << std::endl;
49)     auto begin = std::chrono::steady_clock::now();
50)     try {
51)       config.setPermissions();
52)     } catch (std::exception const &e) {
53)       std::cerr << "error: " << e.what() << std::endl;
54)       ret = EXIT_FAILURE;
55)       break;
56)     }
57)     auto end = std::chrono::steady_clock::now();
58)     std::chrono::duration<float, std::ratio<1>> duration = end - begin;
59)     std::cout << "permissionerd (" << configFileName << "): took "
60)               << duration.count() << " s" << std::endl;
61) 
62)     // sleep 10 times as long as the work took plus one second
63)     auto sleep_time = 10 * duration
64)                     + std::chrono::duration<int, std::ratio<1>>(1);
65)     std::this_thread::sleep_for(sleep_time);
66) 
67)   } // while (go_on)
68) 
69)   std::cout << "permissionerd (" << configFileName << ") shutting down"
70)             << std::endl;
71) 
72)   return ret;