aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/akcom-udpechod.c21
1 files changed, 7 insertions, 14 deletions
diff --git a/src/akcom-udpechod.c b/src/akcom-udpechod.c
index 984efb8..9ec048d 100644
--- a/src/akcom-udpechod.c
+++ b/src/akcom-udpechod.c
@@ -146,14 +146,6 @@ struct udp_echo_plus
146 146
147static int should_stop = 0; 147static int should_stop = 0;
148 148
149struct app_config
150{
151 gid_t gid; // setgid
152};
153static struct app_config cnf =
154{
155 .gid = 0,
156};
157static const char * prog_name = "a.out"; 149static const char * prog_name = "a.out";
158static const char * cnf_pidfile = "/var/run/" PROGRAM_NAME ".pid"; 150static const char * cnf_pidfile = "/var/run/" PROGRAM_NAME ".pid";
159static uint16_t cnf_port = 30006; 151static uint16_t cnf_port = 30006;
@@ -165,6 +157,7 @@ static int cnf_facility = LOG_DAEMON; // sysl
165static int cnf_dont_fork = 0; 157static int cnf_dont_fork = 0;
166static const char * cnf_listen = NULL; // IP address to listen for requests 158static const char * cnf_listen = NULL; // IP address to listen for requests
167static uid_t cnf_uid = 0; // setuid 159static uid_t cnf_uid = 0; // setuid
160static gid_t cnf_gid = 0; // setgid
168 161
169 162
170////////////////// 163//////////////////
@@ -312,7 +305,7 @@ int main(int argc, char * argv[])
312 fprintf(stderr, "%s: getgrnam(): %s\n", prog_name, strerror(errno)); 305 fprintf(stderr, "%s: getgrnam(): %s\n", prog_name, strerror(errno));
313 return(1); 306 return(1);
314 }; 307 };
315 cnf.gid = gr->gr_gid; 308 cnf_gid = gr->gr_gid;
316 break; 309 break;
317 310
318 case 'h': 311 case 'h':
@@ -371,9 +364,9 @@ int main(int argc, char * argv[])
371 }; 364 };
372 365
373 // set defaults for setuid/setgid 366 // set defaults for setuid/setgid
374 cnf.gid = (cnf.gid == 0) ? getgid() : cnf.gid; 367 cnf_gid = (cnf_gid == 0) ? getgid() : cnf_gid;
375 cnf_uid = (cnf_uid == 0) ? getuid() : cnf_uid; 368 cnf_uid = (cnf_uid == 0) ? getuid() : cnf_uid;
376 if ( (cnf.gid != getgid()) && (getuid() != 0) ) 369 if ( (cnf_gid != getgid()) && (getuid() != 0) )
377 { 370 {
378 fprintf(stderr, "%s: setgid requires root access\n", prog_name); 371 fprintf(stderr, "%s: setgid requires root access\n", prog_name);
379 return(1); 372 return(1);
@@ -518,9 +511,9 @@ int my_daemonize(void)
518 return(-1); 511 return(-1);
519 }; 512 };
520 if ( (cnf_uid != getuid()) || 513 if ( (cnf_uid != getuid()) ||
521 (cnf.gid != getgid()) ) 514 (cnf_gid != getgid()) )
522 { 515 {
523 if ((rc = fchown(fd, cnf_uid, cnf.gid)) == -1) 516 if ((rc = fchown(fd, cnf_uid, cnf_gid)) == -1)
524 { 517 {
525 my_error("fchown(): %s", strerror(errno)); 518 my_error("fchown(): %s", strerror(errno));
526 close(fd); 519 close(fd);
@@ -625,7 +618,7 @@ int my_daemonize(void)
625 }; 618 };
626 619
627 // change ownership 620 // change ownership
628 if ( (getgid() != cnf.gid) && ((rc = setregid(cnf.gid, cnf.gid)) == -1) ) 621 if ( (getgid() != cnf_gid) && ((rc = setregid(cnf_gid, cnf_gid)) == -1) )
629 { 622 {
630 my_error("getgid(): %s", strerror(errno)); 623 my_error("getgid(): %s", strerror(errno));
631 close(s); 624 close(s);