/[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.19 by sysadm, Tue May 13 07:30:10 2025 UTC Revision 1.23 by sysadm, Thu Jun 5 05:24:56 2025 UTC
# Line 28  Line 28 
28  #include <sys/stat.h>  #include <sys/stat.h>
29  #include <unistd.h>  #include <unistd.h>
30    
31    #define CONF_DELIM_WITH_SPACE " \t\r\n"
32    
33  int init_daemon(void)  int init_daemon(void)
34  {  {
35          int pid;          int pid;
36    
37          pid = fork();          pid = fork();
38    
39          if (pid != 0) // Parent or error          if (pid > 0) // Parent process
40            {
41                    _exit(0);
42            }
43            else if (pid < 0) // error
44          {          {
45                  return pid;                  _exit(pid);
46          }          }
47    
48          // Child process          // Child process
# Line 44  int init_daemon(void) Line 50  int init_daemon(void)
50    
51          pid = fork();          pid = fork();
52    
53          if (pid != 0) // Parent or error          if (pid > 0) // Parent process
54          {          {
55                  return pid;                  _exit(0);
56            }
57            else if (pid < 0) // error
58            {
59                    _exit(pid);
60          }          }
61    
62          // Child process          // Child process
# Line 57  int init_daemon(void) Line 67  int init_daemon(void)
67    
68  int load_conf(const char *conf_file)  int load_conf(const char *conf_file)
69  {  {
70          char temp[256];          char buffer[LINE_BUFFER_LEN];
71            char *saveptr = NULL;
72          // Load configuration          char *p, *q, *r;
73          char c_name[256];          char *y, *m, *d;
74          FILE *fin;          FILE *fin;
75    
76            // Load configuration
77          if ((fin = fopen(conf_file, "r")) == NULL)          if ((fin = fopen(conf_file, "r")) == NULL)
78          {          {
79                  log_error("Open %s failed", conf_file);                  log_error("Open %s failed", conf_file);
80                  return -1;                  return -1;
81          }          }
82    
83          while (fscanf(fin, "%s", c_name) != EOF)          while (fgets(buffer, sizeof(buffer), fin) != NULL)
84          {          {
85                  if (c_name[0] == '#')                  p = strtok_r(buffer, CONF_DELIM_WITH_SPACE, &saveptr);
86                    if (p == NULL) // Blank line
87                    {
88                            continue;
89                    }
90    
91                    if (*p == '#' || *p == '\r' || *p == '\n') // Comment or blank line
92                    {
93                            continue;
94                    }
95    
96                    q = strtok_r(NULL, CONF_DELIM_WITH_SPACE, &saveptr);
97                    if (q == NULL) // Empty value
98                  {                  {
99                          fgets(temp, 256, fin);                          log_error("Skip empty value of config item: %s\n", p);
100                          continue;                          continue;
101                  }                  }
102                  fscanf(fin, "%*c");  
103                  if (strcmp(c_name, "bbs_id") == 0)                  // Check syntax
104                    r = strtok_r(NULL, CONF_DELIM_WITH_SPACE, &saveptr);
105                    if (r != NULL && r[0] != '#')
106                    {
107                            log_error("Skip config line with extra value %s = %s %s\n", p, q, r);
108                            continue;
109                    }
110    
111                    if (strcasecmp(p, "bbs_id") == 0)
112                    {
113                            strncpy(BBS_id, q, sizeof(BBS_id) - 1);
114                            BBS_id[sizeof(BBS_id) - 1] = '\0';
115                    }
116                    else if (strcasecmp(p, "bbs_name") == 0)
117                    {
118                            strncpy(BBS_name, q, sizeof(BBS_name) - 1);
119                            BBS_name[sizeof(BBS_name) - 1] = '\0';
120                    }
121                    else if (strcasecmp(p, "bbs_server") == 0)
122                  {                  {
123                          fscanf(fin, "%s", BBS_id);                          strncpy(BBS_server, q, sizeof(BBS_server) - 1);
124                            BBS_server[sizeof(BBS_server) - 1] = '\0';
125                  }                  }
126                  if (strcmp(c_name, "bbs_name") == 0)                  else if (strcasecmp(p, "bbs_address") == 0)
127                  {                  {
128                          fscanf(fin, "%s", BBS_name);                          strncpy(BBS_address, q, sizeof(BBS_address) - 1);
129                            BBS_address[sizeof(BBS_address) - 1] = '\0';
130                  }                  }
131                  if (strcmp(c_name, "bbs_server") == 0)                  else if (strcasecmp(p, "bbs_port") == 0)
132                  {                  {
133                          fscanf(fin, "%s", BBS_server);                          BBS_port = (in_port_t)atoi(q);
134                  }                  }
135                  if (strcmp(c_name, "bbs_address") == 0)                  else if (strcasecmp(p, "bbs_ssh") == 0)
136                  {                  {
137                          fscanf(fin, "%s", BBS_address);                          SSH_v2 = (strcasecmp(q, "v2") == 0 ? 1 : 0);
138                  }                  }
139                  if (strcmp(c_name, "bbs_port") == 0)                  else if (strcasecmp(p, "bbs_max_client") == 0)
140                  {                  {
141                          fscanf(fin, "%hu", &BBS_port);                          BBS_max_client = atoi(q);
142                            if (BBS_max_client <= 0 || BBS_max_client > MAX_CLIENT_LIMIT)
143                            {
144                                    log_error("Ignore config bbs_max_client with incorrect value %d\n", BBS_max_client);
145                                    BBS_max_client = MAX_CLIENT_LIMIT;
146                            }
147                  }                  }
148                  if (strcmp(c_name, "bbs_max_client") == 0)                  else if (strcasecmp(p, "bbs_max_client_per_ip") == 0)
149                  {                  {
150                          fscanf(fin, "%d", &BBS_max_client);                          BBS_max_client_per_ip = atoi(q);
151                            if (BBS_max_client_per_ip <= 0 || BBS_max_client_per_ip > MAX_CLIENT_PER_IP_LIMIT)
152                            {
153                                    log_error("Ignore config bbs_max_client with incorrect value %d\n", BBS_max_client_per_ip);
154                                    BBS_max_client_per_ip = MAX_CLIENT_PER_IP_LIMIT;
155                            }
156                  }                  }
157                  if (strcmp(c_name, "bbs_max_user") == 0)                  else if (strcasecmp(p, "bbs_max_user") == 0)
158                  {                  {
159                          fscanf(fin, "%d", &BBS_max_user);                          BBS_max_user = atoi(q);
160                            if (BBS_max_user <= 0 || BBS_max_user > BBS_MAX_USER_LIMIT)
161                            {
162                                    log_error("Ignore config bbs_max_client with incorrect value %d\n", BBS_max_user);
163                                    BBS_max_user = BBS_MAX_USER_LIMIT;
164                            }
165                    }
166                    else if (strcasecmp(p, "bbs_start_dt") == 0)
167                    {
168                            y = strtok_r(q, "-", &saveptr);
169                            m = strtok_r(NULL, "-", &saveptr);
170                            d = strtok_r(NULL, "-", &saveptr);
171    
172                            if (y == NULL || m == NULL || d == NULL)
173                            {
174                                    log_error("Ignore config bbs_start_dt with incorrect value\n");
175                                    continue;
176                            }
177                            snprintf(BBS_start_dt, sizeof(BBS_start_dt), "%4s年%2s月%2s日", y, m, d);
178                  }                  }
179                  if (strcmp(c_name, "bbs_start_dt") == 0)                  else if (strcasecmp(p, "db_host") == 0)
180                  {                  {
181                          int y = 0, m = 0, d = 0;                          strncpy(DB_host, q, sizeof(DB_host) - 1);
182                          fscanf(fin, "%d-%d-%d", &y, &m, &d);                          DB_host[sizeof(DB_host) - 1] = '\0';
                         snprintf(BBS_start_dt, sizeof(BBS_start_dt), "%4d年%2d月%2d日", y, m, d);  
183                  }                  }
184                  if (strcmp(c_name, "db_host") == 0)                  else if (strcasecmp(p, "db_username") == 0)
185                  {                  {
186                          fscanf(fin, "%s", DB_host);                          strncpy(DB_username, q, sizeof(DB_username) - 1);
187                            DB_username[sizeof(DB_username) - 1] = '\0';
188                  }                  }
189                  if (strcmp(c_name, "db_username") == 0)                  else if (strcasecmp(p, "db_password") == 0)
190                  {                  {
191                          fscanf(fin, "%s", DB_username);                          strncpy(DB_password, q, sizeof(DB_password) - 1);
192                            DB_password[sizeof(DB_password) - 1] = '\0';
193                  }                  }
194                  if (strcmp(c_name, "db_password") == 0)                  else if (strcasecmp(p, "db_database") == 0)
195                  {                  {
196                          fscanf(fin, "%s", DB_password);                          strncpy(DB_database, q, sizeof(DB_database) - 1);
197                            DB_database[sizeof(DB_database) - 1] = '\0';
198                  }                  }
199                  if (strcmp(c_name, "db_database") == 0)                  else if (strcasecmp(p, "db_timezone") == 0)
200                  {                  {
201                          fscanf(fin, "%s", DB_database);                          strncpy(DB_timezone, q, sizeof(DB_timezone) - 1);
202                            DB_timezone[sizeof(DB_timezone) - 1] = '\0';
203                  }                  }
204                  if (strcmp(c_name, "db_timezone") == 0)                  else
205                  {                  {
206                          fscanf(fin, "%s", DB_timezone);                          log_error("Unknown config %s = %s\n", p, q);
207                  }                  }
208          }          }
209    


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

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