]> code.citadel.org Git - citadel.git/blob - citadel/serv_vandelay.c
* added an unfinished serv_vandelay.c (Art Vandelay module - importer/exporter)
[citadel.git] / citadel / serv_vandelay.c
1 /*
2  * $Id$
3  *
4  * This is the "Art Vandelay" module.  It is an importer/exporter.
5  *
6  */
7
8 #include "sysdep.h"
9 #include <stdlib.h>
10 #include <unistd.h>
11 #include <stdio.h>
12 #include <fcntl.h>
13 #include <signal.h>
14 #include <pwd.h>
15 #include <errno.h>
16 #include <sys/types.h>
17 #include <sys/time.h>
18 #include <sys/wait.h>
19 #include <string.h>
20 #include <limits.h>
21 #include "citadel.h"
22 #include "server.h"
23 #include <time.h>
24 #include "sysdep_decls.h"
25 #include "citserver.h"
26 #include "support.h"
27 #include "config.h"
28 #include "dynloader.h"
29 #include "database.h"
30 #include "msgbase.h"
31 #include "tools.h"
32 #include "user_ops.h"
33 #include "room_ops.h"
34 #include "control.h"
35
36 void artv_export_users_backend(struct usersupp *usbuf, void *data) {
37         cprintf("user\n");
38         cprintf("%d\n", usbuf->version);
39         cprintf("%d\n", usbuf->uid);
40         cprintf("%s\n", usbuf->password);
41         cprintf("%u\n", usbuf->flags);
42         cprintf("%ld\n", usbuf->timescalled);
43         cprintf("%ld\n", usbuf->posted);
44         cprintf("%d\n", usbuf->axlevel);
45         cprintf("%ld\n", usbuf->usernum);
46         cprintf("%ld\n", usbuf->lastcall);
47         cprintf("%d\n", usbuf->USuserpurge);
48         cprintf("%s\n", usbuf->fullname);
49         cprintf("%d\n", usbuf->USscreenwidth);
50         cprintf("%d\n", usbuf->USscreenheight);
51         cprintf("%d\n", usbuf->moderation_filter);
52 }
53
54
55 void artv_export_users(void) {
56         ForEachUser(artv_export_users_backend, NULL);
57 }
58
59
60 void artv_export_room_msg(long msgnum) {
61         cprintf("%ld\n", msgnum);
62 }
63
64
65 void artv_export_rooms_backend(struct quickroom *qrbuf, void *data) {
66         cprintf("room\n");
67         cprintf("%s\n", qrbuf->QRname);
68         cprintf("%s\n", qrbuf->QRpasswd);
69         cprintf("%ld\n", qrbuf->QRroomaide);
70         cprintf("%ld\n", qrbuf->QRhighest);
71         cprintf("%ld\n", qrbuf->QRgen);
72         cprintf("%u\n", qrbuf->QRflags);
73         cprintf("%s\n", qrbuf->QRdirname);
74         cprintf("%ld\n", qrbuf->QRinfo);
75         cprintf("%d\n", qrbuf->QRfloor);
76         cprintf("%ld\n", qrbuf->QRmtime);
77         cprintf("%d\n", qrbuf->QRep.expire_mode);
78         cprintf("%d\n", qrbuf->QRep.expire_value);
79         cprintf("%ld\n", qrbuf->QRnumber);
80         cprintf("%d\n", qrbuf->QRorder);
81
82         getroom(&CC->quickroom, qrbuf->QRname);
83         /* format of message list export is all message numbers output
84          * one per line terminated by a 0.
85          */
86         CtdlForEachMessage(MSGS_ALL, 0L, (-127), NULL, NULL,
87                 artv_export_room_msg);
88         cprintf("0\n");
89
90 }
91
92
93
94 void artv_export_rooms(void) {
95         ForEachRoom(artv_export_rooms_backend, NULL);
96 }
97
98
99 void artv_export_floors(void) {
100         struct floor flbuf;
101         int i;
102
103         for (i=0; i < MAXFLOORS; ++i) {
104                 cprintf("floor\n");
105                 cprintf("%d\n", i);
106                 getfloor(&flbuf, i);
107                 cprintf("%u\n", flbuf.f_flags);
108                 cprintf("%s\n", flbuf.f_name);
109                 cprintf("%d\n", flbuf.f_ref_count);
110                 cprintf("%d\n", flbuf.f_ep.expire_mode);
111                 cprintf("%d\n", flbuf.f_ep.expire_value);
112         }
113 }
114
115
116
117
118
119 /* 
120  *  Traverse the room file...
121  */
122 void artv_export_visits(void) {
123         struct visit vbuf;
124         struct cdbdata *cdbv;
125
126         cdb_rewind(CDB_VISIT);
127
128         while (cdbv = cdb_next_item(CDB_VISIT), cdbv != NULL) {
129                 memset(&vbuf, 0, sizeof(struct visit));
130                 memcpy(&vbuf, cdbv->ptr,
131                        ((cdbv->len > sizeof(struct visit)) ?
132                         sizeof(struct visit) : cdbv->len));
133                 cdb_free(cdbv);
134
135                 cprintf("visit\n");
136                 cprintf("%ld\n", vbuf.v_roomnum);
137                 cprintf("%ld\n", vbuf.v_roomgen);
138                 cprintf("%ld\n", vbuf.v_usernum);
139                 cprintf("%ld\n", vbuf.v_lastseen);
140                 cprintf("%u\n", vbuf.v_flags);
141         }
142 }
143
144
145
146
147
148
149
150
151
152 void artv_do_export(void) {
153         cprintf("%d Yikes.\n", LISTING_FOLLOWS);
154
155         /* export the config file */
156         cprintf("config\n");
157         cprintf("%s\n", config.c_nodename);
158         cprintf("%s\n", config.c_fqdn);
159         cprintf("%s\n", config.c_humannode);
160         cprintf("%s\n", config.c_phonenum);
161         cprintf("%d\n", config.c_bbsuid);
162         cprintf("%d\n", config.c_creataide);
163         cprintf("%d\n", config.c_sleeping);
164         cprintf("%d\n", config.c_initax);
165         cprintf("%d\n", config.c_regiscall);
166         cprintf("%d\n", config.c_twitdetect);
167         cprintf("%s\n", config.c_twitroom);
168         cprintf("%s\n", config.c_moreprompt);
169         cprintf("%d\n", config.c_restrict);
170         cprintf("%ld\n", config.c_msgbase);
171         cprintf("%s\n", config.c_bbs_city);
172         cprintf("%s\n", config.c_sysadm);
173         cprintf("%s\n", config.c_bucket_dir);
174         cprintf("%d\n", config.c_setup_level);
175         cprintf("%d\n", config.c_maxsessions);
176         cprintf("%s\n", config.c_net_password);
177         cprintf("%d\n", config.c_port_number);
178         cprintf("%d\n", config.c_ipgm_secret);
179         cprintf("%d\n", config.c_ep.expire_mode);
180         cprintf("%d\n", config.c_ep.expire_value);
181         cprintf("%d\n", config.c_userpurge);
182         cprintf("%d\n", config.c_roompurge);
183         cprintf("%s\n", config.c_logpages);
184         cprintf("%d\n", config.c_createax);
185         cprintf("%ld\n", config.c_maxmsglen);
186         cprintf("%d\n", config.c_min_workers);
187         cprintf("%d\n", config.c_max_workers);
188         cprintf("%d\n", config.c_pop3_port);
189         cprintf("%d\n", config.c_smtp_port);
190         cprintf("%d\n", config.c_default_filter);
191
192         /* Export the control file */
193         get_control();
194         cprintf("control\n");
195         cprintf("%ld\n", CitControl.MMhighest);
196         cprintf("%u\n", CitControl.MMflags);
197         cprintf("%ld\n", CitControl.MMnextuser);
198         cprintf("%ld\n", CitControl.MMnextroom);
199         cprintf("%d\n", CitControl.version);
200
201         artv_export_users();
202         artv_export_rooms();
203         artv_export_floors();
204         artv_export_visits();
205
206         cprintf("000\n");
207 }
208
209
210
211
212 void artv_do_import(void) {
213         cprintf("%d command not yet implemented\n", ERROR);
214
215 }
216
217
218
219 void cmd_artv(char *cmdbuf) {
220         char cmd[256];
221
222         if (CtdlAccessCheck(ac_aide)) return;   /* FIXME should be intpgm */
223
224         extract(cmd, cmdbuf, 0);
225         if (!strcasecmp(cmd, "export")) artv_do_export();
226         else if (!strcasecmp(cmd, "import")) artv_do_import();
227         else cprintf("%d illegal command\n", ERROR);
228 }
229
230
231
232
233 char *Dynamic_Module_Init(void)
234 {
235         CtdlRegisterProtoHook(cmd_artv, "ARTV", "import/export data store");
236         return "$Id$";
237 }