Subversion Repositories general

Compare Revisions

Ignore whitespace Rev 1141 → Rev 1142

/rebootdaemon/trunk/rebootdaemon.c
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;
}