mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-25 15:50:03 +02:00
Merge branch 'userid' into developer
This commit is contained in:
commit
5e9d70948b
@ -11,6 +11,8 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <syscall.h>
|
||||||
|
|
||||||
|
|
||||||
Receiver::Receiver(int argc, char *argv[]):
|
Receiver::Receiver(int argc, char *argv[]):
|
||||||
tcpipInterface (nullptr) {
|
tcpipInterface (nullptr) {
|
||||||
@ -18,13 +20,15 @@ Receiver::Receiver(int argc, char *argv[]):
|
|||||||
// options
|
// options
|
||||||
std::map<std::string, std::string> configuration_map;
|
std::map<std::string, std::string> configuration_map;
|
||||||
int tcpip_port_no = 1954;
|
int tcpip_port_no = 1954;
|
||||||
|
uid_t userid = -1;
|
||||||
|
|
||||||
//parse command line for config
|
//parse command line for config
|
||||||
static struct option long_options[] = {
|
static struct option long_options[] = {
|
||||||
// These options set a flag.
|
// These options set a flag.
|
||||||
//{"verbose", no_argument, &verbose_flag, 1},
|
//{"verbose", no_argument, &verbose_flag, 1},
|
||||||
// These options don’t set a flag. We distinguish them by their indices.
|
// These options don’t set a flag. We distinguish them by their indices.
|
||||||
{"rx_tcpport", required_argument, nullptr, 't'},
|
{"rx_tcpport", required_argument, nullptr, 't'}, //TODO change or backward compatible to "port, p"?
|
||||||
|
{"uid", required_argument, nullptr, 'u'},
|
||||||
{"version", no_argument, nullptr, 'v'},
|
{"version", no_argument, nullptr, 'v'},
|
||||||
{"help", no_argument, nullptr, 'h'},
|
{"help", no_argument, nullptr, 'h'},
|
||||||
{nullptr, 0, nullptr, 0}
|
{nullptr, 0, nullptr, 0}
|
||||||
@ -37,7 +41,7 @@ Receiver::Receiver(int argc, char *argv[]):
|
|||||||
int c = 0;
|
int c = 0;
|
||||||
|
|
||||||
while ( c != -1 ){
|
while ( c != -1 ){
|
||||||
c = getopt_long (argc, argv, "hvf:t:", long_options, &option_index);
|
c = getopt_long (argc, argv, "hvf:t:u:", long_options, &option_index);
|
||||||
|
|
||||||
// Detect the end of the options.
|
// Detect the end of the options.
|
||||||
if (c == -1)
|
if (c == -1)
|
||||||
@ -49,23 +53,48 @@ Receiver::Receiver(int argc, char *argv[]):
|
|||||||
sscanf(optarg, "%d", &tcpip_port_no);
|
sscanf(optarg, "%d", &tcpip_port_no);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'u':
|
||||||
|
if (sscanf(optarg, "%u", &userid) != 1) {
|
||||||
|
throw sls::RuntimeError("Could not scan uid");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 'v':
|
case 'v':
|
||||||
std::cout << "SLS Receiver " << GITBRANCH << " (0x" << std::hex << APIRECEIVER << ")" << std::endl;
|
std::cout << "SLS Receiver Version: " << GITBRANCH << " (0x" << std::hex << APIRECEIVER << ")" << std::endl;
|
||||||
throw sls::RuntimeError();
|
FILE_LOG(logINFOBLUE) << "Exiting [ Tid: " << syscall(SYS_gettid) << " ]";
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
|
||||||
case 'h':
|
case 'h':
|
||||||
default:
|
default:
|
||||||
std::string help_message = "\n"
|
std::cout << std::endl;
|
||||||
+ std::string(argv[0]) + "\n"
|
|
||||||
+ "Usage: " + std::string(argv[0]) + " [arguments]\n"
|
std::string help_message = "Usage: " + std::string(argv[0]) + " [arguments]\n"
|
||||||
+ "Possible arguments are:\n"
|
+ "Possible arguments are:\n"
|
||||||
+ "\t-t, --rx_tcpport <port> : TCP Communication Port with client. \n"
|
+ "\t-t, --rx_tcpport <port> : TCP Communication Port with client. \n"
|
||||||
+ "\t Default: 1954. Required for multiple \n"
|
+ "\t-u, --uid <user id> : Set effective user id if receiver \n"
|
||||||
+ "\t receivers\n\n";
|
+ "\t started with privileges. \n\n";
|
||||||
|
|
||||||
FILE_LOG(logINFO) << help_message << std::endl;
|
//std::cout << help_message << std::endl;
|
||||||
throw sls::RuntimeError();
|
throw sls::RuntimeError(help_message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// set effective id if provided
|
||||||
|
if (userid != static_cast<uid_t>(-1)) {
|
||||||
|
if (geteuid() == userid) {
|
||||||
|
FILE_LOG(logINFO) << "Process already has the same Effective UID " << userid;
|
||||||
|
} else {
|
||||||
|
if (seteuid(userid) != 0) {
|
||||||
|
std::ostringstream oss;
|
||||||
|
oss << "Could not set Effective UID to " << userid;
|
||||||
|
throw sls::RuntimeError(oss.str());
|
||||||
|
}
|
||||||
|
if(geteuid() != userid) {
|
||||||
|
std::ostringstream oss;
|
||||||
|
oss << "Could not set Effective UID to " << userid << ". Got " << geteuid();
|
||||||
|
throw sls::RuntimeError(oss.str());
|
||||||
|
}
|
||||||
|
FILE_LOG(logINFO) << "Process Effective UID changed to " << userid;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,7 +135,6 @@ int main(int argc, char *argv[]) {
|
|||||||
*/
|
*/
|
||||||
//receiver->registerCallBackRawDataReady(rawDataReadyCallBack,NULL);
|
//receiver->registerCallBackRawDataReady(rawDataReadyCallBack,NULL);
|
||||||
|
|
||||||
FILE_LOG(logINFO) << "Ready ... ";
|
|
||||||
FILE_LOG(logINFO) << "[ Press \'Ctrl+c\' to exit ]";
|
FILE_LOG(logINFO) << "[ Press \'Ctrl+c\' to exit ]";
|
||||||
while(keeprunning)
|
while(keeprunning)
|
||||||
pause();
|
pause();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user