/[LeafOK_CVS]/lbbs/src/init.c
ViewVC logotype

Diff of /lbbs/src/init.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.8 by sysadm, Sun Mar 20 14:37:37 2005 UTC Revision 1.21 by sysadm, Sun Jun 1 03:07:42 2025 UTC
# Line 1  Line 1 
1  /***************************************************************************  /***************************************************************************
2                            init.c  -  description                                                    init.c  -  description
3                               -------------------                                                           -------------------
4      begin                : Mon Oct 18 2004          Copyright            : (C) 2004-2025 by Leaflet
5      copyright            : (C) 2004 by Leaflet          Email                : leaflet@leafok.com
     email                : leaflet@leafok.com  
6   ***************************************************************************/   ***************************************************************************/
7    
8  /***************************************************************************  /***************************************************************************
9   *                                                                         *   *                                                                         *
10   *   This program is free software; you can redistribute it and/or modify  *   *   This program is free software; you can redistribute it and/or modify  *
11   *   it under the terms of the GNU General Public License as published by  *   *   it under the terms of the GNU General Public License as published by  *
12   *   the Free Software Foundation; either version 2 of the License, or     *   *   the Free Software Foundation; either version 3 of the License, or     *
13   *   (at your option) any later version.                                   *   *   (at your option) any later version.                                   *
14   *                                                                         *   *                                                                         *
15   ***************************************************************************/   ***************************************************************************/
16    
17    #include "init.h"
18    #include "database.h"
19  #include "bbs.h"  #include "bbs.h"
20  #include "common.h"  #include "common.h"
21    #include "log.h"
22  #include "io.h"  #include "io.h"
23  #include <unistd.h>  #include <string.h>
24    #include <stdlib.h>
25  #include <signal.h>  #include <signal.h>
26  #include <sys/param.h>  #include <sys/param.h>
27  #include <sys/types.h>  #include <sys/types.h>
28  #include <sys/stat.h>  #include <sys/stat.h>
29    #include <unistd.h>
30    
31  void  int init_daemon(void)
 init_daemon (void)  
 {  
   int pid;  
   int i;  
   
   if (pid = fork ())  
     exit (0);  
   else if (pid < 0)  
     exit (1);  
   
   setsid ();  
   
   if (pid = fork ())  
     exit (0);  
   else if (pid < 0)  
     exit (1);  
   
 //  for (i = 0; i < NOFILE; ++i)  
 //    close (i);  
   chdir (app_home_dir);  
   umask (0);  
   
   signal (SIGCHLD, SIG_IGN);  
   
   return;  
 }  
   
 int  
 load_conf (const char *conf_file)  
32  {  {
33    char temp[256];          int pid;
   
   // Load configuration  
   char c_name[256];  
   FILE *fin;  
34    
35    if ((fin = fopen (conf_file, "r")) == NULL)          pid = fork();
     {  
       log_error ("Open %s failed", conf_file);  
       return -1;  
     }  
36    
37    while (fscanf (fin, "%s", c_name) != EOF)          if (pid > 0) // Parent process
     {  
       if (c_name[0] == '#')  
       {  
         fgets(temp, 256, fin);  
         continue;  
       }  
       fscanf (fin, "%*c");  
       if (strcmp (c_name, "bbs_id") == 0)  
38          {          {
39            fscanf (fin, "%s", BBS_id);                  _exit(0);
40          }          }
41        if (strcmp (c_name, "bbs_name") == 0)          else if (pid < 0) // error
42          {          {
43            fscanf (fin, "%s", BBS_name);                  _exit(pid);
44          }          }
45        if (strcmp (c_name, "bbs_server") == 0)  
46          {          // Child process
47            fscanf (fin, "%s", BBS_server);          setsid();
48          }  
49        if (strcmp (c_name, "bbs_address") == 0)          pid = fork();
50          {  
51            fscanf (fin, "%s", BBS_address);          if (pid > 0) // Parent process
         }  
       if (strcmp (c_name, "bbs_port") == 0)  
         {  
           fscanf (fin, "%ud", &BBS_port);  
         }  
       if (strcmp (c_name, "bbs_max_client") == 0)  
         {  
           fscanf (fin, "%d", &BBS_max_client);  
         }  
       if (strcmp (c_name, "bbs_max_user") == 0)  
         {  
           fscanf (fin, "%d", &BBS_max_user);  
         }  
       if (strcmp (c_name, "bbs_start_dt") == 0)  
         {  
           int y = 0, m = 0, d = 0;  
           fscanf (fin, "%d-%d-%d", &y, &m, &d);  
           sprintf (BBS_start_dt, "%4d年%2d月%2d日",y,m,d);  
         }  
       if (strcmp (c_name, "db_host") == 0)  
         {  
           fscanf (fin, "%s", DB_host);  
         }  
       if (strcmp (c_name, "db_username") == 0)  
52          {          {
53            fscanf (fin, "%s", DB_username);                  _exit(0);
54          }          }
55        if (strcmp (c_name, "db_password") == 0)          else if (pid < 0) // error
56          {          {
57            fscanf (fin, "%s", DB_password);                  _exit(pid);
58          }          }
59        if (strcmp (c_name, "db_database") == 0)  
60          {          // Child process
61            fscanf (fin, "%s", DB_database);          umask(022);
62    
63            return 0;
64    }
65    
66    int load_conf(const char *conf_file)
67    {
68            char temp[256];
69    
70            // Load configuration
71            char c_name[256];
72            FILE *fin;
73    
74            if ((fin = fopen(conf_file, "r")) == NULL)
75            {
76                    log_error("Open %s failed", conf_file);
77                    return -1;
78            }
79    
80            while (fscanf(fin, "%s", c_name) != EOF)
81            {
82                    if (c_name[0] == '#')
83                    {
84                            fgets(temp, 256, fin);
85                            continue;
86                    }
87                    fscanf(fin, "%*c");
88                    if (strcmp(c_name, "bbs_id") == 0)
89                    {
90                            fscanf(fin, "%s", BBS_id);
91                    }
92                    if (strcmp(c_name, "bbs_name") == 0)
93                    {
94                            fscanf(fin, "%s", BBS_name);
95                    }
96                    if (strcmp(c_name, "bbs_server") == 0)
97                    {
98                            fscanf(fin, "%s", BBS_server);
99                    }
100                    if (strcmp(c_name, "bbs_address") == 0)
101                    {
102                            fscanf(fin, "%s", BBS_address);
103                    }
104                    if (strcmp(c_name, "bbs_port") == 0)
105                    {
106                            fscanf(fin, "%hu", &BBS_port);
107                    }
108                    if (strcmp(c_name, "bbs_max_client") == 0)
109                    {
110                            fscanf(fin, "%d", &BBS_max_client);
111                            if (BBS_max_client > MAX_CLIENTS_LIMIT)
112                            {
113                                    log_error("Config BBS_max_client > limit (%d), reset it to limit\n", BBS_max_client);
114                                    BBS_max_client = MAX_CLIENTS_LIMIT;
115                            }
116                    }
117                    if (strcmp(c_name, "bbs_max_client_per_ip") == 0)
118                    {
119                            fscanf(fin, "%d", &BBS_max_client_per_ip);
120                    }
121                    if (strcmp(c_name, "bbs_max_user") == 0)
122                    {
123                            fscanf(fin, "%d", &BBS_max_user);
124                    }
125                    if (strcmp(c_name, "bbs_start_dt") == 0)
126                    {
127                            int y = 0, m = 0, d = 0;
128                            fscanf(fin, "%d-%d-%d", &y, &m, &d);
129                            snprintf(BBS_start_dt, sizeof(BBS_start_dt), "%4d年%2d月%2d日", y, m, d);
130                    }
131                    if (strcmp(c_name, "db_host") == 0)
132                    {
133                            fscanf(fin, "%s", DB_host);
134                    }
135                    if (strcmp(c_name, "db_username") == 0)
136                    {
137                            fscanf(fin, "%s", DB_username);
138                    }
139                    if (strcmp(c_name, "db_password") == 0)
140                    {
141                            fscanf(fin, "%s", DB_password);
142                    }
143                    if (strcmp(c_name, "db_database") == 0)
144                    {
145                            fscanf(fin, "%s", DB_database);
146                    }
147                    if (strcmp(c_name, "db_timezone") == 0)
148                    {
149                            fscanf(fin, "%s", DB_timezone);
150                    }
151          }          }
     }  
152    
153    fclose (fin);          fclose(fin);
154      
155    return 0;          return 0;
156  }  }


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1