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