* citadel.h (and related files): removed defunct parameters,
[citadel.git] / citadel / control.c
1 /*
2  * control.c
3  *
4  * This module handles states which are global to the entire server.
5  *
6  * $Id$
7  *
8  */
9
10 #include <stdlib.h>
11 #include <unistd.h>
12 #include <stdio.h>
13 #include <fcntl.h>
14 #include <signal.h>
15 #include <time.h>
16 #include <ctype.h>
17 #include <string.h>
18 #include <errno.h>
19 #include <pthread.h>
20 #include <syslog.h>
21 #include "citadel.h"
22 #include "server.h"
23 #include "control.h"
24 #include "sysdep_decls.h"
25 #include "support.h"
26
27 struct CitControl CitControl;
28 struct config config;
29
30 /*
31  * get_control  -  read the control record into memory.
32  */
33 void get_control(void) {
34         FILE *fp;
35
36         /* Zero it out.  If the control record on disk is missing or short,
37          * the system functions with all control record fields initialized
38          * to zero.
39          */
40         memset(&CitControl, 0, sizeof(struct CitControl));
41         fp = fopen("citadel.control", "rb");
42         if (fp == NULL) return;
43
44         fread(&CitControl, sizeof(struct CitControl), 1, fp);
45         fclose(fp);
46         }
47
48 /*
49  * put_control  -  write the control record to disk.
50  */
51 void put_control(void) {
52         FILE *fp;
53
54         fp = fopen("citadel.control", "wb");
55         if (fp != NULL) {
56                 fwrite(&CitControl, sizeof(struct CitControl), 1, fp);
57                 fclose(fp);
58                 }
59         }
60
61
62 /*
63  * get_new_message_number()  -  Obtain a new, unique ID to be used for a message.
64  */
65 long get_new_message_number(void) {
66         begin_critical_section(S_CONTROL);
67         get_control();
68         ++CitControl.MMhighest;
69         put_control();
70         end_critical_section(S_CONTROL);
71         return(CitControl.MMhighest);
72         }
73
74
75 /*
76  * get_new_user_number()  -  Obtain a new, unique ID to be used for a user.
77  */
78 long get_new_user_number(void) {
79         begin_critical_section(S_CONTROL);
80         get_control();
81         ++CitControl.MMnextuser;
82         put_control();
83         end_critical_section(S_CONTROL);
84         return(CitControl.MMnextuser);
85         }
86
87
88
89 /* 
90  * Get or set global configuration options
91  */
92 void cmd_conf(char *argbuf) {
93         char cmd[256];
94         char buf[256];
95         int a;
96
97         if (!(CC->logged_in)) {
98                 cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
99                 return;
100                 }
101
102         if (CC->usersupp.axlevel < 6) {
103                 cprintf("%d Higher access required.\n",
104                         ERROR+HIGHER_ACCESS_REQUIRED);
105                 return;
106                 }
107
108         extract(cmd, argbuf, 0);
109         if (!strcasecmp(cmd, "GET")) {
110                 cprintf("%d Configuration...\n", LISTING_FOLLOWS);
111                 cprintf("%s\n", config.c_nodename);
112                 cprintf("%s\n", config.c_fqdn);
113                 cprintf("%s\n", config.c_humannode);
114                 cprintf("%s\n", config.c_phonenum);
115                 cprintf("%d\n", config.c_creataide);
116                 cprintf("%d\n", config.c_sleeping);
117                 cprintf("%d\n", config.c_initax);
118                 cprintf("%d\n", config.c_regiscall);
119                 cprintf("%d\n", config.c_twitdetect);
120                 cprintf("%s\n", config.c_twitroom);
121                 cprintf("%s\n", config.c_moreprompt);
122                 cprintf("%d\n", config.c_restrict);
123                 cprintf("%s\n", config.c_bbs_city);
124                 cprintf("%s\n", config.c_sysadm);
125                 cprintf("%d\n", config.c_maxsessions);
126                 cprintf("%s\n", config.c_net_password);
127                 cprintf("%d\n", config.c_userpurge);
128                 cprintf("000\n");
129                 }
130
131         /*      
132         else if (!strcasecmp(cmd, "SET")) {
133                 cprintf("%d Send configuration...\n");
134                 }
135         */
136
137         else {
138                 cprintf("%d The only valid options are GET and SET.\n",
139                         ERROR+ILLEGAL_VALUE);
140                 }
141         }