e378082c30ea4c9f0471e830f983c72535944621
[dyn-nsupdate.git] / dyn-nsupdate.cpp
1 #include <iostream>
2 #include <boost/property_tree/ptree.hpp>
3 #include <boost/property_tree/ini_parser.hpp>
4
5 #include <sys/stat.h>
6
7 int main(int argc, const char **argv)
8 {
9         if (argc < 2) {
10                 std::cerr << "Usage: " << argv[0] << " <configuration file>" << std::endl;
11                 return 1;
12         }
13         const char *filename = argv[1];
14         
15         struct stat file_stat;
16         int ret = lstat(filename, &file_stat);
17         if (ret != 0) {
18                 std::cerr << "Unable to stat " << filename << "." << std::endl;
19                 return 1;
20         }
21         /* Check if the file is suited */
22         if (!S_ISREG(file_stat.st_mode)) {
23                 std::cerr << filename << " is not a file." << std::endl;
24                 return 1;
25         }
26         if (file_stat.st_uid != geteuid()) {
27                 std::cerr << filename << " must be owned by user executing " << argv[0] << "." << std::endl;
28                 return 1;
29         }
30         if (file_stat.st_mode & (S_IWGRP | S_IWOTH)) { /* can be written by group/others */
31                 std::cerr << filename << " must not be writeable by group or others." << std::endl;
32                 return 1;
33         }
34         
35         std::cout << "Hi world!" << std::endl;
36         return 0;
37 }