%% options copyright owner = Dirk Krause copyright year = 2012-2014 license = bsd %% module #include "dk3all.h" #include "itadmin.h" $!trace-include /** Keywords used by the module. */ static char const * const itadmin_netdocu_c8_kw[] = { $!string-table # # 0: Newline # \n # # 1: Space # # # 2: File open mode for writing # w # # 3: Output file name # netdocu.tex # # 4: Start of pdftitle # pdftitle={ # # 5: End of LaTeX command # }, # # 6: Start of pdfsubject # pdfsubject={ # # 7: Start of pdfauthor # pdfauthor={ # # 8: pdfcreator # pdfcreator={itadmin - http://dktools.sourceforge.net/} # # 9: Author # \\author{ # # 10: Title # \\title{ # # 11: End of LaTeX command # } # # 12: Section # \\section{ # # 13: Start of subsection # \\subsection[ # # 14: Center part of subsection # ]{ # # 15: Subsection # \\subsection{ # # 16: Subsubsection # \\subsubsection{ # # 17: Clearpage # \\clearpage # # 18: Begin of table # \\begin{tabular}{rl} # # 19: End of table # \\end{tabular} # # 20: End of line, no page break # \\\\*[1em] # # 21: begin itemize # \\begin{itemize} # # 22: end itemize # \\end{itemize} # # 23: start item # \\item{ # # 24: Tabular field separator. # & # # 25: Line break in table. # \\\\ # # 26: Bold font for direct member hosts # \\textbf{ # # 27: # \\begin{longtable}{ll} # # 28: # \\endfirsthead # # 29: # \\endhead # # 30: # \\endfoot # # 31: # \\endlastfoot # # 32: # \\end{longtable} # # 33: Empty line and newline # ~\\\\[0.5em] # # 34: Longtable for patches # \\begin{longtable}{|c|c|c|c|c|} # # 35: Horizontal line # \\hline # # 36: Normal multicolumn for patches # \\multicolumn{1}{|c}{\\textbf{ # # 37: Last multicolumn # \\multicolumn{1}{|c|}{\\textbf{ # # 38: End of multicolumn # }} $!end }; /** Start of LaTeX source. */ static char const * const itadmin_netdocu_file_start1a[] = { $!text \documentclass[titlepage,origlongtable]{scrartcl} \KOMAoptions{paper=a4} \KOMAoptions{fontsize=12pt} $!end }; /** Start of LaTeX source. */ static char const * const itadmin_netdocu_file_start1b[] = { $!text \documentclass[12pt]{article} $!end }; /** LaTeX packages after ngerman. */ static char const * const itadmin_netdocu_file_start4[] = { $!text \usepackage{ifpdf} \usepackage[utf8]{inputenc} \usepackage{mathptmx} \usepackage[scaled=.92]{helvet} \usepackage{courier} \usepackage[T1]{fontenc} \usepackage{textcomp} \usepackage{latexsym} \usepackage{varioref} \usepackage{color} \usepackage{makeidx} \usepackage{longtable} \makeindex \ifpdf \usepackage[activate=normal]{pdfcprot} \pdfcompresslevel=9 \usepackage[ pdftex, colorlinks=true, pdfpagemode=UseNone, pdfstartview={XYZ 0 835 1.25}, bookmarksnumbered, $!end }; /** LaTeX package after hyperref options for title, subject, author. */ static char const * const itadmin_netdocu_file_start2[] = { $!text ]{hyperref} \else \usepackage[dvips,colorlinks=true,linkcolor=black]{hyperref} \fi \parindent0cm $!end }; /** Renewcommand, only used for koma-script. */ static char const * const itadmin_netdocu_file_start3a[] = { $!text \renewcommand*{\sectfont}{\bfseries} $!end }; /** Final commands after title and author. */ static char const * const itadmin_netdocu_file_start3[] = { $!text \setcounter{secnumdepth}{1} \begin{document} $!end }; /** LaTeX file end. */ static char const * const itadmin_netdocu_file_end[] = { $!text \end{document} $!end }; /** Write section header for hosts section */ static void itadmin_netdocu_write_sh_hosts(itadmin_job *job, dk3_stream_t *os) { int ie; ie = dk3app_get_encoding(job->app); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[12]); dk3stream_strputs(os, (job->msg)[3], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } /** Write section header for one user. */ static void itadmin_netdocu_write_sh_user( itadmin_job *job, dk3_stream_t *os, itadmin_user *user ) { int ie; ie = dk3app_get_encoding(job->app); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[13]); itadmin_tool_write_user_latex_short(job, os, user); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[14]); itadmin_tool_write_user_latex_long(job, os, user); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } /** Write section header "Other hosts" @param job Job structure. @param os Output stream. */ static void itadmin_netdocu_write_sh_others(itadmin_job *job, dk3_stream_t *os) { int ie; ie = dk3app_get_encoding(job->app); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[15]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[4], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } /** Write section header "BYOD" @param job Job structure. @param os Output stream. */ static void itadmin_netdocu_write_sh_byod(itadmin_job *job, dk3_stream_t *os) { int ie; ie = dk3app_get_encoding(job->app); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[13]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[21], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[14]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[22], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } /** Write data for one host. @param job Job structure. @param os Output stream. @param host Host to write. */ static void itadmin_netdocu_write_one_host( itadmin_job *job, dk3_stream_t *os, itadmin_host *host ) { itadmin_netgroup *ng; char const *p1; int ie; $? "+ itadmin_netdocu_write_one_host \"%s\"", TR_STR(host->sn) ie = dk3app_get_encoding(job->app); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[16]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, host->sn); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); if(host->dp) { dk3uc2lat_stputs(job->uc2l, os, (job->msg)[20], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[20]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } else { if(host->fgu) { switch(host->fgu) { case 2: { $? ". host outside organization unit" dk3uc2lat_stputs(job->uc2l, os, (job->msg)[25], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[26], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[27], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[20]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } break; case 3: { $? ". dynamic IP address" dk3uc2lat_stputs(job->uc2l, os, (job->msg)[28], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[20]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } break; case 4: { $? ". additional network interface" dk3uc2lat_stputs(job->uc2l, os, (job->msg)[31], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[20]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } break; default: { $? ". bring your own device" dk3uc2lat_stputs(job->uc2l, os, (job->msg)[23], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[24], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[20]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } break; } } } /* begin{tabular}.... */ dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[18]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); itadmin_tool_table_section_header(job, os, 5); $? ". before user" if(host->un) { itadmin_tool_table_line_start(job, os, 10); itadmin_tool_table_line_sep_rows(job, os); itadmin_tool_write_user_latex_long(job, os, host->un); itadmin_tool_table_line_finish(job, os, 0); } else { if(!(host->fgu)) { itadmin_tool_table_line(job, os, 10, NULL, 1, 0); } } $? ". after user" itadmin_tool_table_line(job, os, 6, host->co, 1, 0); /* Ort (Gebaeude und Raum) */ $? ". before building" itadmin_tool_table_line_start(job, os, 11); itadmin_tool_table_line_sep_rows(job, os); if(host->bu) { dk3uc2lat_c8_utf8_stputs(job->uc2l, os, (host->bu)->s); if(host->room) { dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[1]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, host->room); } } else { if(host->room) { dk3uc2lat_c8_utf8_stputs(job->uc2l, os, host->room); } else { itadmin_tool_table_line_no_data(job, os, 1); } } $? ". after building" itadmin_tool_table_line_finish(job, os, 0); itadmin_tool_table_line(job, os, 7, host->inv, 1, 0); itadmin_tool_table_line(job, os, 8, host->serno, 1, 1); itadmin_tool_table_section_header(job, os, 12); if(host->ipv4) { itadmin_tool_table_line_start(job, os, 13); itadmin_tool_table_line_sep_rows(job, os); itadmin_tool_stream_ip(os, host->ipv4); itadmin_tool_table_line_finish(job, os, 0); if(host->dnsd) { itadmin_tool_table_line(job, os, 14, host->dnsd, 0, 0); } } else { if(!(host->dc)) { itadmin_tool_table_line(job, os, 13, NULL, 1, 0); } } /* MAC-Adresse */ itadmin_tool_table_line(job, os, 15, host->maca, 1, 0); /* Datendose */ p1 = NULL; if(host->nc) { p1 = (host->nc)->s; } itadmin_tool_table_line(job, os, 16, p1, 1, 0); /* DHCP-Klasse */ if(!((host->ipv4) || (host->dp))) { p1 = NULL; if(host->dc) { p1 = (host->dc)->sn; } itadmin_tool_table_line(job, os, 17, p1, 1, 0); } /* DHCP-Gruppe */ p1 = NULL; if(host->dg) { p1 = (host->dg)->sn; } itadmin_tool_table_line(job, os, 18, p1, 0, 1); /* Netgroups */ if(host->ng) { itadmin_tool_table_section_header(job, os, 19); itadmin_tool_table_values(job, os, (host->ng)->sn, (host->ng)->ln, 1, 0); dk3sto_it_reset(job->i_ng); while(NULL != (ng = (itadmin_netgroup *)dk3sto_it_next(job->i_ng))) { if(1 == itadmin_netgroup_host_member(job, ng, host)) { itadmin_tool_table_values(job,os, ng->sn, ng->ln, 0, 0); } } } /* end{tabular} */ dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[19]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[17]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); $? "- itadmin_netdocu_write_one_host" } /** Write data for one host. @param job Job structure. @param os Output stream. @param host Host to write. */ static void itadmin_netdocu_write_byod_host( itadmin_job *job, dk3_stream_t *os, itadmin_host *host ) { char const *p1; int ie; $? "+ itadmin_netdocu_write_one_host \"%s\"", TR_STR(host->sn) ie = dk3app_get_encoding(job->app); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[16]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, host->sn); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); /* begin{tabular}.... */ dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[18]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); if(host->un) { itadmin_tool_table_line_start(job, os, 10); itadmin_tool_table_line_sep_rows(job, os); itadmin_tool_write_user_latex_long(job, os, host->un); itadmin_tool_table_line_finish(job, os, 0); } else { } itadmin_tool_table_line(job, os, 6, host->co, 1, 0); if(host->ipv4) { itadmin_tool_table_line_start(job, os, 13); itadmin_tool_table_line_sep_rows(job, os); itadmin_tool_stream_ip(os, host->ipv4); itadmin_tool_table_line_finish(job, os, 0); } else { if(!(host->dc)) { itadmin_tool_table_line(job, os, 13, NULL, 1, 0); } } /* MAC-Adresse */ itadmin_tool_table_line(job, os, 15, host->maca, 1, 0); /* DHCP-Klasse */ if(!((host->ipv4) || (host->dp))) { p1 = NULL; if(host->dc) { p1 = (host->dc)->sn; } itadmin_tool_table_line(job, os, 17, p1, 1, 0); } /* DHCP-Gruppe */ if(host->dg) { p1 = NULL; if(host->dg) { p1 = (host->dg)->sn; } itadmin_tool_table_line(job, os, 18, p1, 0, 1); } /* end{tabular} */ dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[19]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); $? "- itadmin_netdocu_write_one_host" } /** Check whether the host is a BRING YOUR OWN DEVICE computer. @param host The host to check. @return 1 for yes, 0 for no. */ static int itadmin_netdocu_is_byod(itadmin_host *host) { int back = 0; if(!(host->ipv4)) { if(host->dc) { if(host->fgu == 1) { back = 1; } } } return back; } /** Write hosts section of network documentation. @param job Job structure. @param os Output stream. */ static void itadmin_netdocu_write_hosts(itadmin_job *job, dk3_stream_t *os) { itadmin_user *user; itadmin_host *host; int hshw = 0; /* Flag: Host section header written. */ int ushw; dk3sto_it_reset(job->i_us); while(NULL != (user = (itadmin_user *)dk3sto_it_next(job->i_usn))) { ushw = 0; if(user->i_ho) { dk3sto_it_reset(user->i_ho); while(NULL != (host = (itadmin_host *)dk3sto_it_next(user->i_ho))) { if(!(host->snd)) { if(!(hshw)) { itadmin_netdocu_write_sh_hosts(job, os); hshw = 1; } if(!(ushw)) { itadmin_netdocu_write_sh_user(job, os, user); ushw = 1; } itadmin_netdocu_write_one_host(job, os, host); } } } } ushw = 0; dk3sto_it_reset(job->i_ho); while(NULL != (host = (itadmin_host *)dk3sto_it_next(job->i_ho))) { if(!(host->un)) { if(!(host->snd)) { if(!itadmin_netdocu_is_byod(host)) { if(!(hshw)) { itadmin_netdocu_write_sh_hosts(job, os); hshw = 1; } if(!(ushw)) { itadmin_netdocu_write_sh_others(job, os); ushw = 1; } itadmin_netdocu_write_one_host(job, os, host); } } } } ushw = 0; dk3sto_it_reset(job->i_ho); while(NULL != (host = (itadmin_host *)dk3sto_it_next(job->i_ho))) { if(!(host->un)) { if(!(host->snd)) { if(itadmin_netdocu_is_byod(host)) { if(!(hshw)) { itadmin_netdocu_write_sh_hosts(job, os); hshw = 1; } if(!(ushw)) { itadmin_netdocu_write_sh_byod(job, os); ushw = 1; } itadmin_netdocu_write_byod_host(job, os, host); } } } } if(ushw) { dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[17]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } } /** Write start of longtable for Netgroup member hosts. @param job job structure. @param os Output stream. */ static void itadmin_netdocu_write_netgroup_member_longtable( itadmin_job *job, dk3_stream_t *os ) { int ie; ie = dk3app_get_encoding(job->app); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[16]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[32], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[27]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[28]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[29]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[30]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[31]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } /** Write one member host to longtable. @param job Job structure. @param os Output stream. @param ng Netgroup. @param ho Host. @param f_d Flag: Direct member (write bold). */ static void itadmin_netdocu_write_netgroup_member_host( itadmin_job *job, dk3_stream_t *os, itadmin_netgroup *ng, itadmin_host *ho, int f_d ) { if(f_d) { dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[26]); } dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ho->sn); if(f_d) { dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]); } dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]); if(ho->co) { dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ho->co); } dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } /** Write netgroups section. @param job Job structure. @param os Output stream. */ static int itadmin_netdocu_write_netgroups(itadmin_job *job, dk3_stream_t *os) { itadmin_netgroup *ng; itadmin_netgroup *ng2; itadmin_host *ho; dk3_sto_it_t *i_ng2; int ng_found = 0; int sh_found = 0; int ie; int back = 1; ie = dk3app_get_encoding(job->app); dk3sto_it_reset(job->i_ng); while(NULL != (ng = (itadmin_netgroup *)dk3sto_it_next(job->i_ng))) { sh_found = 0; if(!(ng_found)) { dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[12]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[19], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); ng_found = 1; } dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[15]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ng->sn); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); if(ng->ln) { dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ng->ln); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } i_ng2 = dk3sto_it_open(job->s_ng); if(i_ng2) { dk3sto_it_reset(i_ng2); sh_found = 0; while(NULL != (ng2 = (itadmin_netgroup *)dk3sto_it_next(i_ng2))) { if(ng->no != ng2->no) { if(dk3bm_get(job->ngdep, ng->no, ng2->no)) { if(!(sh_found)) { dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[16]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[29], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[18]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } sh_found = 1; dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ng2->sn); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]); if(ng2->ln) { dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ng2->ln); } dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } } } if(sh_found) { dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[19]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } dk3sto_it_reset(i_ng2); sh_found = 0; while(NULL != (ng2 = (itadmin_netgroup *)dk3sto_it_next(i_ng2))) { if(ng->no != ng2->no) { if(dk3bm_get(job->ngdep, ng2->no, ng->no)) { if(!(sh_found)) { dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[16]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[30], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[18]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } sh_found = 1; dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ng2->sn); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]); if(ng2->ln) { dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ng2->ln); } dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } } } if(sh_found) { dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[19]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } dk3sto_it_close(i_ng2); } /* Member hosts */ dk3sto_it_reset(job->i_ho); sh_found = 0; while(NULL != (ho = (itadmin_host *)dk3sto_it_next(job->i_ho))) { if(2 == itadmin_netgroup_host_member(job, ng, ho)) { if(!(sh_found)) { itadmin_netdocu_write_netgroup_member_longtable(job, os); } sh_found = 1; itadmin_netdocu_write_netgroup_member_host(job, os, ng, ho, 1); } } dk3sto_it_reset(job->i_ho); while(NULL != (ho = (itadmin_host *)dk3sto_it_next(job->i_ho))) { if(1 == itadmin_netgroup_host_member(job, ng, ho)) { if(!(sh_found)) { itadmin_netdocu_write_netgroup_member_longtable(job, os); } sh_found = 1; itadmin_netdocu_write_netgroup_member_host(job, os, ng, ho, 0); } } if(sh_found) { dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[32]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[17]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } return back; } /** Write DHCP pools list. @param job Job structure. @param os Output stream. */ static void itadmin_netdocu_write_dhcp_pools(itadmin_job *job, dk3_stream_t *os) { itadmin_dhcp_pool *po; int is_first = 1; int ie; ie = dk3app_get_encoding(job->app); dk3sto_it_reset(job->i_dp); while(NULL != (po = (itadmin_dhcp_pool *)dk3sto_it_next(job->i_dp))) { if(is_first) { dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[12]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[33], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } else { dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[33]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } is_first = 0; dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[15]); itadmin_tool_stream_ip(os, po->ip4s); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[18]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[34], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]); itadmin_tool_stream_ip(os, po->ip4s); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[35], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]); itadmin_tool_stream_ip(os, po->ip4e); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[36], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[(po->auc) ? 39 : 40], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[37], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[(po->duc) ? 39 : 40], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); if(po->acl) { if((po->acl)->sn) { dk3uc2lat_stputs(job->uc2l, os, (job->msg)[38], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, (po->acl)->sn); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } } dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[19]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } if(0 == is_first) { dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[17]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } } /** Write DHCP classes list. @param job Job structure. @param os Output stream. */ static void itadmin_netdocu_write_dhcp_classes(itadmin_job *job, dk3_stream_t *os) { itadmin_dhcp_class *dc; itadmin_host *ho; int is_first = 1; int first_host; int ie; ie = dk3app_get_encoding(job->app); dk3sto_it_reset(job->i_dc); while(NULL != (dc = (itadmin_dhcp_class *)dk3sto_it_next(job->i_dc))) { if(is_first) { dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[12]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[41], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } else { } is_first = 0; dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[15]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, dc->sn); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); if(dc->ln) { dk3uc2lat_c8_utf8_stputs(job->uc2l, os, dc->ln); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } if(dc->i_ho) { dk3sto_it_reset(dc->i_ho); first_host = 1; while(NULL != (ho = (itadmin_host *)dk3sto_it_next(dc->i_ho))) { if(first_host) { dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[27]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[28]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[29]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[30]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[31]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } first_host = 0; dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ho->sn); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]); if(ho->co) { dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ho->co); } dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } if(!(first_host)) { dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[32]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } } dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[17]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } } /** Write patches list. @param job Job structure. @param os Output stream. */ static void itadmin_netdocu_write_patches(itadmin_job *job, dk3_stream_t *os) { itadmin_connect *co; int is_first = 1; int ie; $? "+ itadmin_netdocu_write_patches" ie = dk3app_get_encoding(job->app); dk3sto_it_reset(job->i_pa); while(NULL != (co = (itadmin_connect *)dk3sto_it_next(job->i_pa))) { if(is_first) { $? ". section and table header" /* Section patches */ dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[12]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[42], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); /* begin longtable */ dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[34]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[35]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[36]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[43], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[38]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[36]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[44], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[38]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[36]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[45], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[38]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[36]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[46], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[38]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[37]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[47], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[38]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[35]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); /* end first header */ dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[28]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[35]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[36]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[43], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[38]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[36]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[44], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[38]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[36]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[45], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[38]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[36]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[46], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[38]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[37]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[47], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[38]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[35]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); /* end header */ dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[29]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); /* end footer */ dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[30]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); /* end last footer */ dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[35]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[31]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } is_first = 0; $? ". headers ok" /* Horitontal line */ dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[35]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); /* Dose */ $? ". " dk3uc2lat_c8_utf8_stputs(job->uc2l, os, co->s); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]); /* Gebaeude + Raum */ $? ". " if(co->bu) { if((co->bu)->s) { dk3uc2lat_c8_utf8_stputs(job->uc2l, os, (co->bu)->s); if(co->room) { dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[1]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, co->room); } } else { if(co->room) { dk3uc2lat_c8_utf8_stputs(job->uc2l, os, co->room); } } } else { if(co->room) { dk3uc2lat_c8_utf8_stputs(job->uc2l, os, co->room); } } dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]); /* VLAN */ $? ". " if(co->vl) { if((co->vl)->s) { dk3uc2lat_c8_utf8_stputs(job->uc2l, os, (co->vl)->s); } } dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]); /* Speed */ $? ". " if(co->sp) { if((co->sp)->s) { dk3uc2lat_c8_utf8_stputs(job->uc2l, os, (co->sp)->s); } } dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[24]); /* Hub port */ $? ". " if(co->hp) { dk3uc2lat_c8_utf8_stputs(job->uc2l, os, co->hp); } dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[25]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } $? ". " if(!(is_first)) { dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[32]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } $? "- itadmin_netdocu_write_patches" } /** Write contents of network documentation. @param job Job structure. @param os Output stream. */ static void itadmin_netdocu_write_contents(itadmin_job *job, dk3_stream_t *os) { itadmin_netdocu_write_hosts(job, os); itadmin_netdocu_write_netgroups(job, os); itadmin_netdocu_write_dhcp_pools(job, os); itadmin_netdocu_write_dhcp_classes(job, os); itadmin_netdocu_write_patches(job, os); } /** Write entire output file. @param job Job structure. @param os Output stream. */ static void itadmin_netdocu_write_file(itadmin_job *job, dk3_stream_t *os) { int ie; ie = dk3app_get_encoding(job->app); if(job->ukoma) { itadmin_tool_write_section(job, os, itadmin_netdocu_file_start1a); } else { itadmin_tool_write_section(job, os, itadmin_netdocu_file_start1b); } dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_strputs(os, (job->msg)[2], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); itadmin_tool_write_section(job, os, itadmin_netdocu_file_start4); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[4]); dk3stream_strputs(os, (job->msg)[0], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[6]); dk3stream_strputs(os, (job->msg)[1], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); if(job->admn) { dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[7]); dk3stream_strputs(os, job->admn, ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[8]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); itadmin_tool_write_section(job, os, itadmin_netdocu_file_start2); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[10]); dk3stream_strputs(os, (job->msg)[0], ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); if(job->admn) { dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[9]); dk3stream_strputs(os, job->admn, ie); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[11]); dk3stream_c8_fputs(os, itadmin_netdocu_c8_kw[0]); } if(job->ukoma) { itadmin_tool_write_section(job, os, itadmin_netdocu_file_start3a); } itadmin_tool_write_section(job, os, itadmin_netdocu_file_start3); itadmin_netdocu_write_contents(job, os); itadmin_tool_write_section(job, os, itadmin_netdocu_file_end); } int itadmin_netdocu(itadmin_job *job) { FILE *fipo; dk3_stream_t *os; int back = 0; $? "+ itadmin_netdocu" fipo = dk3sf_c8_fopen_app( itadmin_netdocu_c8_kw[3], itadmin_netdocu_c8_kw[2], job->app ); if(fipo) { $? ". fopen" os = dk3stream_open_file_app(fipo, DK3_STREAM_FLAG_WRITE, job->app); if(os) { $? ". os" itadmin_netdocu_write_file(job, os); dk3stream_close(os); back = 1; } else { $? "! os" } #if DK3_CHAR_SIZE == 1 if(!dk3sf_fclose_fn_app(fipo, itadmin_netdocu_c8_kw[3], job->app)) { back = 0; } #else if(!dk3sf_fclose_fn_app(fipo, NULL, job->app)) { back = 0; } #endif } else { $? "! fopen" } $? "- itadmin_netdocu %d", back return back; }