89,6 → 89,50 |
return s; |
} |
|
static void listen_socket(int socket) |
{ |
int t; |
char cmd[CMDSIZE]; |
char buf[BUFSIZE]; |
char* msg; |
int br; |
struct sockaddr_in sa; |
socklen_t sa_len; |
|
for(;;) { |
sa_len = sizeof(sa); |
if((t = accept(socket, (struct sockaddr *)&sa, &sa_len)) < 0) { |
if(errno == EINTR) /* EINTR might happen on accept(), */ |
continue; /* try again */ |
|
msg = strerror(errno); |
syslog(LOG_ERR, "cannot get connection, %s", msg); |
continue; |
} |
|
msg = inet_ntoa(sa.sin_addr); |
syslog(LOG_INFO, "connect from %s", msg); |
|
cmd[0] = '\0'; |
while((br = recv(t, buf, BUFSIZE, 0)) > 0) { |
strncat(cmd, buf, min(br, sizeof(cmd) - strlen(cmd) - 1)); |
} |
sleep(1); |
close(t); |
|
syslog(LOG_INFO, "got command [%s]", cmd); |
|
if(0 == strncmp(cmd, cfg.password, sizeof(cmd))) { |
syslog(LOG_EMERG, "REBOOT"); |
sleep(5); |
if(reboot(RB_AUTOBOOT) < 0) { |
msg = strerror(errno); |
syslog(LOG_ERR, "cannot reboot, %s", msg); |
} |
} |
} |
} |
|
static int print_cmd_error(char *msg, char *value) |
{ |
fprintf(stderr, "%s", msg); |
263,13 → 307,7 |
|
int main(int argc, char* argv[]) |
{ |
int s, t; |
char cmd[CMDSIZE]; |
char buf[BUFSIZE]; |
char* msg; |
int br; |
struct sockaddr_in sa; |
socklen_t sa_len; |
int s; |
|
if(!read_config(argc, argv)) return 1; |
|
278,39 → 316,8 |
return 1; |
} |
|
for(;;) { |
sa_len = sizeof(sa); |
if((t = accept(s, (struct sockaddr *)&sa, &sa_len)) < 0) { |
if(errno == EINTR) /* EINTR might happen on accept(), */ |
continue; /* try again */ |
listen_socket(s); |
|
msg = strerror(errno); |
syslog(LOG_ERR, "cannot get connection, %s", msg); |
continue; |
} |
|
msg = inet_ntoa(sa.sin_addr); |
syslog(LOG_INFO, "connect from %s", msg); |
|
cmd[0] = '\0'; |
while((br = recv(t, buf, BUFSIZE, 0)) > 0) { |
strncat(cmd, buf, min(br, sizeof(cmd) - strlen(cmd) - 1)); |
} |
sleep(1); |
close(t); |
|
syslog(LOG_INFO, "got command [%s]", cmd); |
|
if(0 == strncmp(cmd, cfg.password, sizeof(cmd))) { |
syslog(LOG_EMERG, "REBOOT"); |
sleep(5); |
if(reboot(RB_AUTOBOOT) < 0) { |
msg = strerror(errno); |
syslog(LOG_ERR, "cannot reboot, %s", msg); |
} |
} |
} |
|
return 0; |
} |
|