]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - server.c
Move gengetopt targets to own Makefile.
[paraslash.git] / server.c
index 7b823dc920e7a63dc8e35f4f3d6d563e822ada1b..c11fb58a9cc234ee6316b3850b758b96286a65a7 100644 (file)
--- a/server.c
+++ b/server.c
@@ -113,8 +113,6 @@ uint32_t afs_socket_cookie;
 /** The mutex protecting the shared memory area containing the mmd struct. */
 int mmd_mutex;
 
-/* global variables for server-internal use */
-static FILE *logfile;
 /** The file containing user information (public key, permissions). */
 static char *user_list_file = NULL;
 static int mmd_shm_id;
@@ -138,112 +136,24 @@ static int want_colors(void)
                return 0;
        if (conf.color_arg == color_arg_yes)
                return 1;
-       if (logfile)
+       if (conf.logfile_given)
                return 0;
        return isatty(STDERR_FILENO);
 }
 
-static int get_loglevel_by_name(const char *txt, size_t n)
-{
-       if (!strncasecmp(txt, "debug", n))
-               return LL_DEBUG;
-       if (!strncasecmp(txt, "info", n))
-               return LL_INFO;
-       if (!strncasecmp(txt, "notice", n))
-               return LL_NOTICE;
-       if (!strncasecmp(txt, "warning", n))
-               return LL_WARNING;
-       if (!strncasecmp(txt, "error", n))
-               return LL_ERROR;
-       if (!strncasecmp(txt, "crit", n))
-               return LL_CRIT;
-       if (!strncasecmp(txt, "emerg", n))
-               return LL_EMERG;
-       return -1;
-}
-
-static char log_colors[NUM_LOGLEVELS][COLOR_MAXLEN];
-
 static void init_colors_or_die(void)
 {
        int ret, i;
-       static const char *default_log_colors[NUM_LOGLEVELS] = {
-                       [LL_DEBUG] = "normal",
-                       [LL_INFO] = "white bold",
-                       [LL_NOTICE] = "cyan bold",
-                       [LL_WARNING] = "green bold",
-                       [LL_ERROR] = "yellow bold",
-                       [LL_CRIT] = "magenta bold",
-                       [LL_EMERG] = "red bold",
-       };
-
-       for (i = 0; i < NUM_LOGLEVELS; i++) {
-               ret = color_parse(default_log_colors[i], log_colors[i]);
-               assert(ret >= 0);
-       }
 
+       if (!want_colors())
+               return;
+       daemon_set_flag(DF_COLOR_LOG);
+       daemon_set_default_log_colors();
        for (i = 0; i < conf.log_color_given; i++) {
-               char *arg = conf.log_color_arg[i], *p = strchr(arg, ':');
-               int ll;
-               if (!p)
-                       goto err;
-               ret = get_loglevel_by_name(arg, p - arg);
-               if (ret < 0)
-                       goto err;
-               ll = ret;
-               p++;
-               ret = color_parse(p, log_colors[ll]);
+               ret = daemon_set_log_color(conf.log_color_arg[i]);
                if (ret < 0)
-                       goto err;
-       }
-       return;
-err:
-       PARA_EMERG_LOG("color syntax error, arg %d (%s)\n", i,
-               conf.log_color_arg[i]);
-       exit(EXIT_FAILURE);
-}
-
-/**
- * Para_server's log function.
- *
- * \param ll The log level.
- * \param fmt The format string describing the log message.
- */
-__printf_2_3 void para_log(int ll, const char* fmt,...)
-{
-       va_list argp;
-       FILE *fp;
-       struct tm *tm;
-       time_t t1;
-       char *color, str[MAXLINE] = "";
-
-       ll = PARA_MIN(ll, NUM_LOGLEVELS - 1);
-       ll = PARA_MAX(ll, LL_DEBUG);
-       if (ll < conf.loglevel_arg)
-               return;
-
-       fp = logfile? logfile : stderr;
-       color = want_colors()? log_colors[ll] : NULL;
-
-       if (color)
-               fprintf(fp, "%s", color);
-       /* date and time */
-       time(&t1);
-       tm = localtime(&t1);
-       strftime(str, MAXLINE, "%b %d %H:%M:%S", tm);
-       fprintf(fp, "%s ", str);
-       /* loglevel */
-       if (conf.loglevel_arg <= LL_INFO)
-               fprintf(fp, "%i: ", ll);
-       if (conf.loglevel_arg <= LL_INFO) { /* log pid */
-               pid_t mypid = getpid();
-               fprintf(fp, "(%d) ", (int)mypid);
+                       exit(EXIT_FAILURE);
        }
-       va_start(argp, fmt);
-       vfprintf(fp, fmt, argp);
-       va_end(argp);
-       if (color)
-               fprintf(fp, "%s", COLOR_RESET);
 }
 
 /*
@@ -292,12 +202,10 @@ err_out:
 void parse_config_or_die(int override)
 {
        char *home = para_homedir();
-       struct stat statbuf;
-       int ret;
+       int ret, ll = conf.loglevel_arg;
        char *cf;
 
-       close_log(logfile);
-       logfile = NULL;
+       daemon_close_log();
        if (conf.config_file_given)
                cf = para_strdup(conf.config_file_arg);
        else
@@ -307,13 +215,13 @@ void parse_config_or_die(int override)
                user_list_file = make_message("%s/.paraslash/server.users", home);
        else
                user_list_file = para_strdup(conf.user_list_arg);
-       ret = stat(cf, &statbuf);
-       if (ret && conf.config_file_given) {
+       ret = file_exists(cf);
+       if (conf.config_file_given && !ret)  {
                ret = -1;
-               PARA_EMERG_LOG("can not stat config file %s\n", cf);
+               PARA_EMERG_LOG("can not read config file %s\n", cf);
                goto out;
        }
-       if (!ret) {
+       if (ret) {
                int tmp = conf.daemon_given;
                struct server_cmdline_parser_params params = {
                        .override = override,
@@ -325,10 +233,15 @@ void parse_config_or_die(int override)
                server_cmdline_parser_config_file(cf, &conf, &params);
                conf.daemon_given = tmp;
        }
-       if (conf.logfile_given)
-               logfile = open_log(conf.logfile_arg);
-       if (want_colors())
-               init_colors_or_die();
+       if (conf.logfile_given) {
+               daemon_set_logfile(conf.logfile_arg);
+               daemon_open_log_or_die();
+       }
+       daemon_set_loglevel(ll);
+       init_colors_or_die();
+       daemon_set_flag(DF_LOG_PID);
+       daemon_set_flag(DF_LOG_LL);
+       daemon_set_flag(DF_LOG_TIME);
        ret = 1;
 out:
        free(cf);