Web server: write syslog

Write messages from the web server to the syslog.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
Heinrich Schuchardt 2020-03-15 17:20:00 +00:00
parent a76a8263b4
commit ecf63a1367
3 changed files with 43 additions and 24 deletions

View File

@ -33,6 +33,7 @@
#include <stdlib.h>
#define __USE_XOPEN
#include <signal.h>
#include <syslog.h>
#include <time.h>
#include <usb.h>
#include <sys/stat.h>
@ -516,6 +517,7 @@ static void parse_command_line(int argc, char* argv[], int count,
case 'L': {
int* s;
openlog("sispmctl", LOG_PID, LOG_INFO);
read_password();
if (verbose)
printf("Server goes to listen mode now.\n");

View File

@ -26,6 +26,7 @@
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <syslog.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/socket.h>
@ -186,6 +187,7 @@ void process(int out,char *request, struct usb_device *dev, int devnum)
}
if (chdir(homedir) != 0) {
syslog(LOG_ERR, "Cannot access directory %s\n", homedir);
bad_request(out);
return;
}
@ -196,6 +198,7 @@ void process(int out,char *request, struct usb_device *dev, int devnum)
in = fopen(ptr,"r");
if (in == NULL) {
syslog(LOG_ERR, "Cannot open %s\n", ptr);
bad_request(out);
return;
}
@ -204,7 +207,9 @@ void process(int out,char *request, struct usb_device *dev, int devnum)
udev = get_handle(dev);
if (udev == NULL) {
fprintf(stderr, "No access to Gembird #%d USB device %s\n", devnum,
dev->filename );
dev->filename);
syslog(LOG_ERR, "No access to Gembird #%d USB device %s\n", devnum,
dev->filename);
service_not_available(out);
fclose(in);
return;
@ -251,8 +256,10 @@ void process(int out,char *request, struct usb_device *dev, int devnum)
if (trm != NULL) {
if (num == NULL) {
fprintf(stderr, "Command-Format: $$exec(#)?positive:negative$$ "
"ERROR at #");
fprintf(stderr, "Command-Format: $$exec(#)?positive:negative$$ - "
"ERROR at #\n");
syslog(LOG_ERR, "Command-Format: $$exec(#)?positive:negative$$ - "
"ERROR at #\n");
service_not_available(out);
fclose(in);
return;
@ -269,7 +276,8 @@ void process(int out,char *request, struct usb_device *dev, int devnum)
if (strncasecmp(cmd,"on(",3)==0) {
if (trm[1] != '$' || !pos || !neg) {
fprintf(stderr, "Command-Format: $$on(#)?positive:negative$$");
fprintf(stderr, "Command-Format: $$on(#)?positive:negative$$\n");
syslog(LOG_ERR, "Command-Format: $$on(#)?positive:negative$$\n");
service_not_available(out);
fclose(in);
return;
@ -282,7 +290,8 @@ void process(int out,char *request, struct usb_device *dev, int devnum)
send(out,neg,trm-neg,0);
} else if (strncasecmp(cmd,"off(",4)==0) {
if (trm[1] != '$' || !pos || !neg) {
fprintf(stderr, "Command-Format: $$off(#)?positive:negative$$");
fprintf(stderr, "Command-Format: $$off(#)?positive:negative$$\n");
syslog(LOG_ERR, "Command-Format: $$off(#)?positive:negative$$\n");
service_not_available(out);
fclose(in);
return;
@ -295,7 +304,10 @@ void process(int out,char *request, struct usb_device *dev, int devnum)
send(out,neg,trm-neg,0);
} else if (strncasecmp(cmd,"toggle(",7)==0) {
if (trm[1] != '$' || !pos || !neg) {
fprintf(stderr, "Command-Format: $$toggle(#)?positive:negative$$");
fprintf(stderr,
"Command-Format: $$toggle(#)?positive:negative$$\n");
syslog(LOG_ERR,
"Command-Format: $$toggle(#)?positive:negative$$\n");
service_not_available(out);
fclose(in);
return;
@ -311,7 +323,10 @@ void process(int out,char *request, struct usb_device *dev, int devnum)
}
} else if (strncasecmp(cmd,"status(",7)==0) {
if (trm[1] != '$' || !pos || !neg) {
fprintf(stderr, "Command-Format: $$status(#)?positive:negative$$");
fprintf(stderr,
"Command-Format: $$status(#)?positive:negative$$\n");
syslog(LOG_ERR,
"Command-Format: $$status(#)?positive:negative$$\n");
service_not_available(out);
fclose(in);
return;
@ -324,7 +339,8 @@ void process(int out,char *request, struct usb_device *dev, int devnum)
send(out,neg,trm-neg,0);
} else if (strncasecmp(cmd, "version(", 8) == 0) {
if (trm[1] != '$') {
fprintf(stderr, "Command-Format: $$version()$$");
fprintf(stderr, "Command-Format: $$version()$$\n");
syslog(LOG_ERR, "Command-Format: $$version()$$\n");
service_not_available(out);
fclose(in);
return;
@ -351,4 +367,3 @@ void process(int out,char *request, struct usb_device *dev, int devnum)
return;
}
#endif

View File

@ -23,6 +23,7 @@
#include <errno.h>
#include <fcntl.h>
#include <netinet/in.h>
#include <syslog.h>
#include <time.h>
#include <sys/socket.h>
#include <arpa/inet.h>
@ -45,19 +46,19 @@ void l_listen(int*sock, struct usb_device*dev, int devnum)
{
int i;
int s;
char *oob;
char *buffer;
oob = (char *)malloc(32);
buffer = (char *)malloc(BUFFERSIZE + 4);
if (debug)
if(debug)
fprintf(stderr, "Listening for local provider on port %d...\n", listenport);
syslog(LOG_INFO, "Listening on port %d...\n", listenport);
listen(*sock, 1); /* We only get one connection on this port.
Everything else is refused. */
for (;;) {
while((s = accept(*sock, NULL, NULL)) == -1) {
perror("Accepting connection failed");
syslog(LOG_ERR, "Accepting connection failed: %s\n", strerror(errno));
sleep(1);
/* Retry after error. Really bad errors shouldn't happen. */
}
@ -65,10 +66,6 @@ void l_listen(int*sock, struct usb_device*dev, int devnum)
fprintf(stderr, "Provider connected.\n");
for (;;) {
if ((recv(s, oob, 32, MSG_OOB | MSG_DONTWAIT) > 0) &&
strncmp(oob, "flush", 5))
fprintf(stderr,"OUT-OF-BAND MESSAGE 1");
memset(buffer, 0, BUFFERSIZE + 4);
i = recv(s, buffer, BUFFERSIZE, 0);
if (i == -1) {
@ -77,6 +74,7 @@ void l_listen(int*sock, struct usb_device*dev, int devnum)
}
/* wait for a new connection */
perror("Lost provider connection");
syslog(LOG_ERR, "Lost provider connection: %s\n", strerror(errno));
} else if (i > 0) {
process(s,buffer,dev,devnum);
}
@ -102,19 +100,18 @@ int*socket_init(char* bind_arg)
/* locate socket */
*s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if( *s == -1 ) {
if(*s == -1) {
perror("Socket cannot be opened");
syslog(LOG_ERR, "Socket cannot be opened: %s\n", strerror(errno));
free(s);
return(NULL);
}
/* set socket options */
if( setsockopt(*s, SOL_SOCKET, SO_REUSEADDR, (char *) &on, sizeof(int)) == -1) {
perror("Socket option cannot be set");
goto socket_error;
}
if( setsockopt(*s, SOL_SOCKET, SO_RCVBUF, &mtu, sizeof(size_t)) == -1) {
if(setsockopt(*s, SOL_SOCKET, SO_REUSEADDR, (char *) &on, sizeof(int)) == -1
|| setsockopt(*s, SOL_SOCKET, SO_RCVBUF, &mtu, sizeof(size_t)) == -1) {
perror("Socket option cannot be set");
syslog(LOG_ERR, "Socket option cannot be set: %s\n", strerror(errno));
goto socket_error;
}
@ -126,9 +123,14 @@ int*socket_init(char* bind_arg)
result=inet_pton(AF_INET,bind_arg,(void*)&bind_addr);
if (result<0) {
perror("Inet_pton for given bind address failed");
syslog(LOG_ERR, "Inet_pton for given bind address failed: %s\n",
strerror(errno));
goto socket_error;
} else if (result==0) {
fprintf(stderr,"Given bind address is not a valid IPv4 address: %s\n",bind_arg);
fprintf(stderr,"Given bind address is not a valid IPv4 address: %s\n",
bind_arg);
syslog(LOG_ERR, "Given bind address is not a valid IPv4 address: %s\n",
bind_arg);
goto socket_error;
}
} else {
@ -136,10 +138,10 @@ int*socket_init(char* bind_arg)
}
addr.sin_addr.s_addr = (uint32_t) bind_addr;
/* bind socket now */
if(bind(*s, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)) == -1) {
perror("Bind failed");
syslog(LOG_ERR, "Bind failed: %s\n", strerror(errno));
goto socket_error;
}