From: Jeremy Tan Date: Sun, 15 Sep 2013 13:47:32 +0000 (+0800) Subject: Switch to syslog for logging messages. X-Git-Url: https://git.ucc.asn.au/?a=commitdiff_plain;h=ce9b60fc55acd893b58bf84b3f0f7f39cffee079;hp=e279b48f80a9386710f6170a876601257cd6144f;p=matches%2FMCTX3420.git Switch to syslog for logging messages. Updated nginx and rsyslog config files are provided to allow access to the log file from the web server, under the location /api/log. This WILL break nginx if you relied on symlinks to the config file. --- diff --git a/nginx-configs/README b/nginx-configs/README deleted file mode 100644 index 99499a5..0000000 --- a/nginx-configs/README +++ /dev/null @@ -1,23 +0,0 @@ -This folder represents the files that should be placed under: -/etc/nginx - -To install: -* Delete all files under /etc/nginx/sites-enabled -* Either: - * Copy 'mctxconfig' (under sites-enabled) to /etc/nginx/sites-available/ - and create a symlink to that file under /etc/nginx/sites-enabled/ - * Create a symlink directly from 'mctxconfig' to - /etc/etc/nginx/sites-enabled/ -* Replace /etc/nginx/fastcgi_params and /etc/nginx/mime.types with the - provided files (either by copying or symlinking) - -Note: -To get the login functionality working, you need to place a .htpasswd file -under /usr/share/nginx/access (create folder if it doesn't exist). To generate -the htpasswd file, install the apache2-utils package and use the 'htpasswd' -executable. - - -P.S: (I always forget these) -Set file permissions to: 644 -Set folder permissions to: 755 \ No newline at end of file diff --git a/nginx-configs/fastcgi_params b/nginx-configs/fastcgi_params deleted file mode 100644 index 51aa692..0000000 --- a/nginx-configs/fastcgi_params +++ /dev/null @@ -1,27 +0,0 @@ -fastcgi_param QUERY_STRING $query_string; -fastcgi_param REQUEST_METHOD $request_method; -fastcgi_param CONTENT_TYPE $content_type; -fastcgi_param CONTENT_LENGTH $content_length; - -fastcgi_param SCRIPT_FILENAME $request_filename; -fastcgi_param SCRIPT_NAME $fastcgi_script_name; -fastcgi_param REQUEST_URI $request_uri; -fastcgi_param DOCUMENT_URI $document_uri; -fastcgi_param DOCUMENT_ROOT $document_root; -fastcgi_param SERVER_PROTOCOL $server_protocol; - -fastcgi_param GATEWAY_INTERFACE CGI/1.1; -fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; -fastcgi_param SERVER_HOSTNAME mctxsoft; - -fastcgi_param REMOTE_ADDR $remote_addr; -fastcgi_param REMOTE_PORT $remote_port; -fastcgi_param REMOTE_USER $remote_user; -fastcgi_param SERVER_ADDR $server_addr; -fastcgi_param SERVER_PORT $server_port; -fastcgi_param SERVER_NAME $server_name; - -fastcgi_param HTTPS $https; - -# PHP only, required if PHP was built with --enable-force-cgi-redirect -fastcgi_param REDIRECT_STATUS 200; diff --git a/nginx-configs/mime.types b/nginx-configs/mime.types deleted file mode 100644 index 9d05612..0000000 --- a/nginx-configs/mime.types +++ /dev/null @@ -1,80 +0,0 @@ -types { - text/html html htm shtml; - text/css css; - text/xml xml rss; - image/gif gif; - image/jpeg jpeg jpg; - application/x-javascript js; - application/atom+xml atom; - - text/mathml mml; - text/plain log; - text/plain txt; - text/vnd.sun.j2me.app-descriptor jad; - text/vnd.wap.wml wml; - text/x-component htc; - - image/png png; - image/tiff tif tiff; - image/vnd.wap.wbmp wbmp; - image/x-icon ico; - image/x-jng jng; - image/x-ms-bmp bmp; - image/svg+xml svg svgz; - - application/java-archive jar war ear; - application/json json; - application/mac-binhex40 hqx; - application/msword doc; - application/pdf pdf; - application/postscript ps eps ai; - application/rtf rtf; - application/vnd.ms-excel xls; - application/vnd.ms-powerpoint ppt; - application/vnd.wap.wmlc wmlc; - application/vnd.google-earth.kml+xml kml; - application/vnd.google-earth.kmz kmz; - application/x-7z-compressed 7z; - application/x-cocoa cco; - application/x-java-archive-diff jardiff; - application/x-java-jnlp-file jnlp; - application/x-makeself run; - application/x-perl pl pm; - application/x-pilot prc pdb; - application/x-rar-compressed rar; - application/x-redhat-package-manager rpm; - application/x-sea sea; - application/x-shockwave-flash swf; - application/x-stuffit sit; - application/x-tcl tcl tk; - application/x-x509-ca-cert der pem crt; - application/x-xpinstall xpi; - application/xhtml+xml xhtml; - application/zip zip; - - application/octet-stream bin exe dll; - application/octet-stream deb; - application/octet-stream dmg; - application/octet-stream eot; - application/octet-stream iso img; - application/octet-stream msi msp msm; - application/ogg ogx; - - audio/midi mid midi kar; - audio/mpeg mpga mpega mp2 mp3 m4a; - audio/ogg oga ogg spx; - audio/x-realaudio ra; - audio/webm weba; - - video/3gpp 3gpp 3gp; - video/mp4 mp4; - video/mpeg mpeg mpg mpe; - video/ogg ogv; - video/quicktime mov; - video/webm webm; - video/x-flv flv; - video/x-mng mng; - video/x-ms-asf asx asf; - video/x-ms-wmv wmv; - video/x-msvideo avi; -} diff --git a/nginx-configs/sites-enabled/mctxconfig b/nginx-configs/sites-enabled/mctxconfig deleted file mode 100644 index 4da2b84..0000000 --- a/nginx-configs/sites-enabled/mctxconfig +++ /dev/null @@ -1,130 +0,0 @@ -# You may add here your -# server { -# ... -# } -# statements for each of your virtual hosts to this file - -## -# You should look at the following URL's in order to grasp a solid understanding -# of Nginx configuration files in order to fully unleash the power of Nginx. -# http://wiki.nginx.org/Pitfalls -# http://wiki.nginx.org/QuickStart -# http://wiki.nginx.org/Configuration -# -# Generally, you will want to move this file somewhere, and start with a clean -# file but keep this around for reference. Or just disable in sites-enabled. -# -# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples. -## - -server { - listen 80; - listen [::]:80 default_server ipv6only=on; - - root /usr/share/nginx/html; - index index.php index.html index.htm; - - # Make site accessible from http://localhost/ - server_name localhost; - - location / { - # First attempt to serve request as file, then - # as directory, then fall back to displaying a 404. - try_files $uri $uri/ =404; - # Uncomment to enable naxsi on this location - # include /etc/nginx/naxsi.rules - } - - # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests - #location /RequestDenied { - # proxy_pass http://127.0.0.1:8080; - #} - - #error_page 404 /404.html; - - # redirect server error pages to the static page /50x.html - # - #error_page 500 502 503 504 /50x.html; - #location = /50x.html { - # root /usr/share/nginx/html; - #} - - # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 - # - location ~ \.php$ { - fastcgi_split_path_info ^(.+\.php)(/.+)$; - # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini - # - # # With php5-cgi alone: - # fastcgi_pass 127.0.0.1:9000; - # # With php5-fpm: - fastcgi_pass unix:/var/run/php5-fpm.sock; - fastcgi_index index.php; - include fastcgi_params; - } - - # deny access to .htaccess files, if Apache's document root - # concurs with nginx's one - # - location ~ /\.ht { - deny all; - } - - #MCTX API - location /api { - #Login area - location ^~ /api/control { - auth_basic "Restricted Access"; - auth_basic_user_file /usr/share/nginx/access/.htpasswd; - - fastcgi_pass 127.0.0.1:9005; - fastcgi_param DOCUMENT_URI_LOCAL control; - include fastcgi_params; - } - location ~ ^/api/?([^?]*) { - fastcgi_pass 127.0.0.1:9005; - fastcgi_param DOCUMENT_URI_LOCAL $1; - include fastcgi_params; - } - } -} - - -# another virtual host using mix of IP-, name-, and port-based configuration -# -#server { -# listen 8000; -# listen somename:8080; -# server_name somename alias another.alias; -# root html; -# index index.html index.htm; -# -# location / { -# try_files $uri $uri/ =404; -# } -#} - - -# HTTPS server -# -#server { -# listen 443; -# server_name localhost; -# -# root html; -# index index.html index.htm; -# -# ssl on; -# ssl_certificate cert.pem; -# ssl_certificate_key cert.key; -# -# ssl_session_timeout 5m; -# -# ssl_protocols SSLv3 TLSv1; -# ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP; -# ssl_prefer_server_ciphers on; -# -# location / { -# try_files $uri $uri/ =404; -# } -#} diff --git a/server-configs/README.txt b/server-configs/README.txt new file mode 100644 index 0000000..f7f00ef --- /dev/null +++ b/server-configs/README.txt @@ -0,0 +1,5 @@ +To get syslog and nginx to work correctly: +* Update nginx with the latest config file +* Copy the config file to /etc/rsyslog.d/ +* Restart rsyslog with /etc/init.d/rsyslog restart +* chmod the log file: chmod 644 /var/log/mctxserv.log diff --git a/server-configs/nginx/README b/server-configs/nginx/README new file mode 100644 index 0000000..99499a5 --- /dev/null +++ b/server-configs/nginx/README @@ -0,0 +1,23 @@ +This folder represents the files that should be placed under: +/etc/nginx + +To install: +* Delete all files under /etc/nginx/sites-enabled +* Either: + * Copy 'mctxconfig' (under sites-enabled) to /etc/nginx/sites-available/ + and create a symlink to that file under /etc/nginx/sites-enabled/ + * Create a symlink directly from 'mctxconfig' to + /etc/etc/nginx/sites-enabled/ +* Replace /etc/nginx/fastcgi_params and /etc/nginx/mime.types with the + provided files (either by copying or symlinking) + +Note: +To get the login functionality working, you need to place a .htpasswd file +under /usr/share/nginx/access (create folder if it doesn't exist). To generate +the htpasswd file, install the apache2-utils package and use the 'htpasswd' +executable. + + +P.S: (I always forget these) +Set file permissions to: 644 +Set folder permissions to: 755 \ No newline at end of file diff --git a/server-configs/nginx/fastcgi_params b/server-configs/nginx/fastcgi_params new file mode 100644 index 0000000..51aa692 --- /dev/null +++ b/server-configs/nginx/fastcgi_params @@ -0,0 +1,27 @@ +fastcgi_param QUERY_STRING $query_string; +fastcgi_param REQUEST_METHOD $request_method; +fastcgi_param CONTENT_TYPE $content_type; +fastcgi_param CONTENT_LENGTH $content_length; + +fastcgi_param SCRIPT_FILENAME $request_filename; +fastcgi_param SCRIPT_NAME $fastcgi_script_name; +fastcgi_param REQUEST_URI $request_uri; +fastcgi_param DOCUMENT_URI $document_uri; +fastcgi_param DOCUMENT_ROOT $document_root; +fastcgi_param SERVER_PROTOCOL $server_protocol; + +fastcgi_param GATEWAY_INTERFACE CGI/1.1; +fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; +fastcgi_param SERVER_HOSTNAME mctxsoft; + +fastcgi_param REMOTE_ADDR $remote_addr; +fastcgi_param REMOTE_PORT $remote_port; +fastcgi_param REMOTE_USER $remote_user; +fastcgi_param SERVER_ADDR $server_addr; +fastcgi_param SERVER_PORT $server_port; +fastcgi_param SERVER_NAME $server_name; + +fastcgi_param HTTPS $https; + +# PHP only, required if PHP was built with --enable-force-cgi-redirect +fastcgi_param REDIRECT_STATUS 200; diff --git a/server-configs/nginx/mime.types b/server-configs/nginx/mime.types new file mode 100644 index 0000000..9d05612 --- /dev/null +++ b/server-configs/nginx/mime.types @@ -0,0 +1,80 @@ +types { + text/html html htm shtml; + text/css css; + text/xml xml rss; + image/gif gif; + image/jpeg jpeg jpg; + application/x-javascript js; + application/atom+xml atom; + + text/mathml mml; + text/plain log; + text/plain txt; + text/vnd.sun.j2me.app-descriptor jad; + text/vnd.wap.wml wml; + text/x-component htc; + + image/png png; + image/tiff tif tiff; + image/vnd.wap.wbmp wbmp; + image/x-icon ico; + image/x-jng jng; + image/x-ms-bmp bmp; + image/svg+xml svg svgz; + + application/java-archive jar war ear; + application/json json; + application/mac-binhex40 hqx; + application/msword doc; + application/pdf pdf; + application/postscript ps eps ai; + application/rtf rtf; + application/vnd.ms-excel xls; + application/vnd.ms-powerpoint ppt; + application/vnd.wap.wmlc wmlc; + application/vnd.google-earth.kml+xml kml; + application/vnd.google-earth.kmz kmz; + application/x-7z-compressed 7z; + application/x-cocoa cco; + application/x-java-archive-diff jardiff; + application/x-java-jnlp-file jnlp; + application/x-makeself run; + application/x-perl pl pm; + application/x-pilot prc pdb; + application/x-rar-compressed rar; + application/x-redhat-package-manager rpm; + application/x-sea sea; + application/x-shockwave-flash swf; + application/x-stuffit sit; + application/x-tcl tcl tk; + application/x-x509-ca-cert der pem crt; + application/x-xpinstall xpi; + application/xhtml+xml xhtml; + application/zip zip; + + application/octet-stream bin exe dll; + application/octet-stream deb; + application/octet-stream dmg; + application/octet-stream eot; + application/octet-stream iso img; + application/octet-stream msi msp msm; + application/ogg ogx; + + audio/midi mid midi kar; + audio/mpeg mpga mpega mp2 mp3 m4a; + audio/ogg oga ogg spx; + audio/x-realaudio ra; + audio/webm weba; + + video/3gpp 3gpp 3gp; + video/mp4 mp4; + video/mpeg mpeg mpg mpe; + video/ogg ogv; + video/quicktime mov; + video/webm webm; + video/x-flv flv; + video/x-mng mng; + video/x-ms-asf asx asf; + video/x-ms-wmv wmv; + video/x-msvideo avi; +} diff --git a/server-configs/nginx/sites-enabled/mctxconfig b/server-configs/nginx/sites-enabled/mctxconfig new file mode 100644 index 0000000..1491152 --- /dev/null +++ b/server-configs/nginx/sites-enabled/mctxconfig @@ -0,0 +1,119 @@ +server { + listen 80; + + #Change this to match your root directory + root /usr/share/nginx/html; + index index.php index.html index.htm; + + # Make site accessible from http://localhost/ + server_name localhost; + + location / { + # First attempt to serve request as file, then + # as directory, then fall back to displaying a 404. + try_files $uri $uri/ =404; + # Uncomment to enable naxsi on this location + # include /etc/nginx/naxsi.rules + } + + # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests + #location /RequestDenied { + # proxy_pass http://127.0.0.1:8080; + #} + + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + #error_page 500 502 503 504 /50x.html; + #location = /50x.html { + # root /usr/share/nginx/html; + #} + + # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 + # + location ~ \.php$ { + fastcgi_split_path_info ^(.+\.php)(/.+)$; + # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini + # + # # With php5-cgi alone: + # fastcgi_pass 127.0.0.1:9000; + # # With php5-fpm: + fastcgi_pass unix:/var/run/php5-fpm.sock; + fastcgi_index index.php; + include fastcgi_params; + } + + # deny access to .htaccess files, if Apache's document root + # concurs with nginx's one + # + location ~ /\.ht { + deny all; + } + + #MCTX API + location /api { + #Login area + location ^~ /api/control { + #Uncomment to add back login + #auth_basic "Restricted Access"; + #auth_basic_user_file /usr/share/nginx/access/.htpasswd; + + fastcgi_pass 127.0.0.1:9005; + fastcgi_param DOCUMENT_URI_LOCAL control; + include fastcgi_params; + } + + #Program log + location ^~ /api/log { + alias /var/log/mctxserv.log; + default_type text/plain; + } + + location ~ ^/api/?([^?]*) { + fastcgi_pass 127.0.0.1:9005; + fastcgi_param DOCUMENT_URI_LOCAL $1; + include fastcgi_params; + } + } +} + + +# another virtual host using mix of IP-, name-, and port-based configuration +# +#server { +# listen 8000; +# listen somename:8080; +# server_name somename alias another.alias; +# root html; +# index index.html index.htm; +# +# location / { +# try_files $uri $uri/ =404; +# } +#} + + +# HTTPS server +# +#server { +# listen 443; +# server_name localhost; +# +# root html; +# index index.html index.htm; +# +# ssl on; +# ssl_certificate cert.pem; +# ssl_certificate_key cert.key; +# +# ssl_session_timeout 5m; +# +# ssl_protocols SSLv3 TLSv1; +# ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP; +# ssl_prefer_server_ciphers on; +# +# location / { +# try_files $uri $uri/ =404; +# } +#} diff --git a/server-configs/rsyslog.d/30-mctxserv.conf b/server-configs/rsyslog.d/30-mctxserv.conf new file mode 100644 index 0000000..8798b6f --- /dev/null +++ b/server-configs/rsyslog.d/30-mctxserv.conf @@ -0,0 +1 @@ +if $programname == 'mctxserv' then /var/log/mctxserv.log diff --git a/server/log.c b/server/log.c index d964e61..d41021f 100644 --- a/server/log.c +++ b/server/log.c @@ -4,24 +4,20 @@ */ -#include -#include - // --- Custom headers --- // #include "common.h" #include "log.h" #include "options.h" -// --- Static variables --- // -static const char * unspecified_funct = "???"; - -// --- Function implementations --- // +#include +#include +#include -//TODO: Migrate to syslog (shouldn't be too hard; these functions basically do what syslog does) -// Note that we will want to have a seperate log as well as syslog; give the user the option to view the log using the GUI +static const char * unspecified_funct = "???"; /** - * Print a message to stderr + * Print a message to stderr and log it via syslog. The message must be + * less than BUFSIZ characters long, or it will be truncated. * @param level - Specify how severe the message is. If level is higher (less urgent) than the program's verbosity (see options.h) no message will be printed * @param funct - String indicating the function name from which this function was called. @@ -31,17 +27,23 @@ static const char * unspecified_funct = "???"; */ void LogEx(int level, const char * funct, ...) { + //Todo: consider setlogmask(3) to filter messages const char *fmt; + char buffer[BUFSIZ]; va_list va; + + // Don't print the message unless we need to + if (level > g_options.verbosity) + return; + va_start(va, funct); fmt = va_arg(va, const char*); if (fmt == NULL) // sanity check - FatalEx("Log", "Format string is NULL"); + Fatal("Format string is NULL"); - // Don't print the message unless we need to - if (level > g_options.verbosity) - return; + vsnprintf(buffer, BUFSIZ, fmt, va); + va_end(va); if (funct == NULL) funct = unspecified_funct; @@ -51,31 +53,28 @@ void LogEx(int level, const char * funct, ...) switch (level) { case LOGERR: + level = LOG_ERR; severity = "ERROR"; break; case LOGWARN: + level = LOG_WARNING; severity = "WARNING"; break; case LOGNOTE: + level = LOG_NOTICE; severity = "NOTICE"; break; case LOGINFO: + level = LOG_INFO; severity = "INFO"; break; default: + level = LOG_DEBUG; severity = "DEBUG"; break; } - // Print: Program name, PID, severity string, function name first - fprintf(stderr, "%s [%d] : %s : %s - ", g_options.program, getpid(), severity, funct); - - // Then pass additional arguments with the format string to vfprintf for printing - vfprintf(stderr, fmt, va); - va_end(va); - - // End log messages with a newline - fprintf(stderr, "\n"); + syslog(level, "%s: %s - %s", severity, funct, buffer); } /** @@ -88,6 +87,7 @@ void LogEx(int level, const char * funct, ...) void FatalEx(const char * funct, ...) { const char *fmt; + char buffer[BUFSIZ]; va_list va; va_start(va, funct); fmt = va_arg(va, const char*); @@ -96,19 +96,17 @@ void FatalEx(const char * funct, ...) { // Fatal error in the Fatal function. // (This really shouldn't happen unless someone does something insanely stupid) - FatalEx("Fatal", "Format string is NULL"); + Fatal("Format string is NULL"); return; // Should never get here } + vsnprintf(buffer, BUFSIZ, fmt,va); + va_end(va); + if (funct == NULL) funct = unspecified_funct; - fprintf(stderr, "%s [%d] : %s : FATAL - ", g_options.program, getpid(), funct); - - vfprintf(stderr, fmt, va); - va_end(va); - fprintf(stderr, "\n"); - + syslog(LOG_CRIT, "FATAL: %s - %s", funct, buffer); exit(EXIT_FAILURE); } diff --git a/server/main.c b/server/main.c index 4b36b20..c032eb1 100644 --- a/server/main.c +++ b/server/main.c @@ -11,6 +11,7 @@ #include "control.h" // --- Standard headers --- // +#include // for system logging #include // for signal handling // --- Variable definitions --- // @@ -68,6 +69,9 @@ int main(int argc, char ** argv) { ParseArguments(argc, argv); + //Open the system log + openlog("mctxserv", LOG_PID | LOG_PERROR, LOG_USER); + Log(LOGINFO, "Server started"); // signal handler //TODO: Make this work /*