1 /*
2 Copyright (C) 2012-2021, Dirk Krause
3 SPDX-License-Identifier: BSD-3-Clause
4 */
5 
6 /*
7 	WARNING: This file was generated by the dkct program (see
8 	http://dktools.sourceforge.net/ for details).
9 	Changes you make here will be lost if dkct is run again!
10 	You should modify the original source and run dkct on it.
11 	Original source: itadmin.ctr
12 */
13 
14 /**	@file itadmin.h Header file for the itadmin module.
15 */
16 
17 #ifndef ITADMIN_H_INCLUDED
18 /** Avoid multiple inclusions. */
19 #define ITADMIN_H_INCLUDED 1
20 
21 
22 #include <libdk3c/dk3all.h>
23 #include <itadmin/dk3uc2l.h>
24 
25 
26 /**	Computer owner/user.
27 */
28 typedef struct {
29   char const		*us;	/**< Short name, login name (primary key). */
30   char const		*tt;	/**< Title, academic degree. */
31   char const		*sn;	/**< Surname. */
32   char const		*na;	/**< Family name. */
33   char const		*em;	/**< E-mail address. */
34   char const		*cc;	/**< ID in cost controlling. */
35   char const		*si;	/**< Staff ID number. */
36   dk3_sto_t		*s_ho;	/**< Hosts for user. */
37   dk3_sto_it_t		*i_ho;	/**< Iterator for hosts storage. */
38   dk3_sto_t		*s_li;	/**< Licenses assigned to user. */
39   dk3_sto_it_t		*i_li;	/**< Iterator for licenses storage. */
40 } itadmin_user;
41 
42 
43 
44 /**	Building.
45 */
46 typedef struct {
47   char const		*s;	/**< Short name (primary key). */
48   char const		*l;	/**< Full building name. */
49   char const		*a1;	/**< Address line 1. */
50   char const		*a2;	/**< Address line 2. */
51   char const		*a3;	/**< Address line 3. */
52   char const		*a4;	/**< Address line 4. */
53   char const		*zc;	/**< Zip code (german: Postleitzahl). */
54   char const		*city;	/**< City/Town name. */
55 } itadmin_building;
56 
57 
58 
59 /**	Speed for network connection.
60 */
61 typedef struct {
62   char const		*s;	/**< Short speed name (primary key). */
63   char const		*l;	/**< Long speed name (description). */
64 } itadmin_speed;
65 
66 
67 
68 /**	VLAN.
69 */
70 typedef struct {
71   char const		*s;	/**< Short VLAN name (primary key). */
72   char const		*l;	/**< Long VLAN name (description). */
73   dk3_sto_t		*s_nw;	/**< Storage for networks. */
74   dk3_sto_it_t		*i_nw;	/**< Iterator through networks storage. */
75   dk3_sto_t		*s_do;	/**< DHCP options for VLAN. */
76   dk3_sto_it_t		*i_do;	/**< Iterator through DHCP options. */
77 } itadmin_vlan;
78 
79 
80 
81 /**	Network connection socket.
82 */
83 typedef struct {
84   char const		*s;	/**< Short name (label on socket, pk). */
85   char const		*hp;	/**< Hub port used for socket. */
86   char const		*room;	/**< Room name or number in building. */
87   itadmin_speed		*sp;	/**< Speed setting for socket. */
88   itadmin_vlan		*vl;	/**< VLAN for socket. */
89   itadmin_building	*bu;	/**< Building. */
90 } itadmin_connect;
91 
92 
93 
94 /**	Network.
95 */
96 typedef struct {
97   itadmin_vlan		*vl;	/**< Parent VLAN. */
98   dk3_sto_t		*s_p;	/**< Storage for DHCP pools. */
99   dk3_sto_it_t		*i_p;	/**< Iterator through pools storage. */
100   dk3_sto_t		*s_dg;	/**< Storage for DHCP groups in network. */
101   dk3_sto_it_t		*i_dg;	/**< Iterator through groups in nw storage. */
102   dk3_sto_t		*s_do;	/**< DHCP options. */
103   dk3_sto_it_t		*i_do;	/**< Iterator for DHCP options. */
104   dk3_sto_t		*s_hoi;	/**< Storage for hosts. */
105   dk3_sto_it_t		*i_hoi;	/**< Iterator for hosts storage. */
106   dk3_sto_t		*s_dc;	/**< DHCP classes for this network. */
107   dk3_sto_it_t		*i_dc;	/**< Iterator through DHCP classes storage. */
108   unsigned long	 	 ip4;	/**< IPv4 start address (primary key). */
109   unsigned long	 	 ma4;	/**< IPv4 network mask. */
110   unsigned long	 	 gw4;	/**< IPv4 gateway. */
111   unsigned long	 	 bc4;	/**< IPv4 broadcast address. */
112 } itadmin_network;
113 
114 
115 
116 /**	Netgroup.
117 */
118 typedef struct {
119   char const		*sn;	/**< Short name (primary key). */
120   char const		*ln;	/**< Long name (description). */
121   size_t		 no;	/**< Netgroup number. */
122 } itadmin_netgroup;
123 
124 
125 
126 /**	Netgroup dependency.
127 */
128 typedef struct {
129   itadmin_netgroup	*pa;	/**< Parent group. */
130   itadmin_netgroup	*ch;	/**< Child group. */
131 } itadmin_ngdep;
132 
133 
134 
135 /**	DHCP class.
136 */
137 typedef struct {
138   char const		*sn;	/**< Short name (primary key). */
139   char const		*ln;	/**< Long name (description). */
140   dk3_sto_t		*s_ho;	/**< Hosts in this class. */
141   dk3_sto_it_t		*i_ho;	/**< Iterator through hosts storage. */
142   itadmin_network	*dhcpn;	/**< Network for DHCP hosts. */
143 } itadmin_dhcp_class;
144 
145 
146 
147 /**	DHCP address pool.
148 */
149 typedef struct {
150   itadmin_network	*nw;	/**< Network. */
151   itadmin_dhcp_class	*acl;	/**< Allowed DHCP class. */
152   dk3_sto_t		*s_do;	/**< DHCP options for pool. */
153   dk3_sto_it_t		*i_do;	/**< Iterator for DHCP options. */
154   dk3_sto_t		*s_hoi;	/**< Hosts storage. */
155   dk3_sto_it_t		*i_hoi;	/**< Hosts storage iterator. */
156   unsigned long		 ip4s;	/**< IPv4 start address. */
157   unsigned long		 ip4e;	/**< IPv4 end address. */
158   char			 duc;	/**< Flag: Deny unknown clients. */
159   char			 auc;	/**< Flag: Allow unknown clients. */
160 } itadmin_dhcp_pool;
161 
162 
163 
164 /**	DHCP group.
165 */
166 typedef struct {
167   char const		*sn;	/**< Short group name (primary key). */
168   char const		*ln;	/**< Long name (description). */
169   dk3_sto_t		*s_do;	/**< DHCP options storage. */
170   dk3_sto_it_t		*i_do;	/**< DHCP options iterator. */
171 } itadmin_dhcp_group;
172 
173 
174 
175 /**	DHCP group within a network.
176 */
177 typedef struct {
178   itadmin_dhcp_group	*gr;	/**< Group. */
179   dk3_sto_t		*s_h;	/**< Storage for hosts in this group. */
180   dk3_sto_it_t		*i_h;	/**< Iterator for storage. */
181 } itadmin_dhcp_ginw;
182 
183 
184 
185 /**	Date (used for host expiration).
186 */
187 typedef struct {
188   int	y;			/**< Year. */
189   int	m;			/**< Month. */
190   int	d;			/**< Day in month. */
191 } itadmin_date;
192 
193 
194 
195 /**	Host.
196 */
197 typedef struct {
198   itadmin_date		 expi;	/**< Expiration date. */
199   char const		*sn;	/**< Short host name (primary key). */
200   char const		*co;	/**< Comment, description. */
201   char const		*maca;	/**< MAC address. */
202   char const		*room;	/**< Room within the building. */
203   char const		*inv;	/**< Inventory ID. */
204   char const		*serno;	/**< Serial number. */
205   char const		*hid;	/**< Host ID. */
206   char const		*dnsd;	/**< DNS domain. */
207   itadmin_user		*un;	/**< System owner. */
208   itadmin_netgroup	*ng;	/**< Netgroup. */
209   itadmin_dhcp_class	*dc;	/**< DHCP class. */
210   itadmin_dhcp_group	*dg;	/**< DHCP group. */
211   itadmin_dhcp_pool	*dp;	/**< DHCP pool. */
212   itadmin_connect	*nc;	/**< Network connection socket. */
213   itadmin_building	*bu;	/**< Building. */
214   dk3_sto_t		*s_al;	/**< Storage for aliases. */
215   dk3_sto_it_t		*i_al;	/**< Iterator through aliases storage. */
216   dk3_sto_t		*s_do;	/**< DHCP options for host. */
217   dk3_sto_it_t		*i_do;	/**< DHCP options iterator. */
218   dk3_sto_t		*s_li;	/**< Licenses assigned to host. */
219   dk3_sto_it_t		*i_li;	/**< Iterator through licenses storage. */
220   unsigned long		 ipv4;	/**< IPv4 address. */
221   char			 fnf;	/**< Flag: Full name first in hosts. */
222   char			 fgu;	/**< Flag: Guest computer. */
223   char			 snd;	/**< Flag: Skip in network documentation. */
224   char			 saw;	/**< Flag: Skip in arpwatch configuration. */
225 } itadmin_host;
226 
227 
228 
229 /**	Software manufacturer.
230 */
231 typedef struct {
232   char const		*sn;	/**< Short name (primary key). */
233   char const		*ln;	/**< Full name. */
234 } itadmin_swman;
235 
236 
237 
238 /**	Software product.
239 */
240 typedef struct {
241   char const		*sn;	/**< Short name (primary key). */
242   char const		*ln;	/**< Full name. */
243   itadmin_swman		*mn;	/**< Software manufacturer. */
244 } itadmin_swprod;
245 
246 
247 
248 /**	License type.
249 */
250 typedef struct {
251   char const		*sn;	/**< Short name (primary key). */
252   char const		*ln;	/**< Full name. */
253   int			 num;	/**< Number of client licenses. */
254 } itadmin_lictype;
255 
256 
257 
258 /**	Software license.
259 */
260 typedef struct {
261   itadmin_date		 d_del;	/**< Delivery date. */
262   itadmin_date		 d_inv; /**< Invoice date. */
263   char const		*order;	/**< Internal order ID. */
264   char const		*notes;	/**< Additional notes about the license. */
265   char const		*i_del;	/**< Delivery note ID. */
266   char const		*i_inv;	/**< Invoice ID. */
267   itadmin_swprod	*prod;	/**< Software product. */
268   itadmin_lictype	*ltype;	/**< License type. */
269   itadmin_user		*owner;	/**< License owner. */
270   itadmin_host		*host;	/**< Host where license is used. */
271   unsigned long		 pk;	/**< Primary key from database. */
272 } itadmin_license;
273 
274 
275 
276 /**	DHCP option.
277 */
278 typedef struct {
279   char const		*k;	/**< Key (option name). */
280   char const		*v;	/**< Option value. */
281   long			 pk;	/**< Primary key from database. */
282 } itadmin_dhcp_option;
283 
284 
285 
286 /**	Job structure for the itadmin program.
287 */
288 typedef struct {
289   itadmin_date		 today;	/**< Current date. */
290   dk3_app_t		*app;	/**< Application structure. */
291   dk3_option_set_t	*opt;	/**< Option set. */
292   dk3_sto_t		*s_us;	/**< User storage. */
293   dk3_sto_it_t		*i_us;	/**< User storage iterator. */
294   dk3_sto_t		*s_usn;	/**< User sorted by name. */
295   dk3_sto_it_t		*i_usn;	/**< Storage iterator for users by name. */
296   dk3_sto_t		*s_bu;	/**< Building storage. */
297   dk3_sto_it_t		*i_bu;	/**< Building storage iterator. */
298   dk3_sto_t		*s_sp;	/**< Patch speed storage. */
299   dk3_sto_it_t		*i_sp;	/**< Patch speed storage iterator. */
300   dk3_sto_t		*s_vl;	/**< VLAN storage. */
301   dk3_sto_it_t		*i_vl;	/**< VLAN storage iterator. */
302   dk3_sto_t		*s_pa;	/**< Network patch storage. */
303   dk3_sto_it_t		*i_pa;	/**< Network patch storage iterator. */
304   dk3_sto_t		*s_nw;	/**< Network storage. */
305   dk3_sto_it_t		*i_nw;	/**< Network storage iterator. */
306   dk3_sto_t		*s_ng;	/**< Netgroup storage. */
307   dk3_sto_it_t		*i_ng;	/**< Netgroup storage iterator. */
308   dk3_sto_t		*s_nd;	/**< Netgroup dependency storage. */
309   dk3_sto_it_t		*i_nd;	/**< Netgroup dependency storage iterator. */
310   dk3_sto_t		*s_dc;	/**< DHCP class storage. */
311   dk3_sto_it_t		*i_dc;	/**< DHCP class storage iterator. */
312   dk3_sto_t		*s_dp;	/**< DHCP pool storage. */
313   dk3_sto_it_t		*i_dp;	/**< DHCP pool storage iterator. */
314   dk3_sto_t		*s_dg;	/**< DHCP group storage. */
315   dk3_sto_it_t		*i_dg;	/**< DHCP group storage iterator. */
316   dk3_sto_t		*s_ho;	/**< Host storage, sorted by name. */
317   dk3_sto_it_t		*i_ho;	/**< Host storage iterator for s_ho. */
318   dk3_sto_t		*s_hoi;	/**< Host storage, sorted by IP address. */
319   dk3_sto_it_t		*i_hoi;	/**< Host storage iterator for s_hoi. */
320   dk3_sto_t		*s_sm;	/**< Software manufacturer storage. */
321   dk3_sto_it_t		*i_sm;	/**< Software manufacturer storage iterator. */
322   dk3_sto_t		*s_sw;	/**< Software storage. */
323   dk3_sto_it_t		*i_sw;	/**< Software storage iterator. */
324   dk3_sto_t		*s_lt;	/**< License type storage. */
325   dk3_sto_it_t		*i_lt;	/**< License type storage iterator. */
326   dk3_sto_t		*s_lc;	/**< Licenses storage. */
327   dk3_sto_it_t		*i_lc;	/**< Licenses storage iterator. */
328   dk3_sto_t		*s_lf;	/**< Free licenses. */
329   dk3_sto_it_t		*i_lf;	/**< Free licenses iterator. */
330   dk3_sto_t		*s_do;	/**< DHCP options for entire server. */
331   dk3_sto_it_t		*i_do;	/**< Iterator for DHCP options. */
332   void			*dbptr;	/**< Database object pointer. */
333   dk3_bm_t		*ngdep;	/**< Direct/indirect netgroup dependencies. */
334   dk3_uc2lat_t		*uc2l;	/**< Unicode to LaTeX converter. */
335   dkChar const * const	*msg;	/**< Localized message texts. */
336   dkChar const * const	*noloc;	/**< Texts, not localized. */
337   dkChar const		*dbhn;	/**< Database host name. */
338   dkChar const		*dbn;	/**< Database name. */
339   dkChar const		*dbcf;	/**< Database credentials files. */
340   dkChar const		*dbus;	/**< Database user name. */
341   dkChar const		*dbpw;	/**< Database password. */
342   dkChar const		*vlan;	/**< VLAN name. */
343   dkChar const		*org;	/**< Organization name. */
344   dkChar const		*ou;	/**< Organizational unit name. */
345   dkChar const		*admn;	/**< Administrator name. */
346   dkChar const		*ldapb;	/**< LDAP base. */
347   size_t		 nng;	/**< Number of netgroups. */
348   int			 exval;	/**< Exit status code. */
349   int			 ec;	/**< Error code, see @ref errorcodes. */
350   int			 cmd;	/**< Command to execute. */
351   int			 f_dh;	/**< Flag: Write dhcpd.conf file. */
352   int			 dbt;	/**< Database type. */
353   int			 gdate;	/**< Flag: German date notation. */
354   int			 hlh;	/**< Flag: Have localhost entry. */
355   int			 ukoma;	/**< Flag: Use koma-script. */
356   int			 rel;	/**< Release lease on shutdown. */
357   int			 m_p;	/**< Flag: Markers for points. */
358   int			 m_vl;	/**< Flag: Markers for vlan. */
359   int			 m_sn;	/**< Flag: Markers for subnets. */
360   int			 m_gr;	/**< Flag: Markers for groups. */
361   int			 m_po;	/**< Flag: Markers for pools. */
362   int			 m_ho;	/**< Flag: Markers for hosts. */
363 } itadmin_job;
364 
365 
366 
367 /**	Reader structure for credentials file.
368 */
369 typedef struct {
370   itadmin_job		*job;		/**< Job structure. */
371   int			 f_clnt;	/**< Flag: In client section. */
372 } itadmin_cred_reader;
373 
374 
375 /**	@defgroup	itadmincommand	Command IDs for itadmin. */
376 /**@{*/
377 /**	itadmin command: Rebuild configuration and network documentation.
378 */
379 #define	ITADMIN_CMD_CONFIG		1
380 
381 /**	itadmin command: Rebuild license report.
382 */
383 #define	ITADMIN_CMD_LICENSES		2
384 
385 /**	itadmin command: show help text.
386 */
387 #define	ITADMIN_CMD_HELP		4
388 
389 /**	itadmin command: show version information.
390 */
391 #define	ITADMIN_CMD_VERSION		8
392 
393 /**	itadmin command: show license terms.
394 */
395 #define	ITADMIN_CMD_LICENSE_TERMS	16
396 /**@}*/
397 
398 
399 
400 /**	Maximum size for configuration file lines.
401 */
402 #define	ITADMIN_CONFIG_LINE_SIZE	256
403 
404 /**	Function to remove one object.
405 */
406 typedef void itadmin_obj_del(void *);
407 
408 #ifdef __cplusplus
409 extern "C" {
410 #endif
411 
412 /**	Read configuration file(s).
413 	@param	job	Job structure.
414 	@return	1 on success, 0 on error.
415 */
416 int
417 itadmin_config_read(itadmin_job *job);
418 
419 /**	Delete one user.
420 	@param	v	Object to delete.
421 */
422 void
423 itadmin_mem_user_del(void *v);
424 
425 /**	Delete one building.
426 	@param	v	Object to delete.
427 */
428 void
429 itadmin_mem_building_del(void *v);
430 
431 /**	Delete one speed setting.
432 	@param	v	Object to delete.
433 */
434 void
435 itadmin_mem_speed_del(void *v);
436 
437 /**	Delete one VLAN.
438 	@param	v	Object to delete.
439 */
440 void
441 itadmin_mem_vlan_del(void *v);
442 
443 /**	Delete one network connection patch.
444 	@param	v	Object to delete.
445 */
446 void
447 itadmin_mem_connect_del(void *v);
448 
449 /**	Delete one network.
450 	@param	v	Object to delete.
451 */
452 void
453 itadmin_mem_network_del(void *v);
454 
455 /**	Delete one netgroup.
456 	@param	v	Object to delete.
457 */
458 void
459 itadmin_mem_netgroup_del(void *v);
460 
461 /**	Delete one netgroup dependency.
462 	@param	v	Object to delete.
463 */
464 void
465 itadmin_mem_ngdep_del(void *v);
466 
467 /**	Delete one DHCP class.
468 	@param	v	Object to delete.
469 */
470 void
471 itadmin_mem_dhcp_class_del(void *v);
472 
473 /**	Delete one DHCP pool.
474 	@param	v	Object to delete.
475 */
476 void
477 itadmin_mem_dhcp_pool_del(void *v);
478 
479 /**	Delete one DHCP group.
480 	@param	v	Object to delete.
481 */
482 void
483 itadmin_mem_dhcp_group_del(void *v);
484 
485 /**	Delete one host.
486 	@param	v	Object to delete.
487 */
488 void
489 itadmin_mem_host_del(void *v);
490 
491 /**	Delete one software manufacturer.
492 	@param	v	Object to delete.
493 */
494 void
495 itadmin_mem_sw_man_del(void *v);
496 
497 /**	Delete one software product.
498 	@param	v	Object to delete.
499 */
500 void
501 itadmin_mem_software_del(void *v);
502 
503 /**	Delete one license type.
504 	@param	v	Object to delete.
505 */
506 void
507 itadmin_mem_lic_type_del(void *v);
508 
509 /**	Delete one license.
510 	@param	v	Object to delete.
511 */
512 void
513 itadmin_mem_license_del(void *v);
514 
515 /**	Create new user.
516 	@param	job	Job structure.
517 	@param	un	Name.
518 	@param	tt	Academic degree or title (may be NULL).
519 	@param	sn	Surname (may be NULL).
520 	@param	na	Name.
521 	@param	em	E-Mail (may be NULL).
522 	@param	cc	Cost control ID (may be NULL).
523 	@param	si	Staff ID number (may be NULL).
524 	@return	Pointer to new object on success, NULL on error.
525 */
526 itadmin_user *
527 itadmin_mem_user_new(
528   itadmin_job	*job,
529   char const	*un,
530   char const	*tt,
531   char const	*sn,
532   char const	*na,
533   char const	*em,
534   char const	*cc,
535   char const	*si
536 );
537 
538 /**	Create new building.
539 	@param	job	Job structure.
540 	@param	s	Name.
541 	@param	l	Long name (may be NULL).
542 	@param	a1	Address line 1 (typically street and number,
543 			may be NULL).
544 	@param	a2	Address line 2 (may be NULL).
545 	@param	a3	Address line 3 (may be NULL).
546 	@param	a4	Address line 4 (may be NULL).
547 	@param	zc	Zip code (may be NULL).
548 	@param	city	Town or city name (may be NULL).
549 	@return	Pointer to new object on success, NULL on error.
550 */
551 itadmin_building *
552 itadmin_mem_building_new(
553   itadmin_job	*job,
554   char const	*s,
555   char const	*l,
556   char const	*a1,
557   char const	*a2,
558   char const	*a3,
559   char const	*a4,
560   char const	*zc,
561   char const	*city
562 );
563 
564 /**	Create new speed setting.
565 	@param	job	Job structure.
566 	@param	s	Name.
567 	@param	n	Description (may be NULL).
568 	@return	Pointer to new object on success, NULL on error.
569 */
570 itadmin_speed *
571 itadmin_mem_speed_new(
572   itadmin_job	*job,
573   char const	*s,
574   char const	*n
575 );
576 
577 /**	Create new VLAN.
578 	@param	job	Job structure.
579 	@param	s	Name.
580 	@param	l	Long name (may be NULL).
581 	@return	Pointer to new object on success, NULL on error.
582 */
583 itadmin_vlan *
584 itadmin_mem_vlan_new(
585   itadmin_job	*job,
586   char const	*s,
587   char const	*l
588 );
589 
590 /**	Create new network connector.
591 	@param	job	Job structure.
592 	@param	s	Name.
593 	@param	hp	Building.
594 	@param	room	Room.
595 	@param	sp	Speed setting.
596 	@param	vl	VLAN.
597 	@param	bu	Building.
598 	@return	Pointer to new object on success, NULL on error.
599 */
600 itadmin_connect *
601 itadmin_mem_connect_new(
602   itadmin_job		*job,
603   char const		*s,
604   char const		*hp,
605   char const		*room,
606   itadmin_speed		*sp,
607   itadmin_vlan		*vl,
608   itadmin_building	*bu
609 );
610 
611 /**	Create new network.
612 	@param	job	Job structure.
613 	@param	ip4	Network address.
614 	@param	ma4	Network mask.
615 	@param	gw4	Gateway.
616 	@param	bc4	Broadcast address.
617 	@param	vl	VLAN.
618 	@return	Pointer to new object on success, NULL on error.
619 */
620 itadmin_network *
621 itadmin_mem_network_new(
622   itadmin_job	*job,
623   unsigned long	 ip4,
624   unsigned long	 ma4,
625   unsigned long	 gw4,
626   unsigned long	 bc4,
627   itadmin_vlan	*vl
628 );
629 
630 /**	Create new netgroup.
631 	@param	job	Job structure.
632 	@param	sn	Short name.
633 	@param	ln	Long name (may be NULL).
634 	@return	Pointer to new object on success, NULL on error.
635 */
636 itadmin_netgroup *
637 itadmin_mem_netgroup_new(
638   itadmin_job	*job,
639   char const	*sn,
640   char const	*ln
641 );
642 
643 /**	Create new netgroup dependency.
644 	@param	job	Job structure.
645 	@param	pa	Parent group.
646 	@param	ch	Child group.
647 	@return	Pointer to new object on success, NULL on error.
648 */
649 itadmin_ngdep *
650 itadmin_mem_ngdep_new(
651   itadmin_job		*job,
652   itadmin_netgroup	*pa,
653   itadmin_netgroup	*ch
654 );
655 
656 /**	Create new DHCP class.
657 	@param	job	Job structure.
658 	@param	sn	Short name.
659 	@param	ln	Long name (may be NULL).
660 	@return	Pointer to new object on success, NULL on error.
661 */
662 itadmin_dhcp_class *
663 itadmin_mem_dhcp_class_new(
664   itadmin_job	*job,
665   char const	*sn,
666   char const	*ln
667 );
668 
669 /**	Create new DHCP pool.
670 	@param	job	Job structure.
671 	@param	nw	Network.
672 	@param	cn	Allowed class (if unknown clients are denied,
673 			may be NULL).
674 	@param	ip4s	IPv4 start address.
675 	@param	ip4e	IPv4 end address.
676 	@param	duc	Flag: Deny unknown clients (needs cn).
677 	@param	auc	Flag: Allow unknown clients.
678 	@return	Pointer to new object on success, NULL on error.
679 */
680 itadmin_dhcp_pool *
681 itadmin_mem_dhcp_pool_new(
682   itadmin_job		*job,
683   itadmin_network	*nw,
684   itadmin_dhcp_class	*cn,
685   unsigned long		 ip4s,
686   unsigned long		 ip4e,
687   int			 duc,
688   int			 auc
689 );
690 
691 /**	Create new DHCP group.
692 	@param	job	Job structure.
693 	@param	sn	Short name.
694 	@param	ln	Long name (may be NULL).
695 	@return	Pointer to new object on success, NULL on error.
696 */
697 itadmin_dhcp_group *
698 itadmin_mem_dhcp_group_new(
699   itadmin_job	*job,
700   char const	*sn,
701   char const	*ln
702 );
703 
704 /**	Create new host
705 	@param	job	Job structure.
706 	@param	sn	Short name.
707 	@param	co	Comment/description (may be NULL).
708 	@param	maca	MAC address (may be NULL).
709 	@param	room	Room (may be NULL).
710 	@param	inv	Inventory number (may be NULL).
711 	@param	serno	Serial number (may be NULL).
712 	@param	hid	Host ID (may be NULL).
713 	@param	expi	Expiration date (may be NULL).
714 	@param	dnsd	DNS domain (may be NULL).
715 	@param	un	System owner.
716 	@param	ng	Netgroup (may be NULL).
717 	@param	dc	DHCP class (may be NULL).
718 	@param	dg	DHCP group (may be NULL).
719 	@param	nc	Network connection socket (may be NULL).
720 	@param	bu	Building (may be NULL).
721 	@param	ipv4	IPv4 address (may be NULL).
722 	@param	fnf	Flag: FQDN first in hosts file.
723 	@param	fgu	Flag: Guest computer (bring your own device).
724 	@param	snd	Flag: Skip in network documentation.
725 	@param	saw	Flag: Skip in arpwatch configuration.
726 	@return	Pointer to new object on success, NULL on error.
727 */
728 itadmin_host *
729 itadmin_mem_host_new(
730   itadmin_job		*job,
731   itadmin_date		*expi,
732   char const		*sn,
733   char const		*co,
734   char const		*maca,
735   char const		*room,
736   char const		*inv,
737   char const		*serno,
738   char const		*hid,
739   char const		*dnsd,
740   itadmin_user		*un,
741   itadmin_netgroup	*ng,
742   itadmin_dhcp_class	*dc,
743   itadmin_dhcp_group	*dg,
744   itadmin_connect	*nc,
745   itadmin_building	*bu,
746   unsigned long		 ipv4,
747   int			 fnf,
748   int			 fgu,
749   int			 snd,
750   int			 saw
751 );
752 
753 /**	Create new software manufacturer.
754 	@param	job	Job structure.
755 	@param	sn	Short name.
756 	@param	ln	Long name (description).
757 	@return	Pointer to new object on success, NULL on error.
758 */
759 itadmin_swman *
760 itadmin_mem_sw_man_new(
761   itadmin_job	*job,
762   char const	*sn,
763   char const	*ln
764 );
765 
766 /**	Create new software product.
767 	@param	job	Job structure.
768 	@param	sn	Short name.
769 	@param	ln	Long name.
770 	@param	mn	Software manufacturer name (may be NULL).
771 	@return	Pointer to new object on success, NULL on error.
772 */
773 itadmin_swprod *
774 itadmin_mem_swprod_new(
775   itadmin_job	*job,
776   char const	*sn,
777   char const	*ln,
778   itadmin_swman	*mn
779 );
780 
781 /**	Create new license type.
782 	@param	job	Job structure.
783 	@param	sn	Short license type name.
784 	@param	ln	Long name (description).
785 	@param	num	Number of client licenses for floating license servers.
786 	@return	Pointer to new object on success, NULL on error.
787 */
788 itadmin_lictype *
789 itadmin_mem_lictype_new(
790   itadmin_job	*job,
791   char const	*sn,
792   char const	*ln,
793   int		 num
794 );
795 
796 /**	Create new license.
797 	@param	job	Job structure.
798 	@param	pk	Primary key from licenses table (unused).
799 	@param	order	Order ID or tracking information (may be NULL).
800 	@param	notes	Additional notes (may be NULL).
801 	@param	i_del	Delivery note ID (may be NULL).
802 	@param	i_inv	Invoice ID (may be NULL).
803 	@param	prod	Software product.
804 	@param	ltype	License type.
805 	@param	owner	License owner (may be NULL).
806 	@param	host	Computer (may be NULL).
807 	@return	Pointer to new object on success, NULL on error.
808 */
809 itadmin_license *
810 itadmin_mem_license_new(
811   itadmin_job		*job,
812   unsigned long		 pk,
813   char const		*order,
814   char const		*notes,
815   char const		*i_del,
816   char const		*i_inv,
817   itadmin_swprod	*prod,
818   itadmin_lictype	*ltype,
819   itadmin_user		*owner,
820   itadmin_host		*host
821 );
822 
823 /**	Create new DHCP group in network.
824 	@param	job	Job structure.
825 	@param	gr	DHCP group structure.
826 	@return	Pointer to new object on success, NULL on error.
827 */
828 itadmin_dhcp_ginw *
829 itadmin_mem_dhcp_ginw_new(itadmin_job *job, itadmin_dhcp_group *gr);
830 
831 /**	Destroy DHCP group in network structure, release memory.
832 	@param	g	Group structure to destroy.
833 */
834 void
835 itadmin_mem_dhcp_ginw_del(itadmin_dhcp_ginw *g);
836 
837 /**	Initialize date structure.
838 	@param	dp	Date pointer.
839 */
840 void
841 itadmin_mem_date_init(itadmin_date *dp);
842 
843 /**	Copy date structure.
844 	@param	dp	Destination pointer.
845 	@param	sp	Source pointer.
846 */
847 void
848 itadmin_mem_date_copy(itadmin_date *dp, itadmin_date *sp);
849 
850 /**	Create a DHCP option structure.
851 	@param	job	Job structure.
852 	@param	k	Key (option name).
853 	@param	v	Option value.
854 	@param	pk	Primary key number from table (unused).
855 	@return	Valid pointer to new object on success, NULL on error.
856 */
857 itadmin_dhcp_option *
858 itadmin_mem_dhcp_option_new(
859   itadmin_job	*job,
860   char const	*k,
861   char const	*v,
862   long		 pk
863 );
864 
865 /**	Destroy DHCP option structure, release memory.
866 	@param	v	Option to destroy.
867 */
868 void
869 itadmin_mem_dhcp_option_del(void *v);
870 
871 /**	Read data from database.
872 	@param	job	Job structure.
873 	@return	1 on success, 0 on error.
874 */
875 int
876 itadmin_data_read(itadmin_job *job);
877 
878 /**	Read data from MySQL database.
879 	@param	job	Job structure.
880 	@return	1 on success, 0 on error.
881 */
882 int
883 itadmin_data_mysql_read(itadmin_job *job);
884 
885 /**	Register a user record.
886 	@param	job	Job structure.
887 	@param	us_s	User short name (login name).
888 	@param	us_t	User title or academic degree.
889 	@param	us_sn	Surname.
890 	@param	us_fn	Family name.
891 	@param	us_em	E-Mail.
892 	@param	us_ko	Cost control ID.
893 	@param	us_se	Organizational unit.
894 	@return	1 on success, 0 on error.
895 */
896 int
897 itadmin_register_user(
898   itadmin_job	*job,
899   char const	*us_s,
900   char const	*us_t,
901   char const	*us_sn,
902   char const	*us_fn,
903   char const	*us_em,
904   char const	*us_ko,
905   char const	*us_se
906 );
907 
908 /**	Register building.
909 	@param	job	Job structure.
910 	@param	gb_s	Short building name.
911 	@param	gb_l	Long building name.
912 	@param	gb_a1	Address line 1.
913 	@param	gb_a2	Address line 2.
914 	@param	gb_a3	Address line 3.
915 	@param	gb_a4	Address line 4.
916 	@param	gb_plz	Zip code.
917 	@param	gb_ort	City name.
918 	@return	1 on success, 0 on error.
919 */
920 int
921 itadmin_register_building(
922   itadmin_job		*job,
923   char const		*gb_s,
924   char const		*gb_l,
925   char const		*gb_a1,
926   char const		*gb_a2,
927   char const		*gb_a3,
928   char const		*gb_a4,
929   char const		*gb_plz,
930   char const		*gb_ort
931 );
932 
933 /**	Register a speed setting.
934 	@param	job	Job structure.
935 	@param	sn	Short name for setting.
936 	@param	ln	Description.
937 	@return	1 on success, 0 on error.
938 */
939 int
940 itadmin_register_speed(
941   itadmin_job		*job,
942   char const		*sn,
943   char const		*ln
944 );
945 
946 /**	Register a VLAN.
947 	@param	job	Job structure.
948 	@param	vl_s	Short name for VLAN.
949 	@param	vl_l	Description.
950 	@return	1 on success, 0 on error.
951 */
952 int
953 itadmin_register_vlan(itadmin_job *job, char const *vl_s, char const *vl_l);
954 
955 /**	Register patch (ethernet socket).
956 	@param	job	Job structure.
957 	@param	dd_n	Patch name.
958 	@param	sp_s	Speed setting name.
959 	@param	vl_s	VLAN short name.
960 	@param	dd_p	Hub port name.
961 	@param	gb_s	Building.
962 	@param	dd_r	Room number/name of patch.
963 	@return	1 on success, 0 on error.
964 */
965 int
966 itadmin_register_patch(
967   itadmin_job		*job,
968   char const		*dd_n,
969   char const		*sp_s,
970   char const		*vl_s,
971   char const		*dd_p,
972   char const		*gb_s,
973   char const		*dd_r
974 );
975 
976 /**	Register network.
977 	@param	job	Job structure.
978 	@param	nw_ip	IP address.
979 	@param	nw_ma	Network mask.
980 	@param	nw_gw	Gateway.
981 	@param	nw_bc	Broadcast address.
982 	@param	vl_s	VLAN for network.
983 	@return	1 on success, 0 on error.
984 */
985 int
986 itadmin_register_network(
987   itadmin_job		*job,
988   char const		*nw_ip,
989   char const		*nw_ma,
990   char const		*nw_gw,
991   char const		*nw_bc,
992   char const		*vl_s
993 );
994 
995 /**	Register DHCP pool.
996 	@param	job	Job structure.
997 	@param	ips	IP start address of pool.
998 	@param	ipe	IP end address of pool.
999 	@param	nw	Network address (may be NULL or empty).
1000 	@param	alu	Flag: Allow unknown clients.
1001 	@param	dnu	Flag: Deny unknown clients.
1002 	@param	dcn	Allowed class name if unknown clients denied.
1003 	@return	1 on success, 0 on error.
1004 */
1005 int
1006 itadmin_register_dhcp_pool(
1007   itadmin_job		*job,
1008   char const		*ips,
1009   char const		*ipe,
1010   char const		*nw,
1011   int			 alu,
1012   int			 dnu,
1013   char const		*dcn
1014 );
1015 
1016 /**	Register DHCP class.
1017 	@param	job	Job structure.
1018 	@param	dcs	Short class name.
1019 	@param	dcl	Long class name (description).
1020 	@return	1 on success, 0 on error.
1021 */
1022 int
1023 itadmin_register_dhcp_class(itadmin_job *job,char const *dcs,char const *dcl);
1024 
1025 /**	Register DHCP group.
1026 	@param	job	Job structure.
1027 	@param	sn	Short name.
1028 	@param	ln	Long name (description).
1029 	@return	1 on success, 0 on error.
1030 */
1031 int
1032 itadmin_register_dhcp_group(itadmin_job *job, char const *sn, char const *ln);
1033 
1034 /**	Register netgroup.
1035 	@param	job	Job structure.
1036 	@param	ng_s	Short netgroup name.
1037 	@param	ng_l	Long name (description).
1038 	@return	1 on success, 0 on error.
1039 */
1040 int
1041 itadmin_register_netgroup(itadmin_job *job,char const *ng_s,char const *ng_l);
1042 
1043 /**	Register netgroup dependency.
1044 	@param	job	Job structure.
1045 	@param	pgn	Name of the parent group.
1046 	@param	cgn	Name of the child group.
1047 	@return	1 on success, 0 on error.
1048 */
1049 int
1050 itadmin_register_ngdep(itadmin_job *job, char const *pgn, char const *cgn);
1051 
1052 /**	Register one host.
1053 	@param	job		Job structure.
1054 	@param	co_s		Short name for computer.
1055 	@param	us_s		Owner / user in charge.
1056 	@param	co_ip		IPv4 address.
1057 	@param	co_mc		MAC address.
1058 	@param	ng_s		Netgroup.
1059 	@param	co_co		Comment for PC.
1060 	@param	dc_s		DHCP class.
1061 	@param	dg_s		DHCP group.
1062 	@param	dd_n		Patch/connector number.
1063 	@param	gb_s		Building.
1064 	@param	co_r		Room number.
1065 	@param	co_in		Inventory ID.
1066 	@param	co_sn		Serial number.
1067 	@param	co_dd		DNS domain name.
1068 	@param	co_ff		Flag: Write FQDN first in /etc/hosts.
1069 	@param	co_gu		Flag: BYOD (bring your own device).
1070 	@param	co_hi		Host ID.
1071 	@param	co_ex		Expiration date.
1072 	@param	co_nn		Flag: Skip host in network documentation.
1073 	@param	co_na		Flag: Skip host for arpwatch.
1074 */
1075 
1076 int
1077 itadmin_register_host(
1078   itadmin_job		*job,
1079   char const		*co_s,
1080   char const		*us_s,
1081   char const		*co_ip,
1082   char const		*co_mc,
1083   char const		*ng_s,
1084   char const		*co_co,
1085   char const		*dc_s,
1086   char const		*dg_s,
1087   char const		*dd_n,
1088   char const		*gb_s,
1089   char const		*co_r,
1090   char const		*co_in,
1091   char const		*co_sn,
1092   char const		*co_dd,
1093   int			 co_ff,
1094   int			 co_gu,
1095   char const		*co_hi,
1096   itadmin_date		*co_ex,
1097   int			 co_nn,
1098   int			 co_na
1099 );
1100 
1101 /**	Register host name alias.
1102 	@param	job	Job structure.
1103 	@param	al	Alias name.
1104 	@param	rn	Real host name.
1105 	@return	1 on success, 0 on error.
1106 */
1107 int
1108 itadmin_register_alias(itadmin_job *job, char const *al, char const *rn);
1109 
1110 /**	Register a DHCP option.
1111 	@param	job	Job structure.
1112 	@param	sct	Scope type name.
1113 	@param	scn	Scope name.
1114 	@param	k	Key (option name).
1115 	@param	v	Option value.
1116 	@param	pk	Primary key from database.
1117 	@return	1 on success, 0 on error.
1118 */
1119 int
1120 itadmin_register_dhcp_option(
1121   itadmin_job	*job,
1122   char const	*sct,
1123   char const	*scn,
1124   char const	*k,
1125   char const	*v,
1126   long		 pk
1127 );
1128 
1129 /**	Check name for empty string or minus.
1130 	We have to save the entry if the string pointer is not
1131 	NULL and the string is not empty and not a minus.
1132 	@param	sn	String to check.
1133 	@return	1 if string must be saved, 0 for ignore.
1134 */
1135 int
1136 itadmin_register_check_user_name(char const *sn);
1137 
1138 /**	Check whether we can attempt to convert a string to an IP address.
1139 	@param	ip	String to test.
1140 	@return	1 for string with text, 0 for empty string.
1141 */
1142 int
1143 itadmin_register_check_ip(char const *ip);
1144 
1145 /**	Register a software manufacturer.
1146 	@param	job	Job structure.
1147 	@param	sm_s	Short name.
1148 	@param	sm_l	Long name.
1149 	@return	1 on success, 0 on error.
1150 */
1151 int
1152 itadmin_register_swman( itadmin_job *job, char const *sm_s, char const *sm_l);
1153 
1154 /**	Register a software product.
1155 	@param	job	Job structure.
1156 	@param	sw_s	Short software name.
1157 	@param	sw_l	Long software name.
1158 	@param	sm_s	Software manufacturer.
1159 	@return	1 on success, 0 on error.
1160 */
1161 int
1162 itadmin_register_swprod(
1163   itadmin_job	*job,
1164   char const	*sw_s,
1165   char const	*sw_l,
1166   char const	*sm_s
1167 );
1168 /**	Register a license type.
1169 	@param	job	Job structure.
1170 	@param	lt_s	Short license type name.
1171 	@param	lt_l	Long name/description of license type.
1172 	@param	nl	Number of licenses (for floating licenses).
1173 */
1174 int
1175 itadmin_register_lictype(
1176   itadmin_job	*job,
1177   char const	*lt_s,
1178   char const	*lt_l,
1179   int		 nl
1180 );
1181 
1182 /**	Register license.
1183 	@param	job	Job structure.
1184 	@param	pk	Primary key.
1185 	@param	li_on	Order number (purchase process ID).
1186 	@param	sw_s	Software short name.
1187 	@param	us_s	User to which the license is assigned.
1188 	@param	co_s	Computer on which the license is used.
1189 	@param	lt_s	License type.
1190 	@param	li_no	Optional note for the license.
1191 	@param	li_nd	Delivery note number.
1192 	@param	li_ni	Invoice number.
1193 	@return	1 on success, 0 on error.
1194 */
1195 int
1196 itadmin_register_license(
1197   itadmin_job	*job,
1198   unsigned long	 pk,
1199   char const	*li_on,
1200   char const	*sw_s,
1201   char const	*us_s,
1202   char const	*co_s,
1203   char const	*lt_s,
1204   char const	*li_no,
1205   char const	*li_nd,
1206   char const	*li_ni
1207 );
1208 
1209 /**	Compare structures for user.
1210 	@param	l	Left structure.
1211 	@param	r	Right structure, object, or name.
1212 	@param	cr	Comparison criteria
1213 	(0=user/user by us, 1=user/name by us, 2=user/user by na+sn+tt+us).
1214 	@return	Comparison result.
1215 */
1216 int
1217 itadmin_comp_user(void const *l, void const *r, int cr);
1218 
1219 /**	Compare structures for buildings.
1220 	@param	l	Left structure.
1221 	@param	r	Right structure, object, or name.
1222 	@param	cr	Comparison criteria
1223 	(0=building/building by s, 1=building/name by s).
1224 	@return	Comparison result.
1225 */
1226 int
1227 itadmin_comp_building(void const *l, void const *r, int cr);
1228 
1229 /**	Compare structures for network speed.
1230 	@param	l	Left structure.
1231 	@param	r	Right structure, object, or name.
1232 	@param	cr	Comparison criteria
1233 	(0=speed/speed by s, 1=speed/name).
1234 	@return	Comparison result.
1235 */
1236 int
1237 itadmin_comp_speed(void const *l, void const *r, int cr);
1238 
1239 /**	Compare structures for VLAN.
1240 	@param	l	Left structure.
1241 	@param	r	Right structure, object, or name.
1242 	@param	cr	Comparison criteria
1243 	(0=vlan/vlan by s, 1=vlan/name by s).
1244 	@return	Comparison result.
1245 */
1246 int
1247 itadmin_comp_vlan(void const *l, void const *r, int cr);
1248 
1249 /**	Compare structures for ethernet socket.
1250 	@param	l	Left structure.
1251 	@param	r	Right structure, object, or name.
1252 	@param	cr	Comparison criteria
1253 	(0=socket/socket by s, 1=socket/name).
1254 	@return	Comparison result.
1255 */
1256 int
1257 itadmin_comp_connect(void const *l, void const *r, int cr);
1258 
1259 /**	Compare structures for network.
1260 	@param	l	Left structure.
1261 	@param	r	Right structure, object, or name.
1262 	@param	cr	Comparison criteria
1263 	(0=network/network by ip4, 1=network/ipaddress).
1264 	@return	Comparison result.
1265 */
1266 int
1267 itadmin_comp_network(void const *l, void const *r, int cr);
1268 
1269 /**	Compare structures for netgroup.
1270 	@param	l	Left structure.
1271 	@param	r	Right structure, object, or name.
1272 	@param	cr	Comparison criteria
1273 	(0=netgroup/netgroup by sn, 1=netgroup/name by sn).
1274 	@return	Comparison result.
1275 */
1276 int
1277 itadmin_comp_netgroup(void const *l, void const *r, int cr);
1278 
1279 /**	Compare structures for DHCP class.
1280 	@param	l	Left structure.
1281 	@param	r	Right structure, object, or name.
1282 	@param	cr	Comparison criteria
1283 	(0=class/class by sn, 1=class/name by sn).
1284 	@return	Comparison result.
1285 */
1286 int
1287 itadmin_comp_dhcp_class(void const *l, void const *r, int cr);
1288 
1289 /**	Compare structures for DHCP pool.
1290 	@param	l	Left structure.
1291 	@param	r	Right structure, object, or name.
1292 	@param	cr	Comparison criteria
1293 	(0=pool/pool by ip4s, 1=pool/ipaddress).
1294 	@return	Comparison result.
1295 */
1296 int
1297 itadmin_comp_dhcp_pool(void const *l, void const *r, int cr);
1298 
1299 /**	Compare structures for DHCP group.
1300 	@param	l	Left structure.
1301 	@param	r	Right structure, object, or name.
1302 	@param	cr	Comparison criteria
1303 	(0=group/group by sn, 1=group/name).
1304 	@return	Comparison result.
1305 */
1306 int
1307 itadmin_comp_dhcp_group(void const *l, void const *r, int cr);
1308 
1309 /**	Compare structures for host
1310 	@param	l	Left structure.
1311 	@param	r	Right structure, object, or name.
1312 	@param	cr	Comparison criteria
1313 	(0=host/host by sn, 1=host/name, 2=host/host by ipv4, 3=host/ipaddr).
1314 	@return	Comparison result.
1315 */
1316 int
1317 itadmin_comp_host(void const *l, void const *r, int cr);
1318 
1319 /**	Compare structures for software manufacturer.
1320 	@param	l	Left structure.
1321 	@param	r	Right structure, object, or name.
1322 	@param	cr	Comparison criteria
1323 	(0=swman/swman by sn, 1=swman/name).
1324 	@return	Comparison result.
1325 */
1326 int
1327 itadmin_comp_swman(void const *l, void const *r, int cr);
1328 
1329 /**	Compare structures for software product.
1330 	@param	l	Left structure.
1331 	@param	r	Right structure, object, or name.
1332 	@param	cr	Comparison criteria
1333 	(0=product/product by sn, 1=product/name,
1334 	2=product/product by mn->ln+ln).
1335 	@return	Comparison result.
1336 */
1337 int
1338 itadmin_comp_swprod(void const *l, void const *r, int cr);
1339 
1340 /**	Compare structures for license type.
1341 	@param	l	Left structure.
1342 	@param	r	Right structure, object, or name.
1343 	@param	cr	Comparison criteria
1344 	(0=license/license by product).
1345 	@return	Comparison result.
1346 */
1347 int
1348 itadmin_comp_lictype(void const *l, void const *r, int cr);
1349 
1350 /**	Compare structures for license.
1351 	@param	l	Left structure.
1352 	@param	r	Right structure, object, or name.
1353 	@param	cr	Comparison criteria
1354 	(0=license/license by pk, 1=license/pk, 2=license/license by product).
1355 	@return	Comparison result.
1356 */
1357 int
1358 itadmin_comp_license(void const *l, void const *r, int cr);
1359 
1360 /**	Compare two licenses within a network.
1361 	@param	l	Left object.
1362 	@param	r	Right object or name.
1363 	@param	cr	Comparison criteria (0=group/group,
1364 	1=group/name).
1365 	@return	Comparison result.
1366 */
1367 int
1368 itadmin_comp_dhcp_ginw(void const *l, void const *r, int cr);
1369 
1370 /**	Compare two date structures.
1371 	@param	l	Left object.
1372 	@param	r	Right object.
1373 	@return	1 if @arg l is later than @arg r, 0 for equal days,
1374 	1 if @arg l is earlier than @arg r.
1375 */
1376 int
1377 itadmin_comp_date(itadmin_date const *l, itadmin_date const *r);
1378 
1379 /**	Compare two DHCP options.
1380 	@param	l	Left object.
1381 	@param	r	Right object.
1382 	@param	cr	Comparison criteria (ignored).
1383 	@return	Comparison result.
1384 */
1385 int
1386 itadmin_comp_dhcp_option(void const *l, void const *r, int cr);
1387 
1388 /**	Compare two strings.
1389 	@param	l	Left string.
1390 	@param	r	Right string.
1391 	@param	cr	Comparison criteria (1=case-insensitive, 0=normal).
1392 	@return	Comparison result.
1393 */
1394 int
1395 itadmin_comp_string(void const *l, void const *r, int cr);
1396 
1397 /**	Check whether we have to write network configuration
1398 	and documentation.
1399 	@param	job	Job structure.
1400 	@return	1 for yes, 0 for no.
1401 */
1402 int
1403 itadmin_job_do_network(itadmin_job *job);
1404 
1405 /**	Check whether we have to write a dhcpd.conf file.
1406 	@param	job	Job structure.
1407 	@return	1 for yes, 0 for no.
1408 */
1409 int
1410 itadmin_job_do_dhcp(itadmin_job *job);
1411 
1412 /**	Check whether we have to write a license report.
1413 	@param	job	Job structure.
1414 	@return	1 for yes, 0 for no.
1415 */
1416 int
1417 itadmin_job_do_licenses(itadmin_job *job);
1418 
1419 /**	Convert string yyyy-mm-dd to date structure.
1420 	@param	job	Job structure.
1421 	@param	dp	Destination pointer.
1422 	@param	str	Source text.
1423 	@return	1 on success, 0 on error.
1424 */
1425 int
1426 itadmin_tool_convert_date(itadmin_job *job, itadmin_date *dp, char const *str);
1427 
1428 /**	Write IPv4 address to file.
1429 	@param	df	Destination file.
1430 	@param	ipv4	Address to write.
1431 */
1432 void
1433 itadmin_tool_write_ip(FILE *df, unsigned long ipv4);
1434 
1435 /**	Write IPv4 address to stream.
1436 	@param	os	Output stream.
1437 	@param	ipv4	Address to write.
1438 */
1439 void
1440 itadmin_tool_stream_ip(dk3_stream_t *os, unsigned long ipv4);
1441 
1442 /**	Write user name short to LaTeX output.
1443 	@param	job	Job structure.
1444 	@param	os	Output stream.
1445 	@param	user	User to write.
1446 */
1447 void
1448 itadmin_tool_write_user_latex_short(
1449   itadmin_job	*job,
1450   dk3_stream_t	*os,
1451   itadmin_user	*user
1452 );
1453 
1454 /**	Write user name long to LaTeX output.
1455 	@param	job	Job structure.
1456 	@param	os	Output stream.
1457 	@param	user	User to write.
1458 */
1459 void
1460 itadmin_tool_write_user_latex_long(
1461   itadmin_job	*job,
1462   dk3_stream_t	*os,
1463   itadmin_user	*user
1464 );
1465 
1466 /**	Write the section header in the table.
1467 	@param	job	Job structure.
1468 	@param	os	Output stream.
1469 	@param	kwi	Keyword index.
1470 */
1471 void
1472 itadmin_tool_table_section_header(
1473   itadmin_job	*job,
1474   dk3_stream_t	*os,
1475   size_t	 kwi
1476 );
1477 
1478 /**	Start a table line.
1479 	@param	job	Job structure.
1480 	@param	os	Output stream.
1481 	@param	kwi	Keyword index in localized messages.
1482 */
1483 void
1484 itadmin_tool_table_line_start(
1485   itadmin_job	*job,
1486   dk3_stream_t	*os,
1487   size_t	 kwi
1488 );
1489 
1490 /**	Separate two items in a table.
1491 	@param	os	Output stream.
1492 */
1493 void
1494 itadmin_tool_table_line_sep_rows(
1495   dk3_stream_t	*os
1496 );
1497 
1498 /**	Finish a table line.
1499 	@param	job	Job structure.
1500 	@param	os	Output stream.
1501 	@param	pb	Flag: Allow page break here.
1502 */
1503 void
1504 itadmin_tool_table_line_finish(
1505   dk3_stream_t	*os,
1506   int		 pb
1507 );
1508 
1509 /**	Create empty table field.
1510 	@param	job	Job structure.
1511 	@param	os	Output stream.
1512 	@param	nu	Flag: Write notification for missing value.
1513 */
1514 void
1515 itadmin_tool_table_line_no_data(
1516   itadmin_job	*job,
1517   dk3_stream_t	*os,
1518   int		 nu
1519 );
1520 
1521 /**	Write one detail table line.
1522 	@param	job	Job structure.
1523 	@param	os	Output stream.
1524 	@param	kwi	Keyword index for option name.
1525 	@param	det	Details to write.
1526 	@param	nu	Flag: Write a note about unknown values.
1527 	@param	pb	Flag: Allow page break after line.
1528 */
1529 void
1530 itadmin_tool_table_line(
1531   itadmin_job	*job,
1532   dk3_stream_t	*os,
1533   size_t	 kwi,
1534   char const	*det,
1535   int		 nu,
1536   int		 pb
1537 );
1538 
1539 /**	Write a table line consisting of two values.
1540 	@param	job	Job structure.
1541 	@param	os	Output stream.
1542 	@param	key	Key.
1543 	@param	val	Value.
1544 	@param	fb	Flag: Key in bold.
1545 	@param	pb	Flag: Allow page break.
1546 */
1547 void
1548 itadmin_tool_table_values(
1549   itadmin_job	*job,
1550   dk3_stream_t	*os,
1551   char const	*key,
1552   char const	*val,
1553   int		 fb,
1554   int		 pb
1555 );
1556 
1557 /**	Check whether a host is owned by a user.
1558 	@param	us	User.
1559 	@param	co	Host.
1560 	@return	1 if the host is owned by the user, 0 otherwise.
1561 */
1562 int
1563 itadmin_tool_check_same_user(itadmin_user *us, itadmin_host *co);
1564 
1565 /**	Write a section of text to output stream.
1566 	@param	job	Job structure.
1567 	@param	os	Output stream.
1568 	@param	sect	Text section to write.
1569 */
1570 void
1571 itadmin_tool_write_section(
1572   dk3_stream_t		*os,
1573   char const * const	*sect
1574 );
1575 
1576 /**	Write log message of one part.
1577 	@param	job	Job structure.
1578 	@param	ll	Log level.
1579 	@param	i	Index of message text in localized messages array.
1580 */
1581 void
1582 itadmin_tool_log_1(
1583   itadmin_job		*job,
1584   int			 ll,
1585   size_t		 i
1586 );
1587 
1588 /**	Write log message of three parts.
1589 	@param	job	Job structure.
1590 	@param	ll	Log level.
1591 	@param	i1	Index of first message text in localized messages array.
1592 	@param	i2	Index of third text part in localized messages array.
1593 	@param	msg	Variable message text, second text part.
1594 */
1595 void
1596 itadmin_tool_log_utf8_3(
1597   itadmin_job		*job,
1598   int			 ll,
1599   size_t		 i1,
1600   size_t		 i2,
1601   char const		*msg
1602 );
1603 
1604 /**	Write log message of five parts.
1605 	@param	job	Job structure.
1606 	@param	ll	Log level.
1607 	@param	i1	Index of first message text in localized messages array.
1608 	@param	i2	Index of third text part in localized messages array.
1609 	@param	i3	Index of fifth text part in localized messages array.
1610 	@param	msg1	First variable message text, second text part.
1611 	@param	msg2	Second variable messagetext, fourth text part.
1612 */
1613 void
1614 itadmin_tool_log_utf8_5(
1615   itadmin_job		*job,
1616   int			 ll,
1617   size_t		 i1,
1618   size_t		 i2,
1619   size_t		 i3,
1620   char const		*msg1,
1621   char const		*msg2
1622 );
1623 
1624 /**	Write log message of three parts.
1625 	@param	job	Job structure.
1626 	@param	ll	Log level.
1627 	@param	i1	Index of first constant message part.
1628 	@param	i2	Index of third message part.
1629 	@param	pk	Primary key as numeric value.
1630 */
1631 void
1632 itadmin_tool_log_pk_3(
1633   itadmin_job		*job,
1634   int			 ll,
1635   size_t		 i1,
1636   size_t		 i2,
1637   unsigned long		 pk
1638 );
1639 
1640 /**	Write log message of five parts.
1641 	@param	job	Job structure.
1642 	@param	ll	Log level.
1643 	@param	i1	Index of first constant message part.
1644 	@param	i2	Index of third message part.
1645 	@param	i3	Index of fifth message part.
1646 	@param	pk	Primary key as numeric value.
1647 	@param	msg	Variable message part.
1648 */
1649 void
1650 itadmin_tool_log_pk_5(
1651   itadmin_job		*job,
1652   int			 ll,
1653   size_t		 i1,
1654   size_t		 i2,
1655   size_t		 i3,
1656   unsigned long		 pk,
1657   char const		*msg
1658 );
1659 
1660 /**	Write IPv4 address to buffer.
1661 	@param	bu	Destination buffer, at least 16 bytes long.
1662 	@param	ip	IP address.
1663 */
1664 void
1665 itadmin_tool_ip_to_buffer(char *bu, unsigned long ip);
1666 
1667 /**	Write hosts file.
1668 	@param	job	Job structure.
1669 	@return	1 on success, 0 on error.
1670 */
1671 int
1672 itadmin_hosts_output(itadmin_job *job);
1673 
1674 /**	Write hosts.ldif file.
1675 	@param	job	Job structure.
1676 	@return	1 on success, 0 on error.
1677 */
1678 int
1679 itadmin_hosts_ldif_output(itadmin_job *job);
1680 
1681 /**	Write ethers-by-ip and ethers-by-mac files.
1682 	@param	job	Job structure.
1683 	@return	1 on success, 0 on error.
1684 */
1685 int
1686 itadmin_ethers_output(itadmin_job *job);
1687 
1688 /**	Write ethers.ldif file.
1689 	@param	job	Job structure.
1690 	@return	1 on success, 0 on error.
1691 */
1692 int
1693 itadmin_ethers_ldif_output(itadmin_job *job);
1694 
1695 /**	Expand netgroup dependencies.
1696 	@param	job	Job structure.
1697 	@return	1 on success, 0 on error.
1698 */
1699 int
1700 itadmin_netgroup_expand(itadmin_job *job);
1701 
1702 /**	Check whether a host is a member of a netgroup.
1703 	@param	job		Job structure.
1704 	@param	netgroup	Netgroup.
1705 	@param	host		Host.
1706 	@return	0 for no member, 1 for indirect member, 2 for direct member.
1707 */
1708 int
1709 itadmin_netgroup_host_member(
1710   itadmin_job		*job,
1711   itadmin_netgroup	*netgroup,
1712   itadmin_host		*host
1713 );
1714 
1715 /**	Write netgroup.ldif file.
1716 	@param	job	Job structure.
1717 	@return	1 on success, 0 on error.
1718 */
1719 int
1720 itadmin_netgroup_ldif_output(itadmin_job *job);
1721 
1722 /**	Write dhcpd.conf file.
1723 	@param	job	Job structure.
1724 	@return	1 on success, 0 on error.
1725 */
1726 int
1727 itadmin_dhcpd_conf_output(itadmin_job *job);
1728 
1729 /**	Write network documentation file.
1730 	@param	job	Job structure.
1731 	@return	1 on success, 0 on error.
1732 */
1733 int
1734 itadmin_netdocu(itadmin_job *job);
1735 
1736 /**	Write license report.
1737 	@param	job	Job structure.
1738 	@return	1 on success, 0 on error.
1739 */
1740 int
1741 itadmin_license_report(itadmin_job *job);
1742 
1743 #ifdef __cplusplus
1744 }
1745 #endif
1746 
1747 
1748 #endif
1749