Intergrated test scripts with automake
[gnucomo.git] / doc / manifest.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE doc SYSTEM "/usr/local/xslt/doc.dtd">
3 <doc style="main.css" xmlns:xlink="http://www.w3.org/1999/xlink">
4   <book>
5
6 <titlepage>
7    <title>GNUCOMO</title>
8    <subtitle>GNU COMPUTER MONITORING</subtitle>
9    <subtitle>A system for interactive system monitoring.</subtitle>
10    <subtitle>Development manifest</subtitle>
11
12    <author>Brenno J.S.A.A.F. de Winter, De Winter Information Solutions</author>
13    <author>Arjen Baart, Andromeda Technology &amp; Automation</author>
14    <date>Januari 10, 2004</date>
15    <docinfo>
16       <infoitem label="Version">0.25</infoitem>
17    </docinfo>
18
19 </titlepage>
20
21 <toc/>
22
23 <chapter>
24    <heading>About this document.</heading>
25
26 <para>
27 <LaTeX command='\setlength{\parindent}{0cm}'/>
28 <LaTeX command='\setlength{\parskip}{0.4cm}'/>
29 This document describes the technical specifications for the Gnucomo project.
30 It will describe the functionality achieved, design specifications and choices made.
31 The document will be the manifest for the developers to work in the same direction
32 and not run into unneeded disappointments.
33 </para>
34
35 <section>
36   <heading>History of the document.</heading>
37
38 <table cpos='lp{3cm}lp{5cm}'>
39   <thead>
40     <col>Version</col><col>Author</col><col>Date</col><col>Remarks</col>
41   </thead>
42   <row>
43     <col>0.l</col><col>Brenno de Winter</col><col>Jul 11, 2002</col>
44     <col>
45       Initial version
46     </col>
47   </row>
48   <row>
49     <col>0.11</col><col>Arjen Baart</col><col>Jul 12, 2002</col>
50     <col>
51       Additional guidelines and dataflow diagram.
52     </col>
53   </row>
54   <row>
55     <col>0.12</col><col>Brenno de Winter</col><col>Jul 15, 2002</col>
56     <col>
57       Database design added
58     </col>
59   </row>
60   <row>
61     <col>0.13</col><col>Arjen Baart</col><col>Jul 16, 2002</col>
62     <col>
63       Entity-relationship model added.
64     </col>
65   </row>
66   <row>
67     <col>0.14</col><col>Brenno de Winter</col><col>Jul 17, 2002</col>
68     <col>
69       Based on feedback. Small changes to the datamodel and finishing touches
70       in lay-out of the tables. Added some examples.
71     </col>
72   </row>
73   <row>
74     <col>0.15</col><col>Brenno de Winter, Arjen Baart</col><col>Jul 21, 2002</col>
75     <col>
76       Additional feedback processed, indexes added, ERD added and SQL-script created.
77     </col>
78   </row>
79   <row>
80     <col>0.16</col><col>Brenno de Winter</col><col>Aug 7, 2002</col>
81     <col>
82       Communication handling added.
83     </col>
84   </row>
85   <row>
86     <col>0.17</col><col>Brenno de Winter</col><col>Aug 11, 2002</col>
87     <col>
88       <para>* Description of the client-side for communications.</para>
89       <para>* Several updates to the database descriptions, drawings added.</para>
90       <para>* More work on the installation chapter.</para>
91       <para>* Created an extra field to the unprocessed_log table and added
92               a between the table service and unprocessed_log.</para>
93     </col>
94   </row>
95   <row>
96     <col>0.18</col><col>Brenno de Winter, Peter Roozemaal</col><col>Aug 15, 2002</col>
97     <col>
98       <para>* Review done by Peter Roozemaal: adjusted intro and several clarifications made</para>
99       <para>* Arjen Baart: Adjustments to database drawings</para>
100       <para>* New installation recommendations</para>
101     </col>
102   </row>
103   <row>
104     <col>0.19</col><col>Arjen Baart</col><col>Aug 27, 2002</col>
105     <col>
106       Conversion to XMLDoc
107     </col>
108   </row>
109   <row>
110     <col>0.20</col><col>Arjen Baart</col><col>Oct 20, 2002</col>
111     <col>
112       Minor layout improvements
113     </col>
114   </row>
115   <row>
116     <col>0.21</col><col>Arjen Baart</col><col>Nov 07, 2002</col>
117     <col>
118       Installation instructions added.
119       Combined chapters 4 through 7 into one chapter (4).
120     </col>
121   </row>
122   <row>
123     <col>0.22</col><col>Arjen Baart</col><col>Nov 15, 2002</col>
124     <col>
125       Added parameters of monitored objects.
126     </col>
127   </row>
128   <row>
129    <col>0.23</col><col>Brenno de Winter</col><col>Dec 6, 2002</col>
130    <col>
131      Added new elements to the database
132    </col>
133   </row>
134   <row>
135    <col>0.24</col><col>Brenno de Winter</col><col>Dec 12, 2002</col>
136    <col>
137      Updates to the database to reflect the most recent changes. 
138    </col>
139   </row>
140   <row>
141    <col>0.25</col><col>Arjen Baart</col><col>Jan 10, 2004</col>
142    <col>
143      Added a list of related projects and introduced the concept of
144      dynamic parameters.
145    </col>
146   </row>
147 </table>
148
149 </section>
150 </chapter>
151
152 <chapter>
153 <heading>Aim of the project.</heading>
154
155 <para>
156 The number of log-files in a system and the tools in general do not make
157 monitoring a system simple. Quite often there is so much information that
158 attention for logfiles seems to fade away. For that reason monitoring routers
159 and clients is often not an option. Instead of timely detection of problems,
160 logs more often are used to find out what went wrong. When a system is
161 under attack early signals can often easily be detected<footnote>Just as in
162 real life there a signals that things are not going in the right direction.
163 For the attacks on September 11th 2001 there were many signals available
164 that could to have led to early detection: warnings of several intelligence
165 agencies, warnings within the FBI, flight schools that report strange
166 customers that want to steer a plane and don't seem to care about take
167 off and landing, people opening accounts under fake names.</footnote>
168 and preventive measures could have been taken if the time was only available.
169 </para>
170
171 <para>
172 The Gnucomo project is meant to make pro-active monitoring of computers
173 and devices easier. It will contain a set of applications that will
174 retrieve all types of monitoring information from devices and place
175 it into a database. Devices can be server computers, desktop computers,
176 PBX'es or other systems. By running checks the manual process of
177 watching log files can be reduced. Also an intelligent script can
178 see things that a human being will easy overlook. Gnucomo won't
179 relieve an administrator of all manual work on log-files, but will
180 increase the changes on actual monitoring.
181 </para>
182 <para>
183 With all this data being available at one central location the gnucomo-server
184 acts as some kind of black box for computer systems. If something does
185 happen the evidence will be available at a remote location available
186 for exploration<footnote>This analogy is based on a remarkable anecdote:
187 One a trip to US I spoke to a 747-captain of Air France. While talking
188 over several subjects we touched security. When we went some deeper I
189 touched the subject gnucomo and he told me that Air France was doing
190 the very same with real black boxes. By sending all the data to Paris
191 errors can be detected earlier and be resolved. In any less fortunate
192 case the cause of the crash might be detected sooner (or fuller).
193 For me this was a signal there is a point in working gnucomo because
194 the analogy is valid.</footnote>. Forensics will be made easier.
195 Also the collected data is available from multiple locations make
196 it easier to found more about an attack. The change that you overlook
197 things will be reduced.
198 </para>
199 <para>
200 Based on the entered data all sorts of analysis will be performed to discover
201 abnormalities a normal maintenance tool or IDS wouldn't be looking at.
202 An example could be a website in Dutch that suddenly obtains a lot of
203 attention from Greek visitors (based on the location of their
204 IP<footnote>That IP could also warn for other things like: excessive
205 data traffic from wireless connections at times that you wouldn't be
206 expecting traffic at all, absence of traffic when you would be expecting
207 some traffic at least or even what article is liked in which part of the world,
208 what regions poses the highest threat to the security of the system (based
209 on the location of the IP address).</footnote>). These abnormalities will
210 be presented as user-friendly as possible to increase awareness of the
211 state of the system. By doing that the system can also be used for more
212 complex analysis. One than can look at long-term trends like hacking
213 attempts that take place, new exploits that are tried all of a sudden
214 or signs of distributed attacks or a certain pattern of attempts<footnote>A portscan
215 that last three days is hard to detect with a real-time IDS,
216 while gnucomo would discover this anyhow. With correct intelligence
217 one portscan from multiple IP-addresses can be related.</footnote>.
218 </para>
219 <para>
220 Also extra data will be gathered where ever possible to save time to
221 the administrator. If IP address attract attention of gnucomo the next
222 logical step would be to use tools like dig, whois and visiting arin-related
223 websites. This data will automatically be collected in an early stage and
224 stored in the database.
225 </para>
226 <para>
227 The results will be gathered in a warning system.
228 Those warnings will be presented to the administrative person
229 who is responsible for that particular machine or network.
230 Having multiple systems in the system can add to the intelligence that
231 can be gathered. The interface will be web-based and aimed at user-friendliness.
232 </para>
233 <para>
234 Since multiple systems can enter data into the Gnucomo database more
235 intelligent hardware and security detection can be done.
236 When things do go wrong Gnucomo contains as much information as
237 possible to figure out what happened and assist in the forensics.
238 Since research on the signals afterwards is broader more attention
239 will be given as much data as possible and do less filtering.
240 </para>
241 <para>
242 With the data in the database also policies can be checked automatically
243 retro-actively so that the security leaves some room to stretch some rules.
244 This may sound not logic, because one of the main functions of security is
245 to enforce rules. But some rules are made with the different meanings.
246 For instance: a rule may be that private browsing isn't allowed.
247 The background of such a rule might be to try and reduce the amount
248 of data traffic (too many people downloading mp3's, or people not
249 getting to work anymore). By monitoring that specific fact
250 (bandwidth spent on non-business related Internet use)
251 it's possible to be relaxed on that rule and enable many good-willing
252 users reading his/hers daily newspaper.
253 </para>
254 <para>
255 The scope of the project is clearly limited to monitoring and not to
256 offer automated maintenance or web-based maintenance.
257 There are other projects currently being able to provide that
258 functionality. We will focus on intelligence and user-friendliness
259 of representation of facts presented. A warning should trigger
260 an administrator to get up and do something using the tools he or she values the most.
261 </para>
262 <para>
263 Also we are not aiming to replace great tools like SNORT as a real-time IDS.
264 These tools can do thing, that in the beginning won't be a part of gnucomo
265 out of performance reasons. Also there is no need to duplicate what they
266 already did. If that energy is placed in intelligent we're very complimentary.
267 Gnucomo can however be a reality check on an existing NIDS (Network Intrusion
268 Detection System). For instance if warnings keep coming it may be time to
269 rethink the rules that have been set.
270 </para>
271
272 <para>
273 This evolves to the following list of functions gnucomo can provide:
274 </para>
275 <itemize>
276   <item> Intrusion detection </item>
277   <item> Detecting hacker attempts </item>
278   <item> Early detection of system failures </item>
279   <item> Exhaustion of system resources </item>
280   <item> Capacity planning for future expansion </item>
281   <item> Spotting bottlenecks in a system.  </item>
282   <item> Verifying system integrity </item>
283   <item> Assistance with troubleshooting </item>
284   <item> Perform post-mortem forensics </item>
285   <item> Incident response system.  </item>
286 </itemize>
287 </chapter>
288
289 <chapter>
290    <heading>Decisions for the overall system.</heading>
291
292 <para>
293 In order to get the project running we have to make some decisions before
294 we can start. Of course are the decisions always open for review,
295 but initially our main aim is to get a system running. This doesn't
296 mean that we allow a lesser architecture, but more that we create an
297 environment that will lead to results.
298 </para>
299 <para>
300 The following decisions apply to the system in general:
301 </para>
302 <itemize>
303   <item>
304     The major part of the system will be used for security features.
305     The solution itself has to be secure.
306   </item>
307   <item>
308     In general we strive to be as platform and application independent as possible.
309     However to achieve software to get ready and to assure progress some selections
310     will have to be made excluding options for applications<footnote>An example is
311     in the database. By using stored procedures and triggers MySQL cannot be used.
312     However the data integrity at that point is more important than the ability to
313     use MySQL.</footnote>. Where possible we will enable ports to other applications
314     and platforms.
315   </item>
316   <item>
317     The computers collecting the data will only be Linux machines,
318     with future support for other Unices. However it is not aim our
319     to port this part of the project to other platforms just now.
320   </item>
321   <item>
322     The database system will make heavy use of stored procedures and
323     triggers and thus lock out some less feature-full database.
324   </item>
325   <item>
326     Although we're not married to a database system initially this will be
327     PostgreSQL only so that we can build for results. The code however
328     shouldn't be build to deliberately lock outer systems.
329     Other database that might be interesting to add: DB2, Oracle
330     (if the rainfall of security advisories seems to be over) and Informix.
331   </item>
332   <item>
333     The interface for the user will be a web-interface written in PHP
334     with PostgreSQL-database access. Despite the fact that initially
335     this will be the preferred way to communicate with our system,
336     other interfaces are welcome and should be supported.
337   </item>
338   <item>
339     The technologies used for the daemons on the central site and remote
340     site are open for discussion. A decision is made when it is clear what
341     exactly will be needed to code.
342   </item>
343   <item>
344     The original logfiles on systems will not be harmed in any way,
345     but will be saved the way they presented to gnucomo.
346   </item>
347   <item>
348     In the database processed data as well as raw data will be stored.
349   </item>
350   <item>
351     Our main aim is to ease the life of the administrator when dealing with
352     the symptoms of a machine so that he doesn't miss important notifications.
353     The project will be made around detection. We won't focus on making a
354     maintenance applications but solely on monitoring, because other applications
355     like webmin or linuxconf do already deliver such functionality.
356     We are complementary to those applications. This doesn't mean that
357     the system cannot send SMS'es, e-mails or make alarms sound.
358   </item>
359   <item>
360     Any output of the logbook will be stored and sent within a certain
361     interval which can be set. By doing that the mechanism will not flood
362     the total mechanism and overload machines.
363   </item>
364   <item>
365     When applications for gnucomo we will try and do the non-server part
366     as platform independent as possible. This in order to prevent writing
367     a same application multiple times. For instance one for Unices, one
368     for Macintosh and one for Microsoft.
369   </item>
370   <item>
371     To ensure the quality of software and to prevent any unwanted functionality
372     rolling into the project all code will be reviewed by one of the lead members
373     before it is accepted. Since this project is aimed at throughput speed no
374     formal procedures will be enforced, but we promise not to let software in
375     that hasn't been checked.
376   </item>
377 </itemize>
378
379 </chapter>
380
381 <chapter>
382   <heading>Overall system Architecture</heading>
383
384 <para>
385 The overall systems aims to make maintenance data better accessible and by
386 doing that lowering the barrier to be on alert for intrusions,
387 system failure and other misery that can happen to computer systems.
388 Also more systems can be monitored and even focus can be placed on desktop computers,
389 something that nowadays rarely happens. Since the solution is only aimed at
390 monitoring (with some responses possible) other people can watch their system(s)
391 without being Administrator<footnote>This can be interesting for people using
392 this service and not doing their own maintenance (smaller companies).
393 If technical action needs to be taken a warning can be send to an administrator.
394 This saves costs and time.</footnote>.
395 </para>
396 <para>
397 The main system will know to sides:
398 </para>
399
400 <itemize>
401   <item> Central Application - server </item>
402   <item> Monitored System - client </item>
403 </itemize>
404
405 <para>
406 The project has been setup as a two sided system in order to be able to
407 guard many computers at the same time.
408 However it may be obvious that both sides of the application can very
409 well be installed on a single system.
410 </para>
411 <para>
412 To monitor a system, Gnucomo uses two kinds of input: <emph>event</emph> and
413 <emph>parameters</emph>. Events occur on a system while it is running and reflect
414 the transient behaviour of the system.
415 Parameters reflect the current state of the system.
416 The most obvious way to gather events from a monitored system is to read
417 the system log files.
418 Examples of events are IP packets that are rejected by the firewall or clients
419 that access the http daemon.
420 Parameters are obtained for example by reading configuration files or kernel
421 data structures.
422 Examples of parameters are the size and free space of a filesystem or
423 the users that are listed in the password file.
424 Both kinds of input are obtained actively or passively, i.e. by installing probe
425 agents in the system which regularly aquire the system's parameters or passively
426 by sending the output of programs to the Gnucomo server.
427 </para>
428 <para>
429 When signals<footnote>A signal can be the outcome of process that finished,
430 logbook entries, warnings from intrusion detection systems,
431 etc. </footnote> arrive they will be stored in a file.
432 When this file is delivered to a certain directory a daemon will detect
433 this and start the transfer of the file. The file will be transferred
434 to the central application or the client. This transfer will be triggered
435 immediately after a process has finished or with a certain time-interval
436 when it concerns a logbook. All output will be placed in a directory where
437 the daemon detects it and ensures the transport. For transport currently
438 only two mechanisms will be supported:
439 </para>
440 <itemize>
441   <item>
442     Encrypted file copy relying on the SSH protocol.
443     On Unix-based systems this will scp (secure copy).
444   </item>
445   <item>
446     E-Mail. The e-mail is encrypted and signed using gpg and then sent to the server.
447     Since the file format will identify the type-of-output the Subject-field of
448     the e-mail is not really needed.
449   </item>
450 </itemize>
451
452 <section>
453   <heading>Central Application: signal handler.</heading>
454
455 <para>
456 <para>
457
458   <picture src="architecture.png" eps="architecture"/>
459 </para>
460 <para>
461        Illustration 1 Basic overview of the processes on the server.
462 </para>
463
464 On one machine signals from the network will come in.
465 These signals can be logfiles, result files from applications,
466 remarks entered by the administrator or whatever.
467 Data delivery takes place into a certain directory.
468 A daemon detects that data has come in and will enter it into the database.
469 Once in the database stored procedures and triggers will recognize certain
470 behavior and generate alerts. The user responsible for the server will be
471 confronted with the alerts and can mark them, add comments to it or ignore them.
472 Also it will be possible to do intelligent analysis on not so logical relations
473 per computer or across computers<footnote>A good example could be a portscan
474 on a system that takes place during a week. Normal a simple portscan takes
475 place in a couple of minutes and will thus be easy to detect.
476 By taking a longer period such a scan is harder to detect. </footnote>. Such
477 scripts make detection possible, that is too time consuming to do during
478 processing of the data.
479 </para>
480 </section>
481
482 <section>
483   <heading>Data processing.</heading>
484
485 <para>The data processing has four tasks:</para>
486 <itemize>
487   <item>
488     Extracting data from e-mail and store it in the input-buffer.
489     This can be done by a daemon that checks the e-mail<footnote>It would be logical
490     to place an e-mail server like sendmail or postfix on the server.
491     In many cases the monitored computer will be featuring a SMTP daemon.
492     If a system is comprimised no evidence that comes through will be really
493     trustworthy. By sending it to another machine all evidence that is
494     available will have left the system the moment a hack takes place.</footnote>
495     with a certain interval extracts the e-mails and leave the content
496     in a file in the input buffer. This daemon has only rights to write
497     to the directory it has to write to. <emph>We may as well have the
498     email captured directly by a program with a
499     "gnucomo: |/usr/local/bin/gnucomo-input" - like alias.</emph>
500   </item>
501   <item>
502     Detect files in the input buffer decrypt the content and verify the signature.
503     Another daemon will see the log-files and starts checking if the origin is
504     correct (by verifying the signature) and decrypting the content.
505     The legible files will be processed by entering the data into the database.
506   </item>
507   <item>
508     The database will accept the data and perform a certain number of
509     checks as the data comes in. During the processing of the data
510     abnormalities will be detected and entered into a notification table.
511     The database system will also carry out more complex tasks on given
512     moments in time and enter them as well in the notification table.
513   </item>
514   <item>
515     The database system must be able to undertake action when high
516     alerts are being entered into the database.
517     This can be a couple of things to begin with:
518     send an e-mail or SMS. In a later stage other technologies may be added as well.
519     In this scheme we also make a possibility to escalate problems when no
520     action is taken in a certain amount of time.
521   </item>
522 </itemize>
523
524 <subsection>
525 <heading>System Parameters</heading>
526
527 <para>
528 Gnucomo maintains the operational parameters of a monitored system for a
529 number of reasons.
530 The most important reason is to create notifications when somthing about a
531 parameter changes while the parameter is not supposed to change.
532 Such a change may be intended by the system administrator, e.g. when a
533 package is upgraded, or there may be something wrong.
534 In any case, you will want to know about a change in your system when it happens.
535 Furthermore, a change history of a parameter's values will come in
536 handy when you want to look back in time and figure out
537 what happened in the past.
538 Another usefull application of parameters concerns the maintenance of a 
539 large number of similar systems.
540 When the parameters of each system are reported regularly to Gnucomo,
541 deviations from the 'standard' system configuration can be easily spotted.
542 </para>
543 <para>
544 Some properties of parameters are supposed to change regularly.
545 A changed value of such a property will of course not lead to any
546 notification.
547 On the other hand, the change history of these parameters may provide
548 interesting information about the monitored system.
549 This leads to the distiction between static and dynamic properties of parameters.
550 The difference between dynamic and static properties manifests itself mainly
551 in the change history of the parameter's property.
552 Dynamic properties typically have a change record once a day or even a couple
553 of times a day.
554 Change records for static properties are usually months apart.
555 If all properties of a parameter are dynamic, the parameter as a whole is regarded
556 as a dynamic parameter.
557 One of the properties of a dynamic parameter is that it does not need to exist
558 all the time, i.e. it does not have to be listed in every report.
559 </para>
560 <para>
561 The state of parameters is scanned or probed regularly on a client system
562 and reported to the Gnucomo server.
563 These reports can be created in a variety of ways.
564 For example, filesystems are reported with 'df', installled packages with 'rpm -qa',
565 users by reading /etc/passwd, etc.
566 Many other probing methods may be implemented.
567 Each report from a probe holds the current value of several parameters.
568 Gnucomo will check each property of these parameters against the stored knwon value.
569 If the property's value changed, the actual value in the database is updated
570 and a record is added to the change history of the parameter.
571 When a parameter is listed in the report but that parameter is not in the
572 database or the other way around: a parameter is in the database and is not
573 in the report, this constitutes a notable change in the system.
574 </para>
575 <para>
576 Whenever the state of the system's parameters changes, Gnucomo may create
577 a <emph>notification</emph>.
578 Notifications are created when one of the following changes happens:
579 <enumerate>
580 <item>
581   A new parameter is detected. The new parameter is listed in the report
582   but is not in the database.
583 </item>
584 <item>
585   The value of a static property of a parameter has changed.
586 </item>
587 <item>
588   A value of a dynamic property of a parameter goes outside its designated range.
589 </item>
590 <item>
591   A non-dynamic parameter has disappeared. The parameter is in the database but
592   was not listed in the report.
593 </item>
594 </enumerate>
595 Note that when a dynamic parameter seems to have disappeared, no notification
596 will be generated.
597 When a dynamic parameter is in the database but is not listed in the report,
598 all properties of that parameter will be set to the default minimum value
599 of the parameter's class.
600 This change in the parameter's properties, however, may lead to a notification.
601 As an example of a dynamic parameter, consider a process running on a system.
602 The properties of a process parameter are the number of processes running and the
603 amount of memory they consume, all of which are dynamic.
604 The default minimum number of processes for the process parameter class is 0 (zero).
605 When a process parameter is missing from a parameter report, no processes with that
606 name are running.
607 This may be a problem for daemons but not for most user processes.
608 When a user process, for example <emph>vim</emph>, is missing from the processes report,
609 its number of processes property is set to 0.
610 For the <emph>vim</emph> process parameter this is well within range.
611 On the other hand, when a daemon like <emph>httpd</emph> is missing from the report,
612 its number of processes property will also be set to the class's minimum (0), but
613 the minimum value for that parameter will probably be something like 4.
614 Now, the number of processes property goes out of range, which will generate
615 a notification.
616 </para>
617 </subsection>
618 </section>
619
620 <section>
621   <heading>Web interface</heading>
622
623 <para>
624 The web interface will used to interact with the user.
625 The interface should be intuitive and easy to understand.
626 More important warnings should directly draw attention.
627 The user must be able to perform settings so that warnings
628 can be rated differently than the original settings.
629 </para>
630 <para>
631 The interface will do the following things:
632 </para>
633 <itemize>
634   <item>
635     Show a list of warnings that are currently open.
636   </item>
637   <item>
638     It must be possible to sort the list on all the fields shown.
639   </item>
640   <item>
641     Deliver detailed information (logbook entries) upon request that have led to the warning.
642   </item>
643   <item>
644     Undertake certain actions like sending
645     <reference href="mailto:abuse@internet-provider.net">abuse@internet-provider.net</reference>
646     e-mails with information.
647   </item>
648   <item>
649     Monitor actions on outstanding issues.
650   </item>
651 </itemize>
652 <para/>
653 </section>
654
655 <section>
656   <heading>Priority mechanism.</heading>
657 <para>
658 Each notification has a certain priority that requires a different handling
659 of the issue. How each priority will be dealt with is something that can
660 be set per server. The priority mechanism is a simple system of five
661 categories (can be more or less).
662 </para>
663 </section>
664
665 <section>
666   <heading>The dataflow diagram.</heading>
667 <para>The main dataflow will be as follows.</para>
668 <para>
669   <picture src="dataflow.png" eps="dataflow" scale="0.7"/>
670 </para>
671 <para/>
672 </section>
673
674 <section>
675   <heading>Sending messages to the central gnucomo system.</heading>
676
677 <para>
678 One of the main tasks is getting all the messages to the database.
679 Ultimately gnucomo will support multiple ways of receiving the data.
680 Basically anything goes, but two mechanisms will be supported in the project
681 to begin with:
682 </para>
683 <enumerate>
684     <item>
685       E-mail. Messages and elements from logfiles will be sent through e-mail.
686     </item>
687     <item>
688       File copy. Using technologies like scp or ftp (not preferred due to
689       the insecure nature) can place files directly in the receiving directory.
690     </item>
691 </enumerate>
692
693 <subsection>
694   <heading>Ensuring data integrity.</heading>
695 <para>&lt;TO BE DESCRIBED&gt;</para>
696 </subsection>
697
698 <subsection>
699   <heading>Directories and filenames on the server.</heading>
700
701 <para>
702 Files will be dealt with as if gnucomo were a user (actually there will
703 be a user gnucomo). The files will be placed in the <code>/home/gnucomo/</code> directory.
704 Only <code>/home/gnucomo/incoming/dropbox/</code> can be used to save data in
705 from external systems. All other directories are only available for the user gnucomo.
706 The filename will represent the data that is received. The details are seperated with
707 underscores. When data is sent by e-mail the filename will be written in the first
708 line of the e-mail. A typical filename looks like this:
709 </para>
710
711 <para>
712 <strong>3_messages_20020807235208_1.asc</strong>
713 </para>
714
715 <para>
716 the logic behind this is following:
717 </para>
718
719 <para>
720 <emph>urgency_typeofmessage_timestamp_objectid.typeoffile.</emph>
721 </para>
722
723 <table cpos='lp{10cm}'>
724   <thead>
725     <col>
726       <para>Part of filename</para>
727     </col>
728     <col>
729       <para>Explanation</para>
730     </col>
731   </thead>
732   <row>
733     <col>
734       <para>Urgency</para>
735     </col>
736     <col>
737       <para>This indicates the urgency of the file. The lower the number the higher
738             it will rank when an overview is given. Standard files are ranked value 3.
739             The ranking works as follows:</para>
740       <para>* 1 <strong>Urgent flash message.</strong> Something urgent needs to
741             be reported. This is only used for emergencies like serious alarms.</para>
742       <para>* 2 <strong>Rapid delivery.</strong> An important message has to get
743             through that is more important than normal delivery, but is not top
744             priority like an emergency.</para>
745       <para>* 3 <strong>Normal.</strong> This is used in most
746             case for normal messages.</para>
747       <para>* 4 <strong>Low priority.</strong> This is data would be useful
748             to place into the system as nice to have.</para>
749     </col>
750   </row>
751   <row>
752     <col>
753       <para>TypeOfMessage</para>
754     </col>
755     <col>
756       <para>This is an indicator what type of data is delivered to gnucomo.
757             There are several categories:</para>
758       <para>* <strong>cron.</strong> This data comes from the /var/log/cron-log (unix).</para>
759       <para>* <strong>httpaccess.</strong> This data comes from the normal http-log (Apache).</para>
760       <para>* <strong>httperror.</strong> This data comes from the http_error-log (Apache).</para>
761       <para>* <strong>maillog.</strong> This data comes from the /var/log/maillog (unix).</para>
762       <para>* <strong>messages.</strong> The data delivered here comes from
763             the /var/log/messages file (unix)</para>
764       <para>* <strong>text.</strong> This file contains a message in plaintext
765             generated by a gnucomo-client and can be anything.
766             It will be dealt with as plaintext.</para>
767     </col>
768   </row>
769   <row>
770     <col>
771       <para>Timestamp</para>
772     </col>
773     <col>
774       <para>The timestamp is made in war-log (YYYYMMDDHHMMSS) format.
775             The timestamp is generated on the client in GMT (to discover
776             discrepancies in timing).</para>
777     </col>
778   </row>
779   <row>
780     <col>
781       <para>Objectid</para>
782     </col>
783     <col>
784       <para>The objectid is the id that is used within the central
785             gnucomo system to recognize the client.
786             Based on this entry the database can link the data to the correct object.
787             Also gpg can obtain the correct e-mail address (by running a query
788             in the database) for verification of the signature of the crypted message.</para>
789     </col>
790   </row>
791   <row>
792     <col>
793       <para>TypeOfFile</para>
794     </col>
795     <col>
796       <para>Indicates the file type:</para>
797       <para>* <strong>asc.</strong> Plaintext ASCII</para>
798       <para>* <strong>gpg.</strong> gpg-crypted data.</para>
799       <para>* <strong>und.</strong> Undertermined data. When files
800             come in by e-mail it is not 100% sure if they are crypted
801             or not. These data has first to be analyzed before it is
802             moved to the correct queue. </para>
803     </col>
804   </row>
805 </table>
806
807 <subsubsection>
808   <heading>Directory for incoming data.</heading>
809
810 <para>
811 For incoming messages there will be separate directories
812 (<code>/home/gnucomo/incoming/</code>)for:
813 </para>
814 <enumerate>
815     <item>
816       Dropbox. This directory is ready to receive data from all sorts of systems.
817       This directory is world writeable (<strong><emph>but not deleteable!</emph></strong>):
818       <code>/home/gnucomo/incoming/dropbox/</code>
819     </item>
820     <item>
821       Encrypted messages. In this directory messages will be placed that are still
822       gpg-crypted. In this directory the files await decryption and verification of
823       the signature. This directory is: <code>/home/gnucomo/incoming/crypted/</code>
824     </item>
825     <item>
826       Decrypted with errors. During the decryption exercise anything can go wrong.
827       Decrypting can fail or the signature may show errors. If this happens the
828       original message is moved to a different directory:
829       <code>/home/gnucomo/incoming/cryptfail/</code>
830     </item>
831     <item>
832       Inbox. After successful decryption the decrypted message is moved to the inbox.
833       Data that is not encrypted can be moved here from the dropbox after certain
834       verifications. The directory is: <code>/home/gnucomo/incoming/inbox/</code>
835     </item>
836     <item>
837       Processed. After processing the data the file is stored in the directory
838       processed for further reference for a certain amount of time.
839       The directory is: <code>/home/gnucomo/incoming/processed/</code>
840     </item>
841     <item>
842       Archive. After a certain period the files will be archived.
843       Since not every system will archive everything this directory may
844       also be a symbolic link to <code>/dev/null</code>.
845       The used directory is: <code>/home/gnucomo/archive/</code>
846     </item>
847 </enumerate>
848 </subsubsection>
849
850 <subsubsection>
851    <heading>Directory for outgoing data.</heading>
852
853 <para>
854 For outgoing messages the directory <code>/home/gnucomo/outgoing</code> will
855 be used. This directory knows a couple of sub directories:
856 </para>
857
858 <enumerate>
859     <item>
860       Dropbox. This directory is used by the central gnucomo system to
861       place outgoing messages in.
862       The used directory is: <code>/home/gnucomo/outgoing/dropbox/</code>
863     </item>
864     <item>
865       Outbox. After processing the message (including signing and encrypting
866       when applicable) the messages are placed in the outbox:
867       <code>/home/gnucomo/outgoing/outbox/</code>
868     </item>
869     <item>
870       Processed. After processing the data the file is stored in the
871       directory processed for further reference for a certain amount
872       of time. After sending a message a confirmation will be made that
873       is saved as an incoming message.
874       The directory is: <code>/home/gnucomo/outgoing/processed/</code>
875     </item>
876     <item>
877       Archive. After a certain period the files will be archived.
878       Since not every system will archive everything this directory
879       may also be a symbolic link to <code>/dev/null</code>.
880       The used directory is: <code>/home/gnucomo/archive/</code>
881     </item>
882 </enumerate>
883
884 </subsubsection>
885
886 <subsubsection>
887    <heading>Overview. </heading>
888
889 <para>The total directory-structure looks like this:</para>
890
891 <verbatim>
892     /home/gnucomo/
893     /home/gnucomo/archive
894     /home/gnucomo/incoming
895     /home/gnucomo/incoming/crypted
896     /home/gnucomo/incoming/cryptfail
897     /home/gnucomo/incoming/dropbox
898     /home/gnucomo/incoming/inbox
899     /home/gnucomo/incoming/processed
900     /home/gnucomo/outgoing
901     /home/gnucomo/outgoing/dropbox
902     /home/gnucomo/outgoing/outbox
903     /home/gnucomo/outgoing/processed
904 </verbatim>
905
906 </subsubsection>
907 </subsection>
908
909 <subsection>
910   <heading>Directories on the client-side.</heading>
911
912 <para>
913 On the client-side the files that need to be transmitted will be placed in a
914 directory system as well. In the future this system may not be in use at all
915 devices (routers, certain MS Windows-machine, IP Telephones, etc.). For those
916 systems a different mechanism will become be described here.
917 Initially we focus on Linux systems that will enter data into the database.
918 </para>
919 <para>
920 The filename convention will be totally identical to the filename
921 convention on the server, since this the same mechanism.
922 </para>
923 <para>
924 To facilitate gnucomo client and server on one and the same machine
925 the gnucomo-client should have a different default user.
926 For this purpose the user <strong>gcm_client</strong> will be created.
927 </para>
928
929 <subsubsection>
930    <heading>Directory for incoming data.</heading>
931 <para>
932 For incoming messages there will be separate directories
933 (<code>/home/gnucomo/incoming/</code>)for:
934 </para>
935 <enumerate>
936     <item>
937       Dropbox. This directory is ready to receive data from all sorts of systems.
938       This directory is world writeable (<emph><strong>but not deleteable!</strong></emph>):
939       <code>/home/gcm_client/incoming/dropbox/</code>
940     </item>
941     <item>
942       Encrypted messages. In this directory messages will be placed that
943       are still gpg-crypted. In this directory the files await decryption
944       and verification of the signature.
945       This directory is: <code>/home/gcm_client/incoming/crypted/</code>
946     </item>
947     <item>
948       Decrypted with errors. During the decryption exercise anything can go wrong.
949       Decrypting can fail or the signature may show errors.
950       If this happens the original message is moved to a different directory:
951       <code>/home/gcm_client/incoming/cryptfail/</code>
952     </item>
953     <item>
954       Inbox. After successful decryption the decrypted message is moved
955       to the inbox. Data that is not encrypted can be moved here from
956       the dropbox after certain verifications. The directory is:
957       <code>/home/gcm_client/incoming/inbox/</code>
958     </item>
959     <item>
960       Processed. After processing the data the file is stored
961       in the directory processed for further reference for a
962       certain amount of time. The directory is:
963       <code>/home/gcm_client/incoming/processed/</code>
964     </item>
965 </enumerate>
966
967 </subsubsection>
968
969 <subsubsection>
970    <heading>Directory for outgoing data.</heading>
971
972 <para>
973 For outgoing messages the directory <code>/home/gcm_client/outgoing</code> will be used.
974 This directory knows a couple of sub directories:
975 </para>
976 <enumerate>
977     <item>
978       Dropbox. This directory is used by the central gnucomo system to place
979       outgoing messages in.
980       The used directory is: <code>/home/gcm_client/outgoing/dropbox/</code>
981     </item>
982     <item>
983       Outbox. After processing the message (including signing and
984       encrypting when applicable) the messages are placed in the outbox:
985       <code>/home/gcm_client/outgoing/outbox/</code>
986     </item>
987     <item>
988       Processed. After processing the data the file is stored in the
989       directory processed for further reference for a certain amount
990       of time. After sending a message a confirmation will be made
991       that is saved as an incoming message.
992       The directory is: <code>/home/gcm_client/outgoing/processed/</code>
993     </item>
994 </enumerate>
995 </subsubsection>
996
997 <subsubsection>
998   <heading>Overview. </heading>
999     <para>The total directory-structure looks like this:</para>
1000
1001 <verbatim>
1002     /home/gcm_client/
1003     /home/gcm_client/archive
1004     /home/gcm_client /incoming
1005     /home/gcm_client/incoming/crypted
1006     /home/gcm_client/incoming/cryptfail
1007     /home/gcm_client/incoming/dropbox
1008     /home/gcm_client/incoming/inbox
1009     /home/gcm_client/incoming/processed
1010     /home/gcm_client/outgoing
1011     /home/gcm_client/outgoing/dropbox
1012     /home/gcm_client/outgoing/outbox
1013     /home/gcm_client/outgoing/processed
1014 </verbatim>
1015 </subsubsection>
1016 </subsection>
1017 </section>
1018
1019 <section>
1020       <heading>Getting data into the database.</heading>
1021
1022 <para>
1023 The files in the /home/gnucomo/incoming/inbox/ should be stored in the database.
1024 For this purpose there is a table <emph>unprocessed_log</emph>.
1025 The data of the filename as well as the content of the file need
1026 to be placed in one record.
1027 </para>
1028 <para>
1029 There are some fields that have to be addressed immediately:
1030 </para>
1031 <enumerate>
1032     <item>
1033       Servicecode: The servicecode will be obtained out of the filename the
1034       is the type_of_message-field in the filename.
1035     </item>
1036     <item>
1037       Objectid: This data is given in the filename it can be found
1038       in the <emph>objectid</emph>-part of the filename.
1039     </item>
1040     <item>
1041       Logdata: The data is saved as follows: filename (unaltered)
1042       &lt;CR&gt;textual data of the file.
1043     </item>
1044 </enumerate>
1045 <para>
1046 The daemon application that delivers the data is called <strong>gcm-input</strong>.
1047 It performs the following steps with no extra functionality:
1048 </para>
1049
1050 <enumerate>
1051     <item>
1052       <para>Detect if a file is available.</para>
1053     </item>
1054     <item>
1055       <para>Write the data in the database.</para>
1056     </item>
1057 </enumerate>
1058
1059 <para>
1060 To write the data in the database a database user gcm_input exists.
1061 This user has only the right to enter data into the database.
1062 There are no deletion, update or select-permissions.
1063 </para>
1064
1065 </section>
1066 </chapter>
1067
1068 <chapter>
1069   <heading><label name='database'/>The database.</heading>
1070
1071 <para>
1072 The database is the heart of the system.
1073 It will contain all event-data of multiple computers.
1074 The intelligence that can be performed on the database will be placed there.
1075 To do this as integratedly as possible stored procedures and triggers will be used.
1076 To begin with we have selected checks to be performed that will be
1077 expanded throughout time.
1078 </para>
1079 <para>
1080 Since the gnucomo database and files contain sensitive data
1081 security measures have to be in place. Several database users
1082 will exist that have limited rights to perform a certain task
1083 ensuring some protection against unauthorized access.
1084 However these mechanisms on it's own will work fine, bad maintenance may still
1085 screw-up good security. Good database maintenance is needed.
1086 For the gnucomo the protection of the valid authentic nature of
1087 the data in the database has our highest priority.
1088 </para>
1089 <para>
1090 A <emph>table-name</emph> in this chapter is written in cursive writing.
1091 </para>
1092
1093 <section>
1094   <heading>Database conventions.</heading>
1095
1096 <para>
1097 The database will be built according the following conventions:
1098 </para>
1099 <itemize>
1100   <item>
1101     All names for tables, indexes and fields will be written in lower
1102     case and will be singular. Spaces in names are not allowed.
1103   </item>
1104   <item>
1105     If a table contains field referring to other tables the mother-tables are
1106     mentioned in alphabetical order with an underscore between the table-names.
1107     So <emph>object</emph> and <emph>user</emph>
1108     will make a third table <emph>object_user</emph>
1109   </item>
1110   <item>
1111     A data access user (being the interface) is not allowed to write to
1112     the log-entries and the warnings. To change the state of a warning
1113     a stored procedure will do so by having a different entry in a table.
1114     This should make it possible to discover who did what at which moment in time.
1115   </item>
1116   <item>
1117     The name of two related fields that make the relationship between two
1118     tables will be the same to avoid confusion.
1119   </item>
1120 </itemize>
1121 </section>
1122
1123 <section>
1124   <heading>Database design.</heading>
1125
1126 <para>
1127 In the design we anticipate to deliver an as best as possible database performance.
1128 That means that data that needs to be entered occasionally can be heavily indexed
1129 to increase performance. However data that is mainly stored will only be indexed
1130 marginally to have the best possible performance on data entry. If during one of
1131 the checks on data-entry a notification is made, the information related to that
1132 notification will be indexed very well to increase retrieval performance.
1133 What we will try to avoid is that the user interface will cause full table
1134 scan and affect the performance of the overall system dramatically.
1135 One of the techniques to increase performance on display is to work with views.
1136 So where it is feasible we will use them.
1137 </para>
1138
1139 <para>
1140 The following model pictures the database as described in the remainder
1141 of this chapter.
1142 </para>
1143 <para>
1144       <picture src="erd.png" eps="erd" scale="0.7"/>
1145 </para>
1146
1147 <para>
1148 In general the database must also be maintained well.
1149 So daily maintenance scripts should keep the performance good<footnote>PostgreSQL seems
1150 to have very good features to do proper maintenance and they have to be exploited to
1151 the full extend.</footnote>.
1152 </para>
1153
1154 </section>
1155 <section>
1156   <heading>Actual design.</heading>
1157
1158 <para>
1159 In this part of the chapter the tables will be explained and then described
1160 with all important elements. Per table a sub-chapter will be created.
1161 Each table will have a table design, indexes, relationships and the required data
1162 (for those tables where the data itself is relevant in the design or sample data
1163 (for those cases where no set data is needed). For the relationships beside a
1164 description the subset of the total schema has been incorporated in
1165 the document so that it is more clear what exactly is meant.
1166 Due to the complex nature of the design those drawings sometimes will seem funny.
1167 </para>
1168 <para>
1169 For the fieldtypes the types of PostgreSQL will be used.
1170 These values can be found in Chapter 3 of the PostgreSQL User Manual
1171 (<reference href="http://www.postgresql.org/">http://www.postgresql.org</reference>).
1172 </para>
1173 <para>
1174 For indexes primary keys are always <emph>unique</emph> and called
1175 primary key in the name. Since unique indexes within PostgreSQL only
1176 work on B-Tree indexes (which is default) we will use B-Tree for all indexes.
1177 In cases where an exception is made the used type of index will be indicated
1178 in the characteristics. A footnote will explain why a different type of
1179 index has been selected.
1180 </para>
1181
1182 <subsection>
1183 <heading>action</heading>
1184
1185 <para>
1186 This table stores the actions that are recognized by the system.
1187 Whenever a situation in the database has been raised (through the table notification)
1188 one expects steps to be taken to resolve these issues.
1189 All these steps are stored in this table.
1190 Each step beginning with detection until a case is closed can be traced back through this table.
1191 This will support the <strong>accountability</strong> (who is responsible for which action)
1192 and <strong>non-repudiation</strong> (being able to trace what exactly happened to each notification).
1193 In the table action all recognized actions that can be taken are stored.
1194 Several of the taken actions will lead to change in <emph>statuscode</emph>.
1195 When this is the case either the server-side of the interfaces or the gcm_daemon will perform this task. 
1196 This doesn't apply to all actions though.<footnote>A status NEW
1197 of a notification that cannot be dealt with automatically will
1198 <strong>not</strong> change before a user looked at it.</footnote>.
1199 Actions take place through background processes and the interface.
1200 Each action known by the system will be delivered by the software.
1201 This table mainly is used for retrieval so indexing will be done as much as possible.
1202 </para>
1203
1204 <subsubsection>
1205   <heading>The fields.</heading>
1206
1207 <para>
1208 The table below describes the fields:
1209 </para>
1210 <para/>
1211 <para>
1212 <table cpos='lllp{6cm}'>
1213   <thead>
1214     <col> Fieldname </col> <col> Fieldtype </col> <col> Size </col>
1215     <col>
1216       Remarks
1217     </col>
1218   </thead>
1219   <row>
1220     <col> actionid </col> <col> Bigserial </col> <col> 8 </col>
1221     <col>
1222       Autonumber bigint (eight bit). Unique identifyer to refer to when this action is taken.
1223     </col>
1224   </row>
1225   <row>
1226     <col> actionname </col> <col> Text </col> <col> <para/> </col>
1227     <col>
1228       Short descriptive name for the type of action.
1229     </col>
1230   </row>
1231   <row>
1232     <col> statuscode </col> <col> Varchar </col> <col> 3 </col>
1233     <col>
1234       New status that will be given to a notification when this action takes place.
1235       If the action occurs the status in the notification can change because of this.
1236       The statuscode will indicate what the new status has to be.
1237       If this field is left empty no change to the status will occur.
1238     </col>
1239   </row>
1240   <row>
1241     <col> description </col> <col> Text </col> <col> <para/> </col>
1242     <col>
1243       A longer description (without limit) on the action.
1244     </col>
1245   </row>
1246 </table>
1247 </para>
1248
1249 </subsubsection>
1250
1251 <subsubsection>
1252   <heading>The indexes.</heading>
1253
1254 <para>
1255 Indices for this table are:
1256 </para>
1257     <table cpos='lll'>
1258       <thead>
1259         <col> Indexname </col> <col> Field </col> <col> Characteristics </col>
1260       </thead>
1261       <row>
1262         <col> act_pk </col> <col> actionID </col> <col> Primary key </col>
1263       </row>
1264       <row>
1265         <col> act_actionname </col> <col> actionname </col> <col> Unique </col>
1266       </row>
1267       <row>
1268         <col> act_statuscode </col> <col> statuscode </col> <col> <para/> </col>
1269       </row>
1270     </table>
1271     <para/>
1272
1273 </subsubsection>
1274 <subsubsection>
1275   <heading>The relationships.</heading>
1276
1277 <para>
1278 Relationships with other tables:
1279 </para>
1280     <table cpos='llp{7cm}'>
1281       <thead>
1282         <col> Fieldname </col> <col> Remote Table </col> <col> Remarks </col>
1283       </thead>
1284       <row>
1285         <col> actionid </col> <col> action_notification_user </col>
1286         <col>
1287           Each action that takes placed will be stored. The Actionid will bring
1288           classification to the individual records (that reflect what it means if the action-occurred).
1289           This relationship has to be enforced.
1290         </col>
1291       </row>
1292     </table>
1293     <para>In the model this looks like this:</para>
1294     <para>
1295       <picture src="erd-action.png" eps="erd-action"/>
1296     </para>
1297 </subsubsection>
1298
1299 <subsubsection>
1300   <heading>Default data in table.</heading>
1301
1302 <para>
1303 The data in this table is standard for the system and part of the design.
1304 The user cannot change this or add value to it.
1305 </para>
1306
1307 <table cpos='p{1cm}p{2cm}p{1.5cm}p{6cm}'>
1308   <thead>
1309     <col>Actionid</col><col>Actionname</col><col>Statuscode</col>
1310     <col>
1311       Description
1312     </col>
1313   </thead>
1314   <row>
1315     <col>1</col><col>Entry in the system</col><col>NEW</col>
1316     <col>
1317       This indicates that a notification is entered into the system. The status is a <strong>NEW</strong>.
1318     </col>
1319   </row>
1320   <row>
1321     <col>2</col><col>Displayed to user</col><col>OPN</col>
1322     <col>
1323       The notification has been displayed to the user.
1324       It is not guaranteed that the user has read the notification,
1325       but he/she should be aware of it.
1326       The status will now be changed to <strong>OPEN</strong> if the current
1327       status is <strong>NEW</strong>.
1328     </col>
1329   </row>
1330   <row>
1331     <col>3</col><col>Remarks added</col><col>PEN</col>
1332     <col>
1333       Remarks have been added to the notification. The status has now been
1334       changed to <strong>PENDING</strong>.
1335     </col>
1336   </row>
1337   <row>
1338     <col>4</col><col>Priority changed manually</col><col>PEN</col>
1339     <col>
1340       The priority of the notification has been changed by the user.
1341       The new status is now <strong>PENDING</strong>.
1342     </col>
1343   </row>
1344   <row>
1345     <col>5</col><col>Priority changed automatically</col><col>PEN</col>
1346     <col>
1347       The priority of the notification has been changed by the system.
1348       If the status is not <strong>OPEN</strong> or <strong>NEW</strong> the new
1349       status is become <strong>PENDING</strong>.
1350     </col>
1351   </row>
1352   <row>
1353     <col>6</col><col>Action taken</col><col>PEN</col>
1354     <col>
1355       A action has been taken. The status is now <strong>PENDING</strong>.
1356     </col>
1357   </row>
1358   <row>
1359     <col>7</col><col>Assignment to user</col><col>PEN</col>
1360     <col>
1361       A notification has been explicitly assigned to another user.
1362       The status is now <strong>PENDING</strong>.
1363     </col>
1364   </row>
1365   <row>
1366     <col>8</col><col>More information or research needed.</col><col>INV</col>
1367     <col>
1368       The notification is relevant and will be handled, however more information
1369       or research will be needed. The status is <strong>UNDER INVESTIGATION</strong>.
1370     </col>
1371   </row>
1372   <row>
1373     <col>9</col><col>Make output reference.</col><col>REF</col>
1374     <col>
1375       Automated output from an object has been sent to gnucomo.
1376       The input has been identified as a valid reference for future.
1377       Status is now <strong>REFERENCE</strong><footnote>A reference is used to
1378       find differences in output. This feature must reduce the number of wrongful alerts.
1379       Only if a change has taken place a notification is generated.
1380       First time reports will always generate a notification.
1381       By signing this off the system will be silent again.</footnote>.
1382     </col>
1383   </row>
1384   <row>
1385     <col>10</col><col>Job output no longer reference.</col><col>CLS</col>
1386     <col>
1387       By making a newer job output reference this output has been obsoleted.
1388       Since once it was a reference the notification can be closed.
1389       The new status for the notification is now <strong>CLOSED</strong>.
1390     </col>
1391   </row>
1392   <row>
1393     <col>11</col><col>Action taken please verify.</col><col>VRF</col>
1394     <col>
1395       An action has been taken and things should have been resolved.
1396       Before the notification can be closed a verification has to be done.
1397       New status is now <strong>VERIFY</strong>.
1398     </col>
1399   </row>
1400   <row>
1401     <col>12</col><col>Action not accepted.</col><col>PEN</col>
1402     <col>
1403       A check has been done and the results were not good.
1404       New verification is needed.
1405       New status is now <strong>PENDING</strong>.
1406     </col>
1407   </row>
1408   <row>
1409     <col>13</col><col>Action verified</col><col>CLS</col>
1410     <col>
1411       The verification for the action has been done and the action is approved.
1412       The new status is now <strong>CLOSED</strong>.
1413     </col>
1414   </row>
1415   <row>
1416     <col>14</col><col>E-mail sent</col>
1417       <col>OPN<footnote>Only if the status is <strong>NEW</strong>.</footnote></col>
1418     <col>
1419       An e-mail has been sent.
1420     </col>
1421   </row>
1422   <row>
1423     <col>15</col><col> SMS sent </col>
1424       <col>OPN<footnote>Only if the status is <strong>NEW</strong>.</footnote></col>
1425     <col>
1426       A SMS has been sent.
1427     </col>
1428   </row>
1429   <row>
1430     <col>16</col><col>Fax sent</col>
1431       <col>OPN<footnote>Only if the status is <strong>NEW</strong>.</footnote></col>
1432     <col>
1433       A fax has been sent.
1434     </col>
1435   </row>
1436   <row>
1437     <col>17</col><col>Log-entries shown</col><col>XXXX</col>
1438     <col>
1439       The log entries have been shown. No changes to the status made.
1440     </col>
1441   </row>
1442   <row>
1443     <col>18</col><col>Notification closed</col><col>CLS</col>
1444     <col>
1445       Notification has been closed.
1446     </col>
1447   </row>
1448   <row>
1449     <col>19</col><col>Notification reopened</col><col>OPN</col>
1450     <col>
1451       Notification has been re-opened
1452     </col>
1453   </row>
1454 </table>
1455 </subsubsection>
1456
1457 </subsection>
1458
1459 <subsection>
1460    <heading>Action_user.</heading>
1461
1462 <para>
1463 This table stores each actual action taken.
1464 Where the action basically stores the type of actions that can be taken,
1465 this table says 'at this point in time for this notification this action was taken'.
1466 Using this table it is traceable who did what at which moment in time.
1467 The table is very important for later use if
1468 something goes wrong, but is also relevant for the interface.
1469 All steps of a in the process of a notification can be traced using this table.
1470 There will be a lot of entries here, but retrieval is more crucial for
1471 performance than data entry. So indexing on logic fields is very relevant.
1472 Processing might be slower, but that's worth the price.
1473 </para>
1474
1475 <subsubsection>
1476   <heading>The fields.</heading>
1477
1478 <para>
1479 The table below describes the fields:
1480 </para>
1481
1482 <table cpos='lllp{6cm}'>
1483   <thead>
1484     <col> Fieldname </col> <col> Fieldtype </col> <col> Size </col>
1485     <col>
1486       Remarks
1487     </col>
1488   </thead>
1489   <row>
1490     <col> actionstepid </col> <col> Bigserial </col> <col> 8 </col>
1491     <col>
1492       Autonumber bigint (eight bit). A unique identifyer to indicate each step in the process.
1493     </col>
1494   </row>
1495   <row>
1496     <col> actionid </col> <col> Bigint </col> <col> 8 </col>
1497     <col>
1498       Reference to the action that is being registered here. This field refers to the actual action taken.
1499     </col>
1500   </row>
1501   <row>
1502     <col> username </col> <col> Text </col> <col> <para/> </col>
1503     <col>
1504       The username of the user that is involved in the action. This field refers to the table <strong>usr</strong>
1505     </col>
1506   </row>
1507   <row>
1508     <col> notificationid </col> <col> Bigint </col> <col> 8 </col>
1509     <col>
1510       Reference to the notification. This will link the action to the notification.
1511     </col>
1512   </row>
1513   <row>
1514     <col> timestamp </col> <col> Timestamp </col> <col> <para/> </col>
1515     <col>
1516       The time when the action has been entered into the system.
1517       This is the time without the timezone<footnote>The timestamp without
1518       time has been selected, since this is the system time.
1519       To have the system functioning without any physical borders one
1520       of the settings on the system is time in GMT (UTC).
1521       This ensures also the added value of the system log.</footnote>.
1522       This will be automatically added when the record is added into the database.
1523     </col>
1524   </row>
1525   <row>
1526     <col> statuscode </col> <col> Varchar </col> <col> 3 </col>
1527     <col>
1528       The status of the Notification AFTER this action has been taken.
1529     </col>
1530   </row>
1531   <row>
1532     <col> remarks </col> <col> Text </col> <col> <para/> </col>
1533     <col>
1534       Remarks entered by the user if it concerns a manual action
1535       or the text of automatically generated warnings.
1536     </col>
1537   </row>
1538 </table>
1539
1540 </subsubsection>
1541
1542 <subsubsection>
1543   <heading>The indexes.</heading>
1544
1545 <para>
1546 The table is indexed on the following fields:
1547 </para>
1548
1549 <table cpos='lll'>
1550   <thead>
1551     <col> Indexname </col> <col> Field </col> <col> Characteristics </col>
1552   </thead>
1553   <row>
1554     <col> anu_pk (action_user_actionstepid_key) </col> <col> actionstepid </col>
1555     <col> Primary key </col>
1556   </row>
1557   <row>
1558     <col> anu_actionid </col> <col> actionid </col> <col> <para/> </col>
1559   </row>
1560   <row>
1561     <col> anu_username </col> <col> username </col> <col> <para/> </col>
1562   </row>
1563   <row>
1564     <col> anu_notificationid </col> <col> notificationid </col> <col> <para/> </col>
1565   </row>
1566   <row>
1567     <col> anu_timestamp </col> <col> timestamp </col> <col> <para/> </col>
1568   </row>
1569   <row>
1570     <col> anu_statuscode </col> <col> statuscode </col> <col> <para/> </col>
1571   </row>
1572 </table>
1573 </subsubsection>
1574
1575 <subsubsection>
1576   <heading>The relationships.</heading>
1577
1578 <para>
1579 Relationships with other tables:
1580 </para>
1581 <table cpos='llp{7cm}'>
1582   <thead>
1583     <col> Fieldname </col> <col> Remote Table </col>
1584     <col> Remarks </col>
1585   </thead>
1586   <row>
1587     <col> actionid </col> <col> action </col>
1588     <col>
1589       Indicates the action that has been taken. The relationship has to be enforced.
1590     </col>
1591   </row>
1592   <row>
1593     <col> notificationid </col> <col> notification </col>
1594     <col>
1595       Each action that takes place is registered in this table.
1596       By using the notification the relevant notification. The relationship has to be enforced.
1597     </col>
1598   </row>
1599   <row>
1600     <col> username </col> <col> user </col>
1601     <col>
1602       Each step in the process has to be related to the user.
1603       If the system itself generates an action the user will be
1604       <strong>gnucomo</strong><footnote>This implies that the system
1605       automatically has an username gnucomo.</footnote>.
1606     </col>
1607   </row>
1608 </table>
1609
1610 <para>
1611 In the model this looks like this:
1612 </para>
1613 <para>
1614 <picture src="erd-anu.png" eps="erd-anu"/>
1615 </para>
1616
1617 </subsubsection>
1618
1619 <subsubsection>
1620   <heading>Sample data.</heading>
1621
1622 <para>
1623 Since no data is delivered automatically a couple of sample records are shown here.
1624 </para>
1625
1626     <table cpos='p{1cm}p{1cm}p{1cm}lllp{4cm}'>
1627       <thead>
1628         <col> Actionstepid </col> <col> Actionid </col> <col> Notificationid </col>
1629         <col> Username </col> <col> Timestamp </col> <col> Status </col>
1630         <col> Remarks </col>
1631       </thead>
1632       <row>
1633         <col> 1 </col> <col> 1 </col> <col> 1 </col> <col> Gnucomo </col>
1634         <col> 2002-07-14 16:14:09 </col> <col> NEW </col>
1635         <col>
1636           Gnucomo detected a portscan
1637         </col>
1638       </row>
1639       <row>
1640         <col> 2 </col> <col> 5 </col> <col> 1 </col> <col> Gnucomo </col>
1641         <col> 2002-07-14 16:14:09 </col> <col> NEW </col>
1642         <col>
1643           Priority set to: 3
1644         </col>
1645       </row>
1646       <row>
1647         <col> 3 </col> <col> 5 </col> <col> 1 </col> <col> Gnucomo </col>
1648         <col> 2002-07-14 16:14:09 </col> <col> OPN </col>
1649         <col>
1650           <para>Automatic e-mail to user:
1651       <reference href="mailto:brenno@dewinter.com">brenno@dewinter.com</reference>:</para>
1652           <para>Gnucomo detected a portscan on system
1653       <reference href="http://gnucomo.dewinter.com/">gnucomo.dewinter.com</reference></para>
1654         </col>
1655       </row>
1656       <row>
1657         <col> 4 </col> <col> 2 </col> <col> 1 </col> <col> Brenno </col>
1658         <col> 2002-07-14 16:18:09 </col> <col> OPN </col>
1659         <col>
1660           Notification shown through webinterface.
1661         </col>
1662       </row>
1663       <row>
1664         <col> 5 </col> <col> 17 </col> <col> 1 </col> <col> Brenno </col>
1665         <col> 2002-07-14 16:18:12 </col> <col> PEN </col>
1666         <col>
1667           <para/>
1668         </col>
1669       </row>
1670       <row>
1671         <col> 6 </col> <col> 4 </col> <col> 1 </col> <col> Brenno </col>
1672         <col> 2002-07-14 16:20:37 </col> <col> PEN </col>
1673         <col>
1674           Priority set to: 1
1675         </col>
1676       </row>
1677       <row>
1678         <col> 7 </col> <col> 3 </col> <col> 1 </col> <col> Brenno </col>
1679         <col> 2002-07-1416:21:58 </col> <col> PEN </col>
1680         <col>
1681           After reviewing the logs I see a portscan. On very specific ports. More analysis needed.
1682         </col>
1683       </row>
1684       <row>
1685         <col> 8 </col> <col> 3 </col> <col> 1 </col> <col> Brenno </col>
1686         <col> 2002-07-14 16:24:59 </col> <col> PEN </col>
1687         <col>
1688           Services tables learns me that all services are aimed at Windows-based services.
1689       Attempts for platform specific expoits.
1690         </col>
1691       </row>
1692       <row>
1693         <col> 9 </col> <col> 4 </col> <col> 1 </col> <col> Brenno </col>
1694         <col> 2002-07-14 16:25:03 </col> <col> PEN </col>
1695         <col>
1696           Priority set to: 4
1697         </col>
1698       </row>
1699       <row>
1700         <col> 10 </col> <col> 2 </col> <col> 1 </col> <col> Brenno </col>
1701         <col> 2002-07-14 16:30:09 </col> <col> PEN </col>
1702         <col>
1703           Notification shown through webinterface.
1704         </col>
1705       </row>
1706       <row>
1707         <col> 11 </col> <col> 3 </col> <col> 1 </col> <col> Brenno </col>
1708         <col> 2002-07-14 16:31:48 </col> <col> PEN </col>
1709         <col>
1710           Portscan has finished and no other action seems to take place now.
1711         </col>
1712       </row>
1713       <row>
1714         <col> 12 </col> <col> 18 </col> <col> 1 </col> <col> Brenno </col>
1715         <col> 2002-07-14 16:43:03 </col> <col> CLS </col>
1716         <col>
1717           <para/>
1718         </col>
1719       </row>
1720     </table>
1721     </subsubsection>
1722 </subsection>
1723
1724 <subsection>
1725 <heading>history</heading>
1726 <para>
1727 The history table records all changes to properties of parameters.
1728 </para>
1729
1730 <subsubsection>
1731 <heading>The fields</heading>
1732 <para>
1733 The fields of the <emph>history</emph> table are listed below:
1734 </para>
1735 <table cpos='lllp{6cm}'>
1736       <thead>
1737         <col> Fieldname </col> <col> Fieldtype </col> <col> Size </col>
1738         <col> Remarks </col>
1739       </thead>
1740       <row>
1741         <col>paramid</col><col>bigint</col><col>8</col>
1742         <col>The parameter to which this history belongs. Refers to the parameter table</col>
1743       </row>
1744       <row>
1745         <col>modified</col><col>timestamp</col><col> </col>
1746         <col>Time at which the property value or parameter changed</col>
1747       </row>
1748       <row>
1749         <col>change_nature</col><col>enum</col><col> </col>
1750         <col>Parameter created to destroyed; property value changed</col>
1751       </row>
1752       <row>
1753         <col>changed_property</col><col>text</col><col> </col>
1754         <col>Name of the parameter's property that changed.</col>
1755       </row>
1756       <row>
1757         <col>new_value</col><col>text</col><col> </col>
1758         <col>The new actual value of the property at the time of modification</col>
1759       </row>
1760       <row>
1761         <col>remark</col><col>text</col><col> </col>
1762         <col>A short explanation of why the property changed</col>
1763       </row>
1764 </table>
1765
1766 <para>
1767 Each time something about a parameter changes, this is recorded in the
1768 change history of the paraneter.
1769 When such a change happens, one of three things may occur to a parameter,
1770 as stated in the 'change_nature' field:
1771
1772 <enumerate>
1773 <item>A new parameter is created.</item>
1774 <item>The value of one of the properties was altered.</item>
1775 <item>The parameter is removed.</item>
1776 </enumerate>
1777
1778 When  a parameter is created or destroyed, the fields 'changed_property' and
1779 'new_value' are irrelevant.
1780 </para>
1781
1782 </subsubsection>
1783 </subsection>
1784
1785 <subsection>
1786   <heading>log &amp; log_adv. </heading>
1787
1788 <para>
1789 To store the log-data there are two tables in use that have a one-on-one relationship.
1790 The logic behind this is the difference between raw-always needed data and the somewhat
1791 processed data to support basic retrieval.
1792 The last category isn't always used and when it's used it is redundant.
1793 Also the raw log is very important to the integrity of the system.
1794 For these reasons the processed data has been physically separated in a
1795 second table called <emph>log_adv</emph>.
1796 If needed a view will be available that combines the two tables.
1797 Despite the load indexing on <emph>log_adv</emph> will be done thoroughly.
1798 </para>
1799 </subsection>
1800
1801 <subsection>
1802   <heading>log.</heading>
1803
1804 <subsubsection>
1805   <heading>The fields of log.</heading>
1806
1807 <para>
1808 The fields in log are focussed around the raw data arriving from log-files and output
1809 from processes that deliver status information.
1810 The log table is the one and only place used to automatically deliver data to the gnucomo-system.
1811 This makes the facts very traceable and ensures that there is one point where the data isn't
1812 yet fragmented (usefull if new insights are usefull). The log table also provides the
1813 integrity of the data as it was delivered. The data will be needed to provide 
1814 a link to other tables in the system that handle processed derrivates of the
1815 original data (added intelligence).
1816 </para>
1817
1818 <table cpos='lllp{6cm}'>
1819   <thead>
1820     <col> Fieldname </col> <col> Fieldtype </col> <col> Size </col>
1821     <col>
1822       Remarks
1823     </col>
1824   </thead>
1825   <row>
1826     <col> logid </col> <col> Bigserial </col> <col> 8 </col>
1827     <col>
1828       Autonumber bigint (eight bit)
1829     </col>
1830   </row>
1831   <row>
1832     <col> objectid </col> <col> Bigint </col> <col> 8 </col>
1833     <col>
1834       Reference to the object that submitted this log entry
1835     </col>
1836   </row>
1837   <row>
1838     <col> original_filename </col> <col> Text </col> <col> <para/> </col>
1839     <col>
1840       This field refers to the filename that contained this entry.
1841       The original entries as received by the gnucomo-server (flat files).
1842       The files are sent in batches, which makes it very hard to find where the
1843       original logline is. This will enable to see the files to detect
1844       bugs in gnucomo if any occur.
1845       It may well be that in a later stage this functionality becomes obsolete.
1846     </col>
1847   </row>
1848   <row>
1849     <col> servicecode </col> <col> Text </col> <col> <para/> </col>
1850     <col>
1851       This field explains what service was recognized (for instance 'kernel, 'httpd' or 'smtp')
1852       this make later processing easier.
1853     </col>
1854   </row>
1855   <row>
1856     <col> type_of_logid </col> <col> Bigint </col> <col> 8 </col>
1857     <col>
1858       Reference to the table type_of_log that contains information on what
1859       type of log/report we have here (how gnucomo recognized it).
1860     </col>
1861   </row>
1862   <row>
1863     <col> object_timestamp </col> <col> Timestamp </col> <col> 8 </col>
1864     <col>
1865       Timestamp of the moment the data was written into the log-file itself.
1866       This is the time on the remote system. 
1867     </col>
1868   </row>
1869   <row>
1870     <col> timestamp </col> <col> Timestamp </col> <col> <para/> </col>
1871     <col>
1872       The time when the action has been entered into the system.
1873       This is the time without the timezone<footnote>The timestamp without time
1874       has been selected, since this is the system time.
1875       To have the system functioning without any physical borders one of
1876       the settings on the system is time in GMT (UTC).
1877       This ensures also the added value of the system log.</footnote>.
1878       This will be generated upon entry into the database.
1879     </col>
1880   </row>
1881   <row>
1882     <col> rawdata </col> <col> TEXT </col> <col> <para/> </col>
1883     <col>
1884       The raw log data as it was handed to gnucomo. 
1885     </col>
1886   </row>
1887   <row>
1888     <col>processed</col><col>BOOLEAN </col> <col> <para/> </col>
1889     <col>This record is a flag (true or false).
1890       If a record that has been entered into the log-table has been processed
1891       (mostly into several log_adv-tables) this flag is set to true.
1892       The flag indicates that gcm_daemon processed the record.
1893       This doesn't nescessarily mean that they have been used.
1894       By default the setting is false.
1895       So the flag helps in the detection of new arrivals in the log-table.</col>
1896   </row>
1897   <row>
1898    <col>recognized</col><col>BOOLEAN</col> <col><para/> </col>
1899    <col>This record is a flag (true or false).
1900       If the processing by gcm_daemon of this particular record has been done the flag
1901       will only be set to true when gcm_daemon could process the record.
1902       If there was no support for this particular entry the status remains false.
1903       The main aim of this functionality is relevant when a new version of the daemon is present.
1904       Unrecognized records will then be transferred to unprocessed again and a
1905       new attempt will be made to process these records.</col>
1906   </row>
1907 </table>
1908 </subsubsection>
1909
1910 <subsubsection>
1911   <heading>The indexes.</heading>
1912
1913 <para>
1914 The indices of the table:
1915 </para>
1916
1917 <table cpos='lll'>
1918   <thead>
1919     <col> Indexname </col> <col> Field </col> <col> Characteristics </col>
1920   </thead>
1921   <row>
1922     <col> log_pk (log_logid_key) </col> <col> logid </col> <col> Primary key </col>
1923   </row>
1924   <row>
1925     <col> log_objectid </col> <col> objectid </col> <col> <para/> </col>
1926   </row>
1927   <row>
1928     <col> log_original_filename </col> <col> original_filename </col> <col> <para/> </col>
1929   </row>
1930   <row>
1931     <col> log_servicecode </col> <col> servicecode </col> <col> <para/> </col>
1932   </row>
1933   <row>
1934     <col> log_type_of_logid </col> <col> type_of_logid </col> <col> <para/> </col>
1935   </row>
1936   <row>
1937     <col> log_object_timestamp </col> <col> object_timestamp </col> <col> <para/> </col>
1938   </row>
1939   <row>
1940     <col> log_timestamp </col> <col> timestamp </col> <col> <para/> </col>
1941   </row>
1942 </table>
1943 </subsubsection>
1944
1945 <subsubsection>
1946   <heading>The relationships.</heading>
1947
1948 <para>
1949 Relationships with other tables:
1950 </para>
1951
1952 <table cpos='llp{6cm}'>
1953   <thead>
1954     <col> Fieldname </col> <col> Remote Table </col>
1955     <col>
1956       Remarks
1957     </col>
1958   </thead>
1959   <row>
1960     <col> objectid </col> <col> object </col>
1961     <col>
1962       This make the link from what object the logline came
1963     </col>
1964   </row>
1965   <row>
1966     <col> type_of_logid </col> <col> type_of_log </col>
1967     <col>
1968       Each logbook has a certain type of reporting.
1969       This explains what type of log was received (and thus which rules for detection was applied).
1970     </col>
1971   </row>
1972   <row>
1973     <col> systemuser </col> <col> user </col>
1974     <col>
1975       Links a registered user of an object to this log
1976       entry<footnote>Upon entry of an object most of the times the
1977       passwd-file (UNIX-systems) or the userlist will serve as the entrypoint of users.
1978       Non existing users will be added and will have to be verified by an
1979       administrator before this entry become definite.</footnote>.
1980     </col>
1981   </row>
1982 </table>
1983
1984 <para>In the model this looks like this:</para>
1985     
1986 <para>
1987   <picture src="erd-log.png" eps="erd-log"/>
1988 </para>
1989
1990     
1991 </subsubsection>
1992 <subsubsection>
1993 <heading>Log_adv</heading>
1994 <para>
1995 As soon as new data is detected in the log-table processing takes place.
1996 If the data is recognized by the gcm_daemon one or more log_adv records
1997 will be written where data is separated. Due to the high diversity multiple
1998 types of the log_adv table will be created.
1999 All of them will be an inheritance of the log_adv-table.
2000 </para>
2001 </subsubsection>
2002 <subsubsection>
2003   <heading>The fields of log_adv.</heading>
2004
2005 <para>
2006 The fields of the table <emph>log_adv</emph> are shown below:
2007 </para>
2008
2009 <table cpos='lllp{6cm}'>
2010   <thead>
2011     <col> Fieldname </col> <col> Fieldtype </col> <col> Size </col>
2012     <col>
2013       Remarks
2014     </col>
2015   </thead>
2016   <row>
2017     <col>log_advid</col><col>Bigint autonumber</col><col>8</col>
2018     <col>Since some records can generate several log_adv records a unique identifyer is needed.
2019           This record provides that.
2020     </col>
2021   </row>
2022   <row>
2023     <col> logid </col> <col> Bigint </col> <col> 8 </col>
2024     <col>
2025       Bigint (eight bit) 1-to-1 relationship with log
2026     </col>
2027   </row>
2028 </table>
2029
2030 </subsubsection>
2031
2032 <subsubsection>
2033   <heading>The indexes.</heading>
2034
2035 <para>
2036 The table is indexed on the following fields:
2037 </para>
2038
2039 <table cpos='lll'>
2040   <thead>
2041     <col> Indexname </col> <col> Field </col> <col> Characteristics </col>
2042   </thead>
2043   <row>
2044     <col> loa_logid </col> <col> logid </col> <col> Primary key </col>
2045   </row>
2046   <row>
2047     <col> loa_source_ip </col> <col> source_ip </col> <col> <para/> </col>
2048   </row>
2049   <row>
2050     <col> loa_destination_ip </col> <col> destination_ip </col> <col> <para/> </col>
2051   </row>
2052   <row>
2053     <col> loa_mac_address </col> <col> mac_address </col> <col> <para/> </col>
2054   </row>
2055   <row>
2056     <col> loa_packetlength </col> <col> packetlength </col> <col> <para/> </col>
2057   </row>
2058   <row>
2059     <col> loa_protocol </col> <col> protocol </col> <col> <para/> </col>
2060   </row>
2061   <row>
2062     <col> loa_source_port </col> <col> source_port </col> <col> <para/> </col>
2063   </row>
2064   <row>
2065     <col> loa_destination_port </col> <col> destination_port </col> <col> <para/> </col>
2066   </row>
2067   <row>
2068     <col> loa_messageid </col> <col> messageid </col> <col> <para/> </col>
2069   </row>
2070   <row>
2071     <col> loa_system_username </col> <col> system_username </col> <col> <para/> </col>
2072   </row>
2073   <row>
2074     <col> networkdevice </col> <col> networkdevice </col> <col> <para/> </col>
2075   </row>
2076 </table>
2077 </subsubsection>
2078
2079 <subsubsection>
2080   <heading>The relationships.</heading>
2081
2082 <para>
2083 There is only one relation with this table.
2084 </para>
2085
2086 <table cpos='llp{6cm}'>
2087   <thead>
2088     <col> Fieldname </col> <col> Remote Table </col>
2089     <col>
2090       Remarks
2091     </col>
2092   </thead>
2093   <row>
2094     <col> Logid </col> <col> Log </col>
2095     <col>
2096       This will make a link to the table <emph>log</emph>. The relationship is a one-on-one relationship.
2097     </col>
2098   </row>
2099 </table>
2100 </subsubsection>
2101
2102 <subsubsection>
2103   <heading>Sample data combined from log and log_adv.</heading>
2104
2105 <para>
2106 The sample data derrived here has been gathered in logs.
2107 Since the tablestructure is very long the representation is somewhat different:
2108 </para>
2109
2110 <table cpos='lp{8cm}'>
2111   <thead>
2112     <col> Fieldname </col> <col> Value.  </col>
2113   </thead>
2114   <row>
2115     <col> Logid </col> <col> 1 </col>
2116   </row>
2117   <row>
2118     <col> Objectid </col> <col> 1 </col>
2119   </row>
2120   <row>
2121     <col> Original_filename </col> <col> 7f0100.messages.20020714231801 </col>
2122   </row>
2123   <row>
2124     <col> Rawdata </col>
2125     <col>
2126       Jul 14 18:16:42 webber kernel: IN=eth0 OUT= MAC=00:60:67:36:61:a5:00:90:69:60:c0:5d:08:00 SRC=193.79.237.146 DST=212.204.216.11 LEN=40 TOS=0x00 PREC=0x00 TTL=245 id=19308 DF PROTO=TCP SPT=36375 DPT=113 WINDOW=8760 RES=0x00 RST URGP=0
2127     </col>
2128   </row>
2129   <row>
2130     <col> Type_of_logid </col> <col> 1 </col>
2131   </row>
2132   <row>
2133     <col> Timestamp </col> <col> 2002-07-14 23:29:01 </col>
2134   </row>
2135   <row>
2136     <col> Object_timestamp </col> <col> 2002-07-14 18:16:42 </col>
2137   </row>
2138   <row>
2139     <col> Source_ip </col> <col> 193.79.237.146 </col>
2140   </row>
2141   <row>
2142     <col> Destination_ip </col> <col> 212.204.216.11 </col>
2143   </row>
2144   <row>
2145     <col> Mac_address </col> <col> 00:60:67:36:61:a5:00:90:69:60:c0:5d:08:00 </col>
2146   </row>
2147   <row>
2148     <col> Packetlength </col> <col> 40 </col>
2149   </row>
2150   <row>
2151     <col> Protocol </col> <col> TCP </col>
2152   </row>
2153   <row>
2154     <col> Source_port </col> <col> 36375 </col>
2155   </row>
2156   <row>
2157     <col> Destination_port </col> <col> 113 </col>
2158   </row>
2159   <row>
2160     <col> Messageid </col> <col> <para/> </col>
2161   </row>
2162   <row>
2163     <col> Systemuser </col> <col> <para/> </col>
2164   </row>
2165   <row>
2166     <col> Networkdevice </col> <col> eth0 </col>
2167   </row>
2168 </table>
2169 </subsubsection>
2170 </subsection>
2171
2172 <subsection>
2173   <heading>log_notification. </heading>
2174
2175 <para>
2176 In the log_notification the logbook entries that have caused an alert to occur are saved.
2177 When this table is used something has been detected.
2178 As this is clearly an intermediate table we anticipate to design checks where
2179 multiple entries in a log-file can lead to one notification.
2180 For forensics indexing will be focussed on retrieval speed.
2181 </para>
2182
2183 <subsubsection>
2184   <heading>The fields.</heading>
2185
2186 <para>
2187 The fields are listed below:
2188 </para>
2189
2190 <table cpos='lllp{6cm}'>
2191   <thead>
2192     <col> Fieldname </col> <col> Fieldtype </col> <col> Size </col>
2193     <col>
2194       Remarks
2195     </col>
2196   </thead>
2197   <row>
2198     <col> notificationid </col> <col> Bigint </col> <col> 8 </col>
2199     <col>
2200       Reference to the notification
2201     </col>
2202   </row>
2203   <row>
2204     <col> logid </col> <col> Bigint </col> <col> 8 </col>
2205     <col>
2206       Reference to the logbook
2207     </col>
2208   </row>
2209 </table>
2210
2211 </subsubsection>
2212 <subsubsection>
2213   <heading>The indexes.</heading>
2214
2215 <para>
2216 The table is indexed on the following fields:
2217 </para>
2218 <table cpos='lll'>
2219   <thead>
2220     <col> Indexname </col> <col> Field </col> <col> Characteristics </col>
2221   </thead>
2222   <row>
2223     <col> lon_pk </col> <col>notificationid </col> <col>Primary key </col>
2224   </row>
2225   <row>
2226     <col> <para/> </col> <col>logid </col> <col>Primary key (second field) </col>
2227   </row>
2228   <row>
2229     <col>lon_notificationid </col> <col> notificationid </col> <col> <para/> </col>
2230   </row>
2231   <row>
2232     <col> lon_logid </col> <col>logid </col> <col> <para/> </col>
2233   </row>
2234 </table>
2235 </subsubsection>
2236
2237 <subsubsection>
2238   <heading>The relationships.</heading>
2239
2240 <para>
2241 Relationships with other tables:
2242 </para>
2243
2244 <table cpos='llp{8cm}'>
2245   <thead>
2246     <col> Fieldname </col> <col> Remote Table </col>
2247     <col>
2248       Remarks
2249     </col>
2250   </thead>
2251   <row>
2252     <col> Logid </col> <col> Log </col>
2253     <col>
2254       Indicates the log-entry that was on of the triggers that led to the notification.
2255     </col>
2256   </row>
2257   <row>
2258     <col> NotificationID </col> <col> Notification </col>
2259     <col>
2260       Indicates the notification where the entry in the log was a trigger.
2261     </col>
2262   </row>
2263 </table>
2264
2265 <para>In the model this look like this:</para>
2266 <para>
2267   <picture src="erd-lognotif.png" eps="erd-lognotif"/>
2268 </para>
2269 </subsubsection>
2270
2271 <subsubsection>
2272   <heading>Sample data.</heading>
2273 <para>
2274 Some sample data:
2275 </para>
2276
2277 <table cpos='ll'>
2278   <thead>
2279     <col> LogID </col> <col> NotificationID </col>
2280   </thead>
2281   <row>
2282     <col> 4 </col> <col> 1 </col>
2283   </row>
2284   <row>
2285     <col> 5 </col> <col> 1 </col>
2286   </row>
2287   <row>
2288     <col> 8 </col> <col> 1 </col>
2289   </row>
2290   <row>
2291     <col> 9 </col> <col> 1 </col>
2292   </row>
2293   <row>
2294     <col> 5 </col> <col> 2 </col>
2295   </row>
2296   <row>
2297     <col> 6 </col> <col> 2 </col>
2298   </row>
2299   <row>
2300     <col> 11 </col> <col> 2 </col>
2301   </row>
2302 </table>
2303 </subsubsection>
2304 </subsection>
2305
2306 <subsection>
2307   <heading>notification. </heading>
2308
2309 <para>
2310 The main task of gnucomo is detection issues.
2311 As soon as something has been detected based on the queries run a notification will be created.
2312 This notification will be the warning towards the system that something has been detected. 
2313 Issues are entered based on immediate detection, periodical detection or manually.
2314 In an ideal case no notification will occur, but as time goes by issues will occur.
2315 When systems function properly more retrieval than data entry will take place.
2316 Also data retrieval will be done in all sorts of ways. One can think of immediate display,
2317 but also updates due to actions and ultimately reporting.
2318 Indexing must be huge to facilitate all these queries. 
2319
2320 There will be one single point-of-contact with the gnucomo-system.
2321 This point-of-contact will be the XML/SOAP interface.
2322 By doing that we can set user-rights (as has been impleted in this table)
2323 without communicating that to the user.
2324 Also the gnucomo-XML/SOAP-interface will verify if the attempted action is allowed.
2325 </para>
2326
2327 <subsubsection>
2328   <heading>The fields.</heading>
2329
2330 <para>
2331 The fields of the <emph>notification</emph> table are:
2332 </para>
2333
2334 <table cpos='lllp{6cm}'>
2335   <thead>
2336     <col> Fieldname </col> <col> Fieldtype </col> <col> Size </col>
2337     <col>
2338       Remarks
2339     </col>
2340   </thead>
2341   <row>
2342     <col> notificationid </col> <col> Bigint Autonumber </col> <col> 8 </col>
2343     <col>
2344       Autonumber
2345     </col>
2346   </row>
2347   <row>
2348     <col> objectid </col> <col> Bigint </col> <col> 8 </col>
2349     <col>
2350       Reference to the <emph>object</emph>
2351     </col>
2352   </row>
2353   <row>
2354     <col> type_of_issue_id </col> <col> Bigint </col> <col> 8 </col>
2355     <col>
2356       Reference to the <emph>type_of_issue</emph> indicating what
2357       type of notification we have here and what basic rules apply.
2358       Notifications are always created on an issue that can be raised.
2359     </col>
2360   </row>
2361   <row>
2362     <col> timestamp </col> <col> Timestamp </col> <col> <para/> </col>
2363     <col>
2364       Timestamp used to indicate the moment when this notification was created.
2365     </col>
2366   </row>
2367   <row>
2368     <col> statuscode </col> <col> Varchar </col> <col> 3 </col>
2369     <col>
2370       The status the actual status a notification has.
2371       This can be new, open, pending, waiting for verification, rejected, closed, needs investigation
2372     </col>
2373   </row>
2374   <row>
2375     <col> priority </col> <col> Int </col> <col> 4 </col>
2376     <col>
2377       The priority that is given to this issue<footnote>Basically there will be
2378       five priority levels. The rule is that the lower the number gets the more
2379       urgent the issue is. At the moment the priority level is set by the system
2380       pre-defined actions will take place.</footnote>.
2381     </col>
2382   </row>
2383   <row>
2384     <col> escalation_count_timestamp </col> <col> Timestamp </col> <col> <para/> </col>
2385     <col>
2386       Each notification has a basic priority-level but if certain time-constraints
2387       are not met it is possible to do an automatic escalation.
2388       By doing that new rules may apply and more priority can be given.
2389       This field has the timestamp since the last escalation took
2390       place<footnote>The system offers
2391       the possibility to automatically escalate issue if no action has been
2392       taken within a certain amount of time. Based on the status and the type
2393       of notification escalation can take place.</footnote>.
2394     </col>
2395   </row>
2396   <row>
2397     <col> repeat_notification_timestamp </col> <col> Timestamp </col> <col> <para/> </col>
2398     <col>
2399       Timestamp at which moment in time a repeat notification should occur<footnote>After
2400       this time has passed a notification is being resent.
2401       After a resent automatically a new time is set for another resent.
2402       If any actions takes place (except automated entries of course)
2403       the time is emptied so that an administrator will no longer be bothered by the system.</footnote>.
2404     </col>
2405   </row>
2406   <row>
2407     <col> securitylevel_view </col> <col> Int </col> <col> 4 </col>
2408     <col>
2409       The securitylevel that is needed to be allowed to view this entry. This field builds the opportunity to have certain specific issues only handled by certain persons. <footnote>This feature may be beneficial to make monitoring more discrete. For instance if a check is being done on who is looking on pornographic websites privacy issues play as well. By setting this value only certain users can undertake action. Something else would be a feature to have fraud protection. If this happens it goes beyond the work of a normal administrator and only certain officers are allowed to deal with these issues. One last example would also be privacy related. Suppose a system logs all the unix-commands given by a certain user. If something is found based on the actions of the users a protection mechanism is needed. Only special users are allowed to view this notification.</footnote>
2410     </col>
2411   </row>
2412   <row>
2413     <col> securitylevel_add </col> <col> Int </col> <col> 4 </col>
2414     <col>
2415       There is a fundamental difference between letting users see notification and actually work on notifications. This field indicates what security level needs to be present to edit this notification.  
2416     </col>
2417   </row>
2418   <row>
2419     <col> securitylevel_close </col> <col> Int </col> <col> 4 </col>
2420     <col>
2421       The securitylevel needed to be able to close this notification. After working on an issue one ultimately hope to close the notification. This field indicates who is allowed to do so. If one attempts to close the issue, but is lacking sufficient rights the status will be changed to 'waiting for verification'. This will enable the superuser to quickly tick of the list of issues to be verified and still be in control.
2422     </col>
2423   </row>
2424 </table>
2425 </subsubsection>
2426
2427 <subsubsection>
2428   <heading>The indexes.</heading>
2429
2430 <para>
2431 The indices are:
2432 </para>
2433 <table cpos='lll'>
2434   <thead>
2435     <col> Indexname </col> <col> Field </col> <col> Characteristics </col>
2436   </thead>
2437   <row>
2438     <col> not_pk (notification_notificationid_key) </col> <col> notificationid </col>
2439     <col> Primary key </col>
2440   </row>
2441   <row>
2442     <col> not_objectid </col> <col> objectid </col> <col> <para/> </col>
2443   </row>
2444   <row>
2445     <col> not_type_of_notificationid </col> <col> type_of_notificationid </col>
2446     <col> <para/> </col>
2447   </row>
2448   <row>
2449     <col> not_timestamp </col> <col> timestamp </col> <col> <para/> </col>
2450   </row>
2451   <row>
2452     <col> not_statuscode </col> <col> statuscode </col> <col> <para/> </col>
2453   </row>
2454   <row>
2455     <col> not_priority </col> <col> priority </col> <col> <para/> </col>
2456   </row>
2457   <row>
2458     <col> not_escalation_count_timestamp </col> <col> escalation_count_timestamp </col>
2459     <col> <para/> </col>
2460   </row>
2461   <row>
2462     <col>
2463       <para>not_repeat_notification_timestamp</para>
2464       <para>(not_repeat_notification_timesta)</para>
2465     </col>
2466     <col> repeat_notification_timestamp </col> <col> <para/> </col>
2467   </row>
2468 </table>
2469 </subsubsection>
2470
2471 <subsubsection>
2472   <heading>The relationships.</heading>
2473
2474 <para>
2475 Relationships with other tables:
2476 </para>
2477
2478 <table cpos='llp{8cm}'>
2479   <thead>
2480     <col> Fieldname </col> <col> Remote Table </col> <col> Remarks </col>
2481   </thead>
2482   <row>
2483     <col> Logid </col> <col> Log </col>
2484     <col>
2485       Indicates the log-entry that was on of the triggers that led to the notification.
2486     </col>
2487   </row>
2488   <row>
2489     <col> NotificationID </col> <col> Notification </col>
2490     <col>
2491       Indicates the notification where the entry in the log was a trigger.
2492     </col>
2493   </row>
2494 </table>
2495
2496 <para>In the model this look like this:</para>
2497 <para>
2498   <picture src="erd-notif.png" eps="erd-notif"/>
2499 </para>
2500 </subsubsection>
2501
2502 <subsubsection>
2503   <heading>Sample data.</heading>
2504
2505 <para>
2506 The following data is an example of a notification placed in the database.
2507 </para>
2508 <table cpos='ll'>
2509   <thead>
2510     <col> Fieldname </col> <col> Data </col>
2511   </thead>
2512   <row>
2513     <col> Notificationid </col> <col> 1 </col>
2514   </row>
2515   <row>
2516     <col> ObjectID </col> <col> 1 </col>
2517   </row>
2518   <row>
2519     <col> Type_of_notification_id </col> <col> 1 </col>
2520   </row>
2521   <row>
2522     <col> Timestamp </col> <col> 17-07-2002 16:07 </col>
2523   </row>
2524   <row>
2525     <col> Statuscode </col> <col> NEW </col>
2526   </row>
2527   <row>
2528     <col> Priority </col> <col> 3 </col>
2529   </row>
2530   <row>
2531     <col> Escalation_count_timestamp </col> <col> 17-07-2002 16:07 </col>
2532   </row>
2533   <row>
2534     <col> Repeat_notification_timestamp </col> <col> 17-07-2002 20:48PM </col>
2535   </row>
2536   <row>
2537     <col> Securitylevel_view </col> <col> 3 </col>
2538   </row>
2539   <row>
2540     <col> Securitylevel_add </col> <col> 3 </col>
2541   </row>
2542   <row>
2543     <col> Securitylevel_close </col> <col> 4 </col>
2544   </row>
2545 </table>
2546 </subsubsection>
2547 </subsection>
2548
2549 <subsection>
2550   <heading>object</heading>
2551
2552 <para>
2553 The <emph>object</emph> table contains general information on the objects being monitored. Mostly objects will be computers, but it may also be something else in the future like routers, switches, gateways, PDA's or other devices. The table object will more be used for retrieval, since adding objects will be an
2554 occasional process. Anything that for some reason can be indexed ought to be indexed.
2555 </para>
2556
2557 <subsubsection>
2558   <heading>The fields.</heading>
2559
2560 <para>
2561 The fields are:
2562 </para>
2563 <table cpos='lllp{6cm}'>
2564   <thead>
2565     <col> Fieldname </col> <col> Fieldtype </col> <col> Size </col>
2566     <col>
2567       Remarks
2568     </col>
2569   </thead>
2570   <row>
2571     <col> objectid </col> <col> Bigint Autonumber </col> <col> 8 </col>
2572     <col>
2573       Autonumbering code for the computer or device.
2574     </col>
2575   </row>
2576   <row>
2577     <col> objectname </col> <col> Text </col> <col> <para/> </col>
2578     <col>
2579       The hostname of the object as it can be recognized by the gcm_input-application.
2580     </col>
2581   </row>
2582   <row>
2583     <col> objectcode </col> <col> Text </col> <col> <para/> </col>
2584     <col>
2585       Unique identifier (if existent) on the system<footnote>In Linux this will
2586       typically be the <emph>hostid</emph>.</footnote>.
2587     </col>
2588   </row>
2589   <row>
2590     <col> scp_enabled </col> <col> Boolean </col> <col> <para/> </col>
2591     <col>
2592       Can communication occur through scp (T = Yes / F = No)
2593     </col>
2594   </row>
2595   <row>
2596     <col> scp_inet </col> <col> Inet </col> <col> <para/> </col>
2597     <col>
2598       IP Address of the object for scp-data transfer.
2599     </col>
2600   </row>
2601   <row>
2602     <col> mail_enabled </col> <col> Boolean </col> <col> <para/> </col>
2603     <col>
2604       Can communication occur through e-mail (T = Yes/F = No).
2605     </col>
2606   </row>
2607   <row>
2608     <col> mail_from </col> <col> Text </col> <col> <para/> </col>
2609     <col>
2610       The e-mail address where e-mail will come from.
2611     </col>
2612   </row>
2613   <row>
2614     <col> sms_enabled </col> <col> Boolean </col> <col> <para/> </col>
2615     <col>
2616       Can communication occur through SMS (T = Yes/F = No).
2617     </col>
2618   </row>
2619   <row>
2620     <col> sms_number </col> <col> Text </col> <col> <para/> </col>
2621     <col>
2622       The SMS-number to send a notification to.
2623     </col>
2624   </row>
2625   <row>
2626     <col> fax_enabled </col> <col> Boolean </col> <col> <para/> </col>
2627     <col>
2628       Can communication occur through Fax (T = Yes/F = No).
2629     </col>
2630   </row>
2631   <row>
2632     <col> fax_number </col> <col> Text </col> <col> <para/> </col>
2633     <col>
2634       The fax-number to send a notification to.
2635     </col>
2636   </row>
2637   <row>
2638     <col>
2639       object_description
2640     </col>
2641     <col>
2642       Text
2643     </col>
2644     <col>
2645       <para/>
2646     </col>
2647     <col>
2648       Description of the object. What type of system is it, what specifics are there to know, etc.
2649     </col>
2650   </row>
2651   <row>
2652     <col> object_owner </col> <col> Text </col> <col> <para/> </col>
2653     <col>
2654       Owner-details
2655     </col>
2656   </row>
2657   <row>
2658     <col> physical_location </col> <col> Text </col> <col> <para/> </col>
2659     <col>
2660       Physical address and when applicable entry-details needed to get to the object.
2661     </col>
2662   </row>
2663   <row>
2664     <col> timezone </col> <col> Text </col> <col> <para/> </col>
2665     <col>
2666       The timezone where this object is located<footnote>For objects that
2667       move around like PDA's and laptops the timezone can be the place where
2668       a person is stationed or better GMT.</footnote>.
2669     </col>
2670   </row>
2671   <row>
2672     <col> remark </col> <col> Text </col> <col> <para/> </col>
2673     <col>
2674       Additional remarks that shouldn't be in the previous TEXT fields.
2675     </col>
2676   </row>
2677 </table>
2678 </subsubsection>
2679
2680 <subsubsection>
2681   <heading>The indexes.</heading>
2682
2683 <para>
2684 The <emph>object</emph> table is indexed on the following fields:
2685 </para>
2686
2687 <table cpos='lll'>
2688   <thead>
2689     <col> Indexname </col> <col> Field </col> <col> Characteristics </col>
2690   </thead>
2691   <row>
2692     <col> obj_pk (object_objectid_key) </col> <col> objectid </col> <col> Primary key </col>
2693   </row>
2694   <row>
2695     <col> obj_objectname </col> <col> objectname </col> <col> Unique </col>
2696   </row>
2697   <row>
2698     <col> obj_objectcode </col> <col> objectcode </col> <col> Unique </col>
2699   </row>
2700   <row>
2701     <col> obj_mail_from </col> <col> mail_from </col> <col> <para/> </col>
2702   </row>
2703 </table>
2704 </subsubsection>
2705
2706 <subsubsection>
2707   <heading>The relationships.</heading>
2708
2709 <para>
2710 The relationships with other tables are listed below:
2711 </para>
2712
2713 <table cpos='llp{8cm}'>
2714   <thead>
2715     <col> Fieldname </col> <col> Remote Table </col> <col> Remarks </col>
2716   </thead>
2717   <row>
2718     <col> ObjectID </col> <col> Log (adv) </col>
2719     <col> Reference to processed log-entries </col>
2720   </row>
2721   <row>
2722     <col> <para/> </col> <col> Notification </col>
2723     <col>
2724       Reference to the table <emph>notification</emph> that contains the notifications
2725       that have been created.
2726     </col>
2727   </row>
2728   <row>
2729     <col> <para/> </col> <col> Object_issue </col>
2730     <col>
2731       Reference to the <emph>object_issue</emph> that indicates how notifications have to be handled .
2732     </col>
2733   </row>
2734   <row>
2735     <col> <para/> </col> <col> Object_priority </col>
2736     <col>
2737       Reference to the <emph>object_priority</emph> table that indicates how a
2738       certain level of priority has to be dealt with.
2739     </col>
2740   </row>
2741   <row>
2742     <col> <para/> </col> <col> Object_system_user </col>
2743     <col>
2744       Reference to a list of system user to discover abnormalities in user behaviour.
2745     </col>
2746   </row>
2747   <row>
2748     <col> <para/> </col> <col> Object_user </col>
2749     <col> Reference to the <emph>object_user</emph> </col>
2750   </row>
2751   <row>
2752     <col> <para/> </col> <col> Unprocessed_log </col>
2753     <col>
2754       Reference to the entries that have not been processed at all.
2755     </col>
2756   </row>
2757 </table>
2758
2759 <para>In the relationshipmodel this looks like this:</para>
2760 <para>
2761   <picture src="erd-object.png" eps="erd-object"/>
2762 </para>
2763 </subsubsection>
2764
2765 <subsubsection>
2766   <heading>Sample data.</heading>
2767 <para>
2768 There is no preset data and therefor it's an example has been created.
2769 The table has quite some fields so the example has the fieldname in the
2770 left column and the data in the right column.
2771 </para>
2772 <table cpos='lp{6cm}'>
2773       <thead>
2774         <col> Fieldname </col>
2775         <col> Sample data </col>
2776       </thead>
2777       <row>
2778         <col> Objectid </col>
2779         <col> 1 </col>
2780       </row>
2781       <row>
2782         <col> Objectname </col>
2783         <col> webber.dewinter.com </col>
2784       </row>
2785       <row>
2786         <col> Objectcode </col>
2787         <col> 7f0100 </col>
2788       </row>
2789       <row>
2790         <col> Scp_enabled </col>
2791         <col> T </col>
2792       </row>
2793       <row>
2794         <col> Scp_inet </col>
2795         <col> 192.168.221.212 </col>
2796       </row>
2797       <row>
2798         <col> Mail_enabled </col>
2799         <col> T </col>
2800       </row>
2801       <row>
2802         <col> Mail_from </col>
2803         <col> <reference href="mailto:gnucomo@maintenance.dewinter.com">gnucomo@maintenance.dewinter.com</reference> </col>
2804       </row>
2805       <row>
2806         <col> Sms_enabled </col>
2807         <col> T </col>
2808       </row>
2809       <row>
2810         <col> Sms_number </col>
2811         <col> 06-XXXXXXXX </col>
2812       </row>
2813       <row>
2814         <col> Fax_enabled </col>
2815         <col> T </col>
2816       </row>
2817       <row>
2818         <col> Fax_number </col>
2819         <col> 0318-XXXXXX </col>
2820       </row>
2821       <row>
2822         <col> Object_description </col>
2823         <col> 19 inch 4 units, AMD-300 with two 27Gb disks (RAID-0), 256Mb memory </col>
2824       </row>
2825       <row>
2826         <col> Object_owner </col>
2827         <col>
2828           <para>Brenno de Winter</para>
2829           <para>De Winter Information Solutions</para>
2830           <para>Your street here 32</para>
2831           <para>9999 XX YOUR CITY</para>
2832           <para>THE NETHERLANDS</para>
2833           <para>Phone: +31 XXX XXX XXX</para>
2834         </col>
2835       </row>
2836       <row>
2837         <col> Physical_location </col>
2838         <col>
2839           <para>Internet Provider XYZ</para>
2840           <para>Your street here 38</para>
2841           <para>9999 XX YOUR CITY</para>
2842           <para>THE NETHERLANDS</para>
2843           <para>Phone: +31 XXX XXX XXX</para>
2844           
2845           <para>Dataroom. System: Q7845</para>
2846         </col>
2847       </row>
2848       <row>
2849         <col> Remark </col>
2850         <col>
2851           <para>A replacement system is available at the office location.
2852                The following persons have been authorized to enter the data room at the ISP:</para>
2853           <para>* Arjen Baart</para>
2854           <para>* Peter Busser</para>
2855           <para>* Brenno de Winter</para>
2856         </col>
2857       </row>
2858     </table>
2859     <para/>
2860 </subsubsection>
2861 </subsection>
2862
2863 <subsection>
2864   <heading>object_issue. </heading>
2865 <para>
2866 This table will store the policy on a certain issue like the priority being
2867 recognized and special actions to take. Since values in this table are bound to the object, responses to the same incident can lead to different alert levels based on the importance of the object.
2868 Since policies are utilized by the systems continuously all other process will rely on this index,
2869 while users will change the values occasionally.
2870 </para>
2871
2872 <subsubsection>
2873   <heading>The fields.</heading>
2874
2875 <para>
2876 The fields of <emph>object_issue</emph>:
2877 </para>
2878
2879 <table cpos='lllp{6cm}'>
2880       <thead>
2881         <col>
2882           <para>Fieldname</para>
2883         </col>
2884         <col>
2885           <para>Fieldtype</para>
2886         </col>
2887         <col>
2888           <para>Size</para>
2889         </col>
2890         <col>
2891           <para>Remarks</para>
2892         </col>
2893       </thead>
2894       <row>
2895         <col>
2896           <para>objectid</para>
2897         </col>
2898         <col>
2899           <para>Bigint</para>
2900         </col>
2901         <col>
2902           <para>8</para>
2903         </col>
2904         <col>
2905           <para>Reference to the object</para>
2906         </col>
2907       </row>
2908       <row>
2909         <col>
2910           <para>type_of_issueid</para>
2911         </col>
2912         <col>
2913           <para>Bigint</para>
2914         </col>
2915         <col>
2916           <para>8</para>
2917         </col>
2918         <col>
2919           <para>Reference to the <emph>type_of_issue</emph> indicating
2920            how we will handle this type of issue for this particular object. If nothing is entered here, the default rules apply.</para>
2921         </col>
2922       </row>
2923       <row>
2924         <col>
2925           <para>default_priority</para>
2926         </col>
2927         <col>
2928           <para>Int</para>
2929         </col>
2930         <col>
2931           <para>4</para>
2932         </col>
2933         <col>
2934           <para>The priority that will be set automatically when this type of
2935            issue is entered into the system.</para>
2936         </col>
2937       </row>
2938       <row>
2939         <col>
2940           <para>escalation</para>
2941         </col>
2942         <col>
2943           <para>Boolean</para>
2944         </col>
2945         <col>
2946           <para/>
2947         </col>
2948         <col>
2949           <para>Will the system perform automatic escalation (T = Yes / F = No)</para>
2950         </col>
2951       </row>
2952       <row>
2953         <col>
2954           <para>escalation_time</para>
2955         </col>
2956         <col>
2957           <para>Time</para>
2958         </col>
2959         <col>
2960           <para/>
2961         </col>
2962         <col>
2963           <para>The time after which a higher priority is awarded to the notification.</para>
2964         </col>
2965       </row>
2966       <row>
2967         <col>
2968           <para>max_priority</para>
2969         </col>
2970         <col>
2971           <para>Int</para>
2972         </col>
2973         <col>
2974           <para/>
2975         </col>
2976         <col>
2977           <para>The maximum priority given to this type of notification. This will prevent an endless escalation of the issue. No priority can be higher than 1.</para>
2978         </col>
2979       </row>
2980       <row>
2981         <col>
2982           <para>adjusted_setting</para>
2983         </col>
2984         <col>
2985           <para>Text</para>
2986         </col>
2987         <col>
2988           <para/>
2989         </col>
2990         <col>
2991           <para>Some checks can have a special settings (for instance alert
2992            after 5 failed login attempts instead of 3).</para>
2993         </col>
2994       </row>
2995 </table>
2996 </subsubsection>
2997
2998 <subsubsection>
2999   <heading>The indexes.</heading>
3000
3001 <para>
3002 These are the indices:
3003 </para>
3004 <table cpos='lll'>
3005       <thead>
3006         <col>
3007           <para>Indexname</para>
3008         </col>
3009         <col>
3010           <para>Field</para>
3011         </col>
3012         <col>
3013           <para>Characteristics</para>
3014         </col>
3015       </thead>
3016       <row>
3017         <col>
3018           <para>obi_pk</para>
3019         </col>
3020         <col>
3021           <para>objectid</para>
3022         </col>
3023         <col>
3024           <para>Primary key</para>
3025         </col>
3026       </row>
3027       <row>
3028         <col>
3029           <para/>
3030         </col>
3031         <col>
3032           <para>type_of_issue_id</para>
3033         </col>
3034         <col>
3035           <para>Primary key</para>
3036         </col>
3037       </row>
3038       <row>
3039         <col>
3040           <para>obi_objectid</para>
3041         </col>
3042         <col>
3043           <para>Objectid</para>
3044         </col>
3045         <col>
3046           <para/>
3047         </col>
3048       </row>
3049       <row>
3050         <col>
3051           <para>obi_type_of_issueid</para>
3052         </col>
3053         <col>
3054           <para>type_of_issue_id</para>
3055         </col>
3056         <col>
3057           <para/>
3058         </col>
3059       </row>
3060     </table>
3061     </subsubsection>
3062
3063 <subsubsection>
3064    <heading>The relationships.</heading>
3065
3066 <para>
3067 Relationships with other tables:
3068 </para>
3069
3070 <table cpos='llp{6cm}'>
3071       <thead>
3072         <col>
3073           <para>Fieldname</para>
3074         </col>
3075         <col>
3076           <para>Remote Table</para>
3077         </col>
3078         <col>
3079           <para>Remarks</para>
3080         </col>
3081       </thead>
3082       <row>
3083         <col>
3084           <para>ObjectID</para>
3085         </col>
3086         <col>
3087           <para>Object</para>
3088         </col>
3089         <col>
3090           <para>Reference to the <emph>object</emph> (which object does this apply to).</para>
3091         </col>
3092       </row>
3093       <row>
3094         <col>
3095           <para>Type_of_issueid</para>
3096         </col>
3097         <col>
3098           <para>Type_of_issue</para>
3099         </col>
3100         <col>
3101           <para>Reference to the type of issue.</para>
3102         </col>
3103       </row>
3104     </table>
3105
3106 <para>In the model this look like this:</para>
3107 <para>
3108     <picture src="erd-objissue.png" eps="erd-objissue"/>
3109 </para>
3110
3111 </subsubsection>
3112 <subsubsection>
3113   <heading>Sample data.</heading>
3114
3115 <para>
3116 Some sample data:
3117 </para>
3118 <table cpos='lllllll'>
3119       <thead>
3120         <col>
3121           <para>Objectid</para>
3122         </col>
3123         <col>
3124           <para>Type_of_issue_id</para>
3125         </col>
3126         <col>
3127           <para>Default Priority</para>
3128         </col>
3129         <col>
3130           <para>Escalation</para>
3131         </col>
3132         <col>
3133           <para>Escalation_time</para>
3134         </col>
3135         <col>
3136           <para>Max_priority</para>
3137         </col>
3138         <col>
3139           <para>Adjusted_setting</para>
3140         </col>
3141       </thead>
3142       <row>
3143         <col>
3144           <para>1</para>
3145         </col>
3146         <col>
3147           <para>1</para>
3148         </col>
3149         <col>
3150           <para>3</para>
3151         </col>
3152         <col>
3153           <para>T</para>
3154         </col>
3155         <col>
3156           <para>00:15:00</para>
3157         </col>
3158         <col>
3159           <para>1</para>
3160         </col>
3161         <col>
3162           <para/>
3163         </col>
3164       </row>
3165       <row>
3166         <col>
3167           <para>1</para>
3168         </col>
3169         <col>
3170           <para>2</para>
3171         </col>
3172         <col>
3173           <para>4</para>
3174         </col>
3175         <col>
3176           <para>T</para>
3177         </col>
3178         <col>
3179           <para>00:30:00</para>
3180         </col>
3181         <col>
3182           <para>2</para>
3183         </col>
3184         <col>
3185           <para/>
3186         </col>
3187       </row>
3188       <row>
3189         <col>
3190           <para>1</para>
3191         </col>
3192         <col>
3193           <para>3</para>
3194         </col>
3195         <col>
3196           <para>5</para>
3197         </col>
3198         <col>
3199           <para>F</para>
3200         </col>
3201         <col>
3202           <para/>
3203         </col>
3204         <col>
3205           <para/>
3206         </col>
3207         <col>
3208           <para>7</para>
3209         </col>
3210       </row>
3211       <row>
3212         <col>
3213           <para>2</para>
3214         </col>
3215         <col>
3216           <para>1</para>
3217         </col>
3218         <col>
3219           <para>4</para>
3220         </col>
3221         <col>
3222           <para>T</para>
3223         </col>
3224         <col>
3225           <para>00:45:00</para>
3226         </col>
3227         <col>
3228           <para>2</para>
3229         </col>
3230         <col>
3231           <para/>
3232         </col>
3233       </row>
3234       <row>
3235         <col>
3236           <para>2</para>
3237         </col>
3238         <col>
3239           <para>3</para>
3240         </col>
3241         <col>
3242           <para>5</para>
3243         </col>
3244         <col>
3245           <para>F</para>
3246         </col>
3247         <col>
3248           <para/>
3249         </col>
3250         <col>
3251           <para/>
3252         </col>
3253         <col>
3254           <para>8</para>
3255         </col>
3256       </row>
3257     </table>
3258 </subsubsection>
3259 </subsection>
3260
3261 <subsection>
3262   <heading>object_priority.</heading>
3263
3264 <para>
3265 By default a prioritycode has a certain meaning. But default behaviour can be used for most cases, but not all. For some objects a deviation would be usefull. For instance a very important webserver under an attack should maybe alarm more agressive than a printer-server that is used only marginally. This table stores per object how a certain level of priority is being dealt with. The main issue is the question: What policies do apply? If nothing is available default behaviour as defined in the table priority will apply. This table is mostly used for retrieval, so firm indexing is logic.
3266 </para>
3267
3268 <subsubsection>
3269   <heading>The fields.</heading>
3270
3271 <para>
3272 The fields are listed below:
3273 </para>
3274 <table cpos='lllp{6cm}'>
3275       <thead>
3276         <col>
3277           <para>Fieldname</para>
3278         </col>
3279         <col>
3280           <para>Fieldtype</para>
3281         </col>
3282         <col>
3283           <para>Size</para>
3284         </col>
3285         <col>
3286           <para>Remarks</para>
3287         </col>
3288       </thead>
3289       <row>
3290         <col>
3291           <para>objectid</para>
3292         </col>
3293         <col>
3294           <para>Bigint</para>
3295         </col>
3296         <col>
3297           <para>8</para>
3298         </col>
3299         <col>
3300           <para>Reference to the object</para>
3301         </col>
3302       </row>
3303       <row>
3304         <col>
3305           <para>priorityid</para>
3306         </col>
3307         <col>
3308           <para>Int</para>
3309         </col>
3310         <col>
3311           <para>4</para>
3312         </col>
3313         <col>
3314           <para>Priority.</para>
3315         </col>
3316       </row>
3317       <row>
3318         <col>
3319           <para>send_mail</para>
3320         </col>
3321         <col>
3322           <para>Boolean</para>
3323         </col>
3324         <col>
3325           <para/>
3326         </col>
3327         <col>
3328           <para>Send an e-mail if this priority is set? Yes = T / No = F</para>
3329         </col>
3330       </row>
3331       <row>
3332         <col>
3333           <para>send_sms</para>
3334         </col>
3335         <col>
3336           <para>Boolean</para>
3337         </col>
3338         <col>
3339           <para/>
3340         </col>
3341         <col>
3342           <para>Send a sms message if this priority is set? Yes = T / No = F</para>
3343         </col>
3344       </row>
3345       <row>
3346         <col>
3347           <para>send_fax</para>
3348         </col>
3349         <col>
3350           <para>Boolean</para>
3351         </col>
3352         <col>
3353           <para/>
3354         </col>
3355         <col>
3356           <para>Send a fax if this priority is set? Yes = T / No = F</para>
3357         </col>
3358       </row>
3359       <row>
3360         <col>
3361           <para>repeat_notification</para>
3362         </col>
3363         <col>
3364           <para>Boolean</para>
3365         </col>
3366         <col>
3367           <para/>
3368         </col>
3369         <col>
3370           <para>Repeat this notification if no action occurs within a certain timeframe. Yes = T / No = F</para>
3371         </col>
3372       </row>
3373       <row>
3374         <col>
3375           <para>interval_for_repeat</para>
3376         </col>
3377         <col>
3378           <para>Time</para>
3379         </col>
3380         <col>
3381           <para/>
3382         </col>
3383         <col>
3384           <para>Time interval that is set to wait for a response.</para>
3385         </col>
3386       </row>
3387     </table>
3388     </subsubsection>
3389
3390 <subsubsection>
3391   <heading>The indexes.</heading>
3392
3393 <para>
3394 Indices of the <emph>object_priority</emph> table:
3395 </para>
3396
3397 <table cpos='lll'>
3398       <thead>
3399         <col>
3400           <para>Indexname</para>
3401         </col>
3402         <col>
3403           <para>Field</para>
3404         </col>
3405         <col>
3406           <para>Characteristics</para>
3407         </col>
3408       </thead>
3409       <row>
3410         <col>
3411           <para>obi_pk</para>
3412         </col>
3413         <col>
3414           <para>objectid</para>
3415         </col>
3416         <col>
3417           <para>Primary key</para>
3418         </col>
3419       </row>
3420       <row>
3421         <col>
3422           <para/>
3423         </col>
3424         <col>
3425           <para>priorityid</para>
3426         </col>
3427         <col>
3428           <para>Primary key</para>
3429         </col>
3430       </row>
3431       <row>
3432         <col>
3433           <para>obi_objectid</para>
3434         </col>
3435         <col>
3436           <para>Objectid</para>
3437         </col>
3438         <col>
3439           <para/>
3440         </col>
3441       </row>
3442       <row>
3443         <col>
3444           <para>obi_type_of_issue_id</para>
3445         </col>
3446         <col>
3447           <para>type_of_issue_id</para>
3448         </col>
3449         <col>
3450           <para/>
3451         </col>
3452       </row>
3453     </table>
3454 </subsubsection>
3455
3456 <subsubsection>
3457   <heading>The relationships.</heading>
3458
3459 <para>
3460 Relationships with other tables:
3461 </para>
3462
3463 <table cpos='llp{6cm}'>
3464       <thead>
3465         <col>
3466           <para>Fieldname</para>
3467         </col>
3468         <col>
3469           <para>Remote Table</para>
3470         </col>
3471         <col>
3472           <para>Remarks</para>
3473         </col>
3474       </thead>
3475       <row>
3476         <col>
3477           <para>ObjectID</para>
3478         </col>
3479         <col>
3480           <para>Object</para>
3481         </col>
3482         <col>
3483           <para>Reference to the object (which object does this apply to).</para>
3484         </col>
3485       </row>
3486       <row>
3487         <col>
3488           <para>Priorityid</para>
3489         </col>
3490         <col>
3491           <para>Priority</para>
3492         </col>
3493         <col>
3494           <para>Reference to the priority.</para>
3495         </col>
3496       </row>
3497     </table>
3498
3499 <para>
3500 In the model this look like this:
3501 </para>
3502 <para>
3503 <picture src="erd-objprior.png" eps="erd-objprior"/>
3504 </para>
3505 </subsubsection>
3506 </subsection>
3507
3508 <subsection>
3509   <heading>object_service</heading>
3510
3511 <para>
3512 The object service table indicates which services should report itself to the Gnucomo-system.
3513 If input fails to show up a notification can be generated.
3514 </para>
3515
3516 <subsubsection>
3517   <heading>The fields.</heading>
3518
3519 <para>
3520 The fields are listed below:
3521 </para>
3522
3523 <table cpos='lllp{6cm}'>
3524       <thead>
3525         <col>
3526           <para>Fieldname</para>
3527         </col>
3528         <col>
3529           <para>Fieldtype</para>
3530         </col>
3531         <col>
3532           <para>Size</para>
3533         </col>
3534         <col>
3535           <para>Remarks</para>
3536         </col>
3537       </thead>
3538       <row>
3539         <col>
3540           <para>objectid</para>
3541         </col>
3542         <col>
3543           <para>Bigint</para>
3544         </col>
3545         <col>
3546           <para>8</para>
3547         </col>
3548         <col>
3549           <para>Reference to the object</para>
3550         </col>
3551       </row>
3552       <row>
3553         <col>
3554           <para>servicecode</para>
3555         </col>
3556         <col>
3557           <para>Text</para>
3558         </col>
3559         <col>
3560           <para/>
3561         </col>
3562         <col>
3563           <para>Reference to service.</para>
3564         </col>
3565       </row>
3566       <row>
3567         <col>
3568           <para>expected_interval</para>
3569         </col>
3570         <col>
3571           <para>Bigint</para>
3572         </col>
3573         <col>
3574           <para>8</para>
3575         </col>
3576         <col>
3577           <para>The expected interval in minutes between two log entries.
3578           If this gives a time-out a notification is generated<footnote>To avoid many
3579           false positives it may be wise to give the system always 1 or 2 minutes extra time.
3580           If for some reason a connection is slow or a mail-daemon restarted
3581           the effect would generate tuns of notifications.</footnote>.
3582           The following values can be considered the most common:</para>
3583           <para>* 60 hourly entries</para>
3584           <para>* 120 two hourly entries</para>
3585           <para>* 240 four hourly entries</para>
3586           <para>* 480 eight hourly entries</para>
3587           <para>* 920 twelve hourly entries</para>
3588           <para>* 1840 daily entries</para>
3589           <para>* 12880 weekly entries</para>
3590         </col>
3591       </row>
3592       <row>
3593         <col>
3594           <para>last_entry</para>
3595         </col>
3596         <col>
3597           <para>Timestamp</para>
3598         </col>
3599         <col>
3600           <para/>
3601         </col>
3602         <col>
3603           <para>The timestamp of the last entry (for detecting exceeded interval).
3604           This field could be derived from the log-table as well, but the
3605           redundance gives a performance on detection that is useful, since a
3606           check should run every minute.</para>
3607         </col>
3608       </row>
3609       <row>
3610         <col>
3611           <para>default_priority</para>
3612         </col>
3613         <col>
3614           <para>Int</para>
3615         </col>
3616         <col>
3617           <para>4</para>
3618         </col>
3619         <col>
3620           <para>Priority given if this service didn't occur.</para>
3621         </col>
3622       </row>
3623       <row>
3624         <col>
3625           <para>maximum_priority</para>
3626         </col>
3627         <col>
3628           <para>Int</para>
3629         </col>
3630         <col>
3631           <para>4</para>
3632         </col>
3633         <col>
3634           <para>Maximum priority (in case of escalation)</para>
3635         </col>
3636       </row>
3637       <row>
3638         <col>
3639           <para>accepted</para>
3640         </col>
3641         <col>
3642           <para>Boolean</para>
3643         </col>
3644         <col>
3645           <para/>
3646         </col>
3647         <col>
3648           <para>If a service hasn't been set, the application user should
3649           indicate that this is valid (logs shouldn't just appear).
3650           New entries will be added automatically but still have to be verified.</para>
3651         </col>
3652       </row>
3653     </table>
3654 </subsubsection>
3655
3656 <subsubsection>
3657   <heading>The indexes.</heading>
3658
3659 <para>
3660 The table is indexed on the following fields:
3661 </para>
3662 <table cpos='lll'>
3663       <thead>
3664         <col>
3665           <para>Indexname</para>
3666         </col>
3667         <col>
3668           <para>Field</para>
3669         </col>
3670         <col>
3671           <para>Characteristics</para>
3672         </col>
3673       </thead>
3674       <row>
3675         <col>
3676           <para>obs_pk</para>
3677         </col>
3678         <col>
3679           <para>objectid</para>
3680         </col>
3681         <col>
3682           <para>Primary key</para>
3683         </col>
3684       </row>
3685       <row>
3686         <col>
3687           <para/>
3688         </col>
3689         <col>
3690           <para>servicecode</para>
3691         </col>
3692         <col>
3693           <para>Primary key</para>
3694         </col>
3695       </row>
3696       <row>
3697         <col>
3698           <para>obs_objectid</para>
3699         </col>
3700         <col>
3701           <para>objectid</para>
3702         </col>
3703         <col>
3704           <para/>
3705         </col>
3706       </row>
3707       <row>
3708         <col>
3709           <para>obs_servicecode</para>
3710         </col>
3711         <col>
3712           <para>servicecode</para>
3713         </col>
3714         <col>
3715           <para/>
3716         </col>
3717       </row>
3718       <row>
3719         <col>
3720           <para>obs_accepted</para>
3721         </col>
3722         <col>
3723           <para>accepted</para>
3724         </col>
3725         <col>
3726           <para/>
3727         </col>
3728       </row>
3729     </table>
3730 </subsubsection>
3731
3732 <subsubsection>
3733    <heading>The relationships.</heading>
3734
3735 <para>
3736 Relationships with other tables:
3737 </para>
3738
3739 <table cpos='llp{8cm}'>
3740       <thead>
3741         <col>
3742           <para>Fieldname</para>
3743         </col>
3744         <col>
3745           <para>Remote Table</para>
3746         </col>
3747         <col>
3748           <para>Remarks</para>
3749         </col>
3750       </thead>
3751       <row>
3752         <col>
3753           <para>objectID</para>
3754         </col>
3755         <col>
3756           <para>Object</para>
3757         </col>
3758         <col>
3759           <para>Reference to the object (which object does this apply to).</para>
3760         </col>
3761       </row>
3762       <row>
3763         <col>
3764           <para>servicecode</para>
3765         </col>
3766         <col>
3767           <para>Service</para>
3768         </col>
3769         <col>
3770           <para>Reference to the service table. </para>
3771         </col>
3772       </row>
3773     </table>
3774
3775 <para>In the model this look like this:</para>
3776 <para>
3777   <picture src="erd-objservice.png" eps="erd-objservice"/>
3778 </para>
3779 </subsubsection>
3780 </subsection>
3781
3782 <subsection>
3783   <heading>object_system_user</heading>
3784
3785 <para>
3786 Every object knows users either by the security of the object itself or through a central database (like LDAP for instance). Initially a new object can sent the userlist to gnucomo. Any username that isn't in the userlist is potentially dangerous. To avoid any mis-understandings this user is not a gnucomo-user, but a user on a remote system. So during the processing the read will be done more than the data entry (one account will most likely do multiple actions) and
3787 that makes heavy indexing logic.
3788 </para>
3789 <subsubsection>
3790   <heading>The fields.</heading>
3791
3792 <para>
3793 The fields of <emph>object_system_user</emph> are listed below:
3794 </para>
3795
3796 <table cpos='lllp{6cm}'>
3797       <thead>
3798         <col>
3799           <para>Fieldname</para>
3800         </col>
3801         <col>
3802           <para>Fieldtype</para>
3803         </col>
3804         <col>
3805           <para>Size</para>
3806         </col>
3807         <col>
3808           <para>Remarks</para>
3809         </col>
3810       </thead>
3811       <row>
3812         <col>
3813           <para>objectid</para>
3814         </col>
3815         <col>
3816           <para>Bigint</para>
3817         </col>
3818         <col>
3819           <para>8</para>
3820         </col>
3821         <col>
3822           <para>Reference to the object</para>
3823         </col>
3824       </row>
3825       <row>
3826         <col>
3827           <para>system_username</para>
3828         </col>
3829         <col>
3830           <para>Text</para>
3831         </col>
3832         <col>
3833           <para/>
3834         </col>
3835         <col>
3836           <para>Username on the object/system.</para>
3837         </col>
3838       </row>
3839       <row>
3840         <col>
3841           <para>can_login</para>
3842         </col>
3843         <col>
3844           <para>Boolean</para>
3845         </col>
3846         <col>
3847           <para/>
3848         </col>
3849         <col>
3850           <para>Can this user login (T = Yes / F = No)?</para>
3851         </col>
3852       </row>
3853       <row>
3854         <col>
3855           <para>can_be_root</para>
3856         </col>
3857         <col>
3858           <para>Boolean</para>
3859         </col>
3860         <col>
3861           <para/>
3862         </col>
3863         <col>
3864           <para>Can this user become root (T = Yes / F = No)?</para>
3865         </col>
3866       </row>
3867     </table>
3868     </subsubsection>
3869
3870 <subsubsection>
3871   <heading>The indexes.</heading>
3872
3873 <para>
3874 The table is indexed on the following fields:
3875 </para>
3876 <table cpos='lll'>
3877       <thead>
3878         <col>
3879           <para>Indexname</para>
3880         </col>
3881         <col>
3882           <para>Field</para>
3883         </col>
3884         <col>
3885           <para>Characteristics</para>
3886         </col>
3887       </thead>
3888       <row>
3889         <col>
3890           <para>osu_pk</para>
3891         </col>
3892         <col>
3893           <para>objectid, system_username</para>
3894         </col>
3895         <col>
3896           <para>Primary key</para>
3897         </col>
3898       </row>
3899       <row>
3900         <col>
3901           <para/>
3902         </col>
3903         <col>
3904           <para>system_username</para>
3905         </col>
3906         <col>
3907           <para>Primary key</para>
3908         </col>
3909       </row>
3910       <row>
3911         <col>
3912           <para>osu_objectid</para>
3913         </col>
3914         <col>
3915           <para>objectid</para>
3916         </col>
3917         <col>
3918           <para/>
3919         </col>
3920       </row>
3921       <row>
3922         <col>
3923           <para>osu_system_username</para>
3924         </col>
3925         <col>
3926           <para>system_username</para>
3927         </col>
3928         <col>
3929           <para/>
3930         </col>
3931       </row>
3932     </table>
3933     </subsubsection>
3934
3935 <subsubsection>
3936   <heading>The relationships.</heading>
3937
3938 <para>
3939 Relationships with other tables:
3940 </para>
3941 <table cpos='llp{8cm}'>
3942       <thead>
3943         <col>
3944           <para>Fieldname</para>
3945         </col>
3946         <col>
3947           <para>Remote Table</para>
3948         </col>
3949         <col>
3950           <para>Remarks</para>
3951         </col>
3952       </thead>
3953       <row>
3954         <col>
3955           <para>ObjectID</para>
3956         </col>
3957         <col>
3958           <para>Object</para>
3959         </col>
3960         <col>
3961           <para>Reference to the object (which object does this apply to).</para>
3962         </col>
3963       </row>
3964       <row>
3965         <col>
3966           <para>System_username</para>
3967         </col>
3968         <col>
3969           <para>Log</para>
3970         </col>
3971         <col>
3972           <para>Log entries can refer to the system username.</para>
3973         </col>
3974       </row>
3975     </table>
3976     <para>In the model this look like this:</para>
3977     <para/>
3978
3979     <para>
3980       <picture src="erd-objsysusr.png" eps="erd-objsysusr"/>
3981     </para>
3982     </subsubsection>
3983 </subsection>
3984
3985 <subsection>
3986   <heading>object_user</heading>
3987
3988 <para>
3989 This table will enable users to get access to the information belonging to an object.
3990 Also this table is mainly used for data retrieval and will rely on the indexes.
3991 </para>
3992 <subsubsection>
3993   <heading>The fields.</heading>
3994
3995 <para>
3996 The fields of <emph>object_user</emph> are listed below:
3997 </para>
3998
3999 <table cpos='lllp{6cm}'>
4000       <thead>
4001         <col>
4002           <para>Fieldname</para>
4003         </col>
4004         <col>
4005           <para>Fieldtype</para>
4006         </col>
4007         <col>
4008           <para>Size</para>
4009         </col>
4010         <col>
4011           <para>Remarks</para>
4012         </col>
4013       </thead>
4014       <row>
4015         <col>
4016           <para>Objectid</para>
4017         </col>
4018         <col>
4019           <para>Bigint</para>
4020         </col>
4021         <col>
4022           <para>8</para>
4023         </col>
4024         <col>
4025           <para>Reference to the <emph>object</emph></para>
4026         </col>
4027       </row>
4028       <row>
4029         <col>
4030           <para>Username</para>
4031         </col>
4032         <col>
4033           <para>Text</para>
4034         </col>
4035         <col>
4036           <para/>
4037         </col>
4038         <col>
4039           <para>Username in gnucomo. A reference to <emph>user</emph>.</para>
4040         </col>
4041       </row>
4042       <row>
4043         <col>
4044           <para>Security_level</para>
4045         </col>
4046         <col>
4047           <para>Int</para>
4048         </col>
4049         <col>
4050           <para/>
4051         </col>
4052         <col>
4053           <para>The security-level granted to this user.</para>
4054         </col>
4055       </row>
4056     </table>
4057 </subsubsection>
4058
4059 <subsubsection>
4060   <heading>The indexes.</heading>
4061 <para>
4062 The indices of the <emph>object_user</emph> table:
4063 </para>
4064 <table cpos='lll'>
4065       <thead>
4066         <col>
4067           <para>Indexname</para>
4068         </col>
4069         <col>
4070           <para>Field</para>
4071         </col>
4072         <col>
4073           <para>Characteristics</para>
4074         </col>
4075       </thead>
4076       <row>
4077         <col>
4078           <para>ous_pk</para>
4079         </col>
4080         <col>
4081           <para>objectid</para>
4082         </col>
4083         <col>
4084           <para>Primary key</para>
4085         </col>
4086       </row>
4087       <row>
4088         <col>
4089           <para/>
4090         </col>
4091         <col>
4092           <para>username</para>
4093         </col>
4094         <col>
4095           <para>Primary key</para>
4096         </col>
4097       </row>
4098       <row>
4099         <col>
4100           <para>ous_objectid</para>
4101         </col>
4102         <col>
4103           <para>objectid</para>
4104         </col>
4105         <col>
4106           <para/>
4107         </col>
4108       </row>
4109       <row>
4110         <col>
4111           <para>ous_username</para>
4112         </col>
4113         <col>
4114           <para>username</para>
4115         </col>
4116         <col>
4117           <para/>
4118         </col>
4119       </row>
4120       <row>
4121         <col>
4122           <para>ous_security_level</para>
4123         </col>
4124         <col>
4125           <para>ous_security_level</para>
4126         </col>
4127         <col>
4128           <para/>
4129         </col>
4130       </row>
4131     </table>
4132 </subsubsection>
4133
4134 <subsubsection>
4135   <heading>The relationships.</heading>
4136
4137 <para>
4138 Relationships with other tables:
4139 </para>
4140
4141 <table cpos='llp{8cm}'>
4142       <thead>
4143         <col>
4144           <para>Fieldname</para>
4145         </col>
4146         <col>
4147           <para>Remote Table</para>
4148         </col>
4149         <col>
4150           <para>Remarks</para>
4151         </col>
4152       </thead>
4153       <row>
4154         <col>
4155           <para>objectID</para>
4156         </col>
4157         <col>
4158           <para>object</para>
4159         </col>
4160         <col>
4161           <para>Reference to the object (which object does this apply to).</para>
4162         </col>
4163       </row>
4164       <row>
4165         <col>
4166           <para>username</para>
4167         </col>
4168         <col>
4169           <para>user</para>
4170         </col>
4171         <col>
4172           <para>Reference to the user.</para>
4173         </col>
4174       </row>
4175     </table>
4176
4177     <para>In the model this look like this:</para>
4178     <picture src="erd-objusr.png" eps="erd-objusr"/>
4179
4180 </subsubsection>
4181 </subsection>
4182
4183 <subsection>
4184 <heading>parameter</heading>
4185 <para>
4186 The parameter table stores the operational parameters of a monitored object.
4187 The parameters of an object describe the object's resources and configurations.
4188 For each object, a large set of parameters can be defined. They range from
4189 anything like file systems and installed packages to the system's users.
4190 </para>
4191
4192 <subsubsection>
4193 <heading>The fields</heading>
4194 <para>
4195 The fields of the <emph>parameter</emph> table are listed below:
4196 </para>
4197 <table cpos='lllp{6cm}'>
4198       <thead>
4199         <col> Fieldname </col> <col> Fieldtype </col> <col> Size </col>
4200         <col> Remarks </col>
4201       </thead>
4202       <row>
4203         <col>paramid</col><col>bigserial</col><col>8</col>
4204         <col>Uniquely identifies the parameter. Used in property and history tables.</col>
4205       </row>
4206       <row>
4207         <col>objectid</col><col>bigint</col><col>8</col>
4208         <col>The object of which this is a parameter. Refers to the object table.</col>
4209       </row>
4210       <row>
4211         <col>name</col><col>text</col><col> </col>
4212         <col>Name of the parameter to identify the resource</col>
4213       </row>
4214       <row>
4215         <col>class</col><col>text</col><col> </col>
4216         <col>Similar parameters are in the same class. Refers to the
4217              <emph>parameter_class</emph> table.
4218         </col>
4219       </row>
4220       <row>
4221         <col>description</col><col>text</col><col> </col>
4222         <col>A verbose description of the parameter</col>
4223       </row>
4224       
4225 </table>
4226
4227 <para>
4228 The combination of objectid, name and class must be unique.
4229 </para>
4230
4231 </subsubsection>
4232 <subsubsection>
4233 <heading>Sample data</heading>
4234
4235 <para>
4236 The table below lists a few examples of parameters
4237 </para>
4238 <table cpos='lllll'>
4239    <thead>
4240       <col>paramid</col><col>objectid</col><col>name</col><col>class</col><col>description</col>
4241    </thead>
4242    <row>
4243       <col>1</col><col>1</col><col>/</col><col>filesystem</col><col>The root filesystem</col>
4244    </row>
4245    <row>
4246       <col>2</col><col>1</col><col>/home</col><col>filesystem</col><col>Our users' homedirs</col>
4247    </row>
4248    <row>
4249       <col>3</col><col>1</col><col>glibc</col><col>package</col><col>The standard C library</col>
4250    </row>
4251    <row>
4252       <col>4</col><col>1</col><col>arjen</col><col>user</col><col>Arjen Baart</col>
4253    </row>
4254 </table>
4255 </subsubsection>
4256 </subsection>
4257
4258
4259 <subsection>
4260 <heading>parameter_class</heading>
4261 <para>
4262 Each parameter is defined to be of a certain <emph>class</emph>.
4263 The class defines which properties a parameter of that class may have.
4264 </para>
4265
4266 <subsubsection>
4267 <heading>The fields</heading>
4268 <para>
4269 The fields of the <emph>parameter_class</emph> table are listed below:
4270 </para>
4271 <table cpos='lllp{6cm}'>
4272       <thead>
4273         <col> Fieldname </col> <col> Fieldtype </col> <col> Size </col>
4274         <col> Remarks </col>
4275       </thead>
4276       <row>
4277         <col>name</col><col>text</col><col> </col>
4278         <col>Name of the class</col>
4279       </row>
4280       <row>
4281         <col>property_name</col><col>text</col><col> </col>
4282         <col>Name of the property. Used in property table.</col>
4283       </row>
4284       <row>
4285         <col>description</col><col>text</col><col> </col>
4286         <col>A verbose description of the property</col>
4287       </row>
4288       <row>
4289         <col>property_type</col><col>text</col><col> </col>
4290         <col>Either 'STATIC' or 'DYNAMIC'</col>
4291       </row>
4292       <row>
4293         <col>min</col><col>float</col><col>4</col>
4294         <col>The default minimum value of the property.</col>
4295       </row>
4296       <row>
4297         <col>max</col><col>float</col><col>4</col>
4298         <col>The default maximum value of the property.</col>
4299       </row>
4300       <row>
4301         <col>notify</col><col>boolean</col><col>1</col>
4302         <col>If TRUE, create a notification when something about the property or
4303              the parameter changes.
4304         </col>
4305       </row>
4306       
4307 </table>
4308
4309 <para>
4310 The combination of name and property_name must be unique.
4311 Note that the <emph>min</emph> and <emph>max</emph> fields are used
4312 only for properties of a numerical nature.
4313 </para>
4314
4315 </subsubsection>
4316 <subsubsection>
4317 <heading>Sample data</heading>
4318
4319 <para>
4320 The table below lists a few examples of parameter classes
4321 </para>
4322 <table cpos='lllllll'>
4323    <thead>
4324       <col>name</col><col>property_name</col><col>description</col><col>property_type</col>
4325       <col>min</col><col>max</col><col>notify</col>
4326    </thead>
4327    <row>
4328       <col>package</col><col>version</col><col>The installed version</col><col>STATIC</col>
4329       <col> </col><col> </col><col>true</col>
4330    </row>
4331 </table>
4332 </subsubsection>
4333 </subsection>
4334
4335
4336 <subsection>
4337 <heading>parameter_notification</heading>
4338 <para>
4339 The parameter_notification table defines the relationship between <emph>parameters</emph>
4340 and <emph>notifications</emph>.
4341 Whenever a parameter is changed, i.e. the parameter is created, one of its
4342 properties changed or a parameter is removed, this may result in a notification.
4343 This table provides the link between that notification and the change in
4344 parameter that the notification is about.
4345 Note that a single notification may be created for a number of changes in
4346 parameters.
4347 </para>
4348
4349 <subsubsection>
4350 <heading>The fields</heading>
4351 <para>
4352 The fields of the <emph>parameter_notification</emph> table are listed below:
4353 </para>
4354 <table cpos='lllp{6cm}'>
4355       <thead>
4356         <col> Fieldname </col> <col> Fieldtype </col> <col> Size </col>
4357         <col> Remarks </col>
4358       </thead>
4359       <row>
4360         <col>notificationid</col><col>bigint</col><col>8</col>
4361         <col>The notification for the changed parameters. Refers to the notification table.</col>
4362       </row>
4363       <row>
4364         <col>paramid</col><col>bigserial</col><col>8</col>
4365         <col>The parameter for which the notification is made. Refers to the parameter table.</col>
4366       </row>
4367 </table>
4368
4369 <para>
4370 The combination of notificationid and paramid must be unique.
4371 </para>
4372
4373 </subsubsection>
4374 </subsection>
4375
4376 <subsection>
4377   <heading>priority</heading>
4378
4379 <para>
4380 The priority table contains information on the levels that are recognized by the system.
4381 Mainly data retrieval so depending on indexing.
4382 It needs to be said that most likely only a couple of states will exist<footnote>By default
4383 we will use five states, but many states can be given to enable all
4384 types of differentiation.</footnote>.
4385 </para>
4386
4387 <subsubsection>
4388   <heading>The fields.</heading>
4389
4390 <para>
4391 The fields of the <emph>priority</emph> table are listed below:
4392 </para>
4393
4394 <table cpos='lllp{6cm}'>
4395       <thead>
4396         <col>
4397           <para>Fieldname</para>
4398         </col>
4399         <col>
4400           <para>Fieldtype</para>
4401         </col>
4402         <col>
4403           <para>Size</para>
4404         </col>
4405         <col>
4406           <para>Remarks</para>
4407         </col>
4408       </thead>
4409       <row>
4410         <col>
4411           <para>priority</para>
4412         </col>
4413         <col>
4414           <para>Int</para>
4415         </col>
4416         <col>
4417           <para>4</para>
4418         </col>
4419         <col>
4420           <para>Priority</para>
4421         </col>
4422       </row>
4423       <row>
4424         <col>
4425           <para>send_mail</para>
4426         </col>
4427         <col>
4428           <para>Boolean</para>
4429         </col>
4430         <col>
4431           <para/>
4432         </col>
4433         <col>
4434           <para>Send an e-mail if this priority is set? Yes = T / No = F</para>
4435         </col>
4436       </row>
4437       <row>
4438         <col>
4439           <para>send_sms</para>
4440         </col>
4441         <col>
4442           <para>Boolean</para>
4443         </col>
4444         <col>
4445           <para/>
4446         </col>
4447         <col>
4448           <para>Send a sms message if this priority is set? Yes = T / No = F</para>
4449         </col>
4450       </row>
4451       <row>
4452         <col>
4453           <para>send_fax</para>
4454         </col>
4455         <col>
4456           <para>Boolean</para>
4457         </col>
4458         <col>
4459           <para/>
4460         </col>
4461         <col>
4462           <para>Send a fax if this priority is set? Yes = T / No = F</para>
4463         </col>
4464       </row>
4465       <row>
4466         <col>
4467           <para>repeat_notification</para>
4468         </col>
4469         <col>
4470           <para>Boolean</para>
4471         </col>
4472         <col>
4473           <para/>
4474         </col>
4475         <col>
4476           <para>Repeat this notification if no action occurs since the notification. Yes = T / No = F</para>
4477         </col>
4478       </row>
4479       <row>
4480         <col>
4481           <para>interval_for_repeat</para>
4482         </col>
4483         <col>
4484           <para>Time</para>
4485         </col>
4486         <col>
4487           <para/>
4488         </col>
4489         <col>
4490           <para>Time interval that is set to wait for a response.</para>
4491         </col>
4492       </row>
4493     </table>
4494 </subsubsection>
4495
4496 <subsubsection>
4497   <heading>The indexes.</heading>
4498
4499 <para>
4500 The table is indexed on the following fields:
4501 </para>
4502
4503 <table cpos='lll'>
4504       <thead>
4505         <col>
4506           <para>Indexname</para>
4507         </col>
4508         <col>
4509           <para>Field</para>
4510         </col>
4511         <col>
4512           <para>Characteristics</para>
4513         </col>
4514       </thead>
4515       <row>
4516         <col>
4517           <para>pri_pk</para>
4518         </col>
4519         <col>
4520           <para>priority</para>
4521         </col>
4522         <col>
4523           <para>Primary key</para>
4524         </col>
4525       </row>
4526     </table>
4527 </subsubsection>
4528
4529 <subsubsection>
4530   <heading>The relationships.</heading>
4531
4532 <para>
4533 Relationships with other tables:
4534 </para>
4535 <table cpos='llp{8cm}'>
4536       <thead>
4537         <col>
4538           <para>Fieldname</para>
4539         </col>
4540         <col>
4541           <para>Remote Table</para>
4542         </col>
4543         <col>
4544           <para>Remarks</para>
4545         </col>
4546       </thead>
4547       <row>
4548         <col>
4549           <para>priority</para>
4550         </col>
4551         <col>
4552           <para>object_priority</para>
4553         </col>
4554         <col>
4555           <para>Reference to the object (which object does this apply to). </para>
4556         </col>
4557       </row>
4558     </table>
4559
4560     <para>In the model this look like this:</para>
4561     <para>
4562       <picture src="erd-prior.png" eps="erd-prior"/>
4563     </para>
4564 </subsubsection>
4565 </subsection>
4566
4567 <subsection>
4568 <heading>property</heading>
4569 <para>
4570 The property table stores the actual values of the properties of
4571 operational parameters of a monitored object.
4572 </para>
4573
4574 <subsubsection>
4575 <heading>The fields</heading>
4576 <para>
4577 The fields of the <emph>property</emph> table are listed below:
4578 </para>
4579 <table cpos='lllp{6cm}'>
4580       <thead>
4581         <col> Fieldname </col> <col> Fieldtype </col> <col> Size </col>
4582         <col> Remarks </col>
4583       </thead>
4584       <row>
4585         <col>paramid</col><col>bigint</col><col>8</col>
4586         <col>The parameter to which this property belongs. Refers to the parameter table</col>
4587       </row>
4588       <row>
4589         <col>name</col><col>text</col><col> </col>
4590         <col>Name of the property</col>
4591       </row>
4592       <row>
4593         <col>value</col><col>text</col><col> </col>
4594         <col>The current value of the property</col>
4595       </row>
4596       <row>
4597         <col>type</col><col>enum</col><col> </col>
4598         <col>Dynamic or Static</col>
4599       </row>
4600       <row>
4601         <col>minimum</col><col>float</col><col>8</col>
4602         <col>The minimum value of the property (for numerical properties only)</col>
4603       </row>
4604       <row>
4605         <col>maximum</col><col>float</col><col>8</col>
4606         <col>The maximum value of the property (for numerical properties only)</col>
4607       </row>
4608       
4609 </table>
4610
4611 </subsubsection>
4612 <subsubsection>
4613 <heading>Sample data</heading>
4614
4615 <para>
4616 The table below lists a few examples of properties
4617 </para>
4618 <table cpos='llllll'>
4619    <thead>
4620       <col>paramid</col><col>name</col><col>value</col>
4621       <col>type</col><col>minimum</col><col>maximum</col>
4622    </thead>
4623    <row>
4624       <col>1</col><col>size</col><col>400000</col>
4625       <col>STATIC</col><col>100000</col><col>999999999</col>
4626    </row>
4627    <row>
4628       <col>1</col><col>used</col><col>200000</col>
4629       <col>DYNAMIC</col><col>50000</col><col>400000</col>
4630    </row>
4631    <row>
4632       <col>2</col><col>size</col><col>3000000</col>
4633       <col>STATIC</col><col>100000</col><col>999999999</col>
4634    </row>
4635    <row>
4636       <col>2</col><col>used</col><col>2000000</col>
4637       <col>DYNAMIC</col><col>50000</col><col>2700000</col>
4638    </row>
4639    <row>
4640       <col>3</col><col>version</col><col>2.2.5-39</col>
4641       <col>STATIC</col><col>0</col><col>0</col>
4642    </row>
4643 </table>
4644 </subsubsection>
4645 </subsection>
4646
4647 <subsection>
4648   <heading>service</heading>
4649
4650 <para>
4651 The table <emph>service</emph> indicates the service that can be handled by the system.
4652 Out of the servicelist the administrator can indicate what services to expect.
4653 </para>
4654 <subsubsection>
4655   <heading>The fields.</heading>
4656
4657 <para>
4658 The fields are listed below:
4659 </para>
4660 <table cpos='lllp{6cm}'>
4661       <thead>
4662         <col>
4663           <para>Fieldname</para>
4664         </col>
4665         <col>
4666           <para>Fieldtype</para>
4667         </col>
4668         <col>
4669           <para>Size</para>
4670         </col>
4671         <col>
4672           <para>Remarks</para>
4673         </col>
4674       </thead>
4675       <row>
4676         <col>
4677           <para>servicecode</para>
4678         </col>
4679         <col>
4680           <para>Text</para>
4681         </col>
4682         <col>
4683           <para/>
4684         </col>
4685         <col>
4686           <para>The code that is written for the service</para>
4687         </col>
4688       </row>
4689       <row>
4690         <col>
4691           <para>servicename</para>
4692         </col>
4693         <col>
4694           <para>Text</para>
4695         </col>
4696         <col>
4697           <para/>
4698         </col>
4699         <col>
4700           <para>The expanded name for the service</para>
4701         </col>
4702       </row>
4703       <row>
4704         <col>
4705           <para>default_priority</para>
4706         </col>
4707         <col>
4708           <para>Int</para>
4709         </col>
4710         <col>
4711           <para>4</para>
4712         </col>
4713         <col>
4714           <para>The advised priority if these log-entries don't
4715            come in<footnote>Advised priorities can be changed in the object_service
4716            table per object. </footnote>.</para>
4717         </col>
4718       </row>
4719       <row>
4720         <col>
4721           <para>max_priority</para>
4722         </col>
4723         <col>
4724           <para>Int</para>
4725         </col>
4726         <col>
4727           <para>4</para>
4728         </col>
4729         <col>
4730           <para>The maximum priority advised for this
4731           service<footnote>Advised priorities can be changed in the
4732           object_service table per object.</footnote>.</para>
4733         </col>
4734       </row>
4735     </table>
4736 </subsubsection>
4737
4738 <subsubsection>
4739   <heading>The indexes.</heading>
4740
4741 <para>
4742 The table is indexed on the following fields:
4743 </para>
4744 <table cpos='lll'>
4745       <thead>
4746         <col>
4747           <para>Indexname</para>
4748         </col>
4749         <col>
4750           <para>Field</para>
4751         </col>
4752         <col>
4753           <para>Characteristics</para>
4754         </col>
4755       </thead>
4756       <row>
4757         <col>
4758           <para>ser_pk</para>
4759         </col>
4760         <col>
4761           <para>servicecode</para>
4762         </col>
4763         <col>
4764           <para>Primary key</para>
4765         </col>
4766       </row>
4767       <row>
4768         <col>
4769           <para>ser_servicename</para>
4770         </col>
4771         <col>
4772           <para>servicename</para>
4773         </col>
4774         <col>
4775           <para>Unique</para>
4776         </col>
4777       </row>
4778     </table>
4779 </subsubsection>
4780
4781 <subsubsection>
4782   <heading>The relationships.</heading>
4783 <para>
4784 Relationships with other tables:
4785 </para>
4786 <table cpos='llp{8cm}'>
4787       <thead>
4788         <col>
4789           <para>Fieldname</para>
4790         </col>
4791         <col>
4792           <para>Remote Table</para>
4793         </col>
4794         <col>
4795           <para>Remarks</para>
4796         </col>
4797       </thead>
4798       <row>
4799         <col>
4800           <para>servicecode</para>
4801         </col>
4802         <col>
4803           <para>log</para>
4804         </col>
4805         <col>
4806           <para>What log entries have been tied to this type of service.</para>
4807         </col>
4808       </row>
4809       <row>
4810         <col>
4811           <para/>
4812         </col>
4813         <col>
4814           <para>object_service</para>
4815         </col>
4816         <col>
4817           <para>Settings for this service per object.</para>
4818         </col>
4819       </row>
4820       <row>
4821         <col>
4822           <para/>
4823         </col>
4824         <col>
4825           <para>unprocessed_log</para>
4826         </col>
4827         <col>
4828           <para>What unprocessed log entries have been tied to this type of service.</para>
4829         </col>
4830       </row>
4831     </table>
4832  
4833     <para>In the model this look like this:</para>
4834     <para>
4835       <picture src="erd-service.png" eps="erd-service"/>
4836     </para>
4837 </subsubsection>
4838 </subsection>
4839
4840 <subsection>
4841   <heading>status.</heading>
4842
4843 <para>
4844 The table <emph>status</emph> contains the possible states that a notification can have.
4845 As with the table <emph>priority</emph> these statuses are limited in number by
4846 default but can be expanded. Also here retrieval prevails above data entry and
4847 therefor indexing is important.
4848 </para>
4849
4850 <subsubsection>
4851   <heading>The fields.</heading>
4852
4853 <para>
4854 The fields of the <emph>status</emph> table are listed below:
4855 </para>
4856
4857 <table cpos='lllp{6cm}'>
4858       <thead>
4859         <col>
4860           <para>Fieldname</para>
4861         </col>
4862         <col>
4863           <para>Fieldtype</para>
4864         </col>
4865         <col>
4866           <para>Size</para>
4867         </col>
4868         <col>
4869           <para>Remarks</para>
4870         </col>
4871       </thead>
4872       <row>
4873         <col>
4874           <para>statuscode</para>
4875         </col>
4876         <col>
4877           <para>Varchar</para>
4878         </col>
4879         <col>
4880           <para>3</para>
4881         </col>
4882         <col>
4883           <para>The code for the status</para>
4884         </col>
4885       </row>
4886       <row>
4887         <col>
4888           <para>statusname</para>
4889         </col>
4890         <col>
4891           <para>Text</para>
4892         </col>
4893         <col>
4894           <para/>
4895         </col>
4896         <col>
4897           <para>What is the correct name for the status</para>
4898         </col>
4899       </row>
4900       <row>
4901         <col>
4902           <para>open_notification</para>
4903         </col>
4904         <col>
4905           <para>Boolean</para>
4906         </col>
4907         <col>
4908           <para/>
4909         </col>
4910         <col>
4911           <para>Is the notification still open when this status is set? Yes = T / No = F</para>
4912         </col>
4913       </row>
4914       <row>
4915         <col>
4916           <para>description</para>
4917         </col>
4918         <col>
4919           <para>Text</para>
4920         </col>
4921         <col>
4922           <para/>
4923         </col>
4924         <col>
4925           <para>Explanation of the code</para>
4926         </col>
4927       </row>
4928     </table>
4929 </subsubsection>
4930
4931 <subsubsection>
4932   <heading>The indexes.</heading>
4933 <para>
4934 The table is indexed on the following fields:
4935 </para>
4936
4937 <table cpos='lll'>
4938       <thead>
4939         <col>
4940           <para>Indexname</para>
4941         </col>
4942         <col>
4943           <para>Field</para>
4944         </col>
4945         <col>
4946           <para>Characteristics</para>
4947         </col>
4948       </thead>
4949       <row>
4950         <col>
4951           <para>sta_pk</para>
4952         </col>
4953         <col>
4954           <para>statuscode</para>
4955         </col>
4956         <col>
4957           <para>Primary key</para>
4958         </col>
4959       </row>
4960       <row>
4961         <col>
4962           <para>sta_statusname</para>
4963         </col>
4964         <col>
4965           <para>statusname</para>
4966         </col>
4967         <col>
4968           <para>Unique</para>
4969         </col>
4970       </row>
4971       <row>
4972         <col>
4973           <para>sta_open_notification</para>
4974         </col>
4975         <col>
4976           <para>open_notification</para>
4977         </col>
4978         <col>
4979           <para/>
4980         </col>
4981       </row>
4982     </table>
4983 </subsubsection>
4984
4985 <subsubsection>
4986   <heading>The relationships.</heading>
4987 <para>
4988 Relationships with other tables
4989 </para>
4990
4991 <table cpos='lll'>
4992       <thead>
4993         <col>
4994           <para>Fieldname</para>
4995         </col>
4996         <col>
4997           <para>Remote Table</para>
4998         </col>
4999         <col>
5000           <para>Remarks</para>
5001         </col>
5002       </thead>
5003       <row>
5004         <col>
5005           <para/>
5006         </col>
5007         <col>
5008           <para/>
5009         </col>
5010         <col>
5011           <para/>
5012         </col>
5013       </row>
5014     </table>
5015     <para>In the model this look like this:</para>
5016     <para>
5017       <picture src="erd-status.png" eps="erd-status"/>
5018     </para>
5019 </subsubsection>
5020
5021 <subsubsection>
5022   <heading>Default values.</heading>
5023 <para>The status values are default for the system and for that reason are predefined.</para>
5024 <table cpos='p{2cm}lp{1cm}p{6cm}'>
5025       <thead>
5026         <col>
5027           <para>Statuscode</para>
5028         </col>
5029         <col>
5030           <para>Statusname</para>
5031         </col>
5032         <col>
5033           <para>Open Notification</para>
5034         </col>
5035         <col>
5036           <para/>
5037         </col>
5038       </thead>
5039       <row>
5040         <col>
5041           <para>new</para>
5042         </col>
5043         <col>
5044           <para>New entry</para>
5045         </col>
5046         <col>
5047           <para>T</para>
5048         </col>
5049         <col>
5050           <para>Just detected nothing has been done yet.</para>
5051         </col>
5052       </row>
5053       <row>
5054         <col>
5055           <para>opn</para>
5056         </col>
5057         <col>
5058           <para>Open</para>
5059         </col>
5060         <col>
5061           <para>T</para>
5062         </col>
5063         <col>
5064           <para>The notification has been displayed, but nothing has been done yet.</para>
5065         </col>
5066       </row>
5067       <row>
5068         <col>
5069           <para>pen</para>
5070         </col>
5071         <col>
5072           <para>Pending</para>
5073         </col>
5074         <col>
5075           <para>T</para>
5076         </col>
5077         <col>
5078           <para>The notification is currently being worked on.</para>
5079         </col>
5080       </row>
5081       <row>
5082         <col>
5083           <para>ver</para>
5084         </col>
5085         <col>
5086           <para>Waiting for verification</para>
5087         </col>
5088         <col>
5089           <para>T</para>
5090         </col>
5091         <col>
5092           <para>The notification has been worked on.
5093           After it has been verified the notification can be closed.</para>
5094         </col>
5095       </row>
5096       <row>
5097         <col>
5098           <para>cls</para>
5099         </col>
5100         <col>
5101           <para>Closed</para>
5102         </col>
5103         <col>
5104           <para>F</para>
5105         </col>
5106         <col>
5107           <para>The notification has been closed</para>
5108         </col>
5109       </row>
5110       <row>
5111         <col>
5112           <para>rej</para>
5113         </col>
5114         <col>
5115           <para>Rejected</para>
5116         </col>
5117         <col>
5118           <para>F</para>
5119         </col>
5120         <col>
5121           <para>This was a false positive and has been rejected.</para>
5122         </col>
5123       </row>
5124       <row>
5125         <col>
5126           <para>inv</para>
5127         </col>
5128         <col>
5129           <para>Investigate</para>
5130         </col>
5131         <col>
5132           <para>T</para>
5133         </col>
5134         <col>
5135           <para>The notification is under investigation and awaiting additional details.</para>
5136         </col>
5137       </row>
5138     </table>
5139 </subsubsection>
5140 </subsection>
5141
5142 <subsection>
5143   <heading>type_of_issue.</heading>
5144
5145 <para>
5146 This table will contain a list of all available issues that can be detected.
5147 All issues have a suggested priority setting.
5148 This is typically data retrieval and good indexing is needed.</para>
5149
5150 <subsubsection>
5151   <heading>The fields.</heading>
5152
5153 <para>
5154 Fields of <emph>type_of_issue</emph> are:
5155 </para>
5156
5157 <table cpos='lllp{6cm}'>
5158       <thead>
5159         <col>
5160           <para>Fieldname</para>
5161         </col>
5162         <col>
5163           <para>Fieldtype</para>
5164         </col>
5165         <col>
5166           <para>Size</para>
5167         </col>
5168         <col>
5169           <para>Remarks</para>
5170         </col>
5171       </thead>
5172       <row>
5173         <col>
5174           <para>type_of_issueid</para>
5175         </col>
5176         <col>
5177           <para>Bigserial</para>
5178         </col>
5179         <col>
5180           <para>8</para>
5181         </col>
5182         <col>
5183           <para>The sequential code for the issue.</para>
5184         </col>
5185       </row>
5186       <row>
5187         <col>
5188           <para>name</para>
5189         </col>
5190         <col>
5191           <para>Text</para>
5192         </col>
5193         <col>
5194           <para/>
5195         </col>
5196         <col>
5197           <para>Name for the issue</para>
5198         </col>
5199       </row>
5200       <row>
5201         <col>
5202           <para>suggested_priority</para>
5203         </col>
5204         <col>
5205           <para>Int</para>
5206         </col>
5207         <col>
5208           <para>4</para>
5209         </col>
5210         <col>
5211           <para>The advised priority setting.</para>
5212         </col>
5213       </row>
5214       <row>
5215         <col>
5216           <para>description</para>
5217         </col>
5218         <col>
5219           <para>Text</para>
5220         </col>
5221         <col>
5222           <para/>
5223         </col>
5224         <col>
5225           <para>Description of the method and how this can be set.</para>
5226         </col>
5227       </row>
5228       <row>
5229         <col>
5230           <para>active</para>
5231         </col>
5232         <col>
5233           <para>Boolean</para>
5234         </col>
5235         <col>
5236           <para/>
5237         </col>
5238         <col>
5239           <para>Is this check currently being used in the system.</para>
5240         </col>
5241       </row>
5242       <row>
5243        <col><para>automated_check</para></col><col><para>Boolean</para></col><col><para>1</para></col>
5244        <col><para>Is this an automated check that can be executed by gcm_daemon</para></col>
5245       </row>
5246       <row>
5247        <col><para>alter_level</para></col><col><para>Integer</para></col><col><para>4</para></col>
5248        <col><para>This field indicates what the default priority-level for a notification will be if this issue is raised.</para></col>
5249       </row>
5250       <row>
5251        <col><para>last_run</para></col><col><para>Timestamp</para></col><col><para/></col>
5252        <col><para>The time that the last processing took place.</para></col>
5253       </row>
5254       <row>
5255        <col><para>recheck_interval</para></col><col><para>Timestamp</para></col><col><para/></col>
5256        <col><para>The interval that is needed before rerunning this check.</para></col>
5257       </row>
5258
5259     </table>
5260 </subsubsection>
5261
5262 <subsubsection>
5263   <heading>The indexes.</heading>
5264 <para>
5265 The table is indexed on the following fields:
5266 </para>
5267
5268 <table cpos='lll'>
5269       <thead>
5270         <col>
5271           <para>Indexname</para>
5272         </col>
5273         <col>
5274           <para>Field</para>
5275         </col>
5276         <col>
5277           <para>Characteristics</para>
5278         </col>
5279       </thead>
5280       <row>
5281         <col>
5282           <para>toi_pk</para>
5283           <para>(type_of_issue_type_of_issue_key)</para>
5284         </col>
5285         <col>
5286           <para>type_of_issueid</para>
5287         </col>
5288         <col>
5289           <para>Primary key</para>
5290         </col>
5291       </row>
5292       <row>
5293         <col>
5294           <para>toi_name</para>
5295         </col>
5296         <col>
5297           <para>name</para>
5298         </col>
5299         <col>
5300           <para>Unique</para>
5301         </col>
5302       </row>
5303       <row>
5304         <col>
5305           <para>toi_active</para>
5306         </col>
5307         <col>
5308           <para>active</para>
5309         </col>
5310         <col>
5311           <para/>
5312         </col>
5313       </row>
5314     </table>
5315 </subsubsection>
5316
5317 <subsubsection>
5318   <heading>The relationships.</heading>
5319 <table cpos='lll'>
5320       <thead>
5321         <col>
5322           <para>Fieldname</para>
5323         </col>
5324         <col>
5325           <para>Remote Table</para>
5326         </col>
5327         <col>
5328           <para>Remarks</para>
5329         </col>
5330       </thead>
5331       <row>
5332         <col>
5333           <para>type_of_issueid</para>
5334         </col>
5335         <col>
5336           <para>object_issue</para>
5337         </col>
5338         <col>
5339           <para/>
5340         </col>
5341       </row>
5342     </table>
5343
5344     <para>In the model this look like this:</para>
5345     <para>
5346       <picture src="erd-toi.png" eps="erd-toi"/>
5347     </para>
5348 </subsubsection>
5349
5350 <subsubsection>
5351   <heading>Default values.</heading>
5352
5353 <para>
5354 All checks are entered as code into the system.
5355 This table only works for the application only.
5356 The user can set specifics in the application only.
5357 </para>
5358 <table cpos='lllll'>
5359       <thead>
5360         <col>
5361           <para>Type_of_issueid</para>
5362         </col>
5363         <col>
5364           <para>Name</para>
5365         </col>
5366         <col>
5367           <para>Suggested_priority</para>
5368         </col>
5369         <col>
5370           <para>Description</para>
5371         </col>
5372         <col>
5373           <para>Active</para>
5374         </col>
5375       </thead>
5376       <row>
5377         <col>
5378           <para>1</para>
5379         </col>
5380         <col>
5381           <para>Manual entry</para>
5382         </col>
5383         <col>
5384           <para>4</para>
5385         </col>
5386         <col>
5387           <para>A manual entry of a notification.</para>
5388         </col>
5389         <col>
5390           <para>T</para>
5391         </col>
5392       </row>
5393 </table>
5394 </subsubsection>
5395 </subsection>
5396
5397 <subsection>
5398   <heading>unprocessed_log</heading>
5399
5400 <para>
5401 The <emph>user</emph> table contains the users that can login the monitoring application.
5402 It will also store if the users maintains the system.
5403 Mainly used for retrieval so properly indexed.
5404 </para>
5405
5406 <subsubsection>
5407   <heading>The fields.</heading>
5408
5409 <para>
5410 The fields are listed below:
5411 </para>
5412
5413 <table cpos='lllp{6cm}'>
5414       <thead>
5415         <col>
5416           <para>Fieldname</para>
5417         </col>
5418         <col>
5419           <para>Fieldtype</para>
5420         </col>
5421         <col>
5422           <para>Size</para>
5423         </col>
5424         <col>
5425           <para>Remarks</para>
5426         </col>
5427       </thead>
5428       <row>
5429         <col>
5430           <para>unprocessedid</para>
5431         </col>
5432         <col>
5433           <para>Bigserial</para>
5434         </col>
5435         <col>
5436           <para/>
5437         </col>
5438         <col>
5439           <para>Autonumber entry</para>
5440         </col>
5441       </row>
5442       <row>
5443         <col>
5444           <para>objectid</para>
5445         </col>
5446         <col>
5447           <para>Bigint</para>
5448         </col>
5449         <col>
5450           <para/>
5451         </col>
5452         <col>
5453           <para>Reference to the object</para>
5454         </col>
5455       </row>
5456       <row>
5457         <col>
5458           <para>servicecode</para>
5459         </col>
5460         <col>
5461           <para>Text</para>
5462         </col>
5463         <col>
5464           <para/>
5465         </col>
5466         <col>
5467           <para>The service that entered this data.</para>
5468         </col>
5469       </row>
5470       <row>
5471         <col>
5472           <para>logdata</para>
5473         </col>
5474         <col>
5475           <para>Text</para>
5476         </col>
5477         <col>
5478           <para/>
5479         </col>
5480         <col>
5481           <para>The data that comes from the file.</para>
5482         </col>
5483       </row>
5484     </table>
5485 </subsubsection>
5486
5487 <subsubsection>
5488   <heading>The indexes.</heading>
5489 <para>
5490 The indices of the table:
5491 </para>
5492
5493 <table cpos='lll'>
5494       <thead>
5495         <col>
5496           <para>Indexname</para>
5497         </col>
5498         <col>
5499           <para>Field</para>
5500         </col>
5501         <col>
5502           <para>Characteristics</para>
5503         </col>
5504       </thead>
5505       <row>
5506         <col>
5507           <para>unl_pk</para>
5508           <para>(unprocessed_l_unprocessedid_key)</para>
5509         </col>
5510         <col>
5511           <para>unprocessedid</para>
5512         </col>
5513         <col>
5514           <para>Primary key</para>
5515         </col>
5516       </row>
5517     </table>
5518 </subsubsection>
5519
5520 <subsubsection>
5521   <heading>The relationships.</heading>
5522 <para>
5523 Relationships with other tables:
5524 </para>
5525
5526 <table cpos='llp{8cm}'>
5527       <thead>
5528         <col>
5529           <para>Fieldname</para>
5530         </col>
5531         <col>
5532           <para>Remote Table</para>
5533         </col>
5534         <col>
5535           <para>Remarks</para>
5536         </col>
5537       </thead>
5538       <row>
5539         <col>
5540           <para>objectid</para>
5541         </col>
5542         <col>
5543           <para>object</para>
5544         </col>
5545         <col>
5546           <para>Reference to the object that is reporting the data</para>
5547         </col>
5548       </row>
5549       <row>
5550         <col>
5551           <para>servicecode</para>
5552         </col>
5553         <col>
5554           <para>service</para>
5555         </col>
5556         <col>
5557           <para>Reference to the servicecode that is mentioned in the filename.</para>
5558         </col>
5559       </row>
5560     </table>
5561     <para>In the model this look like this:</para>
5562     <para>
5563       <picture src="erd-unplog.png" eps="erd-unplog"/>
5564     </para>
5565 </subsubsection>
5566
5567 <subsubsection>
5568   <heading>Sample values.</heading>
5569     <para>To do</para>
5570 </subsubsection>
5571 </subsection>
5572
5573 <subsection>
5574   <heading>user_gnucomo</heading>
5575
5576 <para>
5577 The <emph>user</emph> table contains the users that can login the monitoring application.
5578 It will also store if the users maintains the system.
5579 Mainly used for retrieval so properly indexed.
5580 </para>
5581
5582 <subsubsection>
5583   <heading>The fields.</heading>
5584
5585 <para>
5586 The fields are listed in the table below:
5587 </para>
5588
5589 <table cpos='lllp{6cm}'>
5590       <thead>
5591         <col>
5592           <para>Fieldname</para>
5593         </col>
5594         <col>
5595           <para>Fieldtype</para>
5596         </col>
5597         <col>
5598           <para>Size</para>
5599         </col>
5600         <col>
5601           <para>Remarks</para>
5602         </col>
5603       </thead>
5604       <row>
5605         <col>
5606           <para>username</para>
5607         </col>
5608         <col>
5609           <para>Text</para>
5610         </col>
5611         <col>
5612           <para/>
5613         </col>
5614         <col>
5615           <para>Name the user is known by</para>
5616         </col>
5617       </row>
5618       <row>
5619         <col>
5620           <para>password</para>
5621         </col>
5622         <col>
5623           <para>Text</para>
5624         </col>
5625         <col>
5626           <para/>
5627         </col>
5628         <col>
5629           <para>Password</para>
5630         </col>
5631       </row>
5632       <row>
5633         <col>
5634           <para>active_sessionid</para>
5635         </col>
5636         <col>
5637           <para>Bigint</para>
5638         </col>
5639         <col>
5640           <para/>
5641         </col>
5642         <col>
5643           <para>Sessionnumber currently used by user.
5644           If this is set to 0 a user is not present on the system.
5645           Only one session can be open at a time.</para>
5646         </col>
5647       </row>
5648       <row>
5649         <col>
5650           <para>account_active</para>
5651         </col>
5652         <col>
5653           <para>Boolean</para>
5654         </col>
5655         <col>
5656           <para/>
5657         </col>
5658         <col>
5659           <para>Is the account currently active?</para>
5660         </col>
5661       </row>
5662       <row>
5663         <col>
5664           <para>security_level</para>
5665         </col>
5666         <col>
5667           <para>Int</para>
5668         </col>
5669         <col>
5670           <para/>
5671         </col>
5672         <col>
5673           <para>Given securitylevel to this user</para>
5674         </col>
5675       </row>
5676     </table>
5677 </subsubsection>
5678
5679 <subsubsection>
5680   <heading>The indexes</heading>
5681 <para>
5682 The table is indexed on the following fields:
5683 </para>
5684 <table cpos='lll'>
5685       <thead>
5686         <col>
5687           <para>Indexname</para>
5688         </col>
5689         <col>
5690           <para>Field</para>
5691         </col>
5692         <col>
5693           <para>Characteristics</para>
5694         </col>
5695       </thead>
5696       <row>
5697         <col>
5698           <para>usr_pk</para>
5699         </col>
5700         <col>
5701           <para>username</para>
5702         </col>
5703         <col>
5704           <para>Primary key</para>
5705         </col>
5706       </row>
5707       <row>
5708         <col>
5709           <para>usr_active_sessionid</para>
5710         </col>
5711         <col>
5712           <para>active_sessionid</para>
5713         </col>
5714         <col>
5715           <para>Unique</para>
5716         </col>
5717       </row>
5718     </table>
5719 </subsubsection>
5720
5721 <subsubsection>
5722   <heading>The relationships.</heading>
5723 <para>
5724 Relationships with other tables
5725 </para>
5726 <table cpos='lll'>
5727       <thead>
5728         <col>
5729           <para>Fieldname</para>
5730         </col>
5731         <col>
5732           <para>Remote Table</para>
5733         </col>
5734         <col>
5735           <para>Remarks</para>
5736         </col>
5737       </thead>
5738       <row>
5739         <col>
5740           <para>ObjectID</para>
5741         </col>
5742         <col>
5743           <para>Object</para>
5744         </col>
5745         <col>
5746           <para>Link to the object</para>
5747         </col>
5748       </row>
5749     </table>
5750     <para>In the model this look like this:</para>
5751     <para>
5752       <picture src="erd-usr.png" eps="erd-usr"/>
5753     </para>
5754 </subsubsection>
5755 </subsection>
5756 </section>
5757
5758 </chapter>
5759
5760 <chapter>
5761   <heading>Warnings that can be detected.</heading>
5762 </chapter>
5763
5764     <chapter>
5765       <heading>User Interface.</heading>
5766
5767     <para>To be determined in the near future.</para>
5768 </chapter>
5769
5770 <chapter>
5771   <heading>The installation process.</heading>
5772
5773 <para>
5774 Since the system must make maintenance and security easier to use,
5775 the burden of installation should as easy as possible.
5776 Where possible the installation script should take away as much work as possible.
5777 Where settings need to be done, this should be done through an interface.
5778 However at no point we take the user's right to understand and work with system.
5779 Configuration-files should be easy to understand and the choice must be there to do installation manually.
5780 For the time being, we will use the manual installation procedure outlined below:
5781 </para>
5782
5783 <para>
5784 Since there is no binary package available for Gnucomo yet, you will need
5785 to compile and install Gnucomo from the source code.
5786 Before making the Gnucomo binaries, make sure you have the following
5787 packages installed:
5788 <itemize>
5789 <item>postgresql, postgresql-server, postgresql-develop</item>
5790 <item>AXE</item>
5791 <item>libxml2, libxml2-develop</item>
5792 </itemize>
5793
5794 Make sure your PostgreSQL database server is up and running.
5795 If you also want to use the web interface, you will need Apache with PHP.
5796 The PHP module needs Postgresql and DOM-XML support.
5797 With all required packages installed, you should be able to go into
5798 the <emph>src</emph> directory and type <code>make</code> to create
5799 a binary <code>gcm_input</code>.
5800 </para>
5801
5802 <para>
5803 To use gnucomo, you need to create a database and a configuration file.
5804 To make the database in your PostgreSQL server, log in as a DBA (DataBase
5805 Administrator, usually the user 'postgres') and create the database and a
5806 user who can use the database.
5807 Here is an example:
5808
5809 <verbatim>
5810
5811   createdb gnucomo
5812   createuser arjen
5813
5814 </verbatim>
5815
5816 If you also want to be able to use the test scripts, you will need to
5817 create the <code>gnucomo_test</code> database as well.
5818 The configuration file for Gnucomo is a rather simple XML file that
5819 states at least what database Gnucomo uses and the userid with which
5820 Gnucomo will log in to the database server.
5821 These parameters should be the same as the database and user you just
5822 created in your role of DBA.
5823 There is an example configuration file, <code>gnucomo.conf</code> in the
5824 <emph>src</emph> directory.
5825 You should copy this config file to one of the following places:
5826 <enumerate>
5827 <item><code>/etc/gnucomo.conf</code></item>
5828 <item><code>/usr/local/etc/gnucomo.conf</code></item>
5829 </enumerate>
5830 With the database and the configuration file in place, you should
5831 be able to run <code>gcm_input</code> to read log files and store
5832 log entries in the database.
5833 </para>
5834     <section>
5835       <heading>Supported platforms.</heading>
5836
5837     <para>The following two Linux distributions have been selected to be actively supported:</para>
5838     <itemize>
5839       <item>
5840         <para>Debian GNU/Linux (.deb packages)</para>
5841       </item>
5842       <item>
5843         <para>RedHat Linux (.rpm packages)</para>
5844       </item>
5845     </itemize>
5846     <para>
5847       We will try and facilitate as many operating systems client-side and
5848        as many unices server-side, but efforts on testing out of the projects
5849        will be very minimalistic to ensure that the project keeps delivering
5850        new version and new features.
5851     </para>
5852     </section>
5853
5854     <section>
5855       <heading>Installation on the server.</heading>
5856
5857     <para>The following steps will be part of a script, that can automatically perform these steps:</para>
5858
5859 <enumerate>
5860     <item>
5861       <para>Create the user <emph>gnucomo</emph>.</para>
5862     </item>
5863     <item>
5864       <para>Make the directory as described in the chapter <emph>Sending messages to the central gnucomo system</emph> in the subchapter <emph>directories</emph>.(server-side).</para>
5865     </item>
5866 </enumerate>
5867     </section>
5868
5869     <section>
5870       <heading>Installation on a UNIX-client.</heading>
5871
5872     <para>The following steps will be part of a script, that can automatically perform these steps:</para>
5873 <enumerate>
5874     <item>
5875       <para>Create the user <emph>gcm_client</emph>.</para>
5876     </item>
5877     <item>
5878       <para>Make the directory as described in the chapter <emph>Sending messages to the central gnucomo system</emph> in the subchapter <emph>directories</emph> (client-side).</para>
5879     </item>
5880     <item>
5881       <para>Creation of the database user gcm_input. This user has only the right to enter data into the database. There are no deletion, update or select-permissions.</para>
5882     </item>
5883 </enumerate>
5884
5885     </section>
5886     </chapter>
5887
5888 <chapter>
5889   <heading>Dependency on other free software.</heading>
5890
5891 <para>The following list is a set of applications that will be used on to make our application work:</para>
5892     <table cpos='lp{8cm}l'>
5893       <thead>
5894         <col>
5895           <para>Application</para>
5896         </col>
5897         <col>
5898           <para>Needed for</para>
5899         </col>
5900         <col>
5901           <para>Client/Server</para>
5902         </col>
5903       </thead>
5904       <row>
5905         <col>
5906           <para>gpg</para>
5907         </col>
5908         <col>
5909           <para>The encryption of the information being transferred between the two systems.</para>
5910         </col>
5911         <col>
5912           <para>Client</para>
5913           <para>Server</para>
5914         </col>
5915       </row>
5916       <row>
5917         <col>
5918           <para>GNU/Linux</para>
5919         </col>
5920         <col>
5921           <para>The basic operating system. Allthough the system might work very well on all types on versions of Linux, FreeBSD, OpenBSD or any unices the main focus for distribution is given to: Debian GNU/Linux and RedHat Linux (the downloadable iso-version). </para>
5922         </col>
5923         <col>
5924           <para>Server</para>
5925         </col>
5926       </row>
5927       <row>
5928         <col>
5929           <para>mail</para>
5930         </col>
5931         <col>
5932           <para>The application enabling the sending of messages.</para>
5933         </col>
5934         <col>
5935           <para>Client</para>
5936           <para>Server</para>
5937         </col>
5938       </row>
5939       <row>
5940         <col>
5941           <para>openssh</para>
5942         </col>
5943         <col>
5944           <para>If e-mail is not used this application will deliver the file-copy</para>
5945         </col>
5946         <col>
5947           <para>Client</para>
5948           <para>Server</para>
5949         </col>
5950       </row>
5951       <row>
5952         <col>
5953           <para>PostgreSQL</para>
5954         </col>
5955         <col>
5956           <para>The database where all the signals from client will be stored.</para>
5957         </col>
5958         <col>
5959           <para>Client</para>
5960         </col>
5961       </row>
5962     </table>
5963 <section>
5964 <heading>Related projects</heading>
5965
5966 <para>
5967 There are a number of projects that can help <strong>Gnucomo</strong> or perform
5968 similar funtions:
5969
5970 <itemize>
5971    <item>
5972    <reference href='http://crm114.sourceforge.net/'>CRM114</reference> - The Controllable
5973    Regex Mutilator.
5974    </item>
5975    <item>
5976    <reference href='http://ezix.sourceforge.net/software/lshw.html'>Hardware Lister (LSHW)
5977    </reference>
5978    </item>
5979    <item>
5980    <reference href='http://www.brains2bytes.com/alist/'>AList
5981    </reference>Collect information about systems
5982    </item>
5983    <item>
5984    <reference href='http://logrep.sourceforge.net/'>LogRep 
5985    </reference> Logfile Extraction and Reporting
5986    </item>
5987    <item>
5988    <reference href='http://prelude-ids.org/'>Prelude Hybrid INtrusion detection system.
5989    </reference>
5990    </item>
5991    <item>
5992    <reference href='http://www.nagios.org/'>Nagios
5993    </reference> Host and service monitoring.
5994    </item>
5995 </itemize>
5996 </para>
5997 </section>
5998 </chapter>
5999
6000 <chapter>
6001   <heading>Settings on the server machine.</heading>
6002
6003 <section>
6004   <heading>Required.</heading>
6005
6006 <para>The following settings are required to ensure that the functionality is as much as expected.</para>
6007
6008 <subsection>
6009   <heading>Timezone in GMT (UTC).</heading>
6010
6011 <para>Since all international traffic registers all entries in UTC (Universal Time Coordinate) this system will do so as well. Therefore the clock has to be adjusted to that as well as the system settings.</para>
6012 <para>These settings can found on a RedHat computer in the <code>/etc/sysconfig/clock-file</code>. On Debian this stored in the file <code>/etc/timezone</code>.</para>
6013 </subsection>
6014 </section>
6015
6016 <section>
6017   <heading>Suggested.</heading>
6018
6019 <subsection>
6020   <heading>Use NTP.</heading>
6021
6022 <para>If a computer is running for some time the clocks tend to be off the correct time. This makes it harder to detect what exactly happened exactly at what moment in time and reduce value of log-entries. Especially considering that ultimately all data is gathered in one central system. To overcome this Network Time Protocol (NTP RFC 13025 March 1992) has been created that explains a protocol to synchronize clocks through the Internet. Many operating systems like Microsoft Windows 2000 Server and FreeBSD, OpenBSD and Linux  support this. A ntp-server (or ntpd) can be found at: http://www.eecis.udel.edu/~ntp/ It is strongly recommended that you use this.</para>
6023
6024     </subsection>
6025     </section>
6026     </chapter>
6027
6028     <chapter>
6029       <heading>Settings on the client machine.</heading>
6030
6031     <section>
6032       <heading>Required.</heading>
6033     </section>
6034
6035     <section>
6036       <heading>Suggested.</heading>
6037
6038     <subsection>
6039       <heading>Use NTP.</heading>
6040
6041     <para>If a computer is running for some time the clocks tend to be off the correct time. This makes it harder to detect what exactly happened exactly at what moment in time and reduce value of log-entries. Especially considering that ultimately all data is gathered in one central system. To overcome this Network Time Protocol (NTP RFC 13025 March 1992) has been created that explains a protocol to synchronize clocks through the Internet. Many operating systems like Microsoft Windows 2000 Server and FreeBSD, OpenBSD and Linux  support this. A ntp-server (or ntpd) can be found at: http://www.eecis.udel.edu/~ntp/ It is strongly recommended that you use this.</para>
6042
6043     </subsection>
6044     </section>
6045     </chapter>
6046
6047     <chapter>
6048       <heading>Appendices.</heading>
6049
6050     <section>
6051       <heading>Appendix A. GNU Public License Version 2, June 1991.</heading>
6052
6053     <para>Copyright (C) 1989, 1991 Free Software Foundation, Inc.</para>
6054     <para>59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</para>
6055     <para>Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.</para>
6056
6057     <subsection>
6058       <heading>Preamble</heading>
6059     <para>The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. </para>
6060     <para>When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.</para>
6061     <para>To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.</para>
6062     <para>For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.</para>
6063     <para>We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. </para>
6064     <para>Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.</para>
6065     <para>Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.</para>
6066     <para>The precise terms and conditions for copying, distribution and modification follow.</para>
6067     <para>GNU GENERAL PUBLIC LICENSE</para>
6068     </subsection>
6069
6070     <subsection>
6071       <heading>TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</heading>
6072
6073 <enumerate>
6074     <item>
6075       <para>This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The &quot;Program&quot;, below, refers to any such program or work, and a &quot;work based on the Program&quot; means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</para>
6076     <para>Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. </para>
6077     </item>
6078     <item>
6079       <para>You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.</para>
6080     <para>You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.</para>
6081     </item>
6082     <item>
6083       <para>You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:</para>
6084     <para>a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.</para>
6085     <para>b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.</para>
6086     <para>c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)</para>
6087     <para>These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.</para>
6088     <para>Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.</para>
6089     <para>In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.</para>
6090     </item>
6091     <item>
6092       <para>You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:</para>
6093     <para>a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, </para>
6094     <para>b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,</para>
6095     <para>c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)</para>
6096     <para>The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.</para>
6097     <para>If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.</para>
6098     </item>
6099     <item>
6100       <para>You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.</para>
6101     </item>
6102     <item>
6103       <para>You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.</para>
6104     </item>
6105     <item>
6106       <para>Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein.</para>
6107     <para>You are not responsible for enforcing compliance by third parties to this License.</para>
6108     </item>
6109     <item>
6110       <para>If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.</para>
6111     <para>If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.</para>
6112     <para>It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.</para>
6113     <para>This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.</para>
6114     </item>
6115     <item>
6116       <para>If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.</para>
6117     </item>
6118     <item>
6119       <para>The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.</para>
6120     <para>Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and &quot;any later version&quot;, you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.</para>
6121     </item>
6122     <item>
6123       <para>If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.</para>
6124     </item>
6125 </enumerate>
6126     </subsection>
6127     <subsection>
6128       <heading>NO WARRANTY</heading>
6129 <enumerate>
6130     <item>
6131       <para>BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVidE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</para>
6132     </item>
6133     <item>
6134       <para>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</para>
6135     </item>
6136 </enumerate>
6137     <para>END OF TERMS AND CONDITIONS</para>
6138     </subsection>
6139     <subsection>
6140       <heading>How to Apply These Terms to Your New Programs</heading>
6141     <para>If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. </para>
6142     <para>To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the &quot;copyright&quot; line and a pointer to where the full notice is found.</para>
6143     <para>&lt;one line to give the program's name and a brief idea of what it does.&gt; Copyright (C) &lt;year&gt; &lt;name of author&gt; This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.</para>
6144     <para>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.</para>
6145     <para>You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</para>
6146     <para>Also add information on how to contact you by electronic and paper mail.</para>
6147     <para>If the program is interactive, make it output a short notice like this when it starts in an interactive mode:</para>
6148     <para>Gnomovision version 69, Copyright (C) year name of author</para>
6149     <para>Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</para>
6150     <para>This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.</para>
6151     <para/>
6152     <para>The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.</para>
6153     <para>You should also get your employer (if you work as a programmer) or your school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if necessary. Here is a sample; alter the names:</para>
6154     <para>Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. </para>
6155     <para>&lt;signature of Ty Coon&gt;, 1 April 1989 Ty Coon, President of Vice</para>
6156     <para>This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.</para>
6157     </subsection>
6158     </section>
6159     </chapter>
6160   </book>
6161 </doc>