1 |
<?xml version="1.0" encoding="ISO-8859-1"?> |
2 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11-strict.dtd"> |
3 |
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> |
4 |
<head> |
5 |
<meta http-equiv="Content-Style-Type" content="text/css"/> |
6 |
<style type="text/css">@import "style.css";</style> |
7 |
<title>IRC Services Technical Reference Manual - 9. The database conversion tool</title> |
8 |
</head> |
9 |
|
10 |
<body> |
11 |
<h1 class="title" id="top">IRC Services Technical Reference Manual</h1> |
12 |
|
13 |
<h2 class="section-title">9. The database conversion tool</h2> |
14 |
|
15 |
<p class="section-toc"> |
16 |
9-1. <a href="#s1">Purpose and usage</a> |
17 |
<br/>9-2. <a href="#s2">Structure</a> |
18 |
<br/> 9-2-1. <a href="#s2-1">The main program</a> |
19 |
<br/> 9-2-2. <a href="#s2-2">Format handlers</a> |
20 |
<br/>9-2. <a href="#s2">Supported database formats</a> |
21 |
<br/> 9-3-1. <a href="#s3-1"><tt>convert-cygnus.c</tt> (Cygnus)</a> |
22 |
<br/> 9-3-2. <a href="#s3-2"><tt>convert-epona.c</tt> (Epona, Anope)</a> |
23 |
<br/> 9-3-3. <a href="#s3-3"><tt>convert-hybserv.c</tt> (HybServ)</a> |
24 |
<br/> 9-3-4. <a href="#s3-4"><tt>convert-magick.c</tt> (Magick, Wrecked)</a> |
25 |
<br/> 9-3-5. <a href="#s3-5"><tt>convert-ptlink.c</tt> (PTlink)</a> |
26 |
<br/> 9-3-6. <a href="#s3-6"><tt>convert-sirv.c</tt> (Sirv, Auspice, Bolivia)</a> |
27 |
<br/> 9-3-7. <a href="#s3-7"><tt>convert-trircd.c</tt> (trircd)</a> |
28 |
<br/> 9-3-8. <a href="#s3-8"><tt>convert-ver8.c</tt> (Daylight, IRCS)</a> |
29 |
</p> |
30 |
|
31 |
<p class="backlink"><a href="8.html">Previous section: Other modules</a> | |
32 |
<a href="index.html">Table of Contents</a> | |
33 |
<a href="10.html">Next section: Compilation</a></p> |
34 |
|
35 |
<!------------------------------------------------------------------------> |
36 |
<hr/> |
37 |
|
38 |
<h3 class="subsection-title" id="s1">9-1. Purpose and usage</h3> |
39 |
|
40 |
<p>The database conversion tool <tt>convert-db</tt> is designed to allow |
41 |
users of other Services-like programs to migrate data stored with the other |
42 |
program into Services. This program serves as an adjunct to the main |
43 |
<tt>ircservices</tt> executable, reading in database files produced by |
44 |
foreign programs and writing out an XML file that can then be imported into |
45 |
Services with the <tt>misc/xml-import</tt> module (see |
46 |
<a href="8.html#s4-2">section 8-4-2</a>).</p> |
47 |
|
48 |
<p>More information (from a user's point of view) can be found in |
49 |
<a href="../5.html#3">section 5-3 of the user's manual</a>.</p> |
50 |
|
51 |
<p>As a historical note, this tool was introduced in version 4.1 of |
52 |
Services as <tt>import-db</tt>, and overwrote the existing Services |
53 |
databases with the imported data. This behavior was changed for version |
54 |
5.0, both to dissociate the tool from the particular database format used |
55 |
by Services (which was still limited to the old binary format at the time, |
56 |
though implementation of a new format was planned) and to allow merging of |
57 |
data rather than simple overwriting. The tool's name was also changed to |
58 |
<tt>convert-db</tt> at this time to reflect the fact that it no longer |
59 |
performed the actual importing.</p> |
60 |
|
61 |
<p class="backlink"><a href="#top">Back to top</a></p> |
62 |
|
63 |
<!------------------------------------------------------------------------> |
64 |
<hr/> |
65 |
|
66 |
<h3 class="subsection-title" id="s2">9-2. Structure</h3> |
67 |
|
68 |
<p>The <tt>convert-db</tt> tool can be divided into two main parts: the |
69 |
<i>main program</i>, which calls out to individual formats' probe and load |
70 |
routines, sanity-checks the loaded data, and writes out the XML data; and |
71 |
the <i>format handlers</i>, which process data produced by particular |
72 |
programs.</p> |
73 |
|
74 |
<p>All source code for <tt>convert-db</tt>, with the exception of code |
75 |
borrowed from the main program, is located in the <tt>tools</tt> |
76 |
directory.</p> |
77 |
|
78 |
<p class="backlink"><a href="#top">Back to top</a></p> |
79 |
|
80 |
|
81 |
<h4 class="subsubsection-title" id="s2-1">9-2-1. The main program</h4> |
82 |
|
83 |
<p>The overall database conversion processing is performed in the |
84 |
<tt>convert-db.c</tt> source file. The <tt>main()</tt> routine performs |
85 |
the following functions:</p> |
86 |
|
87 |
<ul> |
88 |
|
89 |
<li class="spaced">Initializes variables and processes command-line |
90 |
parameters.</li> |
91 |
|
92 |
<li class="spaced">Checks that the database file directory given on the |
93 |
command line is accessible, and expands the pathname to an absolute path if |
94 |
the specified path is relative.</li> |
95 |
|
96 |
<li class="spaced">If no database type was given on the command line, calls |
97 |
each format handler's <tt>check()</tt> function, which determines whether |
98 |
the files contained in the specified directory are of that particular |
99 |
format. The first format found is used (if no format is found, the program |
100 |
aborts).</li> |
101 |
|
102 |
<li class="spaced">Calls the selected format's <tt>load()</tt> function to |
103 |
load the databases.</li> |
104 |
|
105 |
<li class="spaced">Performs sanity checks on the loaded data (via the |
106 |
<tt>sanity_checks()</tt> function), to ensure that erroneous data is not |
107 |
output.</li> |
108 |
|
109 |
<li class="spaced">Calls <tt>xml_export()</tt> (from the |
110 |
<tt>misc/xml-export</tt> module, linked into the final program) to write |
111 |
the XML data to standard output.</li> |
112 |
|
113 |
</ul> |
114 |
|
115 |
<p><tt>convert-db.c</tt> also links in <tt>compat.c</tt> and <tt>misc.c</tt> |
116 |
from the core code, making all of their functions available to format |
117 |
handlers, and implements several other utility functions, including simple |
118 |
versions of some core functions:</p> |
119 |
|
120 |
<ul> |
121 |
<li class="spaced"><tt>smalloc()</tt>, <tt>scalloc()</tt>, |
122 |
<tt>srealloc()</tt>, and <tt>sstrdup()</tt> from |
123 |
<tt>memory.c</tt>;</li> |
124 |
<li class="spaced"><tt>init_password()</tt> and <tt>clear_password()</tt> |
125 |
from <tt>encrypt.c</tt>;</li> |
126 |
<li class="spaced"><tt>makenick()</tt> from NickServ and <tt>makechan()</tt> |
127 |
from ChanServ to initialize and add nicknames and channels to the |
128 |
database;</li> |
129 |
<li class="spaced"><tt>open_db_ver()</tt> to open an old-Services-style |
130 |
database file and check its version number;</li> |
131 |
<li class="spaced"><tt>get_nickgroupinfo_by_nick()</tt> to retrieve a |
132 |
<tt>NickGroupInfo</tt> structure directly from a nickname;</li> |
133 |
<li class="spaced"><tt>set_os_priv()</tt> to set the <tt>os_priv</tt> |
134 |
nickname group field for a nickname without having to first |
135 |
retrieve the <tt>NickGroupInfo</tt>; and</li> |
136 |
<li class="spaced"><tt>convert_acclev()</tt>, to convert pre-Services 5.0 |
137 |
channel access levels to levels used by the current version.</li> |
138 |
</ul> |
139 |
|
140 |
<p>The nickname, channel, and other databases themselves are implemented as |
141 |
simple linked lists, since efficiency is not seen to be a significant |
142 |
concern for <tt>convert-db</tt>. Also, since the program exits immediately |
143 |
after writing out the converted data, no special effort is made to keep |
144 |
track of or free allocated memory; it is assumed that the operating system |
145 |
or library cleanup code will take care of freeing resources.</p> |
146 |
|
147 |
<p class="backlink"><a href="#top">Back to top</a></p> |
148 |
|
149 |
|
150 |
<h4 class="subsubsection-title" id="s2-2">9-2-2. Format handlers</h4> |
151 |
|
152 |
<p>Format handlers perform the bulk of the conversion work. Each format is |
153 |
defined by a <tt>DBTypeInfo</tt> structure containing an identifying string |
154 |
for the format (used to match against the <tt>+<i>program-name</i></tt> |
155 |
command-line option), a <tt>check()</tt> routine which determines whether |
156 |
a given directory contains databases in the format, and a <tt>load()</tt> |
157 |
routine which loads databases from a given directory. The list of |
158 |
available formats is hard-coded as a list of external structure variable |
159 |
names in <tt>convert-db.h</tt>, which is used in <tt>convert-db.c</tt> to |
160 |
initialize an array of formats. The structures and routine implementations |
161 |
themselves are stored in separate source files (see <a href="#s3">section |
162 |
9-3</a> below).</p> |
163 |
|
164 |
<p>The <tt>check()</tt> routine takes a single parameters, <tt>const char |
165 |
*<i>dir</i></tt>, the path to the directory to be checked. The routine |
166 |
should check to see if a database in a recognized format is contained in |
167 |
that directory; if so, the routine should return a string describing the |
168 |
database format (usually the name, and version if known, of the program |
169 |
that created it), which will then be displayed to the user. If no |
170 |
recognized database is found, the routine should return <tt>NULL</tt>.</p> |
171 |
|
172 |
<p style="margin-bottom: 0">The <tt>load()</tt> routine takes four |
173 |
parameters:</p> |
174 |
|
175 |
<ul style="margin-top: 0"> |
176 |
<li><tt>const char *<i>dir</i></tt>: The directory to load data from.</li> |
177 |
<li><tt>int <i>verbose</i></tt>: Whether the <tt>-v</tt> (verbose) flag |
178 |
was passed to <tt>convert-db</tt>.</li> |
179 |
<li><tt>int <i>ac</i>, char **<i>av</i></tt>: Any unrecognized |
180 |
command-line options. <tt>ac</tt> is the number of options, and |
181 |
<tt>av[]</tt> is an array of pointers to the option strings, with |
182 |
<tt>av[0]</tt> pointing to the program name as for |
183 |
<tt>main()</tt>.</li> |
184 |
</ul> |
185 |
|
186 |
<p>The command-line option array is passed in addition to the source |
187 |
directory and verbosity flag to allow individual database loaders to |
188 |
implement their own options. For example, the Cygnus database takes |
189 |
advantage of this to add options for timezone handling.</p> |
190 |
|
191 |
<p>The <tt>load()</tt> routine is assumed to succeed; if an error occurs |
192 |
that prevents the data from being loaded properly, the routine should |
193 |
simply call <tt>exit(1)</tt> to abort the program.</p> |
194 |
|
195 |
<p>Additionally, the file read/write utilities from |
196 |
<tt>modules/database/fileutil.c</tt> (see <a href="6.html#s5-1">section |
197 |
6-5-1</a>) are linked into <tt>convert-db</tt> and can be used by the |
198 |
<tt>check()</tt> and <tt>load()</tt> routines.</p> |
199 |
|
200 |
<p class="backlink"><a href="#top">Back to top</a></p> |
201 |
|
202 |
<!------------------------------------------------------------------------> |
203 |
<hr/> |
204 |
|
205 |
<h3 class="subsection-title" id="s3">9-3. Supported database formats</h3> |
206 |
|
207 |
<p><tt>convert-db</tt> supports loading data from a total of 13 different |
208 |
programs. The data loading code is in the various <tt>convert-*.c</tt> |
209 |
files, one file for each distinct format (several programs use similar |
210 |
database formats and therefore share code). Each of these files is |
211 |
discussed below.</p> |
212 |
|
213 |
<p>In general, each format's <tt>load()</tt> routine is implemented as a |
214 |
function which calls subfunctions for each file to be loaded. Since most |
215 |
of the programs are based on old versions of Services, the contents of the |
216 |
files correspond fairly well with Services itself.</p> |
217 |
|
218 |
<p>Where binary database files include fixed-length buffers, the lengths of |
219 |
those buffers are assumed to be the same as those in the distributed source |
220 |
code, with no changes to any configuration settings. For example, most |
221 |
IRC service programs default to a nickname buffer size of 32 bytes, and |
222 |
<tt>convert-db</tt> assumes that that value has not been changed by the |
223 |
user.</p> |
224 |
|
225 |
<p class="backlink"><a href="#top">Back to top</a></p> |
226 |
|
227 |
|
228 |
<h4 class="subsubsection-title" id="s3-1">9-3-1. <tt>convert-cygnus.c</tt> (Cygnus)</h4> |
229 |
|
230 |
<p>Cygnus is an IRC service program based on an old version of Services; |
231 |
development seems to have stopped as of the writing of this manual. Unlike |
232 |
the other programs supported by <tt>convert-db</tt>, Cygnus stores its |
233 |
databases in plain text files, with each line containing a two-character |
234 |
field identifier and one or more values, all separated by spaces. As such, |
235 |
the data processing is somewhat more complex than for other databse |
236 |
formats, particularly for numeric values, which must be checked for |
237 |
syntactic validity as well as range. The following utility routines and |
238 |
macros are used by the various loading functions:</p> |
239 |
|
240 |
<ul> |
241 |
|
242 |
<li class="spaced"><b><tt>cyg_strtok_remaining()</tt></b> returns the |
243 |
remainder of the string currently being processed by <tt>strtok()</tt> with |
244 |
any leading whitespace removed, like <tt>strtok_remaining()</tt> from |
245 |
<tt>misc.c</tt> in the core code; in addition, any trailing newline (CR or |
246 |
LF) is removed.</li> |
247 |
|
248 |
<li class="spaced"><b><tt>CVT_TIME(<i>var</i>, <i>str</i>, <i>errfmt</i>, |
249 |
...)</tt></b> attempts to convert the string in <tt><i>str</i></tt> to a |
250 |
<tt>time_t</tt> value. If the conversion succeeds, the value is stored in |
251 |
<tt><i>var</i></tt>, which must be an lvalue; if it fails (because the |
252 |
string does not represent a valid integer—range checks are not |
253 |
performed), <tt><i>var</i></tt> is set to the current time, and the error |
254 |
message in <tt><i>errfmt</i></tt>, along with any additional parameters, |
255 |
are printed to standard error.</li> |
256 |
|
257 |
<li class="spaced"><b><tt>CVT_TIME_0(<i>var</i>, <i>str</i>, <i>errfmt</i>, |
258 |
...)</tt></b> does the same thing as <tt>CVT_TIME()</tt>, but defaults to |
259 |
zero rather than the current time when the string is invalid.</li> |
260 |
|
261 |
</ul> |
262 |
|
263 |
<p>Cygnus also supports storing time zone information with each nickname, |
264 |
like NickServ <tt>SET TIMEZONE</tt> in Services; however, rather than |
265 |
storing the actual time offset, Cygnus stores an index into a table whose |
266 |
contents are controlled by a configuration file. The default list of |
267 |
time zone offsets is included in the <tt>default_timezones[]</tt> array, |
268 |
but since users may have modified the time zone configuration, the |
269 |
command-line option <tt>-tzfile=<i>filename</i></tt> is checked for by the |
270 |
<tt>load()</tt> function, allowing the user to specify their configuration |
271 |
file, which is then loaded and used in place of the default list; |
272 |
<tt>-no-timezones</tt> (which causes all time zone data to be discarded) is |
273 |
also supported as a fallback in case time zone importing results in |
274 |
incorrect data.</p> |
275 |
|
276 |
<p>Cygnus does not have a "default" value, like <tt>MEMOMAX_DEFAULT</tt> in |
277 |
Services, for the memo limit field, but instead stores the actual value of |
278 |
the default limit at the time the nickname is registered. As a result, |
279 |
these values will remain constant in Services even if the |
280 |
<tt>MSMaxMemos</tt> configuration setting is changed. To work around this, |
281 |
the <tt>-reset-memo-limits</tt> command-line option is checked for, and if |
282 |
present, all memo limits are reset to <tt>MEMOMAX_DEFAULT</tt>.</p> |
283 |
|
284 |
<p>The data files are as follows:</p> |
285 |
|
286 |
<ul> |
287 |
|
288 |
<li class="spaced"><b><tt>nickserv.db</tt>:</b> Nickname database. The |
289 |
file contains three file-level fields: |
290 |
<dl> |
291 |
<dt class="cygnus">NV <i>version</i></dt> |
292 |
<dd>File version. This field is always the first line in the file. |
293 |
The version number is 3 in Cygnus 0.2.0.</dd> |
294 |
<dt class="cygnus">SS <i>stamp</i></dt> |
295 |
<dd>Previous servicestamp value. Cygnus stores this value in the |
296 |
database, allowing it to ensure (assuming the database is not |
297 |
modified) that servicestamp values are not reused even if the |
298 |
program is restarted. Services does not save this value, so it is |
299 |
ignored.</dd> |
300 |
<dt class="cygnus">DE <i>nick-count</i> <i>link-count</i> <i>memo-count</i></dt> |
301 |
<dd>"Database end". Included as the last line in the file, and |
302 |
contains counts of nicknames, links, and memos stored in the |
303 |
database. These can be used to double-check that all data was |
304 |
loaded correctly.</dd> |
305 |
</dl> |
306 |
|
307 |
<p>All other fields are subfields of a nickname record (a nickname group |
308 |
record, in Services terminology):</p> |
309 |
|
310 |
<dl> |
311 |
<dt class="cygnus">NI <i>nickname</i> <i>password</i> |
312 |
<i>time-registered</i> <i>last-seen</i> <i>last-timestamp</i> |
313 |
<i>last-servicestamp</i> <i>flags</i> <i>memo-limit</i> |
314 |
<i>timezone-index</i> <i>key</i> <i>last-usermask</i> |
315 |
<i>last-realname</i></dt> |
316 |
<dd>Begins a nickname record; all subsequent fields until the next |
317 |
<tt>NI</tt> or the end of the file correspond to this nickname. |
318 |
Most of the fields are self-explanatory, with times recorded as |
319 |
integers using ordinary Unix <tt>time()</tt> values. If the |
320 |
<tt><i>nickname</i></tt> too long to fit in a |
321 |
<tt>NICKMAX</tt>-character buffer, it is truncated with a warning. |
322 |
The <tt><i>last-timestamp</i></tt> field is not saved by Services, |
323 |
and is thus ignored; the <tt><i>last-servicestamp</i></tt> field |
324 |
will not have any relevance to servicestamps assigned by Services, |
325 |
and is likewise discarded. <tt><i>timezone-index</i></tt> is an |
326 |
index into a table of time zone offset values (see the discussion |
327 |
of time zones above). The <tt><i>key</i></tt> is the equivalent of |
328 |
the authentication code used by the <tt>nickserv/mail-auth</tt> |
329 |
module, and is used to set the nickgroup's <tt>authcode</tt> field, |
330 |
so that authentication codes stored with nicknames will continue to |
331 |
be valid; the code is assumed to be for a new registration, unless |
332 |
we find out otherwise later on. If the <tt>NI</tt> line does not |
333 |
match the above format or the nickname already exists, the entire |
334 |
nickname record is discarded.</dd> |
335 |
|
336 |
<dt class="cygnus">AC <i>mask</i></dt> |
337 |
<dd>An access mask for the current nickname.</dd> |
338 |
|
339 |
<dt class="cygnus">LN <i>nickname-1</i> <i>nickname-2</i>...</dt> |
340 |
<dd>The list of subnicks (linked nicks) for the current nickname. |
341 |
These are added to the current nickname group's nick list, with a |
342 |
new <tt>NickInfo</tt> structure created for each subnick. As width |
343 |
<tt>NI</tt> processing, nicknames that do not fit in a |
344 |
<tt>NICKMAX</tt>-character buffer are truncated with a warning, and |
345 |
nicknames that collide with already-existing nicks are discarded. |
346 |
In theory, any number of nicknames can be included in a single |
347 |
<tt>LN</tt> line, but Cygnus (version 0.2.0, at least) uses a |
348 |
2048-byte line buffer when writing the databases; this routine uses |
349 |
a 4096-byte buffer, so there should be no truncation problems.</dd> |
350 |
|
351 |
<dt class="cygnus">MO <i>num</i> <i>flags</i> <i>time</i> |
352 |
<i>sender</i> <i>text</i></dt> |
353 |
<dd>A memo for the current nickname. The <tt><i>text</i></tt> |
354 |
parameter may include spaces.</dd> |
355 |
|
356 |
<dt class="cygnus">FW <i>nickname</i></dt> |
357 |
<dd>The nickname to which memos to this nick should be forwarded. |
358 |
Services does not support forwarding memos to another nickname, so |
359 |
this field is ignored.</dd> |
360 |
|
361 |
<dt class="cygnus">FR <i>reason</i></dt> |
362 |
<dd>Freeze (suspension) reason for the nickname.</dd> |
363 |
|
364 |
<dt class="cygnus">EM <i>address</i></dt> |
365 |
<dd>E-mail address for the nickname.</dd> |
366 |
|
367 |
<dt class="cygnus">TE <i>address</i></dt> |
368 |
<dd>An E-mail address which has been set with <tt>SET EMAIL</tt> |
369 |
but not yet authenticated. If this field is found, then the |
370 |
nickname's authentication reason is set to |
371 |
<tt>NICKAUTH_SET_EMAIL</tt>, and a new authentication code is |
372 |
generated if one does not already exist (perhaps because of a |
373 |
corrupt database file). The E-mail address given in the |
374 |
<tt>EM</tt> field is moved to <tt>NickGroupInfo.last_email</tt> |
375 |
as well.</dd> |
376 |
|
377 |
<dt class="cygnus">UR <i>address</i></dt> |
378 |
<dd>URL for the nickname.</dd> |
379 |
|
380 |
<dt class="cygnus">UN <i>address</i></dt> |
381 |
<dd>User information field for the nickname (instant messenger |
382 |
UIN); ignored.</dd> |
383 |
|
384 |
<dt class="cygnus">NA <i>address</i></dt> |
385 |
<dd>User information field for the nickname (real name); |
386 |
ignored.</dd> |
387 |
|
388 |
<dt class="cygnus">AG <i>address</i></dt> |
389 |
<dd>User information field for the nickname (age); ignored.</dd> |
390 |
|
391 |
<dt class="cygnus">SX <i>address</i></dt> |
392 |
<dd>User information field for the nickname (sex); ignored.</dd> |
393 |
|
394 |
<dt class="cygnus">LO <i>address</i></dt> |
395 |
<dd>User information field for the nickname (location); |
396 |
ignored.</dd> |
397 |
</dl> |
398 |
</li> |
399 |
|
400 |
<li class="spaced"><b><tt>chanserv.db</tt>:</b> Channel database. As with |
401 |
<tt>nickserv.db</tt>, the file begins with a version field (<tt>CV</tt> in |
402 |
this case; the supported version is 3) and ends with a <tt>DE</tt> field |
403 |
containing a channel count. There is also a <tt>VF</tt> field (taking two |
404 |
parameters, a channel name and time value) listing channels which have been |
405 |
registered but not verified, but since Services does not implement such a |
406 |
verification system, these records are ignored. Channel records are stored |
407 |
on multiple lines: |
408 |
|
409 |
<dl> |
410 |
<dt class="cygnus">CI <i>channel</i> <i>founder</i> <i>password</i> |
411 |
<i>time-registered</i> <i>last-used</i> <i>flags</i> |
412 |
<i>mlock-on</i> <i>mlock-off</i> <i>topic-lock</i> |
413 |
<i>memo-level</i> <i>key</i></dt> |
414 |
<dd>Begins a channel record. The channel name is truncated to fit |
415 |
in a <tt>CHANMAX</tt>-character buffer, if necessary. The channel |
416 |
is discarded if the <tt>CI</tt> line is invalid, if another channel |
417 |
with the same name already exists, or if the founder is not a |
418 |
registered nickname. The mode lock parameters |
419 |
<tt><i>mlock-on</i></tt> and <tt><i>mlock-off</i></tt> are mode |
420 |
bitmasks, which are converted to mode strings based on the Cygnus |
421 |
mode flag constants. The <tt><i>topiclock</i></tt> and |
422 |
<tt><i>memolevel</i></tt> parameters are access levels required |
423 |
for setting the topic and receiving channel memos, respectively, |
424 |
using the same system as channel access entries (see below), with |
425 |
zero indicating that the feature is disabled. In Services, |
426 |
topic-lock is an on/off setting, so the <tt>TOPICLOCK</tt> channel |
427 |
flag is set if <tt><i>topiclock</i></tt> is nonzero; the |
428 |
<tt><i>memolevel</i></tt> value is translated directly to the |
429 |
<tt>CA_MEMO</tt> privilege level. Services does not require |
430 |
authentication for channels, so the <tt><i>key</i></tt> parameter |
431 |
is ignored.</dd> |
432 |
|
433 |
<dt class="cygnus">CA <i>nick-or-mask</i> <i>level</i></dt> |
434 |
<dd>Channel access entry. Cygnus, like versions of Services before |
435 |
3.0.0, allows both nicknames and usermasks on channel access lists; |
436 |
any access entry that does not correspond to a registered nickname |
437 |
is therefore discarded. Cygnus uses a simple XOP-based access |
438 |
system, with five levels: |
439 |
<ul> |
440 |
<li>1: VOP</li> |
441 |
<li>2: HOP</li> |
442 |
<li>3: AOP</li> |
443 |
<li>4: SOP</li> |
444 |
<li>5: Founder</li> |
445 |
</ul> |
446 |
These values are translated to the corresponding <tt>ACCLEV_*</tt> |
447 |
constants.</dd> |
448 |
|
449 |
<dt class="cygnus">AK <i>mask</i> <i>setter</i> <i>time</i> |
450 |
<i>reason</i></dt> |
451 |
<dd>Channel autokick entry. The setter nickname is truncated |
452 |
(silently) if necessary.</dd> |
453 |
|
454 |
<dt class="cygnus">SU <i>nickname</i></dt> |
455 |
<dd>Channel successor. Ignored if the nickname is not registered |
456 |
or is in the same nickname group as the founder.</dd> |
457 |
|
458 |
<dt class="cygnus">GR <i>text</i></dt> |
459 |
<dd>Channel greeting (entry message). <tt><i>text</i></tt> may |
460 |
contain spaced.</dd> |
461 |
|
462 |
<dt class="cygnus">UR <i>url</i></dt> |
463 |
<dd>Channel URL.</dd> |
464 |
|
465 |
<dt class="cygnus">CT <i>setter</i> <i>time</i> <i>topic</i></dt> |
466 |
<dd>Channel topic, along with the nickname of the topic setter and |
467 |
the time the topic was set.</dd> |
468 |
|
469 |
<dt class="cygnus">KY <i>key</i></dt> |
470 |
<dd>Channel key locked with <tt>MLOCK</tt>. Ignored if mode |
471 |
<tt>+k</tt> is not locked on.</dd> |
472 |
|
473 |
<dt class="cygnus">LM <i>limit</i></dt> |
474 |
<dd>Channel limit locked with <tt>MLOCK</tt>. Ignored if not a |
475 |
valid limit value, or if mode <tt>+l</tt> is not locked on.</dd> |
476 |
|
477 |
<dt class="cygnus">FL <i>value</i></dt> |
478 |
<dd>Channel flood setting locked with <tt>MLOCK</tt>. Ignored if |
479 |
mode <tt>+f</tt> is not locked on.</dd> |
480 |
|
481 |
<dt class="cygnus">LK <i>link</i></dt> |
482 |
<dd>Channel link locked with <tt>MLOCK</tt>. Ignored if mode |
483 |
<tt>+L</tt> is not locked on.</dd> |
484 |
</dl> |
485 |
</li> |
486 |
|
487 |
<li><b><tt>rootserv.db</tt>:</b> Contains global data, analogous to the |
488 |
OperServ and related databases in Services. Data is stored with one full |
489 |
record per line, as follows: |
490 |
|
491 |
<dl> |
492 |
<dt class="cygnus">AK <i>mask</i> <i>setter</i> <i>is-realname</i> |
493 |
<i>set-at</i> <i>expires</i> <i>reason</i></dt> |
494 |
<dd>An autokill or SGline record; the numeric field |
495 |
<tt><i>is-realname</i></tt> determines the record type (nonzero for |
496 |
an SGline, zero for an autokill). <tt><i>reason</i></tt> may |
497 |
contain spaces.</dd> |
498 |
|
499 |
<dt class="cygnus">TR <i>mask</i> <i>limit</i></dt> |
500 |
<dd>A session exception with a defined user limit (a "trigger" in |
501 |
Cygnus terminology).</dd> |
502 |
|
503 |
<dt class="cygnus">EX <i>mask</i></dt> |
504 |
<dd>A session exception with no user limit.</dd> |
505 |
|
506 |
<dt class="cygnus">NW <i>time</i></dt> |
507 |
<dd>The last time the <tt>RESETNEWS</tt> command was called. |
508 |
Cygnus implements news as a simple text file, shown to users only |
509 |
if the user's last read-news time is earlier than this timestamp. |
510 |
Ignored.</dd> |
511 |
|
512 |
<dt class="cygnus">RS <i>max-uptime</i></dt> |
513 |
<dd>The longest amount of time Cygnus has remained running, in |
514 |
seconds. Services does not store this information, so this field |
515 |
is ignored.</dd> |
516 |
</dl> |
517 |
</li> |
518 |
|
519 |
<li class="spaced"><b><tt>web.db</tt>:</b> Contains a summary of all data, |
520 |
intended for use by external programs. Apparently serves a purpose similar |
521 |
to the XML export functionality in Services. This file is ignored.</li> |
522 |
|
523 |
</ul> |
524 |
|
525 |
<p class="backlink"><a href="#top">Back to top</a></p> |
526 |
|
527 |
|
528 |
<h4 class="subsubsection-title" id="s3-2">9-3-2. <tt>convert-epona.c</tt> (Epona, Anope)</h4> |
529 |
|
530 |
<p>Epona IRC Services is an IRC service program based on Services 4.3.3; |
531 |
development has been intermittent since the release of Epona 1.4 in 2001. |
532 |
Anope Services was forked from Epona 1.4.14, and has been developed more |
533 |
actively. Both use a database format similar to the Services 4.3 format; |
534 |
however, rather than a single format version number for all files, |
535 |
individual version numbers are used for each file. (As noted in the user |
536 |
manual, versions of Anope since 1.7.11 also support storing databases in a |
537 |
MySQL database; access to such databases is not supported by the |
538 |
<tt>convert-db</tt> tool.)</p> |
539 |
|
540 |
<p>Epona and Anope use a "nick core plus nick aliases" concept for |
541 |
registered nicknames, in which most nickname data is stored with a single |
542 |
"core" nick and other nicknames can "aliased" to the same settings (the |
543 |
redesigned nickname linking system in Services 5.0 was based on this |
544 |
concept). Other data is structured similarly to Services, and conversion |
545 |
is fairly straightforward.</p> |
546 |
|
547 |
<p>Anope supports a number of IRC servers; unfortunately, the flag values |
548 |
used in the channel mode lock fields stored in the database vary between |
549 |
IRC servers (though given the vast range of channel modes present in |
550 |
various servers, this is probably unavoidable). In order to interpret the |
551 |
mode flags correctly, the converter allows a "<tt>-ircd=</tt>" option to |
552 |
be passed on the command line. The parameter to this option selects the |
553 |
IRC server type to be used for interpreting channel modes. If no |
554 |
<tt>-ircd</tt> option is given, the converter only converts the eight basic |
555 |
channel modes (<tt>i</tt>, <tt>k</tt>, <tt>l</tt>, <tt>m</tt>, <tt>n</tt>, |
556 |
<tt>p</tt>, <tt>s</tt>, <tt>t</tt>), which share the same flag values |
557 |
across all IRC server types.</p> |
558 |
|
559 |
<p>Since Anope 1.7.18, administrators can select one of several encryption |
560 |
modules, similar to how encryption was handled in Services 5.0. This |
561 |
method shares the same shortcoming present in Services 5.0, however, which |
562 |
is that a particular password's encryption status cannot be determined from |
563 |
the data itself. To work around this problem, the converter accepts a |
564 |
command-line option "<tt>-encryption=</tt>" to select the type of |
565 |
encryption used for passwords in the databases. If this option is given, |
566 |
the "encrypted" flag on nickname cores and channels is ignored, and all |
567 |
passwords are assumed to use the given encryption type; otherwise, the |
568 |
"encrypted" flag selects between MD5 encryption and no encryption. (For |
569 |
forward compatilibity, <tt>sha1</tt> is accepted to indicate SHA-1 |
570 |
encryption, but Services will not be able to check such passwords without a |
571 |
third-party module implementing the SHA-1 hash.)</p> |
572 |
|
573 |
<p>The Epona/Anope database files are:</p> |
574 |
|
575 |
<ul> |
576 |
|
577 |
<li class="spaced"><b><tt>nick.db</tt>:</b> Contains nickname data. |
578 |
Nickname cores are stored in a format similar to that in Services 4.x, |
579 |
followed by nickname aliases in a condensed format. Unlike Services, Epona |
580 |
and Anope store nicknames and passwords as strings rather than buffers |
581 |
(with the exception of the memo sender field, which is stored as a buffer |
582 |
of default size 32 bytes); there seems to have been a bug in some versions |
583 |
of Epona that could result in a <tt>NULL</tt> string being saved in the |
584 |
password field, and this is checked for by the load routine. Additional |
585 |
fields stored with nickname cores include: |
586 |
<ul> |
587 |
<li><tt>greet</tt>: A greeting message sent from NickServ to the |
588 |
user upon logon. Ignored.</li> |
589 |
<li><tt>icq</tt>: The user's ICQ number. Ignored.</li> |
590 |
</ul> |
591 |
Nickname aliases include the same fields as are stored in the |
592 |
<tt>NickInfo</tt> structure. Since nickname cores are stored using the |
593 |
"display name" (main nickname) rather than a separate ID value, |
594 |
<tt>convert-db</tt> first looks up the nickname read from the database, |
595 |
and only creates a new <tt>NickInfo</tt> if the nickname does not already |
596 |
exist. |
597 |
</li> |
598 |
|
599 |
<li class="spaced"><b><tt>chan.db</tt>:</b> Contains channel data. |
600 |
Additional fields stored with channels include: |
601 |
<ul> |
602 |
<li><tt>forbidby</tt>: The nickname of the user who forbade the |
603 |
channel. Ignored.</li> |
604 |
<li><tt>forbidreason</tt>: The reason given for the channel |
605 |
forbid. Ignored.</li> |
606 |
<li><tt>bantype</tt>: Selects among different method of creating a |
607 |
ban mask when banning a user from a channel. Ignored.</li> |
608 |
<li>Several BotServ-related fields, all ignored.</li> |
609 |
</ul> |
610 |
The major difficulty in importing Epona/Anope channel data is that the |
611 |
meaning of the bitmask values used in the channel mode lock varies |
612 |
depending on the particular IRC server being used. Since this information |
613 |
is not stored in the databases, <tt>convert-db</tt> defaults to only |
614 |
importing the eight basic channel modes, which have consistent flag values |
615 |
across all IRC server types: <tt>+i</tt>, <tt>+k</tt>, <tt>+l</tt>, |
616 |
<tt>+m</tt>, <tt>+n</tt>, <tt>+p</tt>, <tt>+s</tt>, and <tt>+t</tt>. To |
617 |
import other modes, the user must specify the appropriate |
618 |
<tt>-ircd=<i>type</i></tt> option on the <tt>convert-db</tt> command line; |
619 |
the argument to this option is used to look up an IRC server type (the |
620 |
<tt>IRCD_*</tt> enum defined at the top of the file), which is then used as |
621 |
an index into the <tt>epona_cmode_index[]</tt> array of arrays to process |
622 |
nonstandard mode flag values. Note that there is not a one-to-one |
623 |
correspondence between IRC server type names (taken from the Anope 1.7 |
624 |
protocol module names) and <tt>IRCD_*</tt> constants; protocols using the |
625 |
same mode flag values are combined into a single flag list. (In hindsight, |
626 |
this is probably an unnecessary optimization.) |
627 |
</li> |
628 |
|
629 |
<li class="spaced"><b><tt>oper.db</tt>:</b> Contains OperServ-related data, |
630 |
both basic data such as maximum user count and lists of autokills and |
631 |
S-lines. Some versions of Epona and Anope also store information about |
632 |
detected proxy hosts, but this data was removed during the development of |
633 |
Anope 1.7 without changing the file version number.</li> |
634 |
|
635 |
<li class="spaced"><b><tt>exception.db</tt>:</b> Contains session exception |
636 |
data.</li> |
637 |
|
638 |
<li class="spaced"><b><tt>news.db</tt>:</b> Contains news item data.</li> |
639 |
|
640 |
<li class="spaced"><b><tt>autoop.db</tt>:</b> Contains nickname auto-op |
641 |
settings. Ignored.</li> |
642 |
|
643 |
<li class="spaced"><b><tt>bot.db</tt>:</b> Contains data for the |
644 |
Epona/Anope BotServ pseudoclient. Ignored.</li> |
645 |
|
646 |
<li class="spaced"><b><tt>hosts.db</tt>:</b> Contains data for the |
647 |
Anope 1.5+ HostServ pseudoclient. Ignored.</li> |
648 |
|
649 |
<li class="spaced"><b><tt>hs_request.db</tt>:</b> Contains data for the |
650 |
Anope 1.5+ HostServ pseudoclient. Ignored.</li> |
651 |
|
652 |
<li class="spaced"><b><tt>os_info.db</tt>:</b> Contains IRC operator |
653 |
information strings for nicknames and channels (Anope 1.7.9+ only). |
654 |
Ignored.</li> |
655 |
|
656 |
<li class="spaced"><b><tt>prenick.db</tt>:</b> Contains data on requested |
657 |
but not yet confirmed nicknames in Anope's two-step registration process |
658 |
(Anope 1.5+ only). Since Anope uses an alphanumeric code that cannot be |
659 |
stored in the <tt>NickGroupInfo.authcode</tt> numeric field, this data is |
660 |
currently ignored.</li> |
661 |
|
662 |
</ul> |
663 |
|
664 |
<p class="backlink"><a href="#top">Back to top</a></p> |
665 |
|
666 |
|
667 |
<h4 class="subsubsection-title" id="s3-3">9-3-3. <tt>convert-hybserv.c</tt> (HybServ)</h4> |
668 |
|
669 |
<p>HybServ is an IRC service program designed from scratch for networks |
670 |
using the IRCD-Hybrid IRC server. After version 1.6, development changed |
671 |
hands and the program was renamed HybServ2, but as they share a common |
672 |
codebase, "HybServ" is used to refer to both in this documentation. |
673 |
Several modified versions of HybServ have also been seen.</p> |
674 |
|
675 |
<p>Like Cygnus, HybServ writes its databases to text files. The format is |
676 |
similar to IRC commands, with a record or field identifier followed by an |
677 |
arbitrary number of space-separated parameters, and with a leading colon |
678 |
indicating a parameter that continues to the end of the line (including |
679 |
spaces). The first line of each file begins with "<tt>; Hybserv</tt>", |
680 |
which is used by the <tt>check()</tt> routine to check for the existence of |
681 |
HybServ databases.</p> |
682 |
|
683 |
<p>HybServ allows passwords to be encrypted, using the Unix |
684 |
<tt>crypt()</tt> function; however, encryption status is not stored in the |
685 |
databases themselves, so the command-line option <tt>-crypt</tt> must be |
686 |
given to <tt>convert-db</tt> to make it treat passwords as encrypted.</p> |
687 |
|
688 |
<ul> |
689 |
|
690 |
<li class="spaced"><b><tt>nick.db</tt>:</b> Contains nickname data. |
691 |
Each nickname record begins with a line that has the nickname itself as the |
692 |
first token on the line; subsequent fields for that record begin with the |
693 |
two characters "<tt>-></tt>" followed by a field name. The fields are: |
694 |
<dl> |
695 |
<dt><tt><i>nickname</i> <i>flags</i> <i>time-registered</i> |
696 |
<i>last-seen</i></tt></dt> |
697 |
<dd>Begins a new nickname record.</dd> |
698 |
<dt><tt>->PASS <i>password</i></tt></dt> |
699 |
<dd>The nickname's password.</dd> |
700 |
<dt><tt>->PERMPASS <i>password</i></tt></dt> |
701 |
<dd>A "permanent password" for the nickname (only present in some |
702 |
modified versions of HybServ); ignored.</dd> |
703 |
<dt><tt>->FORBIDBY <i>nickname</i></tt></dt> |
704 |
<dd>The nickname of the user who forbade this nick; ignored.</dd> |
705 |
<dt><tt>->FORBIDREASON <i>reason</i></tt></dt> |
706 |
<dd>The reason for the nickname forbid; ignored. (This field is |
707 |
called <tt>FREASON</tt> in some modified versions of HybServ.)</dd> |
708 |
<dt><tt>->FTIME <i>time</i></tt></dt> |
709 |
<dd>The time at which the nickname was forbidden (only present in |
710 |
some modified versions of HybServ); ignored.</dd> |
711 |
<dt><tt>->EMAIL <i>address</i></tt></dt> |
712 |
<dd>E-mail address for the nickname.</dd> |
713 |
<dt><tt>->URL <i>url</i></tt></dt> |
714 |
<dd>URL for the nickname.</dd> |
715 |
<dt><tt>->GSM <i>string</i></tt> |
716 |
<br/><tt>->PHONE <i>string</i></tt> |
717 |
<br/><tt>->UIN <i>string</i></tt> |
718 |
<br/><tt>->ICQ <i>string</i></tt></dt> |
719 |
<dd>Various user information fields for the nickname; ignored. |
720 |
(<tt>ICQ</tt> is only present in some modified versions of |
721 |
HybServ.)</dd> |
722 |
<dt><tt>->LANG <i>language</i></tt></dt> |
723 |
<dd>Believed to identify the language selected by the user (only |
724 |
present in some modified versions of HybServ); ignored due to a |
725 |
lack of data to correlate values with languages.</dd> |
726 |
<dt><tt>->LASTUH <i>user</i> <i>host</i></tt></dt> |
727 |
<dd>The last-seen usermask for the nickname, with user and hostname |
728 |
as separate tokens.</dd> |
729 |
<dt><tt>->LASTQMSG <i>message</i></tt></dt> |
730 |
<dd>The last quit message used by the nickname.</dd> |
731 |
<dt><tt>->HOST <i>usermask</i></tt></dt> |
732 |
<dd>A hostmask (access) entry for the nickname.</dd> |
733 |
<dt><tt>->LINK <i>master-nick</i></tt></dt> |
734 |
<dd>Indicates that this nickname is linked to another, and gives |
735 |
the parent (master) nickname. Master nicknames are always written |
736 |
before the nicknames that link to them.</dd> |
737 |
</dl> |
738 |
</li> |
739 |
|
740 |
<li class="spaced"><b><tt>chan.db</tt>:</b> Contains channel data. |
741 |
<dl> |
742 |
<dt><tt><i>channel</i> <i>flags</i> <i>time-registered</i> |
743 |
<i>last-used</i></tt></dt> |
744 |
<dd>Begins a new channel record.</dd> |
745 |
<dt><tt>->FNDR <i>nickname</i></tt></dt> |
746 |
<dd>The channel founder's nickname.</dd> |
747 |
<dt><tt>->SUCCESSOR <i>nickname</i></tt></dt> |
748 |
<dd>The channel successor's nickname.</dd> |
749 |
<dt><tt>->PASS <i>password</i></tt></dt> |
750 |
<dd>The channel's founder password.</dd> |
751 |
<dt><tt>->PERMPASS <i>password</i></tt></dt> |
752 |
<dd>A "permanent password" for the channel (only present in some |
753 |
modified versions of HybServ); ignored.</dd> |
754 |
<dt><tt>->ACCESS <i>nickname</i> <i>level</i></tt></dt> |
755 |
<dd>An access entry for the channel. Levels are adjusted so that |
756 |
users have close to the same privileges as they did in HybServ |
757 |
(assuming default HybServ privilege settings), but as there is not |
758 |
a one-to-one match between levels and privileges, some users will |
759 |
end up with more or less privileges than they had previously (see |
760 |
under HybServ in <a href="../5.html#3">section 5-3</a> of the |
761 |
user's manual).</dd> |
762 |
<dt><tt>->AKICK <i>mask</i> <i>reason</i></tt></dt> |
763 |
<dd>An autokick entry for the channel.</dd> |
764 |
<dt><tt>->ALVL <i>level...</i></tt></dt> |
765 |
<dd>Privilege access levels for the channel (all on one line); |
766 |
ignored.</dd> |
767 |
<dt><tt>->TOPIC <i>topic</i></tt></dt> |
768 |
<dd>Saved topic for the channel. Since the topic setter and time |
769 |
are not saved, they are set to "<tt><unknown></tt>" and the |
770 |
current time, respectively, in the XML output.</dd> |
771 |
<dt><tt>->MON <i>mode-mask</i></tt></dt> |
772 |
<dd>Modes locked on for the channel, as a combination of numeric |
773 |
flags.</dd> |
774 |
<dt><tt>->MOFF <i>mode-mask</i></tt></dt> |
775 |
<dd>Modes locked off for the channel, as a combination of numeric |
776 |
flags.</dd> |
777 |
<dt><tt>->KEY <i>key</i></tt></dt> |
778 |
<dd>Locked key for the channel.</dd> |
779 |
<dt><tt>->LIMIT <i>limit</i></tt></dt> |
780 |
<dd>Locked limit for the channel.</dd> |
781 |
<dt><tt>->FORWARD <i>string</i></tt></dt> |
782 |
<dd>Presumed to be a forwarding channel for when the channel |
783 |
reaches its user limit (<tt>+l</tt>), and stored as the channel |
784 |
link parameter accordingly, but as the IRC server with which this |
785 |
is used (Dancer IRCd) appears to be defunct, I am not certain of |
786 |
this interpretation.</dd> |
787 |
<dt><tt>->ENTRYMSG <i>message</i></tt></dt> |
788 |
<dd>Entry message for the channel.</dd> |
789 |
<dt><tt>->EMAIL <i>address</i></tt></dt> |
790 |
<dd>E-mail address for the channel.</dd> |
791 |
<dt><tt>->URL <i>url</i></tt></dt> |
792 |
<dd>URL for the channel.</dd> |
793 |
</dl> |
794 |
</li> |
795 |
|
796 |
<li class="spaced"><b><tt>memo.db</tt>:</b> Contains memo data. The data |
797 |
is organized by nickname, with each memo on a single line: |
798 |
<dl> |
799 |
<dt><tt><i>nickname</i></tt></dt> |
800 |
<dd>Begins a group of memos, and identifies the nickname to which |
801 |
the memos belong.</dd> |
802 |
<dt><tt>->TEXT <i>sender</i> <i>time</i> <i>flags</i> |
803 |
<i>text</i></tt></dt> |
804 |
<dd>Data for a single memo.</dd> |
805 |
</dl> |
806 |
</li> |
807 |
|
808 |
<li class="spaced"><b><tt>stat.db</tt>:</b> Contains the following |
809 |
network-wide statistics: |
810 |
<dl> |
811 |
<dt><tt>->USERS <i>maxusers</i> <i>maxusers-time</i></tt></dt> |
812 |
<dd>The maximum number of users seen on the network, and the time |
813 |
at which the maximum was reached. Used to set the corresponding |
814 |
OperServ data.</dd> |
815 |
<dt><tt>->OPERS <i>maxopers</i> <i>maxopers-time</i></tt></dt> |
816 |
<dd>The maximum number of IRC oprators seen on the network, and the |
817 |
time at which the maximum was reached. Ignored.</dd> |
818 |
<dt><tt>->OPERS <i>maxopers</i> <i>maxopers-time</i></tt></dt> |
819 |
<dd>The maximum number of IRC oprators seen on the network, and the |
820 |
time at which the maximum was reached. Ignored.</dd> |
821 |
<dt><tt>->OPERS <i>maxopers</i> <i>maxopers-time</i></tt></dt> |
822 |
<dd>The maximum number of IRC oprators seen on the network, and the |
823 |
time at which the maximum was reached. Ignored.</dd> |
824 |
</dl> |
825 |
</li> |
826 |
|
827 |
<li class="spaced"><b><tt>oper.db</tt>:</b> Seems to contain a list of |
828 |
current user modes set on online users. Ignored.</li> |
829 |
|
830 |
<li class="spaced"><b><tt>ignore.db</tt>:</b> Contains OperServ ignore |
831 |
data. Services does not store this data to disk, so this file is ignored.</li> |
832 |
|
833 |
<li class="spaced"><b><tt>seen.db</tt>:</b> Data for SeenServ; ignored.</li> |
834 |
|
835 |
</ul> |
836 |
|
837 |
<p class="backlink"><a href="#top">Back to top</a></p> |
838 |
|
839 |
|
840 |
<h4 class="subsubsection-title" id="s3-4">9-3-4. <tt>convert-magick.c</tt> (Magick, Wrecked)</h4> |
841 |
|
842 |
<p>Magick IRC Services is an IRC service program based on a very old |
843 |
version of Services, and WreckedNet IRC Services is a modified version of |
844 |
Magick; both seem to be defunct as of the writing of this manual.</p> |
845 |
|
846 |
<p>The databases used by these programs are similar to the format used by |
847 |
Services before machine-independence was introduced in version 4.0: rather |
848 |
than writing each variable in a consistent way, they simply dump the |
849 |
structures to disk as is. As such, <tt>convert-db</tt> assumes that the |
850 |
databases are being loaded on the same machine that produced them; |
851 |
attempting to read the databases on a different architecture (and in some |
852 |
cases, on the same architecture using a different compiler) will likely |
853 |
fail.</p> |
854 |
|
855 |
<p>Magick and Wrecked support nickname and channel suspensions via flags, |
856 |
but do not record any other suspension information, so default values are |
857 |
filled in. These programs also support a hierarchical system of nickname |
858 |
links, and these are resolved into nickname groups after all nicknames are |
859 |
read in.</p> |
860 |
|
861 |
<p>The data files used by Magick and Wrecked are as follows:</p> |
862 |
|
863 |
<ul> |
864 |
<li class="spaced"><b><tt>nick.db</tt></b>: Contains nickname data.</li> |
865 |
<li class="spaced"><b><tt>chan.db</tt></b>: Contains channel data.</li> |
866 |
<li class="spaced"><b><tt>memo.db</tt></b>: Contains memo data.</li> |
867 |
<li class="spaced"><b><tt>news.db</tt></b>: Contains channel news data; |
868 |
ignored.</li> |
869 |
<li class="spaced"><b><tt>sop.db</tt></b>: Contains the Services |
870 |
operator list (Services operators in Magick and Wrecked are |
871 |
equivalent to Services administrators in Services, and are imported |
872 |
as such).</li> |
873 |
<li class="spaced"><b><tt>akill.db</tt></b>: Contains autokill data.</li> |
874 |
<li class="spaced"><b><tt>clone.db</tt></b>: Contains session exception |
875 |
data.</li> |
876 |
<li class="spaced"><b><tt>message.db</tt></b>: Contains network message |
877 |
data (imported as news items).</li> |
878 |
</ul> |
879 |
|
880 |
<p class="backlink"><a href="#top">Back to top</a></p> |
881 |
|
882 |
|
883 |
<h4 class="subsubsection-title" id="s3-5">9-3-5. <tt>convert-ptlink.c</tt> (PTlink)</h4> |
884 |
|
885 |
<p>PTlink Services is an IRC service program designed specifically for the |
886 |
PTlink IRC server. It appears to be based on a fairly old version of |
887 |
Services, and uses a similar data file format. (Another, apparently |
888 |
separately developed, program called PTlink IRC Services has recently |
889 |
appeared; it uses MySQL for database storage, and is not supported by |
890 |
<tt>convert-db</tt>.)</p> |
891 |
|
892 |
<p>PTlink stores the encryption method used for passwords with the |
893 |
corresponding nickname or channel, a significant improvement over Services' |
894 |
method (at the time) of using a single method for the entire database. |
895 |
<tt>convert-db</tt> reads the encryption method and includes it in the XML |
896 |
output; however, the "JP2" method used in PTlink is not available in |
897 |
Services, and any passwords encrypted with this method, or with an unknown |
898 |
method, are reset to the corresponding nick or channel name with no |
899 |
encryption (a warning is printed in this case).</p> |
900 |
|
901 |
<p>PTlink also stores record counts in the nickname and channel databases, |
902 |
similar to Cygnus, for the purpose of ensuring that the data is loaded |
903 |
correctly; however, there have apparently been bugs in some versions of |
904 |
PTlink that caused valid databases to have a mismatch between this value |
905 |
and the number of records actually recorded. <tt>convert-db</tt> still |
906 |
checks the value, but the warning message on mismatch includes a note about |
907 |
this issue.</p> |
908 |
|
909 |
<p>The following data files are used by PTlink (some only by more recent |
910 |
versions):</p> |
911 |
|
912 |
<ul> |
913 |
|
914 |
<li class="spaced"><b><tt>nick.db</tt></b>: Contains nickname and memo |
915 |
data. Suspension status is stored as a flag, without setter, time, or |
916 |
expiration. PTlink stores the following additional data, currently |
917 |
ignored: |
918 |
<ul> |
919 |
<li><tt>icq_number</tt>: ICQ user number, as a string.</li> |
920 |
<li><tt>location</tt>: User's location. </li> |
921 |
<li><tt>last_identify</tt>: Last time the nickname was identified |
922 |
for. PTlink updates the "last seen" time regardless of |
923 |
authentication status, and uses this field instead to record use |
924 |
by an authenticated user. To maintain user-interface |
925 |
compatibility, we keep the old last-seen time, even though we treat |
926 |
it differently, rather than use this time.</li> |
927 |
<li><tt>last_email_request</tt>: Last time the <tt>SET EMAIL</tt> |
928 |
command was used. Services only records this in memory, not on |
929 |
disk.</li> |
930 |
<li><tt>birth_date</tt>: Presumably intended to allow the user to |
931 |
record their birth date (stored as a numeric time value), but this |
932 |
field appears to be unused in recent versions of PTlink.</li> |
933 |
<li><tt>news_mask</tt>: NewsServ-related options.</li> |
934 |
<li><tt>news_status</tt>: Presumably NewsServ-related, but appears |
935 |
to be unused in recent versions of PTlink.</li> |
936 |
<li><tt>notes</tt>: These seem to be a sort of memo-to-self |
937 |
feature; they could potentially be imported as memos.</li> |
938 |
</ul> |
939 |
As of data file version 10, PTlink did away with the legacy zero byte |
940 |
used to terminate a record chain for a single hash table entry, simply |
941 |
storing a sequence of records. |
942 |
</li> |
943 |
|
944 |
<li class="spaced"><b><tt>chan.db</tt></b>: Contains channel data. This |
945 |
file does not have a version 10, and the hash chain terminator bytes are |
946 |
always present; the hash table size was increased from 256 to 65536 in |
947 |
data file version 9. PTlink stores the following additional data, |
948 |
currently ignored: |
949 |
<ul> |
950 |
<li><tt>maxusers</tt>: Maximum number of users seen on the |
951 |
channel.</li> |
952 |
<li><tt>maxtime</tt>: Time when the maximum number of users on the |
953 |
channel was reached.</li> |
954 |
<li><tt>drop_time</tt>: Time when the channel was dropped with a |
955 |
DROP command. Only present if the 0x1000 (<tt>CI_DROPPED</tt>) |
956 |
flag is set. Used by the PTlink "delayed drop" system.</li> |
957 |
<li><tt>memos</tt>: PTlink supports channel memos (like old |
958 |
versions of Services), which are discarded.</li> |
959 |
</ul> |
960 |
</li> |
961 |
|
962 |
<li class="spaced"><b><tt>oper.db</tt></b>: Contains the list of Services |
963 |
administrators and operators, and the network-wide maximum user count and |
964 |
time of maximum.</li> |
965 |
|
966 |
<li class="spaced"><b><tt>akill.db</tt></b>: Contains autokill data.</li> |
967 |
|
968 |
<li class="spaced"><b><tt>sqline.db</tt></b>: Contains SQline data.</li> |
969 |
|
970 |
<li class="spaced"><b><tt>sxline.db</tt></b>: Contains SXline data (what |
971 |
Services calls SGlines).</li> |
972 |
|
973 |
<li class="spaced"><b><tt>news.db</tt></b>: Contains news data.</li> |
974 |
|
975 |
<li class="spaced"><b><tt>newsserv.db</tt></b>: Contains NewsServ data; |
976 |
ignored.</li> |
977 |
|
978 |
<li class="spaced"><b><tt>bots.db</tt></b>: Contains bot data; ignored.</li> |
979 |
|
980 |
<li class="spaced"><b><tt>vline.db</tt></b>: Contains SVline data (S-lines |
981 |
for blocking certain DCC filenames); ignored.</li> |
982 |
|
983 |
<li class="spaced"><b><tt>vlink.db</tt></b>: Contains VLINK data (a feature |
984 |
in recent versions of the PTlink IRC server); ignored.</li> |
985 |
|
986 |
</ul> |
987 |
|
988 |
<p class="backlink"><a href="#top">Back to top</a></p> |
989 |
|
990 |
|
991 |
<h4 class="subsubsection-title" id="s3-6">9-3-6. <tt>convert-sirv.c</tt> (Sirv, Auspice, Bolivia)</h4> |
992 |
|
993 |
<p>SirvNET Services is an IRC service program designed for use on SirvNET. |
994 |
Earlier versions were based on an old version of Services; version 3.0.0 |
995 |
was a complete rewrite, and development is actively continuing. Since |
996 |
version 3.0.0, Sirv requires a MySQL database to operate, and apparently |
997 |
has no way to export its data to ordinary files; thus, Sirv databases are |
998 |
only supported through version 2.9.0.</p> |
999 |
|
1000 |
<p>Auspice is an IRC service program that appears to have been based on an |
1001 |
old version of Sirv, and was designed for UnrealIRCd networks. Development |
1002 |
status is unclear.</p> |
1003 |
|
1004 |
<p>Bolivia IRC Services is an IRC service program that also appears to have |
1005 |
been based on Sirv, and developed for a particular network. The program |
1006 |
appears to be defunct as of the writing of this manual.</p> |
1007 |
|
1008 |
<p>All three of these programs share the same overall file format, so they |
1009 |
have been grouped in the same file despite fairly significant differences |
1010 |
in the details to avoid code repetition. The base format seems to be that |
1011 |
from Services 3.x, before machine-independence was introduced.</p> |
1012 |
|
1013 |
<p>The database files are as follows:</p> |
1014 |
|
1015 |
<ul> |
1016 |
|
1017 |
<li class="spaced"><b><tt>nick.db</tt>:</b> Nickname data. All three |
1018 |
programs share a common base nickname data structure (the <tt>oldni</tt> |
1019 |
variable), and each has its own additions to the structure. (As a side |
1020 |
note, Bolivia's extra data structure, consisting entirely of padding, is |
1021 |
not written to disk due to a missing comment terminator in the structure |
1022 |
definition.) The common load routine then loads string data for the |
1023 |
appropriate database type and initializes NickInfo and NickGroupInfo |
1024 |
structures for the loaded data. Bolivia has a flag for nickname |
1025 |
suspensions, and if it is set, dummy suspension data is created for the |
1026 |
nickname group. Auspice has a nick linking system, similar to the |
1027 |
hierarchical system introduced in Services 4.0, indicated by a nickname |
1028 |
flag; if the flag is set, the <tt>last_usermask</tt> field contains the |
1029 |
parent nickname. These links are resolved into nickname groups after all |
1030 |
nicknames have been loaded.</li> |
1031 |
|
1032 |
<li class="spaced"><b><tt>chan.db</tt>:</b> Channel data. As with the |
1033 |
nickname database, all three programs share a common base structure—with |
1034 |
the exception of mode lock data, which is stored as <tt>short</tt> numeric |
1035 |
values in Sirv and Bolivia but 64-byte string buffers in Auspice. The |
1036 |
routine first reads the initial part of the common structure |
1037 |
(<tt>oldci</tt>), then reads either two shorts or two 64-byte buffers for |
1038 |
the mode lock data, then reads the latter part of the common structure |
1039 |
(<tt>oldci2</tt>). This can theoretically cause alignment problems due to |
1040 |
the mode lock variables not being part of the structure, but no such |
1041 |
problems have yet been reported. The Sirv and Bolivia formats are similar, |
1042 |
but Auspice also includes: |
1043 |
<ul> |
1044 |
<li>Channel successors.</li> |
1045 |
<li>A record of who added a channel access entry (also present in |
1046 |
recent versions of Sirv).</li> |
1047 |
<li><tt>TIMEOP</tt> entries on the access list: users who only get |
1048 |
channel operator privileges at certain times. These are |
1049 |
discarded.</li> |
1050 |
<li>Channel news data.</li> |
1051 |
<li>Channel "bad word" data.</li> |
1052 |
</ul> |
1053 |
</li> |
1054 |
|
1055 |
<li class="spaced"><b><tt>memo.db</tt>:</b> Memo data. All three programs |
1056 |
use the same format here, with the exception that Auspice has a flag for |
1057 |
marking memos to be saved; this flag is used (inverted) to set the "may |
1058 |
expire" flag in imported memos.</li> |
1059 |
|
1060 |
<li class="spaced"><b><tt>os_sop.db</tt> (Sirv only):</b> Services operator |
1061 |
list. Consists of a count followed by a list of strings.</li> |
1062 |
|
1063 |
<li class="spaced"><b><tt>os_sa.db</tt> (Sirv only):</b> Services |
1064 |
administrator list. Consists of a count followed by a list of strings.</li> |
1065 |
|
1066 |
<li class="spaced"><b><tt>admin.db</tt> (Auspice only):</b> Services |
1067 |
administrator/operator list. Stored like the nickname and channel |
1068 |
databases, with a series of entries each preceded by a nonzero byte, |
1069 |
followed by a zero byte, for each hash table entry. Auspice keeps a fair |
1070 |
amount of information for each record in this table, but since Services |
1071 |
does not record such information, only the status flag is used to set the |
1072 |
nickname's OperServ privilege level (<tt>ngi->os_priv</tt>).</li> |
1073 |
|
1074 |
<li class="spaced"><b><tt>akill.db</tt>:</b> Autokill list. All three |
1075 |
programs share the same straightforward format.</li> |
1076 |
|
1077 |
<li class="spaced"><b><tt>trigger.db</tt>:</b> Trigger (session exception) |
1078 |
list. All three programs share the same straightforward format.</li> |
1079 |
|
1080 |
<li class="spaced"><b><tt>gline.db</tt>, <tt>qline.db</tt>, |
1081 |
<tt>zline.db</tt> (Bolivia only):</b> S-line data. These files use simple |
1082 |
arrays of strings preceded by a count.</li> |
1083 |
|
1084 |
</ul> |
1085 |
|
1086 |
<p class="backlink"><a href="#top">Back to top</a></p> |
1087 |
|
1088 |
|
1089 |
<h4 class="subsubsection-title" id="s3-7">9-3-7. <tt>convert-trircd.c</tt> (trircd)</h4> |
1090 |
|
1091 |
<p>trircd IRC Services is a fork of Services 4.5.36 developed for the |
1092 |
tr-ircd IRC server, and has been discontinued since support for tr-ircd was |
1093 |
added to Services. The data files are essentially the same as those in |
1094 |
Services 4.5.36, with the addition of the following data files:</p> |
1095 |
|
1096 |
<ul> |
1097 |
|
1098 |
<li class="spaced"><b><tt>ajoin.db</tt>:</b> Nickname-related extension |
1099 |
data for each registered nickname, including: |
1100 |
<ul> |
1101 |
<li>Autojoin list.</li> |
1102 |
<li>Forbidder nickname and reason for forbidden nicknames.</li> |
1103 |
<li>E-mail address authentication status.</li> |
1104 |
<li>Memo ignore list.</li> |
1105 |
<li>Nickname information string.</li> |
1106 |
<li>Memo expiration data (ignored).</li> |
1107 |
</ul> |
1108 |
</li> |
1109 |
|
1110 |
<li class="spaced"><b><tt>cforbid.db</tt>:</b> Channel-related extension |
1111 |
data for each registered channel, including: |
1112 |
<ul> |
1113 |
<li>Forbidder nickname and reason for forbidden channels.</li> |
1114 |
<li>Time added, last used time, and expiration time for autokick |
1115 |
entries (expiration times are not supported for autokicks and are |
1116 |
ignored).</li> |
1117 |
<li>Last used time for access entries (ignored).</li> |
1118 |
</ul> |
1119 |
</li> |
1120 |
|
1121 |
<li class="spaced"><b><tt>exclude.db</tt>:</b> Autokill exclusion data, |
1122 |
stored in the same format as autokill data.</li> |
1123 |
|
1124 |
<li class="spaced"><b><tt>sgline.db</tt>, <tt>sqline.db</tt>, |
1125 |
<tt>szline.db</tt>:</b> S-line data, stored in the same format as autokill |
1126 |
data.</li> |
1127 |
|
1128 |
</ul> |
1129 |
|
1130 |
<p class="backlink"><a href="#top">Back to top</a></p> |
1131 |
|
1132 |
|
1133 |
<h4 class="subsubsection-title" id="s3-8">9-3-8. <tt>convert-ver8.c</tt> (Daylight, IRCS)</h4> |
1134 |
|
1135 |
<p>Daylight is a fork of Services 4.3.3 developed for the UnrealIRCd IRC |
1136 |
server, and has been discontinued since support for Unreal was added to |
1137 |
Services. IRCS is a fork of Services 4.0.5 developed for Undernet (ircu) |
1138 |
IRC servers, and appears to be defunct as of the writing of this manual. |
1139 |
Both use a data format essentially unchanged from that in the original |
1140 |
Services versions; the data file format at that time was version 8, hence |
1141 |
the source file name "<tt>convert-ver8.c</tt>".</p> |
1142 |
|
1143 |
<p>The Daylight database format is almost completely unchanged from the |
1144 |
original version 8, with the exception of an extra channel flag |
1145 |
<tt>CI_XMANAGEMENT</tt> which is ignored.</p> |
1146 |
|
1147 |
<p>The IRCS database format uses a channel name buffer size of 204 bytes |
1148 |
and a password size of 16 bytes. Services defaults to a maximum channel |
1149 |
name buffer size of 64 bytes, and will truncate (with a warning) any |
1150 |
channel name that is too long to fit in the buffer. IRCS also uses five |
1151 |
OperServ privilege levels instead of two, and users on the extra lists |
1152 |
("senior", "junior", and "helper") are moved onto either the admin or the |
1153 |
oper list depending on appropriate privileges.</p> |
1154 |
|
1155 |
<p>IRCS adds one data file to the base Services set: <tt>gline.db</tt>, |
1156 |
containing "G-line" (autokill) data.</p> |
1157 |
|
1158 |
<p class="backlink"><a href="#top">Back to top</a></p> |
1159 |
|
1160 |
<!------------------------------------------------------------------------> |
1161 |
<hr/> |
1162 |
|
1163 |
<p class="backlink"><a href="8.html">Previous section: Other modules</a> | |
1164 |
<a href="index.html">Table of Contents</a> | |
1165 |
<a href="10.html">Next section: Compilation</a></p> |
1166 |
|
1167 |
</body> |
1168 |
</html> |