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: itanetd.ctr
12 */
13
14 /** @file itanetd.c The itanetd module.
15 */
16
17
18 #include <libdk3c/dk3all.h>
19 #include <itadmin/itadmin.h>
20
21
22
23
24
25
26
27 /** Keywords used by the module.
28 */
29 static char const * const itadmin_netdocu_c8_kw[] = {
30 /* 0 */
31 "\n",
32
33 /* 1 */
34 " ",
35
36 /* 2 */
37 "w",
38
39 /* 3 */
40 "netdocu.tex",
41
42 /* 4 */
43 "pdftitle={",
44
45 /* 5 */
46 "},",
47
48 /* 6 */
49 "pdfsubject={",
50
51 /* 7 */
52 "pdfauthor={",
53
54 /* 8 */
55 "pdfcreator={itadmin - http://sourceforge.net/p/dktools/wiki/itadmin/}",
56
57 /* 9 */
58 "\\author{",
59
60 /* 10 */
61 "\\title{",
62
63 /* 11 */
64 "}",
65
66 /* 12 */
67 "\\section{",
68
69 /* 13 */
70 "\\subsection[",
71
72 /* 14 */
73 "]{",
74
75 /* 15 */
76 "\\subsection{",
77
78 /* 16 */
79 "\\subsubsection{",
80
81 /* 17 */
82 "\\clearpage",
83
84 /* 18 */
85 "\\begin{tabular}{rl}",
86
87 /* 19 */
88 "\\end{tabular}",
89
90 /* 20 */
91 "\\\\*[1em]",
92
93 /* 21 */
94 "\\begin{itemize}",
95
96 /* 22 */
97 "\\end{itemize}",
98
99 /* 23 */
100 "\\item{",
101
102 /* 24 */
103 "&",
104
105 /* 25 */
106 "\\\\",
107
108 /* 26 */
109 "\\textbf{",
110
111 /* 27 */
112 "\\begin{longtable}{ll}",
113
114 /* 28 */
115 "\\endfirsthead",
116
117 /* 29 */
118 "\\endhead",
119
120 /* 30 */
121 "\\endfoot",
122
123 /* 31 */
124 "\\endlastfoot",
125
126 /* 32 */
127 "\\end{longtable}",
128
129 /* 33 */
130 "~\\\\[0.5em]",
131
132 /* 34 */
133 "\\begin{longtable}{|c|c|c|c|c|}",
134
135 /* 35 */
136 "\\hline",
137
138 /* 36 */
139 "\\multicolumn{1}{|c}{\\textbf{",
140
141 /* 37 */
142 "\\multicolumn{1}{|c|}{\\textbf{",
143
144 /* 38 */
145 "}}",
146
147 NULL
148
149 };
150
151
152
153 /** Start of LaTeX source.
154 */
155 static char const * const itadmin_netdocu_file_start1a[] = {
156 "\\documentclass[titlepage,origlongtable]{scrartcl}",
157 "\\KOMAoptions{paper=a4}",
158 "\\KOMAoptions{fontsize=12pt}",
159 NULL
160
161 };
162
163
164
165 /** Start of LaTeX source.
166 */
167 static char const * const itadmin_netdocu_file_start1b[] = {
168 "\\documentclass[12pt]{article}",
169 NULL
170
171 };
172
173
174 /** LaTeX packages after ngerman.
175 */
176 static char const * const itadmin_netdocu_file_start4[] = {
177 "\\usepackage{ifpdf}",
178 "\\usepackage[utf8]{inputenc}",
179 "\\usepackage{mathptmx}",
180 "\\usepackage[scaled=.92]{helvet}",
181 "\\usepackage{courier}",
182 "\\usepackage[T1]{fontenc}",
183 "\\usepackage{textcomp}",
184 "\\usepackage{latexsym}",
185 "\\usepackage{varioref}",
186 "\\usepackage{color}",
187 "\\usepackage{makeidx}",
188 "\\usepackage{longtable}",
189 "\\makeindex",
190 "\\ifpdf",
191 "\\usepackage{microtype}",
192 "\\pdfcompresslevel=9",
193 "\\usepackage[",
194 "pdftex,",
195 "colorlinks=true,",
196 "pdfpagemode=UseNone,",
197 "pdfstartview={XYZ 0 835 1.25},",
198 "bookmarksnumbered,",
199 NULL
200
201 };
202
203
204
205 /** LaTeX package after hyperref options for title, subject, author.
206 */
207 static char const * const itadmin_netdocu_file_start2[] = {
208 "]{hyperref}",
209 "\\else",
210 "\\usepackage[dvips,colorlinks=true,linkcolor=black]{hyperref}",
211 "\\fi",
212 "\\parindent0cm",
213 NULL
214
215 };
216
217
218
219 /** Renewcommand, only used for koma-script.
220 */
221 static char const * const itadmin_netdocu_file_start3a[] = {
222 "\\renewcommand*{\\sectfont}{\\bfseries}",
223 NULL
224
225 };
226
227
228
229 /** Final commands after title and author.
230 */
231 static char const * const itadmin_netdocu_file_start3[] = {
232 "\\setcounter{secnumdepth}{1}",
233 "\\begin{document}",
234 NULL
235
236 };
237
238
239
240 /** LaTeX file end.
241 */
242 static char const * const itadmin_netdocu_file_end[] = {
243 "\\end{document}",
244 NULL
245
246 };
247
248
249
250 /** Write section header for hosts section
251 */
252 static
253 void
itadmin_netdocu_write_sh_hosts(itadmin_job * job,dk3_stream_t * os)254 itadmin_netdocu_write_sh_hosts(itadmin_job *job, dk3_stream_t *os)
255 {
256 int ie;
257 ie = dk3app_get_encoding(job->app);
258 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[12]);
259 dk3stream_strputs(os, (job->msg)[3], ie);
260 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]);
261 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
262 }
263
264
265
266 /** Write section header for one user.
267 */
268 static
269 void
itadmin_netdocu_write_sh_user(itadmin_job * job,dk3_stream_t * os,itadmin_user * user)270 itadmin_netdocu_write_sh_user(
271 itadmin_job *job,
272 dk3_stream_t *os,
273 itadmin_user *user
274 )
275 {
276 #if VERSION_BEFORE_20150821
277 int ie;
278 ie = dk3app_get_encoding(job->app);
279 #endif
280 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[13]);
281 itadmin_tool_write_user_latex_short(job, os, user);
282 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[14]);
283 itadmin_tool_write_user_latex_long(job, os, user);
284 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]);
285 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
286 }
287
288
289
290 /** Write section header "Other hosts"
291 @param job Job structure.
292 @param os Output stream.
293 */
294 static
295 void
itadmin_netdocu_write_sh_others(itadmin_job * job,dk3_stream_t * os)296 itadmin_netdocu_write_sh_others(itadmin_job *job, dk3_stream_t *os)
297 {
298 int ie;
299 ie = dk3app_get_encoding(job->app);
300 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[15]);
301 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[4], ie);
302 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]);
303 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
304 }
305
306
307
308 /** Write section header "BYOD"
309 @param job Job structure.
310 @param os Output stream.
311 */
312 static
313 void
itadmin_netdocu_write_sh_byod(itadmin_job * job,dk3_stream_t * os)314 itadmin_netdocu_write_sh_byod(itadmin_job *job, dk3_stream_t *os)
315 {
316 int ie;
317 ie = dk3app_get_encoding(job->app);
318 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[13]);
319 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[21], ie);
320 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[14]);
321 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[22], ie);
322 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]);
323 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
324 }
325
326
327
328 /** Write data for one host.
329 @param job Job structure.
330 @param os Output stream.
331 @param host Host to write.
332 */
333 static
334 void
itadmin_netdocu_write_one_host(itadmin_job * job,dk3_stream_t * os,itadmin_host * host)335 itadmin_netdocu_write_one_host(
336 itadmin_job *job,
337 dk3_stream_t *os,
338 itadmin_host *host
339 )
340 {
341 itadmin_netgroup *ng;
342 char const *p1;
343 int ie;
344
345 ie = dk3app_get_encoding(job->app);
346 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[16]);
347 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, host->sn);
348 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]);
349 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
350 if(host->dp) {
351 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[20], ie);
352 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[20]);
353 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
354 } else {
355 if(host->fgu) {
356 switch(host->fgu) {
357 case 1: {
358 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[28], ie);
359 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[20]);
360 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
361 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[24], ie);
362 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
363 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[310], ie);
364 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[20]);
365 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
366 } break;
367 case 2: {
368 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[28], ie);
369 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[20]);
370 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
371 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[25], ie);
372 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
373 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[26], ie);
374 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
375 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[27], ie);
376 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[20]);
377 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
378 } break;
379 case 3: {
380 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[23], ie);
381 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[20]);
382 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
383 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[311], ie);
384 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
385 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[312], ie);
386 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[20]);
387 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
388 } break;
389 case 4: {
390 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[23], ie);
391 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[20]);
392 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
393 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[313], ie);
394 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
395 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[312], ie);
396 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[20]);
397 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
398 } break;
399 case 5: {
400 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[23], ie);
401 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[20]);
402 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
403 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[315], ie);
404 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
405 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[316], ie);
406 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
407 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[317], ie);
408 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[20]);
409 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
410 } break;
411 case 6: {
412 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[23], ie);
413 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[20]);
414 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[318], ie);
415 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
416 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[319], ie);
417 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
418 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[320], ie);
419 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[20]);
420 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
421 } break;
422 case 7: {
423 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[320], ie);
424 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[20]);
425 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
426 } break;
427 default : {
428 } break;
429 }
430 }
431 }
432 /* begin{tabular}.... */
433 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[18]);
434 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
435
436 itadmin_tool_table_section_header(job, os, 5);
437
438 if(host->un) {
439 itadmin_tool_table_line_start(job, os, 10);
440 itadmin_tool_table_line_sep_rows(os);
441 itadmin_tool_write_user_latex_long(job, os, host->un);
442 itadmin_tool_table_line_finish(os, 0);
443 } else {
444 if(!(host->fgu)) {
445 itadmin_tool_table_line(job, os, 10, NULL, 1, 0);
446 }
447 }
448
449 itadmin_tool_table_line(job, os, 6, host->co, 1, 0);
450 /* Ort (Gebaeude und Raum) */
451 itadmin_tool_table_line_start(job, os, 11);
452 itadmin_tool_table_line_sep_rows(os);
453 if(host->bu) {
454 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, (host->bu)->s);
455 if(host->room) {
456 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[1]);
457 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, host->room);
458 }
459 } else {
460 if(host->room) {
461 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, host->room);
462 } else {
463 itadmin_tool_table_line_no_data(job, os, 1);
464 }
465 }
466 itadmin_tool_table_line_finish(os, 0);
467 itadmin_tool_table_line(job, os, 7, host->inv, 1, 0);
468 itadmin_tool_table_line(job, os, 8, host->serno, 1, 1);
469
470 itadmin_tool_table_section_header(job, os, 12);
471 if(host->ipv4) {
472 itadmin_tool_table_line_start(job, os, 13);
473 itadmin_tool_table_line_sep_rows(os);
474 itadmin_tool_stream_ip(os, host->ipv4);
475 itadmin_tool_table_line_finish(os, 0);
476 if(host->dnsd) {
477 itadmin_tool_table_line(job, os, 14, host->dnsd, 0, 0);
478 }
479 } else {
480 if(!(host->dc)) {
481 itadmin_tool_table_line(job, os, 13, NULL, 1, 0);
482 }
483 }
484 /* MAC-Adresse */
485 itadmin_tool_table_line(job, os, 15, host->maca, 1, 0);
486 /* Datendose */
487 p1 = NULL;
488 if(host->nc) { p1 = (host->nc)->s; }
489 itadmin_tool_table_line(job, os, 16, p1, 1, 0);
490 /* DHCP-Klasse */
491 if(!((host->ipv4) || (host->dp))) {
492 p1 = NULL;
493 if(host->dc) { p1 = (host->dc)->sn; }
494 itadmin_tool_table_line(job, os, 17, p1, 1, 0);
495 }
496 /* DHCP-Gruppe */
497 p1 = NULL;
498 if(host->dg) { p1 = (host->dg)->sn; }
499 itadmin_tool_table_line(job, os, 18, p1, 0, 1);
500 /* Netgroups */
501 if(host->ng) {
502 itadmin_tool_table_section_header(job, os, 19);
503 itadmin_tool_table_values(job, os, (host->ng)->sn, (host->ng)->ln, 1, 0);
504 dk3sto_it_reset(job->i_ng);
505 while(NULL != (ng = (itadmin_netgroup *)dk3sto_it_next(job->i_ng))) {
506 if(1 == itadmin_netgroup_host_member(job, ng, host)) {
507 itadmin_tool_table_values(job,os, ng->sn, ng->ln, 0, 0);
508 }
509 }
510 }
511 /* end{tabular} */
512 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[19]);
513 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
514 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[17]);
515 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
516
517 }
518
519
520
521
522 /** Write data for one host.
523 @param job Job structure.
524 @param os Output stream.
525 @param host Host to write.
526 */
527 static
528 void
itadmin_netdocu_write_byod_host(itadmin_job * job,dk3_stream_t * os,itadmin_host * host)529 itadmin_netdocu_write_byod_host(
530 itadmin_job *job,
531 dk3_stream_t *os,
532 itadmin_host *host
533 )
534 {
535 char const *p1;
536 #if VERSION_BEFORE_20150821
537 int ie;
538 #endif
539
540 #if VERSION_BEFORE_20150821
541 ie = dk3app_get_encoding(job->app);
542 #endif
543 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[16]);
544 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, host->sn);
545 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]);
546 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
547 /* begin{tabular}.... */
548 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[18]);
549 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
550 if(host->un) {
551 itadmin_tool_table_line_start(job, os, 10);
552 itadmin_tool_table_line_sep_rows(os);
553 itadmin_tool_write_user_latex_long(job, os, host->un);
554 itadmin_tool_table_line_finish(os, 0);
555 } else {
556 }
557 itadmin_tool_table_line(job, os, 6, host->co, 1, 0);
558 if(host->ipv4) {
559 itadmin_tool_table_line_start(job, os, 13);
560 itadmin_tool_table_line_sep_rows(os);
561 itadmin_tool_stream_ip(os, host->ipv4);
562 itadmin_tool_table_line_finish(os, 0);
563 } else {
564 if(!(host->dc)) {
565 itadmin_tool_table_line(job, os, 13, NULL, 1, 0);
566 }
567 }
568 /* MAC-Adresse */
569 itadmin_tool_table_line(job, os, 15, host->maca, 1, 0);
570 /* DHCP-Klasse */
571 if(!((host->ipv4) || (host->dp))) {
572 p1 = NULL;
573 if(host->dc) { p1 = (host->dc)->sn; }
574 itadmin_tool_table_line(job, os, 17, p1, 1, 0);
575 }
576 /* DHCP-Gruppe */
577 if(host->dg) {
578 p1 = NULL;
579 if(host->dg) { p1 = (host->dg)->sn; }
580 itadmin_tool_table_line(job, os, 18, p1, 0, 1);
581 }
582 /* end{tabular} */
583 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[19]);
584 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
585
586 }
587
588
589
590 /** Check whether the host is a BRING YOUR OWN DEVICE computer.
591 @param host The host to check.
592 @return 1 for yes, 0 for no.
593 */
594 static
595 int
itadmin_netdocu_is_byod(itadmin_host * host)596 itadmin_netdocu_is_byod(itadmin_host *host)
597 {
598 int back = 0;
599 if(!(host->ipv4)) {
600 if(host->dc) {
601 if(host->fgu == 1) {
602 back = 1;
603 }
604 }
605 }
606 return back;
607 }
608
609
610
611 /** Write hosts section of network documentation.
612 @param job Job structure.
613 @param os Output stream.
614 */
615 static
616 void
itadmin_netdocu_write_hosts(itadmin_job * job,dk3_stream_t * os)617 itadmin_netdocu_write_hosts(itadmin_job *job, dk3_stream_t *os)
618 {
619 itadmin_user *user;
620 itadmin_host *host;
621 int hshw = 0; /* Flag: Host section header written. */
622 int ushw;
623 dk3sto_it_reset(job->i_us);
624 while(NULL != (user = (itadmin_user *)dk3sto_it_next(job->i_usn))) {
625 ushw = 0;
626 if(user->i_ho) {
627 dk3sto_it_reset(user->i_ho);
628 while(NULL != (host = (itadmin_host *)dk3sto_it_next(user->i_ho))) {
629 if(!(host->snd)) {
630 if(!(hshw)) {
631 itadmin_netdocu_write_sh_hosts(job, os);
632 hshw = 1;
633 }
634 if(!(ushw)) {
635 itadmin_netdocu_write_sh_user(job, os, user);
636 ushw = 1;
637 }
638 itadmin_netdocu_write_one_host(job, os, host);
639 }
640 }
641 }
642 }
643 ushw = 0;
644 dk3sto_it_reset(job->i_ho);
645 while(NULL != (host = (itadmin_host *)dk3sto_it_next(job->i_ho))) {
646 if(!(host->un)) {
647 if(!(host->snd)) {
648 if(!itadmin_netdocu_is_byod(host)) {
649 if(!(hshw)) {
650 itadmin_netdocu_write_sh_hosts(job, os);
651 hshw = 1;
652 }
653 if(!(ushw)) {
654 itadmin_netdocu_write_sh_others(job, os);
655 ushw = 1;
656 }
657 itadmin_netdocu_write_one_host(job, os, host);
658 }
659 }
660 }
661 }
662 ushw = 0;
663 dk3sto_it_reset(job->i_ho);
664 while(NULL != (host = (itadmin_host *)dk3sto_it_next(job->i_ho))) {
665 if(!(host->un)) {
666 if(!(host->snd)) {
667 if(itadmin_netdocu_is_byod(host)) {
668 if(!(hshw)) {
669 itadmin_netdocu_write_sh_hosts(job, os);
670 hshw = 1;
671 }
672 if(!(ushw)) {
673 itadmin_netdocu_write_sh_byod(job, os);
674 ushw = 1;
675 }
676 itadmin_netdocu_write_byod_host(job, os, host);
677 }
678 }
679 }
680 }
681 if(ushw) {
682 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[17]);
683 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
684 }
685 }
686
687
688
689 /** Write start of longtable for Netgroup member hosts.
690 @param job job structure.
691 @param os Output stream.
692 */
693 static
694 void
itadmin_netdocu_write_netgroup_member_longtable(itadmin_job * job,dk3_stream_t * os)695 itadmin_netdocu_write_netgroup_member_longtable(
696 itadmin_job *job,
697 dk3_stream_t *os
698 )
699 {
700 int ie;
701 ie = dk3app_get_encoding(job->app);
702 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[16]);
703 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[32], ie);
704 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]);
705 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
706 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[27]);
707 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
708 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[28]);
709 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
710 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[29]);
711 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
712 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[30]);
713 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
714 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[31]);
715 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
716 }
717
718
719
720 /** Write one member host to longtable.
721 @param job Job structure.
722 @param os Output stream.
723 @param ho Host.
724 @param f_d Flag: Direct member (write bold).
725 */
726 static
727 void
itadmin_netdocu_write_netgroup_member_host(itadmin_job * job,dk3_stream_t * os,itadmin_host * ho,int f_d)728 itadmin_netdocu_write_netgroup_member_host(
729 itadmin_job *job,
730 dk3_stream_t *os,
731 itadmin_host *ho,
732 int f_d
733 )
734 {
735 if(f_d) {
736 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[26]);
737 }
738 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ho->sn);
739 if(f_d) {
740 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]);
741 }
742 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]);
743 if(ho->co) {
744 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ho->co);
745 }
746 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]);
747 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
748 }
749
750 /** Write netgroups section.
751 @param job Job structure.
752 @param os Output stream.
753 */
754 static
755 int
itadmin_netdocu_write_netgroups(itadmin_job * job,dk3_stream_t * os)756 itadmin_netdocu_write_netgroups(itadmin_job *job, dk3_stream_t *os)
757 {
758 itadmin_netgroup *ng;
759 itadmin_netgroup *ng2;
760 itadmin_host *ho;
761 dk3_sto_it_t *i_ng2;
762 int ng_found = 0;
763 int sh_found = 0;
764 int ie;
765 int back = 1;
766
767 ie = dk3app_get_encoding(job->app);
768 dk3sto_it_reset(job->i_ng);
769 while(NULL != (ng = (itadmin_netgroup *)dk3sto_it_next(job->i_ng))) {
770 #if VERSION_BEFORE_20150821
771 sh_found = 0;
772 #endif
773 if(!(ng_found)) {
774 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[12]);
775 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[19], ie);
776 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]);
777 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
778 ng_found = 1;
779 }
780 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[15]);
781 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ng->sn);
782 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]);
783 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
784 if(ng->ln) {
785 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ng->ln);
786 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
787 }
788 i_ng2 = dk3sto_it_open(job->s_ng);
789 if(i_ng2) {
790 dk3sto_it_reset(i_ng2);
791 sh_found = 0;
792 while(NULL != (ng2 = (itadmin_netgroup *)dk3sto_it_next(i_ng2))) {
793 if(ng->no != ng2->no) {
794 if(dk3bm_get(job->ngdep, ng->no, ng2->no)) {
795 if(!(sh_found)) {
796 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[16]);
797 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[29], ie);
798 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]);
799 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
800 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[18]);
801 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
802 } sh_found = 1;
803 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ng2->sn);
804 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]);
805 if(ng2->ln) {
806 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ng2->ln);
807 }
808 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]);
809 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
810 }
811 }
812 }
813 if(sh_found) {
814 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[19]);
815 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
816 }
817 dk3sto_it_reset(i_ng2);
818 sh_found = 0;
819 while(NULL != (ng2 = (itadmin_netgroup *)dk3sto_it_next(i_ng2))) {
820 if(ng->no != ng2->no) {
821 if(dk3bm_get(job->ngdep, ng2->no, ng->no)) {
822 if(!(sh_found)) {
823 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[16]);
824 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[30], ie);
825 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]);
826 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
827 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[18]);
828 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
829 } sh_found = 1;
830 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ng2->sn);
831 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]);
832 if(ng2->ln) {
833 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ng2->ln);
834 }
835 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]);
836 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
837 }
838 }
839 }
840 if(sh_found) {
841 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[19]);
842 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
843 }
844 dk3sto_it_close(i_ng2);
845 }
846 /* Member hosts */
847 dk3sto_it_reset(job->i_ho);
848 sh_found = 0;
849 while(NULL != (ho = (itadmin_host *)dk3sto_it_next(job->i_ho))) {
850 if(2 == itadmin_netgroup_host_member(job, ng, ho)) {
851 if(!(sh_found)) {
852 itadmin_netdocu_write_netgroup_member_longtable(job, os);
853 } sh_found = 1;
854 itadmin_netdocu_write_netgroup_member_host(job, os, ho, 1);
855 }
856 }
857 dk3sto_it_reset(job->i_ho);
858 while(NULL != (ho = (itadmin_host *)dk3sto_it_next(job->i_ho))) {
859 if(1 == itadmin_netgroup_host_member(job, ng, ho)) {
860 if(!(sh_found)) {
861 itadmin_netdocu_write_netgroup_member_longtable(job, os);
862 } sh_found = 1;
863 itadmin_netdocu_write_netgroup_member_host(job, os, ho, 0);
864 }
865 }
866 if(sh_found) {
867 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[32]);
868 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
869 }
870 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[17]);
871 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
872 }
873 return back;
874 }
875
876
877
878
879 /** Write DHCP pools list.
880 @param job Job structure.
881 @param os Output stream.
882 */
883 static
884 void
itadmin_netdocu_write_dhcp_pools(itadmin_job * job,dk3_stream_t * os)885 itadmin_netdocu_write_dhcp_pools(itadmin_job *job, dk3_stream_t *os)
886 {
887 itadmin_dhcp_pool *po;
888 int is_first = 1;
889 int ie;
890 ie = dk3app_get_encoding(job->app);
891 dk3sto_it_reset(job->i_dp);
892 while(NULL != (po = (itadmin_dhcp_pool *)dk3sto_it_next(job->i_dp))) {
893 if(is_first) {
894 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[12]);
895 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[33], ie);
896 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]);
897 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
898 } else {
899 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[33]);
900 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
901 } is_first = 0;
902 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[15]);
903 itadmin_tool_stream_ip(os, po->ip4s);
904 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]);
905 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
906 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[18]);
907 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
908 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[34], ie);
909 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]);
910 itadmin_tool_stream_ip(os, po->ip4s);
911 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]);
912 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
913 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[35], ie);
914 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]);
915 itadmin_tool_stream_ip(os, po->ip4e);
916 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]);
917 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
918 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[36], ie);
919 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]);
920 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[(po->auc) ? 39 : 40], ie);
921 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]);
922 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
923 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[37], ie);
924 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]);
925 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[(po->duc) ? 39 : 40], ie);
926 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]);
927 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
928 if(po->acl) {
929 if((po->acl)->sn) {
930 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[38], ie);
931 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]);
932 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, (po->acl)->sn);
933 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]);
934 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
935 }
936 }
937 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[19]);
938 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
939 }
940 if(0 == is_first) {
941 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[17]);
942 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
943 }
944 }
945
946
947
948 /** Write DHCP classes list.
949 @param job Job structure.
950 @param os Output stream.
951 */
952 static
953 void
itadmin_netdocu_write_dhcp_classes(itadmin_job * job,dk3_stream_t * os)954 itadmin_netdocu_write_dhcp_classes(itadmin_job *job, dk3_stream_t *os)
955 {
956 itadmin_dhcp_class *dc;
957 itadmin_host *ho;
958 int is_first = 1;
959 int first_host;
960 int ie;
961 ie = dk3app_get_encoding(job->app);
962 dk3sto_it_reset(job->i_dc);
963 while(NULL != (dc = (itadmin_dhcp_class *)dk3sto_it_next(job->i_dc))) {
964 if(is_first) {
965 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[12]);
966 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[41], ie);
967 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]);
968 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
969 } else {
970 }
971 is_first = 0;
972 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[15]);
973 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, dc->sn);
974 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]);
975 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
976 if(dc->ln) {
977 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, dc->ln);
978 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
979 }
980 if(dc->i_ho) {
981 dk3sto_it_reset(dc->i_ho);
982 first_host = 1;
983 while(NULL != (ho = (itadmin_host *)dk3sto_it_next(dc->i_ho))) {
984 if(first_host) {
985 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[27]);
986 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
987 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[28]);
988 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
989 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[29]);
990 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
991 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[30]);
992 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
993 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[31]);
994 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
995 } first_host = 0;
996 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ho->sn);
997 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]);
998 if(ho->co) {
999 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ho->co);
1000 }
1001 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]);
1002 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1003 }
1004 if(!(first_host)) {
1005 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[32]);
1006 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1007 }
1008 }
1009 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[17]);
1010 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1011 }
1012 }
1013
1014
1015
1016 /** Write patches list.
1017 @param job Job structure.
1018 @param os Output stream.
1019 */
1020 static
1021 void
itadmin_netdocu_write_patches(itadmin_job * job,dk3_stream_t * os)1022 itadmin_netdocu_write_patches(itadmin_job *job, dk3_stream_t *os)
1023 {
1024 itadmin_connect *co;
1025 int is_first = 1;
1026 int ie;
1027
1028 ie = dk3app_get_encoding(job->app);
1029 dk3sto_it_reset(job->i_pa);
1030 while(NULL != (co = (itadmin_connect *)dk3sto_it_next(job->i_pa))) {
1031 if(is_first) {
1032 /* Section patches */
1033 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[12]);
1034 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[42], ie);
1035 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]);
1036 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1037 /* begin longtable */
1038 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[34]);
1039 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1040 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[35]);
1041 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1042 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[36]);
1043 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[43], ie);
1044 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[38]);
1045 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]);
1046 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[36]);
1047 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[44], ie);
1048 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[38]);
1049 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]);
1050 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[36]);
1051 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[45], ie);
1052 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[38]);
1053 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]);
1054 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[36]);
1055 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[46], ie);
1056 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[38]);
1057 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]);
1058 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[37]);
1059 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[47], ie);
1060 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[38]);
1061 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]);
1062 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1063 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[35]);
1064 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1065 /* end first header */
1066 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[28]);
1067 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1068 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[35]);
1069 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1070 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[36]);
1071 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[43], ie);
1072 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[38]);
1073 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]);
1074 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[36]);
1075 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[44], ie);
1076 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[38]);
1077 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]);
1078 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[36]);
1079 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[45], ie);
1080 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[38]);
1081 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]);
1082 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[36]);
1083 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[46], ie);
1084 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[38]);
1085 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]);
1086 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[37]);
1087 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[47], ie);
1088 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[38]);
1089 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]);
1090 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1091 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[35]);
1092 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1093 /* end header */
1094 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[29]);
1095 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1096 /* end footer */
1097 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[30]);
1098 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1099 /* end last footer */
1100 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[35]);
1101 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1102 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[31]);
1103 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1104 } is_first = 0;
1105
1106 /* Horitontal line */
1107 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[35]);
1108 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1109 /* Dose */
1110 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, co->s);
1111 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]);
1112 /* Gebaeude + Raum */
1113 if(co->bu) {
1114 if((co->bu)->s) {
1115 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, (co->bu)->s);
1116 if(co->room) {
1117 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[1]);
1118 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, co->room);
1119 }
1120 } else {
1121 if(co->room) {
1122 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, co->room);
1123 }
1124 }
1125 } else {
1126 if(co->room) {
1127 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, co->room);
1128 }
1129 }
1130 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]);
1131 /* VLAN */
1132 if(co->vl) {
1133 if((co->vl)->s) {
1134 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, (co->vl)->s);
1135 }
1136 }
1137 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]);
1138 /* Speed */
1139 if(co->sp) {
1140 if((co->sp)->s) {
1141 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, (co->sp)->s);
1142 }
1143 }
1144 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]);
1145 /* Hub port */
1146 if(co->hp) {
1147 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, co->hp);
1148 }
1149 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]);
1150 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1151 }
1152 if(!(is_first)) {
1153 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[32]);
1154 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1155 }
1156 }
1157
1158
1159
1160 /** Write contents of network documentation.
1161 @param job Job structure.
1162 @param os Output stream.
1163 */
1164 static
1165 void
itadmin_netdocu_write_contents(itadmin_job * job,dk3_stream_t * os)1166 itadmin_netdocu_write_contents(itadmin_job *job, dk3_stream_t *os)
1167 {
1168 itadmin_netdocu_write_hosts(job, os);
1169 itadmin_netdocu_write_netgroups(job, os);
1170 itadmin_netdocu_write_dhcp_pools(job, os);
1171 itadmin_netdocu_write_dhcp_classes(job, os);
1172 itadmin_netdocu_write_patches(job, os);
1173 }
1174
1175
1176
1177 /** Write entire output file.
1178 @param job Job structure.
1179 @param os Output stream.
1180 */
1181 static
1182 void
itadmin_netdocu_write_file(itadmin_job * job,dk3_stream_t * os)1183 itadmin_netdocu_write_file(itadmin_job *job, dk3_stream_t *os)
1184 {
1185 int ie;
1186 ie = dk3app_get_encoding(job->app);
1187 if(job->ukoma) {
1188 itadmin_tool_write_section(os, itadmin_netdocu_file_start1a);
1189 } else {
1190 itadmin_tool_write_section(os, itadmin_netdocu_file_start1b);
1191 }
1192 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1193 dk3stream_strputs(os, (job->msg)[2], ie);
1194 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1195 itadmin_tool_write_section(os, itadmin_netdocu_file_start4);
1196 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[4]);
1197 dk3stream_strputs(os, (job->msg)[0], ie);
1198 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[5]);
1199 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1200 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[6]);
1201 dk3stream_strputs(os, (job->msg)[1], ie);
1202 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[5]);
1203 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1204 if(job->admn) {
1205 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[7]);
1206 dk3stream_strputs(os, job->admn, ie);
1207 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[5]);
1208 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1209 }
1210 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[8]);
1211 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1212 itadmin_tool_write_section(os, itadmin_netdocu_file_start2);
1213
1214 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[10]);
1215 dk3stream_strputs(os, (job->msg)[0], ie);
1216 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]);
1217 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1218 if(job->admn) {
1219 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[9]);
1220 dk3stream_strputs(os, job->admn, ie);
1221 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]);
1222 dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]);
1223 }
1224 if(job->ukoma) {
1225 itadmin_tool_write_section(os, itadmin_netdocu_file_start3a);
1226 }
1227 itadmin_tool_write_section(os, itadmin_netdocu_file_start3);
1228 itadmin_netdocu_write_contents(job, os);
1229 dk3uc2lat_final_report(job->uc2l, os);
1230 itadmin_tool_write_section(os, itadmin_netdocu_file_end);
1231 }
1232
1233
1234
1235 int
itadmin_netdocu(itadmin_job * job)1236 itadmin_netdocu(itadmin_job *job)
1237 {
1238 FILE *fipo;
1239 dk3_stream_t *os;
1240 int back = 0;
1241
1242 fipo = dk3sf_c8_fopen_app(
1243 itadmin_netdocu_c8_kw[3], itadmin_netdocu_c8_kw[2], job->app
1244 );
1245 if(fipo) {
1246 os = dk3stream_open_file_app(fipo, DK3_STREAM_FLAG_WRITE, job->app);
1247 if(os) {
1248 itadmin_netdocu_write_file(job, os);
1249 dk3stream_close(os);
1250 back = 1;
1251 } else {
1252 }
1253 #if DK3_CHAR_SIZE == 1
1254 if(!dk3sf_fclose_fn_app(fipo, itadmin_netdocu_c8_kw[3], job->app)) {
1255 back = 0;
1256 }
1257 #else
1258 if(!dk3sf_fclose_fn_app(fipo, NULL, job->app)) {
1259 back = 0;
1260 }
1261 #endif
1262 } else {
1263 }
1264
1265 return back;
1266 }
1267
1268
1269