diff options
author | Norbert Preining <norbert@preining.info> | 2020-10-12 03:04:00 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2020-10-12 03:04:00 +0000 |
commit | 0ce40abb18ec02ec6fd6bcc5f21612c88daa7578 (patch) | |
tree | 416289fe1448873fd8ca33051f50ad85bffa8aaa /support/dktools/itadmin.ctr | |
parent | fdb18507cd80dc17f5a5256153d34668b4f4e61c (diff) |
CTAN sync 202010120303
Diffstat (limited to 'support/dktools/itadmin.ctr')
-rw-r--r-- | support/dktools/itadmin.ctr | 4144 |
1 files changed, 0 insertions, 4144 deletions
diff --git a/support/dktools/itadmin.ctr b/support/dktools/itadmin.ctr deleted file mode 100644 index fefe9c9107..0000000000 --- a/support/dktools/itadmin.ctr +++ /dev/null @@ -1,4144 +0,0 @@ -%% options - -copyright owner = Dirk Krause -copyright year = 2012-xxxx -SPDX-License-Identifier: BSD-3-Clause - - - -%% header - -#include "dk3all.h" - - - -/** Computer owner/user. -*/ -typedef struct { - char const *us; /**< Short name, login name (primary key). */ - char const *tt; /**< Title, academic degree. */ - char const *sn; /**< Surname. */ - char const *na; /**< Family name. */ - char const *em; /**< E-mail address. */ - char const *cc; /**< ID in cost controlling. */ - char const *si; /**< Staff ID number. */ - dk3_sto_t *s_ho; /**< Hosts for user. */ - dk3_sto_it_t *i_ho; /**< Iterator for hosts storage. */ - dk3_sto_t *s_li; /**< Licenses assigned to user. */ - dk3_sto_it_t *i_li; /**< Iterator for licenses storage. */ -} itadmin_user; - - - -/** Building. -*/ -typedef struct { - char const *s; /**< Short name (primary key). */ - char const *l; /**< Full building name. */ - char const *a1; /**< Address line 1. */ - char const *a2; /**< Address line 2. */ - char const *a3; /**< Address line 3. */ - char const *a4; /**< Address line 4. */ - char const *zc; /**< Zip code (german: Postleitzahl). */ - char const *city; /**< City/Town name. */ -} itadmin_building; - - - -/** Speed for network connection. -*/ -typedef struct { - char const *s; /**< Short speed name (primary key). */ - char const *l; /**< Long speed name (description). */ -} itadmin_speed; - - - -/** VLAN. -*/ -typedef struct { - char const *s; /**< Short VLAN name (primary key). */ - char const *l; /**< Long VLAN name (description). */ - dk3_sto_t *s_nw; /**< Storage for networks. */ - dk3_sto_it_t *i_nw; /**< Iterator through networks storage. */ - dk3_sto_t *s_do; /**< DHCP options for VLAN. */ - dk3_sto_it_t *i_do; /**< Iterator through DHCP options. */ -} itadmin_vlan; - - - -/** Network connection socket. -*/ -typedef struct { - char const *s; /**< Short name (label on socket, pk). */ - char const *hp; /**< Hub port used for socket. */ - char const *room; /**< Room name or number in building. */ - itadmin_speed *sp; /**< Speed setting for socket. */ - itadmin_vlan *vl; /**< VLAN for socket. */ - itadmin_building *bu; /**< Building. */ -} itadmin_connect; - - - -/** Network. -*/ -typedef struct { - itadmin_vlan *vl; /**< Parent VLAN. */ - dk3_sto_t *s_p; /**< Storage for DHCP pools. */ - dk3_sto_it_t *i_p; /**< Iterator through pools storage. */ - dk3_sto_t *s_dg; /**< Storage for DHCP groups in network. */ - dk3_sto_it_t *i_dg; /**< Iterator through groups in nw storage. */ - dk3_sto_t *s_do; /**< DHCP options. */ - dk3_sto_it_t *i_do; /**< Iterator for DHCP options. */ - dk3_sto_t *s_hoi; /**< Storage for hosts. */ - dk3_sto_it_t *i_hoi; /**< Iterator for hosts storage. */ - dk3_sto_t *s_dc; /**< DHCP classes for this network. */ - dk3_sto_it_t *i_dc; /**< Iterator through DHCP classes storage. */ - unsigned long ip4; /**< IPv4 start address (primary key). */ - unsigned long ma4; /**< IPv4 network mask. */ - unsigned long gw4; /**< IPv4 gateway. */ - unsigned long bc4; /**< IPv4 broadcast address. */ -} itadmin_network; - - - -/** Netgroup. -*/ -typedef struct { - char const *sn; /**< Short name (primary key). */ - char const *ln; /**< Long name (description). */ - size_t no; /**< Netgroup number. */ -} itadmin_netgroup; - - - -/** Netgroup dependency. -*/ -typedef struct { - itadmin_netgroup *pa; /**< Parent group. */ - itadmin_netgroup *ch; /**< Child group. */ -} itadmin_ngdep; - - - -/** DHCP class. -*/ -typedef struct { - char const *sn; /**< Short name (primary key). */ - char const *ln; /**< Long name (description). */ - dk3_sto_t *s_ho; /**< Hosts in this class. */ - dk3_sto_it_t *i_ho; /**< Iterator through hosts storage. */ - itadmin_network *dhcpn; /**< Network for DHCP hosts. */ -} itadmin_dhcp_class; - - - -/** DHCP address pool. -*/ -typedef struct { - itadmin_network *nw; /**< Network. */ - itadmin_dhcp_class *acl; /**< Allowed DHCP class. */ - dk3_sto_t *s_do; /**< DHCP options for pool. */ - dk3_sto_it_t *i_do; /**< Iterator for DHCP options. */ - dk3_sto_t *s_hoi; /**< Hosts storage. */ - dk3_sto_it_t *i_hoi; /**< Hosts storage iterator. */ - unsigned long ip4s; /**< IPv4 start address. */ - unsigned long ip4e; /**< IPv4 end address. */ - char duc; /**< Flag: Deny unknown clients. */ - char auc; /**< Flag: Allow unknown clients. */ -} itadmin_dhcp_pool; - - - -/** DHCP group. -*/ -typedef struct { - char const *sn; /**< Short group name (primary key). */ - char const *ln; /**< Long name (description). */ - dk3_sto_t *s_do; /**< DHCP options storage. */ - dk3_sto_it_t *i_do; /**< DHCP options iterator. */ -} itadmin_dhcp_group; - - - -/** DHCP group within a network. -*/ -typedef struct { - itadmin_dhcp_group *gr; /**< Group. */ - dk3_sto_t *s_h; /**< Storage for hosts in this group. */ - dk3_sto_it_t *i_h; /**< Iterator for storage. */ -} itadmin_dhcp_ginw; - - - -/** Date (used for host expiration). -*/ -typedef struct { - int y; /**< Year. */ - int m; /**< Month. */ - int d; /**< Day in month. */ -} itadmin_date; - - - -/** Host. -*/ -typedef struct { - itadmin_date expi; /**< Expiration date. */ - char const *sn; /**< Short host name (primary key). */ - char const *co; /**< Comment, description. */ - char const *maca; /**< MAC address. */ - char const *room; /**< Room within the building. */ - char const *inv; /**< Inventory ID. */ - char const *serno; /**< Serial number. */ - char const *hid; /**< Host ID. */ - char const *dnsd; /**< DNS domain. */ - itadmin_user *un; /**< System owner. */ - itadmin_netgroup *ng; /**< Netgroup. */ - itadmin_dhcp_class *dc; /**< DHCP class. */ - itadmin_dhcp_group *dg; /**< DHCP group. */ - itadmin_dhcp_pool *dp; /**< DHCP pool. */ - itadmin_connect *nc; /**< Network connection socket. */ - itadmin_building *bu; /**< Building. */ - dk3_sto_t *s_al; /**< Storage for aliases. */ - dk3_sto_it_t *i_al; /**< Iterator through aliases storage. */ - dk3_sto_t *s_do; /**< DHCP options for host. */ - dk3_sto_it_t *i_do; /**< DHCP options iterator. */ - dk3_sto_t *s_li; /**< Licenses assigned to host. */ - dk3_sto_it_t *i_li; /**< Iterator through licenses storage. */ - unsigned long ipv4; /**< IPv4 address. */ - char fnf; /**< Flag: Full name first in hosts. */ - char fgu; /**< Flag: Guest computer. */ - char snd; /**< Flag: Skip in network documentation. */ - char saw; /**< Flag: Skip in arpwatch configuration. */ -} itadmin_host; - - - -/** Software manufacturer. -*/ -typedef struct { - char const *sn; /**< Short name (primary key). */ - char const *ln; /**< Full name. */ -} itadmin_swman; - - - -/** Software product. -*/ -typedef struct { - char const *sn; /**< Short name (primary key). */ - char const *ln; /**< Full name. */ - itadmin_swman *mn; /**< Software manufacturer. */ -} itadmin_swprod; - - - -/** License type. -*/ -typedef struct { - char const *sn; /**< Short name (primary key). */ - char const *ln; /**< Full name. */ - int num; /**< Number of client licenses. */ -} itadmin_lictype; - - - -/** Software license. -*/ -typedef struct { - itadmin_date d_del; /**< Delivery date. */ - itadmin_date d_inv; /**< Invoice date. */ - char const *order; /**< Internal order ID. */ - char const *notes; /**< Additional notes about the license. */ - char const *i_del; /**< Delivery note ID. */ - char const *i_inv; /**< Invoice ID. */ - itadmin_swprod *prod; /**< Software product. */ - itadmin_lictype *ltype; /**< License type. */ - itadmin_user *owner; /**< License owner. */ - itadmin_host *host; /**< Host where license is used. */ - unsigned long pk; /**< Primary key from database. */ -} itadmin_license; - - - -/** DHCP option. -*/ -typedef struct { - char const *k; /**< Key (option name). */ - char const *v; /**< Option value. */ - long pk; /**< Primary key from database. */ -} itadmin_dhcp_option; - - - -/** Job structure for the itadmin program. -*/ -typedef struct { - itadmin_date today; /**< Current date. */ - dk3_app_t *app; /**< Application structure. */ - dk3_option_set_t *opt; /**< Option set. */ - dk3_sto_t *s_us; /**< User storage. */ - dk3_sto_it_t *i_us; /**< User storage iterator. */ - dk3_sto_t *s_usn; /**< User sorted by name. */ - dk3_sto_it_t *i_usn; /**< Storage iterator for users by name. */ - dk3_sto_t *s_bu; /**< Building storage. */ - dk3_sto_it_t *i_bu; /**< Building storage iterator. */ - dk3_sto_t *s_sp; /**< Patch speed storage. */ - dk3_sto_it_t *i_sp; /**< Patch speed storage iterator. */ - dk3_sto_t *s_vl; /**< VLAN storage. */ - dk3_sto_it_t *i_vl; /**< VLAN storage iterator. */ - dk3_sto_t *s_pa; /**< Network patch storage. */ - dk3_sto_it_t *i_pa; /**< Network patch storage iterator. */ - dk3_sto_t *s_nw; /**< Network storage. */ - dk3_sto_it_t *i_nw; /**< Network storage iterator. */ - dk3_sto_t *s_ng; /**< Netgroup storage. */ - dk3_sto_it_t *i_ng; /**< Netgroup storage iterator. */ - dk3_sto_t *s_nd; /**< Netgroup dependency storage. */ - dk3_sto_it_t *i_nd; /**< Netgroup dependency storage iterator. */ - dk3_sto_t *s_dc; /**< DHCP class storage. */ - dk3_sto_it_t *i_dc; /**< DHCP class storage iterator. */ - dk3_sto_t *s_dp; /**< DHCP pool storage. */ - dk3_sto_it_t *i_dp; /**< DHCP pool storage iterator. */ - dk3_sto_t *s_dg; /**< DHCP group storage. */ - dk3_sto_it_t *i_dg; /**< DHCP group storage iterator. */ - dk3_sto_t *s_ho; /**< Host storage, sorted by name. */ - dk3_sto_it_t *i_ho; /**< Host storage iterator for s_ho. */ - dk3_sto_t *s_hoi; /**< Host storage, sorted by IP address. */ - dk3_sto_it_t *i_hoi; /**< Host storage iterator for s_hoi. */ - dk3_sto_t *s_sm; /**< Software manufacturer storage. */ - dk3_sto_it_t *i_sm; /**< Software manufacturer storage iterator. */ - dk3_sto_t *s_sw; /**< Software storage. */ - dk3_sto_it_t *i_sw; /**< Software storage iterator. */ - dk3_sto_t *s_lt; /**< License type storage. */ - dk3_sto_it_t *i_lt; /**< License type storage iterator. */ - dk3_sto_t *s_lc; /**< Licenses storage. */ - dk3_sto_it_t *i_lc; /**< Licenses storage iterator. */ - dk3_sto_t *s_lf; /**< Free licenses. */ - dk3_sto_it_t *i_lf; /**< Free licenses iterator. */ - dk3_sto_t *s_do; /**< DHCP options for entire server. */ - dk3_sto_it_t *i_do; /**< Iterator for DHCP options. */ - void *dbptr; /**< Database object pointer. */ - dk3_bm_t *ngdep; /**< Direct/indirect netgroup dependencies. */ - dk3_uc2lat_t *uc2l; /**< Unicode to LaTeX converter. */ - dkChar const * const *msg; /**< Localized message texts. */ - dkChar const * const *noloc; /**< Texts, not localized. */ - dkChar const *dbhn; /**< Database host name. */ - dkChar const *dbn; /**< Database name. */ - dkChar const *dbcf; /**< Database credentials files. */ - dkChar const *dbus; /**< Database user name. */ - dkChar const *dbpw; /**< Database password. */ - dkChar const *vlan; /**< VLAN name. */ - dkChar const *org; /**< Organization name. */ - dkChar const *ou; /**< Organizational unit name. */ - dkChar const *admn; /**< Administrator name. */ - dkChar const *ldapb; /**< LDAP base. */ - size_t nng; /**< Number of netgroups. */ - int exval; /**< Exit status code. */ - int ec; /**< Error code, see @ref errorcodes. */ - int cmd; /**< Command to execute. */ - int f_dh; /**< Flag: Write dhcpd.conf file. */ - int dbt; /**< Database type. */ - int gdate; /**< Flag: German date notation. */ - int hlh; /**< Flag: Have localhost entry. */ - int ukoma; /**< Flag: Use koma-script. */ - int rel; /**< Release lease on shutdown. */ - int m_p; /**< Flag: Markers for points. */ - int m_vl; /**< Flag: Markers for vlan. */ - int m_sn; /**< Flag: Markers for subnets. */ - int m_gr; /**< Flag: Markers for groups. */ - int m_po; /**< Flag: Markers for pools. */ - int m_ho; /**< Flag: Markers for hosts. */ -} itadmin_job; - - - -/** Reader structure for credentials file. -*/ -typedef struct { - itadmin_job *job; /**< Job structure. */ - int f_clnt; /**< Flag: In client section. */ -} itadmin_cred_reader; - - -/** @defgroup itadmincommand Command IDs for itadmin. */ -/**@{*/ -/** itadmin command: Rebuild configuration and network documentation. -*/ -#define ITADMIN_CMD_CONFIG 1 - -/** itadmin command: Rebuild license report. -*/ -#define ITADMIN_CMD_LICENSES 2 - -/** itadmin command: show help text. -*/ -#define ITADMIN_CMD_HELP 4 - -/** itadmin command: show version information. -*/ -#define ITADMIN_CMD_VERSION 8 - -/** itadmin command: show license terms. -*/ -#define ITADMIN_CMD_LICENSE_TERMS 16 -/**@}*/ - - - -/** Maximum size for configuration file lines. -*/ -#define ITADMIN_CONFIG_LINE_SIZE 256 - -/** Function to remove one object. -*/ -typedef void itadmin_obj_del(void *); - -#ifdef __cplusplus -extern "C" { -#endif - -/** Read configuration file(s). - @param job Job structure. - @return 1 on success, 0 on error. -*/ -int -itadmin_config_read(itadmin_job *job); - -/** Delete one user. - @param v Object to delete. -*/ -void -itadmin_mem_user_del(void *v); - -/** Delete one building. - @param v Object to delete. -*/ -void -itadmin_mem_building_del(void *v); - -/** Delete one speed setting. - @param v Object to delete. -*/ -void -itadmin_mem_speed_del(void *v); - -/** Delete one VLAN. - @param v Object to delete. -*/ -void -itadmin_mem_vlan_del(void *v); - -/** Delete one network connection patch. - @param v Object to delete. -*/ -void -itadmin_mem_connect_del(void *v); - -/** Delete one network. - @param v Object to delete. -*/ -void -itadmin_mem_network_del(void *v); - -/** Delete one netgroup. - @param v Object to delete. -*/ -void -itadmin_mem_netgroup_del(void *v); - -/** Delete one netgroup dependency. - @param v Object to delete. -*/ -void -itadmin_mem_ngdep_del(void *v); - -/** Delete one DHCP class. - @param v Object to delete. -*/ -void -itadmin_mem_dhcp_class_del(void *v); - -/** Delete one DHCP pool. - @param v Object to delete. -*/ -void -itadmin_mem_dhcp_pool_del(void *v); - -/** Delete one DHCP group. - @param v Object to delete. -*/ -void -itadmin_mem_dhcp_group_del(void *v); - -/** Delete one host. - @param v Object to delete. -*/ -void -itadmin_mem_host_del(void *v); - -/** Delete one software manufacturer. - @param v Object to delete. -*/ -void -itadmin_mem_sw_man_del(void *v); - -/** Delete one software product. - @param v Object to delete. -*/ -void -itadmin_mem_software_del(void *v); - -/** Delete one license type. - @param v Object to delete. -*/ -void -itadmin_mem_lic_type_del(void *v); - -/** Delete one license. - @param v Object to delete. -*/ -void -itadmin_mem_license_del(void *v); - -/** Create new user. - @param job Job structure. - @param un Name. - @param tt Academic degree or title (may be NULL). - @param sn Surname (may be NULL). - @param na Name. - @param em E-Mail (may be NULL). - @param cc Cost control ID (may be NULL). - @param si Staff ID number (may be NULL). - @return Pointer to new object on success, NULL on error. -*/ -itadmin_user * -itadmin_mem_user_new( - itadmin_job *job, - char const *un, - char const *tt, - char const *sn, - char const *na, - char const *em, - char const *cc, - char const *si -); - -/** Create new building. - @param job Job structure. - @param s Name. - @param l Long name (may be NULL). - @param a1 Address line 1 (typically street and number, - may be NULL). - @param a2 Address line 2 (may be NULL). - @param a3 Address line 3 (may be NULL). - @param a4 Address line 4 (may be NULL). - @param zc Zip code (may be NULL). - @param city Town or city name (may be NULL). - @return Pointer to new object on success, NULL on error. -*/ -itadmin_building * -itadmin_mem_building_new( - itadmin_job *job, - char const *s, - char const *l, - char const *a1, - char const *a2, - char const *a3, - char const *a4, - char const *zc, - char const *city -); - -/** Create new speed setting. - @param job Job structure. - @param s Name. - @param n Description (may be NULL). - @return Pointer to new object on success, NULL on error. -*/ -itadmin_speed * -itadmin_mem_speed_new( - itadmin_job *job, - char const *s, - char const *n -); - -/** Create new VLAN. - @param job Job structure. - @param s Name. - @param l Long name (may be NULL). - @return Pointer to new object on success, NULL on error. -*/ -itadmin_vlan * -itadmin_mem_vlan_new( - itadmin_job *job, - char const *s, - char const *l -); - -/** Create new network connector. - @param job Job structure. - @param s Name. - @param hp Building. - @param room Room. - @param sp Speed setting. - @param vl VLAN. - @param bu Building. - @return Pointer to new object on success, NULL on error. -*/ -itadmin_connect * -itadmin_mem_connect_new( - itadmin_job *job, - char const *s, - char const *hp, - char const *room, - itadmin_speed *sp, - itadmin_vlan *vl, - itadmin_building *bu -); - -/** Create new network. - @param job Job structure. - @param ip4 Network address. - @param ma4 Network mask. - @param gw4 Gateway. - @param bc4 Broadcast address. - @param vl VLAN. - @return Pointer to new object on success, NULL on error. -*/ -itadmin_network * -itadmin_mem_network_new( - itadmin_job *job, - unsigned long ip4, - unsigned long ma4, - unsigned long gw4, - unsigned long bc4, - itadmin_vlan *vl -); - -/** Create new netgroup. - @param job Job structure. - @param sn Short name. - @param ln Long name (may be NULL). - @return Pointer to new object on success, NULL on error. -*/ -itadmin_netgroup * -itadmin_mem_netgroup_new( - itadmin_job *job, - char const *sn, - char const *ln -); - -/** Create new netgroup dependency. - @param job Job structure. - @param pa Parent group. - @param ch Child group. - @return Pointer to new object on success, NULL on error. -*/ -itadmin_ngdep * -itadmin_mem_ngdep_new( - itadmin_job *job, - itadmin_netgroup *pa, - itadmin_netgroup *ch -); - -/** Create new DHCP class. - @param job Job structure. - @param sn Short name. - @param ln Long name (may be NULL). - @return Pointer to new object on success, NULL on error. -*/ -itadmin_dhcp_class * -itadmin_mem_dhcp_class_new( - itadmin_job *job, - char const *sn, - char const *ln -); - -/** Create new DHCP pool. - @param job Job structure. - @param nw Network. - @param cn Allowed class (if unknown clients are denied, - may be NULL). - @param ip4s IPv4 start address. - @param ip4e IPv4 end address. - @param duc Flag: Deny unknown clients (needs cn). - @param auc Flag: Allow unknown clients. - @return Pointer to new object on success, NULL on error. -*/ -itadmin_dhcp_pool * -itadmin_mem_dhcp_pool_new( - itadmin_job *job, - itadmin_network *nw, - itadmin_dhcp_class *cn, - unsigned long ip4s, - unsigned long ip4e, - int duc, - int auc -); - -/** Create new DHCP group. - @param job Job structure. - @param sn Short name. - @param ln Long name (may be NULL). - @return Pointer to new object on success, NULL on error. -*/ -itadmin_dhcp_group * -itadmin_mem_dhcp_group_new( - itadmin_job *job, - char const *sn, - char const *ln -); - -/** Create new host - @param job Job structure. - @param sn Short name. - @param co Comment/description (may be NULL). - @param maca MAC address (may be NULL). - @param room Room (may be NULL). - @param inv Inventory number (may be NULL). - @param serno Serial number (may be NULL). - @param hid Host ID (may be NULL). - @param expi Expiration date (may be NULL). - @param dnsd DNS domain (may be NULL). - @param un System owner. - @param ng Netgroup (may be NULL). - @param dc DHCP class (may be NULL). - @param dg DHCP group (may be NULL). - @param nc Network connection socket (may be NULL). - @param bu Building (may be NULL). - @param ipv4 IPv4 address (may be NULL). - @param fnf Flag: FQDN first in hosts file. - @param fgu Flag: Guest computer (bring your own device). - @param snd Flag: Skip in network documentation. - @param saw Flag: Skip in arpwatch configuration. - @return Pointer to new object on success, NULL on error. -*/ -itadmin_host * -itadmin_mem_host_new( - itadmin_job *job, - itadmin_date *expi, - char const *sn, - char const *co, - char const *maca, - char const *room, - char const *inv, - char const *serno, - char const *hid, - char const *dnsd, - itadmin_user *un, - itadmin_netgroup *ng, - itadmin_dhcp_class *dc, - itadmin_dhcp_group *dg, - itadmin_connect *nc, - itadmin_building *bu, - unsigned long ipv4, - int fnf, - int fgu, - int snd, - int saw -); - -/** Create new software manufacturer. - @param job Job structure. - @param sn Short name. - @param ln Long name (description). - @return Pointer to new object on success, NULL on error. -*/ -itadmin_swman * -itadmin_mem_sw_man_new( - itadmin_job *job, - char const *sn, - char const *ln -); - -/** Create new software product. - @param job Job structure. - @param sn Short name. - @param ln Long name. - @param mn Software manufacturer name (may be NULL). - @return Pointer to new object on success, NULL on error. -*/ -itadmin_swprod * -itadmin_mem_swprod_new( - itadmin_job *job, - char const *sn, - char const *ln, - itadmin_swman *mn -); - -/** Create new license type. - @param job Job structure. - @param sn Short license type name. - @param ln Long name (description). - @param num Number of client licenses for floating license servers. - @return Pointer to new object on success, NULL on error. -*/ -itadmin_lictype * -itadmin_mem_lictype_new( - itadmin_job *job, - char const *sn, - char const *ln, - int num -); - -/** Create new license. - @param job Job structure. - @param pk Primary key from licenses table (unused). - @param order Order ID or tracking information (may be NULL). - @param notes Additional notes (may be NULL). - @param i_del Delivery note ID (may be NULL). - @param i_inv Invoice ID (may be NULL). - @param prod Software product. - @param ltype License type. - @param owner License owner (may be NULL). - @param host Computer (may be NULL). - @return Pointer to new object on success, NULL on error. -*/ -itadmin_license * -itadmin_mem_license_new( - itadmin_job *job, - unsigned long pk, - char const *order, - char const *notes, - char const *i_del, - char const *i_inv, - itadmin_swprod *prod, - itadmin_lictype *ltype, - itadmin_user *owner, - itadmin_host *host -); - -/** Create new DHCP group in network. - @param job Job structure. - @param gr DHCP group structure. - @return Pointer to new object on success, NULL on error. -*/ -itadmin_dhcp_ginw * -itadmin_mem_dhcp_ginw_new(itadmin_job *job, itadmin_dhcp_group *gr); - -/** Destroy DHCP group in network structure, release memory. - @param g Group structure to destroy. -*/ -void -itadmin_mem_dhcp_ginw_del(itadmin_dhcp_ginw *g); - -/** Initialize date structure. - @param dp Date pointer. -*/ -void -itadmin_mem_date_init(itadmin_date *dp); - -/** Copy date structure. - @param dp Destination pointer. - @param sp Source pointer. -*/ -void -itadmin_mem_date_copy(itadmin_date *dp, itadmin_date *sp); - -/** Create a DHCP option structure. - @param job Job structure. - @param k Key (option name). - @param v Option value. - @param pk Primary key number from table (unused). - @return Valid pointer to new object on success, NULL on error. -*/ -itadmin_dhcp_option * -itadmin_mem_dhcp_option_new( - itadmin_job *job, - char const *k, - char const *v, - long pk -); - -/** Destroy DHCP option structure, release memory. - @param v Option to destroy. -*/ -void -itadmin_mem_dhcp_option_del(void *v); - -/** Read data from database. - @param job Job structure. - @return 1 on success, 0 on error. -*/ -int -itadmin_data_read(itadmin_job *job); - -/** Read data from MySQL database. - @param job Job structure. - @return 1 on success, 0 on error. -*/ -int -itadmin_data_mysql_read(itadmin_job *job); - -/** Register a user record. - @param job Job structure. - @param us_s User short name (login name). - @param us_t User title or academic degree. - @param us_sn Surname. - @param us_fn Family name. - @param us_em E-Mail. - @param us_ko Cost control ID. - @param us_se Organizational unit. - @return 1 on success, 0 on error. -*/ -int -itadmin_register_user( - itadmin_job *job, - char const *us_s, - char const *us_t, - char const *us_sn, - char const *us_fn, - char const *us_em, - char const *us_ko, - char const *us_se -); - -/** Register building. - @param job Job structure. - @param gb_s Short building name. - @param gb_l Long building name. - @param gb_a1 Address line 1. - @param gb_a2 Address line 2. - @param gb_a3 Address line 3. - @param gb_a4 Address line 4. - @param gb_plz Zip code. - @param gb_ort City name. - @return 1 on success, 0 on error. -*/ -int -itadmin_register_building( - itadmin_job *job, - char const *gb_s, - char const *gb_l, - char const *gb_a1, - char const *gb_a2, - char const *gb_a3, - char const *gb_a4, - char const *gb_plz, - char const *gb_ort -); - -/** Register a speed setting. - @param job Job structure. - @param sn Short name for setting. - @param ln Description. - @return 1 on success, 0 on error. -*/ -int -itadmin_register_speed( - itadmin_job *job, - char const *sn, - char const *ln -); - -/** Register a VLAN. - @param job Job structure. - @param vl_s Short name for VLAN. - @param vl_l Description. - @return 1 on success, 0 on error. -*/ -int -itadmin_register_vlan(itadmin_job *job, char const *vl_s, char const *vl_l); - -/** Register patch (ethernet socket). - @param job Job structure. - @param dd_n Patch name. - @param sp_s Speed setting name. - @param vl_s VLAN short name. - @param dd_p Hub port name. - @param gb_s Building. - @param dd_r Room number/name of patch. - @return 1 on success, 0 on error. -*/ -int -itadmin_register_patch( - itadmin_job *job, - char const *dd_n, - char const *sp_s, - char const *vl_s, - char const *dd_p, - char const *gb_s, - char const *dd_r -); - -/** Register network. - @param job Job structure. - @param nw_ip IP address. - @param nw_ma Network mask. - @param nw_gw Gateway. - @param nw_bc Broadcast address. - @param vl_s VLAN for network. - @return 1 on success, 0 on error. -*/ -int -itadmin_register_network( - itadmin_job *job, - char const *nw_ip, - char const *nw_ma, - char const *nw_gw, - char const *nw_bc, - char const *vl_s -); - -/** Register DHCP pool. - @param job Job structure. - @param ips IP start address of pool. - @param ipe IP end address of pool. - @param nw Network address (may be NULL or empty). - @param alu Flag: Allow unknown clients. - @param dnu Flag: Deny unknown clients. - @param dcn Allowed class name if unknown clients denied. - @return 1 on success, 0 on error. -*/ -int -itadmin_register_dhcp_pool( - itadmin_job *job, - char const *ips, - char const *ipe, - char const *nw, - int alu, - int dnu, - char const *dcn -); - -/** Register DHCP class. - @param job Job structure. - @param dcs Short class name. - @param dcl Long class name (description). - @return 1 on success, 0 on error. -*/ -int -itadmin_register_dhcp_class(itadmin_job *job,char const *dcs,char const *dcl); - -/** Register DHCP group. - @param job Job structure. - @param sn Short name. - @param ln Long name (description). - @return 1 on success, 0 on error. -*/ -int -itadmin_register_dhcp_group(itadmin_job *job, char const *sn, char const *ln); - -/** Register netgroup. - @param job Job structure. - @param ng_s Short netgroup name. - @param ng_l Long name (description). - @return 1 on success, 0 on error. -*/ -int -itadmin_register_netgroup(itadmin_job *job,char const *ng_s,char const *ng_l); - -/** Register netgroup dependency. - @param job Job structure. - @param pgn Name of the parent group. - @param cgn Name of the child group. - @return 1 on success, 0 on error. -*/ -int -itadmin_register_ngdep(itadmin_job *job, char const *pgn, char const *cgn); - -/** Register one host. - @param job Job structure. - @param co_s Short name for computer. - @param us_s Owner / user in charge. - @param co_ip IPv4 address. - @param co_mc MAC address. - @param ng_s Netgroup. - @param co_co Comment for PC. - @param dc_s DHCP class. - @param dg_s DHCP group. - @param dd_n Patch/connector number. - @param gb_s Building. - @param co_r Room number. - @param co_in Inventory ID. - @param co_sn Serial number. - @param co_dd DNS domain name. - @param co_ff Flag: Write FQDN first in /etc/hosts. - @param co_gu Flag: BYOD (bring your own device). - @param co_hi Host ID. - @param co_ex Expiration date. - @param co_nn Flag: Skip host in network documentation. - @param co_na Flag: Skip host for arpwatch. -*/ - -int -itadmin_register_host( - itadmin_job *job, - char const *co_s, - char const *us_s, - char const *co_ip, - char const *co_mc, - char const *ng_s, - char const *co_co, - char const *dc_s, - char const *dg_s, - char const *dd_n, - char const *gb_s, - char const *co_r, - char const *co_in, - char const *co_sn, - char const *co_dd, - int co_ff, - int co_gu, - char const *co_hi, - itadmin_date *co_ex, - int co_nn, - int co_na -); - -/** Register host name alias. - @param job Job structure. - @param al Alias name. - @param rn Real host name. - @return 1 on success, 0 on error. -*/ -int -itadmin_register_alias(itadmin_job *job, char const *al, char const *rn); - -/** Register a DHCP option. - @param job Job structure. - @param sct Scope type name. - @param scn Scope name. - @param k Key (option name). - @param v Option value. - @param pk Primary key from database. - @return 1 on success, 0 on error. -*/ -int -itadmin_register_dhcp_option( - itadmin_job *job, - char const *sct, - char const *scn, - char const *k, - char const *v, - long pk -); - -/** Check name for empty string or minus. - We have to save the entry if the string pointer is not - NULL and the string is not empty and not a minus. - @param sn String to check. - @return 1 if string must be saved, 0 for ignore. -*/ -int -itadmin_register_check_user_name(char const *sn); - -/** Check whether we can attempt to convert a string to an IP address. - @param ip String to test. - @return 1 for string with text, 0 for empty string. -*/ -int -itadmin_register_check_ip(char const *ip); - -/** Register a software manufacturer. - @param job Job structure. - @param sm_s Short name. - @param sm_l Long name. - @return 1 on success, 0 on error. -*/ -int -itadmin_register_swman( itadmin_job *job, char const *sm_s, char const *sm_l); - -/** Register a software product. - @param job Job structure. - @param sw_s Short software name. - @param sw_l Long software name. - @param sm_s Software manufacturer. - @return 1 on success, 0 on error. -*/ -int -itadmin_register_swprod( - itadmin_job *job, - char const *sw_s, - char const *sw_l, - char const *sm_s -); -/** Register a license type. - @param job Job structure. - @param lt_s Short license type name. - @param lt_l Long name/description of license type. - @param nl Number of licenses (for floating licenses). -*/ -int -itadmin_register_lictype( - itadmin_job *job, - char const *lt_s, - char const *lt_l, - int nl -); - -/** Register license. - @param job Job structure. - @param pk Primary key. - @param li_on Order number (purchase process ID). - @param sw_s Software short name. - @param us_s User to which the license is assigned. - @param co_s Computer on which the license is used. - @param lt_s License type. - @param li_no Optional note for the license. - @param li_nd Delivery note number. - @param li_ni Invoice number. - @return 1 on success, 0 on error. -*/ -int -itadmin_register_license( - itadmin_job *job, - unsigned long pk, - char const *li_on, - char const *sw_s, - char const *us_s, - char const *co_s, - char const *lt_s, - char const *li_no, - char const *li_nd, - char const *li_ni -); - -/** Compare structures for user. - @param l Left structure. - @param r Right structure, object, or name. - @param cr Comparison criteria - (0=user/user by us, 1=user/name by us, 2=user/user by na+sn+tt+us). - @return Comparison result. -*/ -int -itadmin_comp_user(void const *l, void const *r, int cr); - -/** Compare structures for buildings. - @param l Left structure. - @param r Right structure, object, or name. - @param cr Comparison criteria - (0=building/building by s, 1=building/name by s). - @return Comparison result. -*/ -int -itadmin_comp_building(void const *l, void const *r, int cr); - -/** Compare structures for network speed. - @param l Left structure. - @param r Right structure, object, or name. - @param cr Comparison criteria - (0=speed/speed by s, 1=speed/name). - @return Comparison result. -*/ -int -itadmin_comp_speed(void const *l, void const *r, int cr); - -/** Compare structures for VLAN. - @param l Left structure. - @param r Right structure, object, or name. - @param cr Comparison criteria - (0=vlan/vlan by s, 1=vlan/name by s). - @return Comparison result. -*/ -int -itadmin_comp_vlan(void const *l, void const *r, int cr); - -/** Compare structures for ethernet socket. - @param l Left structure. - @param r Right structure, object, or name. - @param cr Comparison criteria - (0=socket/socket by s, 1=socket/name). - @return Comparison result. -*/ -int -itadmin_comp_connect(void const *l, void const *r, int cr); - -/** Compare structures for network. - @param l Left structure. - @param r Right structure, object, or name. - @param cr Comparison criteria - (0=network/network by ip4, 1=network/ipaddress). - @return Comparison result. -*/ -int -itadmin_comp_network(void const *l, void const *r, int cr); - -/** Compare structures for netgroup. - @param l Left structure. - @param r Right structure, object, or name. - @param cr Comparison criteria - (0=netgroup/netgroup by sn, 1=netgroup/name by sn). - @return Comparison result. -*/ -int -itadmin_comp_netgroup(void const *l, void const *r, int cr); - -/** Compare structures for DHCP class. - @param l Left structure. - @param r Right structure, object, or name. - @param cr Comparison criteria - (0=class/class by sn, 1=class/name by sn). - @return Comparison result. -*/ -int -itadmin_comp_dhcp_class(void const *l, void const *r, int cr); - -/** Compare structures for DHCP pool. - @param l Left structure. - @param r Right structure, object, or name. - @param cr Comparison criteria - (0=pool/pool by ip4s, 1=pool/ipaddress). - @return Comparison result. -*/ -int -itadmin_comp_dhcp_pool(void const *l, void const *r, int cr); - -/** Compare structures for DHCP group. - @param l Left structure. - @param r Right structure, object, or name. - @param cr Comparison criteria - (0=group/group by sn, 1=group/name). - @return Comparison result. -*/ -int -itadmin_comp_dhcp_group(void const *l, void const *r, int cr); - -/** Compare structures for host - @param l Left structure. - @param r Right structure, object, or name. - @param cr Comparison criteria - (0=host/host by sn, 1=host/name, 2=host/host by ipv4, 3=host/ipaddr). - @return Comparison result. -*/ -int -itadmin_comp_host(void const *l, void const *r, int cr); - -/** Compare structures for software manufacturer. - @param l Left structure. - @param r Right structure, object, or name. - @param cr Comparison criteria - (0=swman/swman by sn, 1=swman/name). - @return Comparison result. -*/ -int -itadmin_comp_swman(void const *l, void const *r, int cr); - -/** Compare structures for software product. - @param l Left structure. - @param r Right structure, object, or name. - @param cr Comparison criteria - (0=product/product by sn, 1=product/name, - 2=product/product by mn->ln+ln). - @return Comparison result. -*/ -int -itadmin_comp_swprod(void const *l, void const *r, int cr); - -/** Compare structures for license type. - @param l Left structure. - @param r Right structure, object, or name. - @param cr Comparison criteria - (0=license/license by product). - @return Comparison result. -*/ -int -itadmin_comp_lictype(void const *l, void const *r, int cr); - -/** Compare structures for license. - @param l Left structure. - @param r Right structure, object, or name. - @param cr Comparison criteria - (0=license/license by pk, 1=license/pk, 2=license/license by product). - @return Comparison result. -*/ -int -itadmin_comp_license(void const *l, void const *r, int cr); - -/** Compare two licenses within a network. - @param l Left object. - @param r Right object or name. - @param cr Comparison criteria (0=group/group, - 1=group/name). - @return Comparison result. -*/ -int -itadmin_comp_dhcp_ginw(void const *l, void const *r, int cr); - -/** Compare two date structures. - @param l Left object. - @param r Right object. - @return 1 if @arg l is later than @arg r, 0 for equal days, - 1 if @arg l is earlier than @arg r. -*/ -int -itadmin_comp_date(itadmin_date const *l, itadmin_date const *r); - -/** Compare two DHCP options. - @param l Left object. - @param r Right object. - @param cr Comparison criteria (ignored). - @return Comparison result. -*/ -int -itadmin_comp_dhcp_option(void const *l, void const *r, int cr); - -/** Compare two strings. - @param l Left string. - @param r Right string. - @param cr Comparison criteria (1=case-insensitive, 0=normal). - @return Comparison result. -*/ -int -itadmin_comp_string(void const *l, void const *r, int cr); - -/** Check whether we have to write network configuration - and documentation. - @param job Job structure. - @return 1 for yes, 0 for no. -*/ -int -itadmin_job_do_network(itadmin_job *job); - -/** Check whether we have to write a dhcpd.conf file. - @param job Job structure. - @return 1 for yes, 0 for no. -*/ -int -itadmin_job_do_dhcp(itadmin_job *job); - -/** Check whether we have to write a license report. - @param job Job structure. - @return 1 for yes, 0 for no. -*/ -int -itadmin_job_do_licenses(itadmin_job *job); - -/** Convert string yyyy-mm-dd to date structure. - @param job Job structure. - @param dp Destination pointer. - @param str Source text. - @return 1 on success, 0 on error. -*/ -int -itadmin_tool_convert_date(itadmin_job *job, itadmin_date *dp, char const *str); - -/** Write IPv4 address to file. - @param df Destination file. - @param ipv4 Address to write. -*/ -void -itadmin_tool_write_ip(FILE *df, unsigned long ipv4); - -/** Write IPv4 address to stream. - @param os Output stream. - @param ipv4 Address to write. -*/ -void -itadmin_tool_stream_ip(dk3_stream_t *os, unsigned long ipv4); - -/** Write user name short to LaTeX output. - @param job Job structure. - @param os Output stream. - @param user User to write. -*/ -void -itadmin_tool_write_user_latex_short( - itadmin_job *job, - dk3_stream_t *os, - itadmin_user *user -); - -/** Write user name long to LaTeX output. - @param job Job structure. - @param os Output stream. - @param user User to write. -*/ -void -itadmin_tool_write_user_latex_long( - itadmin_job *job, - dk3_stream_t *os, - itadmin_user *user -); - -/** Write the section header in the table. - @param job Job structure. - @param os Output stream. - @param kwi Keyword index. -*/ -void -itadmin_tool_table_section_header( - itadmin_job *job, - dk3_stream_t *os, - size_t kwi -); - -/** Start a table line. - @param job Job structure. - @param os Output stream. - @param kwi Keyword index in localized messages. -*/ -void -itadmin_tool_table_line_start( - itadmin_job *job, - dk3_stream_t *os, - size_t kwi -); - -/** Separate two items in a table. - @param os Output stream. -*/ -void -itadmin_tool_table_line_sep_rows( - dk3_stream_t *os -); - -/** Finish a table line. - @param job Job structure. - @param os Output stream. - @param pb Flag: Allow page break here. -*/ -void -itadmin_tool_table_line_finish( - dk3_stream_t *os, - int pb -); - -/** Create empty table field. - @param job Job structure. - @param os Output stream. - @param nu Flag: Write notification for missing value. -*/ -void -itadmin_tool_table_line_no_data( - itadmin_job *job, - dk3_stream_t *os, - int nu -); - -/** Write one detail table line. - @param job Job structure. - @param os Output stream. - @param kwi Keyword index for option name. - @param det Details to write. - @param nu Flag: Write a note about unknown values. - @param pb Flag: Allow page break after line. -*/ -void -itadmin_tool_table_line( - itadmin_job *job, - dk3_stream_t *os, - size_t kwi, - char const *det, - int nu, - int pb -); - -/** Write a table line consisting of two values. - @param job Job structure. - @param os Output stream. - @param key Key. - @param val Value. - @param fb Flag: Key in bold. - @param pb Flag: Allow page break. -*/ -void -itadmin_tool_table_values( - itadmin_job *job, - dk3_stream_t *os, - char const *key, - char const *val, - int fb, - int pb -); - -/** Check whether a host is owned by a user. - @param us User. - @param co Host. - @return 1 if the host is owned by the user, 0 otherwise. -*/ -int -itadmin_tool_check_same_user(itadmin_user *us, itadmin_host *co); - -/** Write a section of text to output stream. - @param job Job structure. - @param os Output stream. - @param sect Text section to write. -*/ -void -itadmin_tool_write_section( - dk3_stream_t *os, - char const * const *sect -); - -/** Write log message of one part. - @param job Job structure. - @param ll Log level. - @param i Index of message text in localized messages array. -*/ -void -itadmin_tool_log_1( - itadmin_job *job, - int ll, - size_t i -); - -/** Write log message of three parts. - @param job Job structure. - @param ll Log level. - @param i1 Index of first message text in localized messages array. - @param i2 Index of third text part in localized messages array. - @param msg Variable message text, second text part. -*/ -void -itadmin_tool_log_utf8_3( - itadmin_job *job, - int ll, - size_t i1, - size_t i2, - char const *msg -); - -/** Write log message of five parts. - @param job Job structure. - @param ll Log level. - @param i1 Index of first message text in localized messages array. - @param i2 Index of third text part in localized messages array. - @param i3 Index of fifth text part in localized messages array. - @param msg1 First variable message text, second text part. - @param msg2 Second variable messagetext, fourth text part. -*/ -void -itadmin_tool_log_utf8_5( - itadmin_job *job, - int ll, - size_t i1, - size_t i2, - size_t i3, - char const *msg1, - char const *msg2 -); - -/** Write log message of three parts. - @param job Job structure. - @param ll Log level. - @param i1 Index of first constant message part. - @param i2 Index of third message part. - @param pk Primary key as numeric value. -*/ -void -itadmin_tool_log_pk_3( - itadmin_job *job, - int ll, - size_t i1, - size_t i2, - unsigned long pk -); - -/** Write log message of five parts. - @param job Job structure. - @param ll Log level. - @param i1 Index of first constant message part. - @param i2 Index of third message part. - @param i3 Index of fifth message part. - @param pk Primary key as numeric value. - @param msg Variable message part. -*/ -void -itadmin_tool_log_pk_5( - itadmin_job *job, - int ll, - size_t i1, - size_t i2, - size_t i3, - unsigned long pk, - char const *msg -); - -/** Write IPv4 address to buffer. - @param bu Destination buffer, at least 16 bytes long. - @param ip IP address. -*/ -void -itadmin_tool_ip_to_buffer(char *bu, unsigned long ip); - -/** Write hosts file. - @param job Job structure. - @return 1 on success, 0 on error. -*/ -int -itadmin_hosts_output(itadmin_job *job); - -/** Write hosts.ldif file. - @param job Job structure. - @return 1 on success, 0 on error. -*/ -int -itadmin_hosts_ldif_output(itadmin_job *job); - -/** Write ethers-by-ip and ethers-by-mac files. - @param job Job structure. - @return 1 on success, 0 on error. -*/ -int -itadmin_ethers_output(itadmin_job *job); - -/** Write ethers.ldif file. - @param job Job structure. - @return 1 on success, 0 on error. -*/ -int -itadmin_ethers_ldif_output(itadmin_job *job); - -/** Expand netgroup dependencies. - @param job Job structure. - @return 1 on success, 0 on error. -*/ -int -itadmin_netgroup_expand(itadmin_job *job); - -/** Check whether a host is a member of a netgroup. - @param job Job structure. - @param netgroup Netgroup. - @param host Host. - @return 0 for no member, 1 for indirect member, 2 for direct member. -*/ -int -itadmin_netgroup_host_member( - itadmin_job *job, - itadmin_netgroup *netgroup, - itadmin_host *host -); - -/** Write netgroup.ldif file. - @param job Job structure. - @return 1 on success, 0 on error. -*/ -int -itadmin_netgroup_ldif_output(itadmin_job *job); - -/** Write dhcpd.conf file. - @param job Job structure. - @return 1 on success, 0 on error. -*/ -int -itadmin_dhcpd_conf_output(itadmin_job *job); - -/** Write network documentation file. - @param job Job structure. - @return 1 on success, 0 on error. -*/ -int -itadmin_netdocu(itadmin_job *job); - -/** Write license report. - @param job Job structure. - @return 1 on success, 0 on error. -*/ -int -itadmin_license_report(itadmin_job *job); - -#ifdef __cplusplus -} -#endif - -%% module - - -#include "dk3all.h" -#include "itadmin.h" -#if 0 -#include "dkt-version.h" -#endif -#include "dk4vers.h" - - -$!trace-include - - - -/** Keywords used by the program, not localized. -*/ -static dkChar const * const itadmin_kw_noloc[] = { -$!string-table macro=dkT -# -# 0: Program group name. -# -dktools -# -# 1: String table name. -# -itadmin.str -# -# 2: Program name used in version -# -itadmin -# -# 3: Help text file name. -# -itadmin.txt -# -# 4: Configuration file name. -# -itadmin.conf -$!end -}; - - - -/** Localized message texts. -*/ -static dkChar const * const itadmin_kw[] = { -$!string-table macro=dkT -# -# 0: Title for network documentation -# -Network documentation -# -# 1: Subject for network documentation -# -Network documentation -# -# 2: LaTeX packages for localization -# - -# -# 3: Hosts -# -Hosts -# -# 4: Other hosts -# -Other hosts -# -# 5: Overview -# -Overview -# -# 6: Purpose: -# -Purpose: -# -# 7: Inventory ID: -# -Inventory ID: -# -# 8: Serial no: -# -Serial no: -# -# 9: not specified (unknown) -# -not specified -# -# 10: Main user: (person responsible for host) -# -Main user: -# -# 11: Place (building and room) -# -Place: -# -# 12: Network -# -Network -# -# 13: IP address -# -IP address: -# -# 14: DNS domain -# -DNS domain: -# -# 15: MAC address -# -MAC address: -# -# 16: Ethernet socket (patch no) -# -Ethernet socket: -# -# 17: DHCP class -# -DHCP class: -# -# 18: DHCP group -# -DHCP group: -# -# 19: Netgroups -# -Netgroups -# -# 20: Notice, this is an address from a DHCP pool -# -IP address from DHCP pool, dynamically assigned to DHCP clients -# -# 21: Short section header BYOD + DHCP -# -BYOD DHCP -# -# 22: Section header BYOD + DHCP -# -Bring your own device, use DHCP -# -# 23: -# -Not sucject to license management. -# -# 24: -# -This device is private property (BYOD), not owned by our organizational unit. -# -# 25: -# -This host is outside our responsibility. -# -# 26: -# -It is listed in configuration files and documentation because there is a -# -# 27: -# -need for communication between our computers and this system. -# -# 28: -# -Organizational unit not responsible for correct licensing. -# -# 29: Parent groups -# -Parent groups -# -# 30: Subgroups -# -Subgroups -# -# 31: Additional network interface -# -UNUSED -# -# 32: Member hosts for netgroups -# -Member hosts -# -# 33: DHCP pools -# -DHCP pools -# -# 34: Start address -# -Start address: -# -# 35: End address -# -End address: -# -# 36: Allow unknown clients -# -Allow unknown clients: -# -# 37: Deny unknown clients -# -Deny unknown clients: -# -# 38: Allow members of group -# -Allow class: -# -# 39: yes -# -yes -# -# 40: no -# -no -# -# 41: DHCP classes -# -DHCP classes -# -# 42: Ethernet connectors -# -Ethernet connectors -# -# 43: Connector -# -Connector -# -# 44: Room -# -Room -# -# 45: VLAN -# -VLAN -# -# 46: Speed -# -Speed -# -# 47: Hub port -# -Hub port -# -# 48: Available licenses -# -Available licenses -# -# 49/50: Message to explain section contents -# -The licenses listed here were purchased by the organizational unit -but not (yet) assigned to a user or computer. -# -# 51: LaTeX text for pdftitle -# -License report -# -# 52: LaTeX text for pdfsubject -# -licenses -# -# 53: Default license type: Single computer license -# -Single computer license -# -# 54: LaTeX text: Purchase process ID -# -Purchase process ID: -# -# 55: LaTeX text: Delivery date -# -Delivery date: -# -# 56: LaTeX text: Delivery note ID (Lieferschein-Nr) -# -Delivery note ID: -# -# 57: LaTeX text: Invoice date -# -Invoice date: -# -# 58: LaTeX text: Invoice ID (Rechnungs-Nr) -# -Invoice ID: -# -# 59: LaTeX text: Complete license list -# -Complete license list -# -# 60: LaTeX text: Host unknown -# -Host unknown -# -# 61: LaTeX text: Assignment to host not specified. -# -Assignment to host not specified -# -# 62: LaTeX text: Other people's hosts -# -Other people's hosts -# -# 63: LaTeX text: Licenses used on other people's hosts -# -Licenses used on other people's hosts -# -# 64: LaTeX text -# -The licenses listed in this section were assigned to the user. -# -# 65: LaTeX text -# -There is no information available (yet) on which computers the licenses -# -# 66: LaTeX text -# -are used. -# -# 67: LaTeX text -# -The licenses listed in this section were assigned to the user. -# -# 68: LaTeX text -# -At this time they are used on computers other people are -# -# 69: LaTeX text -# -responsible for. -# -# 70: LaTeX text -# -Note: -# -# 71: LaTeX text -# -These licenses are listed twice in the license report: -# -# 72: LaTeX text -# -Once in the section for the host and once again here. -# -# 73: LaTeX text -# -This special situation is indicated in the host licenses section by -# -# 74: LaTeX text -# -the license owner name written in an -# -# 75: LaTeX text -# -italic font. -# -# 76: String separator in date, - for english, . for german -# -- -# -# 77: Progress message: Expanding netgroup dependencies. -# -Expanding netgroup dependencies. -# -# 78: Progress message: Writing hosts file. -# -Writing "hosts" file. -# -# 79: Progress message: Writing hosts.ldif file. -# -Writing "hosts.ldif" file. -# -# 80: Progress message: Writing ethers files. -# -Writing "ethers" files. -# -# 81: Progress message: Writing ethers.ldif file. -# -Writing "ethers.ldif" file. -# -# 82: Progress message: Writing netgroup.ldif file. -# -Writing "netgroup.ldif" file. -# -# 83: Progress message: Writing dhcpd.conf file. -# -Writing "dhcpd.conf" file. -# -# 84: Progress message: Writing netdocu.tex file. -# -Writing "netdocu.tex" file. -# -# 85: Progress message: Writing licenses.tex file. -# -Writing "licenses.tex" file. -# -# 86: Progress message: Finished writing output files. -# -Finished writing output files. -# -# 87: Progress message: Reading users table. -# -Reading users table. -# -# 88: Progress message: Reading buildings table. -# -Reading buildings table. -# -# 89: Progress message: Reading network speed types table. -# -Reading network speed types table. -# -# 90: Progress message: Reading VLANs table. -# -Reading VLANs table. -# -# 91: Progress message: Reading ethernet connectors table. -# -Reading ethernet connectors table. -# -# 92: Progress message: Reading netgroups table. -# -Reading netgroups table. -# -# 93: Progress message: Reading netgroup dependencies table. -# -Reading netgroup dependencies table. -# -# 94: Progress message: Reading networks table. -# -Reading networks table. -# -# 95: Progress message: Reading DHCP classes table. -# -Reading DHCP classes table. -# -# 96: Progress message: Reading DHCP groups table. -# -Reading DHCP groups table. -# -# 97: Progress message: Reading DHCP pools table. -# -Reading DHCP pools table. -# -# 98: Progress message: Reading hosts table. -# -Reading hosts table. -# -# 99: Progress message: Reading host name aliases table. -# -Reading host name aliases table. -# -# 100: Progress message: Reading DHCP options table. -# -Reading DHCP options table. -# -# 101: Progress message: Reading software manufacturers table. -# -Reading software manufacturers table. -# -# 102: Progress message: Reading software products table. -# -Reading software products table. -# -# 103: Progress message: Reading license types table. -# -Reading license types table. -# -# 104: Progress message: Reading licenses table. -# -Reading licenses table. -# -# 105: Progress message: Finished reading input from database. -# -Finished reading input from database. -# -# 106/107: ERROR: Not a boolean value "..."! -# -Not a boolean value: " -"! -# -# 108/109: ERROR: Configuration text "..." too long! -# -Configuration value text " -" too long! -# -# 110/111: ERROR: No such database type: "..."! -# -No such database type: " -"! -# -# 112: ERROR: A value text is required! -# -A value text is required! -# -# 113/114: ERROR: Unknown configuration option "..."! -# -Unknown configuration option " -"! -# -# 115: ERROR: Syntax error - "=" and value required! -# -Syntax error - "=" and value required! -# -# 116: ERROR: Input line too long! -# -Input line too long! -# -# 117: ERROR: Missing end of section name! -# -Missing end of section name! -# -# 118/119: ERROR: File name contains wildcards, this is not allowed! -# -File name " -"\ncontains wildcards, this is not allowed! -# -# 120/121: WARNING: File name "..." is not an absolute path name! -# -File name " -"\nis not an absolute path name! -# -# 122: ERROR: Missing database host name! -# -Missing database host name! -# -# 123: ERROR: Missing database name! -# -Missing database name! -# -# 124: WARNING: Missing DHCP VLAN name! -# -Missing DHCP VLAN name! -# -# 125: ERROR: Missing organization name! -# -Missing organization name! -# -# 126: ERROR: Missing organizational unit name! -# -Missing organizational unit name! -# -# 127: ERROR: Missing administrator name! -# -Missing administrator name! -# -# 128: ERROR: Missing database credentials file name! -# -Missing database credentials file name! -# -# 129: ERROR: Missing database user name! -# -Missing database user name! -# -# 130: ERROR: Missing database user password! -# -Missing database user password! -# -# 131: ERROR: No configuration files found! -# -No configuration file(s) "itadmin.conf" found!# -# -# 132: ERROR: Configuration problems! -# -Configuration problems,\nplease check the itadmin.conf configuration files! -# -# 133: ERROR: Unsupported database type! -# -Unsupported database type! -# -# 134: ERROR start: DHCP pool " -# -DHCP pool " -# -# 135: ERROR: -# -": Inconsistent setup!\nUnknown clients can be allowed or denied to use a pool, not both! -# -# 136: ERROR start DHCP class " -# -DHCP class " -# -# 137: ERROR: DHCP class assigned to pools in different networks! -# -" assigned to pools in different networks! -# -# 138: ERROR: DHCP pool "...": Missing allowed DHCP class name! -# -": Missing allowed DHCP class name! -# -# 139/140: ERROR: No such VLAN! -# -No such VLAN: " -"! -# -# 141: ERROR: Failed to obtain results list! -# -Failed to obtain results list for database query! -# -# 142: ERROR: Failed to query database! -# -Failed to query database! -# -# 143: ERROR: Primary key is not numeric! -# -Table "licenses", record -# -# 144: ERROR: Primary key is not numeric! -# - Primary key is not numeric! -# -# 145: ERROR: Missing primary key! -# - Missing primary key! -# -# 146, 147, 148: License type "...": Not a number "..."! -# -License type " -": Not a number " -"! -# -# 149/150: ERROR: Tabel swm record ... Missing primary key! -# -Table "swmanufacturers" record - Missing primary key! -# -# 151: ERROR start: Table "dhcpoptions" record ... -# -Table "dhcpoptions" record -# -# 152: ERROR: Primary key is not numeric! -# - Primary key is not numeric! -# -# 153: ERROR: Missing primary key! -# - Missing primary key! -# -# 154: ERROR: Failed to set database encoding! -# -Failed to set database encoding! -# -# 155/156/157: ERROR: Failed to connect to database! -# -Failed to connect to database " -" at host " -"! -# -# 158/159: ERROR: Illegal database name! -# -Illegal database name: " -"! -# -# 160: ERROR: Failed to convert database user password! -# -Failed to convert database user passwort to UTF-8! -# -# 161/162: ERROR: Failed to convert database user name to UTF-8! -# -Failed to convert database user name " -" to UTF-8! -# -# 163/164: ERROR: Failed to convert database host name to UTF-8! -# -Failed to convert database host name " -" to UTF-8! -# -# 165: ERROR: Failed to initialize MySQL client object! -# -Failed to initialize MySQL client object! -# -# 166: ERROR: Failed to initialize MySQL client library! -# -Failed to initialize MySQL client library! -# -# 167: ERROR: MySQL database support not available! -# -MySQL database support not available! -# -# 168/169: ERROR: User name "...": Duplicated entry! -# -User name " -": Duplicated entry! -# -# 170/171: ERROR: Building "...": Duplicated entry! -# -Building " -": Duplicated entry! -# -# 172/173: ERROR: Ethernet speed setting "...": Duplicated entry! -# -Ethernet speed setting " -": Duplicated entry! -# -# 174/175: VLAN "...": Duplicated entry! -# -VLAN " -": Duplicated entry! -# -# 176/177: Computer "...": Duplicated entry! -# -Computer " -": Duplicated entry! -# -# 178/179: Software manufacturer "...": Duplicated entry! -# -Software manufacturer " -": Duplicated entry! -# -# 180/181: Netgroup "...": Duplicated entry! -# -Netgroup " -": Duplicated entry! -# -# 182/183: Netgroup "..." not defined! -# -Netgroup " -" not defined! -# -# 184/185: Ethernet connector "...": Duplicated entry! -# -Ethernet connector " -": Duplicated entry! -# -# 186/187: Ethernet speed setting "..." not defined! -# -Ethernet speed setting " -" not defined! -# -# 188/189: VLAN "..." not defined! -# -VLAN " -" not defined! -# -# 190/191: Building "..." not defined! -# -Building " -" not defined! -# -# 192/193: Failed to convert net mask "..."! -# -Failed to convert net mask " -"! -# -# 194: Using default net mask 255.255.255.0! -# -Using default net mask 255.255.255.0! -# -# 195/196: Failed to convert default gateway "..."! -# -Failed to convert default gateway " -"! -# -# 197/198: Using default gateway ... -# -Using default gateway -. -# -# 199/200: Failed to convert broadcast address! -# -Failed to convert broadcast address " -"! -# -# 201/202: Network "...": Duplicated entry! -# -Network " -": Duplicated entry! -# -# 203: Attempt to define IP network without specifying an IP address! -# -Attempt to define IP network without specifying an IP address! -# -# 204/205: DHCP class "...": Duplicated entry! -# -DHCP class " -": Duplicated entry! -# -# 206/207: DHCP group "...": Duplicated entry! -# -DHCP group " -": Duplicated entry! -# -# 208/209: Invalied network address "..."! -# -Invalid network address " -"! -# -# 210/211: DHCP class "..." not defined! -# -DHCP class " -" not defined! -# -# 212/213: Network "..." not defined! -# -Network " -" not defined! -# -# 214/215: DHCP pool "...": Invalid end address! -# -DHCP pool " -": Invalid end address! -# -# 216/217: DHCP pool "...": Missing end address! -# -DHCP pool " -": Missing end address! -# -# 218/219: DHCP pool "...": Invalid start address! -# -DHCP pool " -": Invalid start address! -# -# 220: DHCP pool definition attempted with empty start address! -# -DHCP pool definition attempted with empty start address! -# -# 221/222: Computer "...": Illegal MAC address! -# -Computer " -": Illegal MAC address! -# -# 223/224: Computer "...": MAC address too long! -# -Computer " -": MAC address too long! -# -# 225/226/227: Computer "...": User "..." not defined! -# -Computer " -": User " -" not defined! -# -# 228/229/230: Computer "...": Netgroup "..." not defined! -# -Computer " -": Netgroup " -" not defined! -# -# 231/232/233: Computer "...": DHCP class "..." not defined! -# -Computer " -": DHCP class " -" not defined! -# -# 234/235/236: Computer "...": DHCP group "..." not defined! -# -Computer " -": DHCP group " -" not defined! -# -# 237/238/239: Computer "...": Ethernet connector "..." not defined! -# -Computer " -": Ethernet connector " -" not defined! -# -# 240/241/242: Computer "...": Building "..." not defined! -# -Computer " -": Building " -" not defined! -# -# 243/244: Computer "...": Both DHCP class and IP address defined! -# -Computer " -": Both DHCP class and IP address specified! -# -# 245/246: Computer "...": DHCP class specified, but MAC address missing! -# -Computer " -": DHCP class specified, but MAC address is missing! -# -# 247/248: Computer "...": Netgroup specified, but IP address missing! -# -Computer " -": Netgroup specified, but IP address is missing! -# -# 249/250: Computer "...": Netgroup specified, but DNS domain missing! -# -Computer " -": Netgroup specified, but DNS domain is missing! -# -# 251/252: Computer "...": FQDN first flag set, but DNS domain missing! -# -Computer " -": FQDN first flag set, but DNS domain is missing! -# -# 253/254: Computer "...": Over expiration date, should be removed! -# -Computer " -": Over expiration date, should be removed! -# -# 255: Attempt to define a computer without a host name! -# -Attempt to define a computer without a host name! -# -# 256/257/258: Alias "...": Computer "..." not defined! -# -Alias " -": Computer " -" not defined! -# -# 259/260/261: DHCP option ...: VLAN "..." not defined! -# -DHCP option -: VLAN " -" not defined! -# -# 262/263/264: DHCP option ...: Network "..." not defined! -# -DHCP option -: Network " -" not defined! -# -# 265/266/267: DHCP option ...: DHCP group "..." not defined! -# -DHCP option -: DHCP group " -" not defined! -# -# 268/269/270: DHCP option ...: DHCP pool "..." not defined! -# -DHCP option -: DHCP pool " -" not defined! -# -# 271/272/273: DHCP option ...: Computer "..." not defined! -# -DHCP option -: Computer " -" not defined! -# -# 274/275/276: DHCP option ...: Unknown scope type name "..."! -# -DHCP option -: Unknown scope type name " -"! -# -# 277/278: Software product "...": Duplicated entry! -# -Software product " -": Duplicated entry! -# -# 279/280/281: Software product "...": Manufacturer "..." not defined! -# -Software product " -": Software manufacturer " -" not defined! -# -# 282/283: License type "...": Duplicated entry! -# -License type " -": Duplicated entry! -# -# 284/285: License ...: Duplicated entry! -# -License -: Duplicated entry! -# -# 286/287/288: License ...: User "..." not defined! -# -License -: User " -" not defined! -# -# 289/290/291: License ...: Computer "..." not defined! -# -License -: Computer " -" not defined! -# -# 292/293/294: License ...: License type "..." not defined! -# -License -: License type " -" not defined! -# -# 295/296/297: License ... assigned to computer "..." but no user specified! -# -License - assigned to computer " -" but no user specified! -# -# 298/299: License ...: No software product specified! -# -License -: No software product specified! -# -# 300/301: Illegal date specification "..."! -# -Illegal date specification " -"! -# -# 302: Koma-script suggestion. -# -Users from Europe - especially from Germany - should consider using koma-script. -# -# 303/304: ERROR: Illegal software manufacturer! -# -Illegal software manufacturer (short name): " -"! -# -# 305/306: ERROR: Illegal software! -# -Illegal software (short name): " -"! -# -# 307/308: ERROR: Illegal license type! -# -Illegal license type (short name): " -"! -# -# 309: ERROR: Failed to reset sensitive memory range! -# -Failed to reset sensitive memory range! -# -# 310: Info The device owner is responsible. -# -The device owner is responsible for correct licensing. -# -# 311/312 -# -This IP address is assigned dynamically to different computers by DHCP. -Licenses are listed below real computer names. -# -# 313 -# -This is an additional network interface for a computer. -# -# 314-317 -# -UNUSED -This is just a network interface of a non-computer device (i.e. printer, -web cam, measurement device, oscilloscope, control unit...) without -software requring license accounting. -# -# 318-320 -# -Reserved IP address and host name. -This combination of IP address and host name ist not yet in use, -they are reserved for later use. -# -# 321 Device no longer in use. -# -Retired, this device is no longer in use. -# -# -# -$!end -}; - - - -/** License text written for --license option. -*/ -static dkChar const * const itadmin_license_overview[] = { -$!text macro=dkT - -Overview -======== -This software uses code from the following projects, either directly or -by linking a library: - -dktools DK tools and libraries - See http://sourceforge.net/p/dktools/wiki/Home/ for information. - -MySQL MySQL client library. - See http://www.mysql.com for information. - -$!end -}; - - - -/** License for the dktools project. -*/ -static dkChar const * const itadmin_license_dktools[] = { -$!text macro=dkT - -License conditions for DK tools and libraries -============================================= -Copyright (c) 2012-2016, Dirk Krause -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -* Neither the name of the copyright holder(s) nor the names of - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. - -IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -$!end -}; - - - -/** License for the MySQL client library (GPL + FLOSS exception). -*/ -static dkChar const * const itadmin_license_mysql[] = { -$!text macro=dkT -License conditions for the MySQL client library -=============================================== - -GNU General Public License --------------------------- - - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; - or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. - -MySQL FLOSS License Exception ------------------------------ - -MySQL FLOSS License Exception - -The MySQL AB Exception for Free/Libre and Open Source Software-only -Applications Using MySQL Client Libraries (the "FLOSS Exception"). - -Version 0.6, 7 March 2007 - -Exception Intent - -We want specified Free/Libre and Open Source Software (``FLOSS'') -applications to be able to use specified GPL-licensed MySQL client -libraries (the ``Program'') despite the fact that not all FLOSS -licenses are compatible with version 2 of the GNU General Public -License (the ``GPL''). - -Legal Terms and Conditions - -As a special exception to the terms and conditions of version 2.0 -of the GPL: - - 1. You are free to distribute a Derivative Work that is formed - entirely from the Program and one or more works (each, a - "FLOSS Work") licensed under one or more of the licenses - listed below in section 1, as long as: - a. You obey the GPL in all respects for the Program and the - Derivative Work, except for identifiable sections of the - Derivative Work which are not derived from the Program, - and which can reasonably be considered independent and - separate works in themselves, - b. all identifiable sections of the Derivative Work which - are not derived from the Program, and which can - reasonably be considered independent and separate works - in themselves, - i. are distributed subject to one of the FLOSS licenses - listed below, and - ii. the object code or executable form of those sections - are accompanied by the complete corresponding - machine-readable source code for those sections on - the same medium and under the same FLOSS license as - the corresponding object code or executable forms of - those sections, and - c. any works which are aggregated with the Program or with a - Derivative Work on a volume of a storage or distribution - medium in accordance with the GPL, can reasonably be - considered independent and separate works in themselves - which are not derivatives of either the Program, a - Derivative Work or a FLOSS Work. - If the above conditions are not met, then the Program may only - be copied, modified, distributed or used under the terms and - conditions of the GPL or another valid licensing option from - MySQL AB. - - 2. FLOSS License List - -License name Version(s)/Copyright Date -Academic Free License 2.0 -Apache Software License 1.0/1.1/2.0 -Apple Public Source License 2.0 -Artistic license From Perl 5.8.0 -BSD license "July 22 1999" -Common Development and Distribution License (CDDL) 1.0 -Common Public License 1.0 -Eclipse Public License 1.0 -GNU Library or "Lesser" General Public License (LGPL) 2.0/2.1 -Jabber Open Source License 1.0 -MIT license (As listed in file MIT-License.txt) --- -Mozilla Public License (MPL) 1.0/1.1 -Open Software License 2.0 -OpenSSL license (with original SSLeay license) "2003" ("1998") -PHP License 3.0 -Python license (CNRI Python License) --- -Python Software Foundation License 2.1.1 -Sleepycat License "1999" -University of Illinois/NCSA Open Source License --- -W3C License "2001" -X11 License "2001" -Zlib/libpng License --- -Zope Public License 2.0 - - Due to the many variants of some of the above licenses, we - require that any version follow the 2003 version of the Free - Software Foundation's Free Software Definition - (http://www.gnu.org/philosophy/free-sw.html) or version 1.9 of - the Open Source Definition by the Open Source Initiative - (http://www.opensource.org/docs/definition.php). - - 3. Definitions - - a. Terms used, but not defined, herein shall have the - meaning provided in the GPL. - b. Derivative Work means a derivative work under copyright - law. - - 4. Applicability: This FLOSS Exception applies to all Programs - that contain a notice placed by MySQL AB saying that the - Program may be distributed under the terms of this FLOSS - Exception. If you create or distribute a work which is a - Derivative Work of both the Program and any other work - licensed under the GPL, then this FLOSS Exception is not - available for that work; thus, you must remove the FLOSS - Exception notice from that work and comply with the GPL in all - respects, including by retaining all GPL notices. You may - choose to redistribute a copy of the Program exclusively under - the terms of the GPL by removing the FLOSS Exception notice - from that copy of the Program, provided that the copy has - never been modified by you or any third party. - -Appendix A. Qualified Libraries and Packages - -The following is a non-exhaustive list of libraries and packages -which are covered by the FLOSS License Exception. Please note that -this appendix is provided merely as an additional service to -specific FLOSS projects wishing to simplify licensing information -for their users. Compliance with one of the licenses noted under -the "FLOSS license list" section remains a prerequisite. - -Package Name Qualifying License and Version -Apache Portable Runtime (APR) Apache Software License 2.0 - -$!end -}; - - - -/** Help text shown for --help. -*/ -static dkChar const * const itadmin_help_text[] = { -$!text macro=dkT - -NAME - - itadmin - IT administration using databases - -SYNOPSIS - - itadmin [<options>] [<config-file>] - -DESCRIPTION - -The program reads IT-related information from a database and creates -configuration files, a network documentation, and a license report. -A configuration file can be specified as argument, the program searches -for itadmin.conf files if no configuration file is specified. - -OPTIONS - --c ---configuration - Create configuration files and network documentation. - --l ---licenses - Create license report. - If none of -c and -l is used the program creates all output - (same as both -c and -l used). - --h ---help - Show a help text. - --v ---version - Show version information. - --L ---license-terms - Show license terms. - -EXIT STATUS - -0 on success, all other exit status codes indicate an error. - -FILES - -itadmin.conf - The itadmin.conf file contains the configuration information - used by the program. The file consists of key=value pairs, one - per line. Keys can consist of multiple words. - Lines started by '#' are comments. - The following key=value pairs can be used: - - database host = <string> - database name = <string> - database credentials file = <filename> - dhcpd.conf vlan = <name> - organization = <name> - organizational unit = <name> - administrator name = <name> - -AUTHOR - -Dirk Krause - -HISTORY - -The itadmin program replaces the hostsadm script found in previous -versions of dktools. - -COPYRIGHT AND LICENSE - -Run - itadmin --license-terms -to see the license conditions. - -SEE ALSO - -http://sourceforge.net/p/dktools/wiki/itadmin/ - -$!end -}; - - -/** Options for the itadmin program. -*/ -static dk3_option_t const itadmin_options[] = { - { dkT('h'), dkT("help"), 0 }, - { dkT('v'), dkT("version"), 0 }, - { dkT('L'), dkT("license-terms"), 0 }, - { dkT('c'), dkT("configuration"), 0 }, - { dkT('l'), dkT("licenses"), 0 }, -}; - -/** Number of elements in itadmin_options. -*/ -static size_t itadmin_sz_options = -(sizeof(itadmin_options)/sizeof(dk3_option_t)); - - - -int -itadmin_job_do_network(itadmin_job *job) -{ - int back = 0; - if(job) { - if((job->cmd) & ITADMIN_CMD_CONFIG) { - back = 1; - } - } - return back; -} - - - -int -itadmin_job_do_dhcp(itadmin_job *job) -{ - int back = 0; - if(itadmin_job_do_network(job)) { - if(job->f_dh) { - back = 1; - } - } - return back; -} - - - -int -itadmin_job_do_licenses(itadmin_job *job) -{ - int back = 0; - if(job) { - if((job->cmd) & ITADMIN_CMD_LICENSES) { - back = 1; - } - } - return back; -} - - - -/** Clean up a storage, destroy contained objects. - @param s Storage to clean up. - @param i Iterator through storage. - @param f Function to use on each object. -*/ -static -void -itadmin_clean_storage( - dk3_sto_t **s, - dk3_sto_it_t **i, - itadmin_obj_del *f -) -{ - void *v; - - if(*s) { - if(*i) { - dk3sto_it_reset(*i); - while((v = dk3sto_it_next(*i)) != NULL) { - (*f)(v); - } - dk3sto_it_close(*i); - } - dk3sto_close(*s); - } - *s = NULL; - *i = NULL; -} - - - -/** Initialize job structure. - @param job Job structure to initialize. - @param app Application structure for diagnostics. - @param msg Localized message texts. - @param noloc Texts, not localized. -*/ -static -void -itadmin_job_init( - itadmin_job *job, - dk3_app_t *app, - dkChar const * const *msg, - dkChar const * const *noloc -) -{ - job->app = app; - job->opt = NULL; - job->msg = msg; - job->noloc = noloc; - job->exval = 1; - job->cmd = 0; - job->ec = 0; - job->f_dh = 0; - job->dbt = DK3_SQLDB_TYPE_MYSQL; - job->dbhn = NULL; - job->uc2l = NULL; - job->dbn = NULL; - job->dbcf = NULL; - job->dbus = NULL; - job->dbpw = NULL; - job->vlan = NULL; - job->org = NULL; - job->ou = NULL; - job->admn = NULL; - job->ldapb = NULL; - job->ngdep = NULL; - job->nng = 0; - job->s_us = NULL; job->i_us = NULL; - job->s_usn = NULL; job->i_usn = NULL; - job->s_bu = NULL; job->i_bu = NULL; - job->s_sp = NULL; job->i_sp = NULL; - job->s_vl = NULL; job->i_vl = NULL; - job->s_pa = NULL; job->i_pa = NULL; - job->s_nw = NULL; job->i_nw = NULL; - job->s_ng = NULL; job->i_ng = NULL; - job->s_nd = NULL; job->i_nd = NULL; - job->s_dc = NULL; job->i_dc = NULL; - job->s_dp = NULL; job->i_dp = NULL; - job->s_dg = NULL; job->i_dg = NULL; - job->s_ho = NULL; job->i_ho = NULL; - job->s_hoi = NULL; job->i_hoi = NULL; - job->s_sm = NULL; job->i_sm = NULL; - job->s_sw = NULL; job->i_sw = NULL; - job->s_lt = NULL; job->i_lt = NULL; - job->s_lc = NULL; job->i_lc = NULL; - job->s_lf = NULL; job->i_lf = NULL; - job->s_do = NULL; job->i_do = NULL; - job->dbptr = NULL; - job->gdate = 0; - job->hlh = 0; - job->ukoma = 0; - job->rel = 0; - job->m_p = 1; - job->m_vl = 1; - job->m_sn = 1; - job->m_gr = 1; - job->m_po = 1; - job->m_ho = 0; - if(*(msg[76]) == dkT('.')) { job->gdate = 1; } -} - - - -/** Prepare a storage/iterator pair. - @param job Job structure. - @param s Address of storage pointer. - @param i Address if iterator pointer. - @param f Object comparison function for storage. - @param cr Comparison criteria. - @param ok Pointer to OK flag, reset on errors. -*/ -static -void -itadmin_job_prepare_storage( - itadmin_job *job, - dk3_sto_t **s, - dk3_sto_it_t **i, - dk3_fct_comp_t *f, - int cr, - int *ok -) -{ - *s = NULL; - *i = NULL; - *s = dk3sto_open_app(job->app); - if(*s) { - *i = dk3sto_it_open(*s); - if(*i) { - if(f) { - dk3sto_set_comp(*s, f, cr); - } - } else { - *ok = 0; - } - } else { - *ok = 0; - } -} - - - -/** Prepare all data structures for a job. - @param job Job structure. - @return 1 on success, 0 on error. -*/ -static -int -itadmin_job_up(itadmin_job *job) -{ - dk3_time_t ct; - dk3_tm_t tm; - int back = 1; - int f_utf8 = 0; - (job->today).y = 0; - (job->today).m = 0; - (job->today).d = 0; - if(dk3sf_time(&ct)) { - if(dk3sf_localtime_app(&tm, &ct, job->app)) { - (job->today).y = tm.Y; - (job->today).m = tm.M; - (job->today).d = tm.D; - } - } - itadmin_job_prepare_storage( - job, &(job->s_us), &(job->i_us), itadmin_comp_user, 0, &back - ); - itadmin_job_prepare_storage( - job, &(job->s_usn), &(job->i_usn), itadmin_comp_user, 2, &back - ); - itadmin_job_prepare_storage( - job, &(job->s_bu), &(job->i_bu), itadmin_comp_building, 0, &back - ); - itadmin_job_prepare_storage( - job, &(job->s_sp), &(job->i_sp), itadmin_comp_speed, 0, &back - ); - itadmin_job_prepare_storage( - job, &(job->s_vl), &(job->i_vl), itadmin_comp_vlan, 0, &back - ); - itadmin_job_prepare_storage( - job, &(job->s_pa), &(job->i_pa), itadmin_comp_connect, 0, &back - ); - itadmin_job_prepare_storage( - job, &(job->s_nw), &(job->i_nw), itadmin_comp_network, 0, &back - ); - itadmin_job_prepare_storage( - job, &(job->s_ng), &(job->i_ng), itadmin_comp_netgroup, 0, &back - ); - itadmin_job_prepare_storage( - job, &(job->s_nd), &(job->i_nd), NULL, 0, &back - ); - itadmin_job_prepare_storage( - job, &(job->s_dc), &(job->i_dc), itadmin_comp_dhcp_class, 0, &back - ); - itadmin_job_prepare_storage( - job, &(job->s_dp), &(job->i_dp), itadmin_comp_dhcp_pool, 0, &back - ); - itadmin_job_prepare_storage( - job, &(job->s_dg), &(job->i_dg), itadmin_comp_dhcp_group, 0, &back - ); - itadmin_job_prepare_storage( - job, &(job->s_ho), &(job->i_ho), itadmin_comp_host, 0, &back - ); - itadmin_job_prepare_storage( - job, &(job->s_hoi), &(job->i_hoi), itadmin_comp_host, 2, &back - ); - itadmin_job_prepare_storage( - job, &(job->s_sm), &(job->i_sm), itadmin_comp_swman, 0, &back - ); - itadmin_job_prepare_storage( - job, &(job->s_sw), &(job->i_sw), itadmin_comp_swprod, 0, &back - ); - itadmin_job_prepare_storage( - job, &(job->s_lt), &(job->i_lt), itadmin_comp_lictype, 0, &back - ); - itadmin_job_prepare_storage( - job, &(job->s_lc), &(job->i_lc), itadmin_comp_license, 0, &back - ); - itadmin_job_prepare_storage( - job, &(job->s_lf), &(job->i_lf), itadmin_comp_license, 2, &back - ); - itadmin_job_prepare_storage( - job, &(job->s_do), &(job->i_do), itadmin_comp_dhcp_option, 0, &back - ); - f_utf8 = 0; - if(DK3_ENCODING_UTF8 == dk3app_get_encoding(job->app)) { f_utf8 = 1; } - job->uc2l = dk3uc2lat_open_app(NULL, f_utf8, job->app); - if(!(job->uc2l)) { back = 0; } - return back; -} - - - -/** Clean up job structure. - @param job Job structure to clean up. -*/ -static -void -itadmin_job_cleanup(itadmin_job *job) -{ -#if 0 - /* 2016-12-09 - Function dk3mem_reset_secure() to sanitize memory was added. - */ - size_t sz; - size_t i; - int ok = 1; -#endif - if(job->opt) { - dk3opt_close(job->opt); - } job->opt = NULL; - if(job->uc2l) { - dk3uc2lat_close(job->uc2l); - } job->uc2l = NULL; - $!trace-code if(job->dbhn) { - $!trace-code dk3sf_fputs(dkT("DB hostname: "), stdout); - $!trace-code dk3sf_fputs(job->dbhn, stdout); - $!trace-code dk3sf_fputc(dkT('\n'), stdout); - $!trace-code } - dk3_release(job->dbhn); - $!trace-code if(job->dbn) { - $!trace-code dk3sf_fputs(dkT("DB name: "), stdout); - $!trace-code dk3sf_fputs(job->dbn, stdout); - $!trace-code dk3sf_fputc(dkT('\n'), stdout); - $!trace-code } - dk3_release(job->dbn); - $!trace-code if(job->dbcf) { - $!trace-code dk3sf_fputs(dkT("DB credfile: "), stdout); - $!trace-code dk3sf_fputs(job->dbcf, stdout); - $!trace-code dk3sf_fputc(dkT('\n'), stdout); - $!trace-code } - dk3_release(job->dbcf); - $!trace-code if(job->dbus) { - $!trace-code dk3sf_fputs(dkT("DB username: "), stdout); - $!trace-code dk3sf_fputs(job->dbus, stdout); - $!trace-code dk3sf_fputc(dkT('\n'), stdout); - $!trace-code } - if(job->dbus) { -#if 0 - /* 2016-12-09 - Function dk3mem_reset_secure() to sanitize memory was added. - */ - dk3mem_res((void *)(job->dbus), dk3str_c8_len(job->dbus)); -#endif - (void)dk3mem_reset_secure((void *)(job->dbus), dk3str_c8_len(job->dbus)); - } - dk3_release(job->dbus); - $!trace-code if(job->dbpw) { -#if 0 - $!trace-code dk3sf_fputs(dkT("DB password: "), stdout); - $!trace-code dk3sf_fputs(job->dbpw, stdout); - $!trace-code dk3sf_fputc(dkT('\n'), stdout); -#endif - $!trace-code } - if(job->dbpw) { -#if 0 - /* 2016-12-09 - Function dk3mem_reset_secure() to sanitize memory was added. - */ - sz = dk3str_c8_len(job->dbpw); - dk3mem_res((void *)(job->dbpw), dk3str_c8_len(job->dbpw)); - /* Static code analysis: Dead assignment ok = 0 */ - /* The purpose of the following instruction is to avoid */ - /* optimizing out the memory reset in the instruction before. */ - for (i = 0; i < sz; i++) { if('\0' != (job->dbpw)[i]) { ok = 0; } } - if (1 != ok) { - dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 309); - } -#endif - (void)dk3mem_reset_secure((void *)(job->dbpw), dk3str_c8_len(job->dbpw)); - } - dk3_release(job->dbpw); - $!trace-code if(job->vlan) { - $!trace-code dk3sf_fputs(dkT("VLAN name: "), stdout); - $!trace-code dk3sf_fputs(job->vlan, stdout); - $!trace-code dk3sf_fputc(dkT('\n'), stdout); - $!trace-code } - dk3_release(job->vlan); - $!trace-code if(job->org) { - $!trace-code dk3sf_fputs(dkT("Organization: "), stdout); - $!trace-code dk3sf_fputs(job->org, stdout); - $!trace-code dk3sf_fputc(dkT('\n'), stdout); - $!trace-code } - dk3_release(job->org); - $!trace-code if(job->ou) { - $!trace-code dk3sf_fputs(dkT("OU name: "), stdout); - $!trace-code dk3sf_fputs(job->ou, stdout); - $!trace-code dk3sf_fputc(dkT('\n'), stdout); - $!trace-code } - dk3_release(job->ou); - $!trace-code if(job->admn) { - $!trace-code dk3sf_fputs(dkT("admin name: "), stdout); - $!trace-code dk3sf_fputs(job->admn, stdout); - $!trace-code dk3sf_fputc(dkT('\n'), stdout); - $!trace-code } - dk3_release(job->admn); - $!trace-code if(job->ldapb) { - $!trace-code dk3sf_fputs(dkT("ldap base: "), stdout); - $!trace-code dk3sf_fputs(job->ldapb, stdout); - $!trace-code dk3sf_fputc(dkT('\n'), stdout); - $!trace-code } - dk3_release(job->ldapb); - itadmin_clean_storage(&(job->s_us), &(job->i_us), itadmin_mem_user_del); - itadmin_clean_storage(&(job->s_bu), &(job->i_bu), itadmin_mem_building_del); - itadmin_clean_storage(&(job->s_sp), &(job->i_sp), itadmin_mem_speed_del); - itadmin_clean_storage(&(job->s_vl), &(job->i_vl), itadmin_mem_vlan_del); - itadmin_clean_storage(&(job->s_pa), &(job->i_pa), itadmin_mem_connect_del); - itadmin_clean_storage(&(job->s_nw), &(job->i_nw), itadmin_mem_network_del); - itadmin_clean_storage(&(job->s_ng), &(job->i_ng), itadmin_mem_netgroup_del); - itadmin_clean_storage(&(job->s_nd), &(job->i_nd), itadmin_mem_ngdep_del); - itadmin_clean_storage(&(job->s_dc), &(job->i_dc), itadmin_mem_dhcp_class_del); - itadmin_clean_storage(&(job->s_dp), &(job->i_dp), itadmin_mem_dhcp_pool_del); - itadmin_clean_storage(&(job->s_dg), &(job->i_dg), itadmin_mem_dhcp_group_del); - if(job->s_hoi) { - if(job->i_hoi) { - dk3sto_it_close(job->i_hoi); - } - dk3sto_close(job->s_hoi); - } - job->s_hoi = NULL; job->i_hoi = NULL; - if(job->s_usn) { - if(job->i_usn) { - dk3sto_it_close(job->i_usn); - } - dk3sto_close(job->s_usn); - } - job->s_usn = NULL; job->i_usn = NULL; - itadmin_clean_storage(&(job->s_ho), &(job->i_ho), itadmin_mem_host_del); - itadmin_clean_storage(&(job->s_sm), &(job->i_sm), itadmin_mem_sw_man_del); - itadmin_clean_storage(&(job->s_sw), &(job->i_sw), itadmin_mem_software_del); - itadmin_clean_storage(&(job->s_lt), &(job->i_lt), itadmin_mem_lic_type_del); - if(job->s_lf) { - if(job->i_lf) { - dk3sto_it_close(job->i_lf); - } - dk3sto_close(job->s_lf); - } - job->s_lf = NULL; job->i_lf = NULL; - itadmin_clean_storage(&(job->s_lc), &(job->i_lc), itadmin_mem_license_del); - itadmin_clean_storage(&(job->s_do),&(job->i_do),itadmin_mem_dhcp_option_del); - if(job->ngdep) { - dk3bm_close(job->ngdep); - job->ngdep = NULL; - } -} - - - -/** Process command line arguments. - @param job Job structure. - @return 1 on success (can continue), 0 on error. -*/ -static -int -itadmin_process_arguments(itadmin_job *job) -{ - dkChar const * const *xargv = NULL; - int xargc = 0; - int back = 0; - $? "+ itadmin_process_arguments" - xargc = dk3app_get_argc(job->app); - xargv = dk3app_get_argv(job->app); - xargv++; xargc--; - job->opt = dk3opt_open_app( - itadmin_options, itadmin_sz_options, - dkT('\0'), NULL, - xargc, xargv, - job->app - ); - if(job->opt) { - if(0 == dk3opt_get_error_code(job->opt)) { - back = 1; - if(dk3opt_is_set(job->opt, dkT('c'))) { - job->cmd |= ITADMIN_CMD_CONFIG; - } - if(dk3opt_is_set(job->opt, dkT('l'))) { - job->cmd |= ITADMIN_CMD_LICENSES; - } - if(dk3opt_is_set(job->opt, dkT('h'))) { - job->cmd |= ITADMIN_CMD_HELP; - } - if(dk3opt_is_set(job->opt, dkT('v'))) { - job->cmd |= ITADMIN_CMD_VERSION; - } - if(dk3opt_is_set(job->opt, dkT('L'))) { - job->cmd |= ITADMIN_CMD_LICENSE_TERMS; - } - } else { $? "! errors in opt proc" - } - } else { $? "! failed to read opts" - } - $? "- itadmin_process_arguments %d", back - return back; -} - - - -/** Show version number. -*/ -static -void -itadmin_show_version(void) -{ - dk3sf_fputs(itadmin_kw_noloc[2], stdout); - dk3sf_fputs(DKT_VERSION_DK, stdout); - dk3sf_fputc(dkT('\n'), stdout); -#if !(DK3_HAVE_MARIADB_MYSQL_H || DK3_HAVE_MYSQL_MYSQL_H || DK3_HAVE_MYSQL_H) - dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 167); -#endif -} - - - -/** Show help text. - @param job Job structure. -*/ -static -void -itadmin_show_help(itadmin_job *job) -{ - dk3app_help(job->app, itadmin_kw_noloc[3], itadmin_help_text); -} - - - -/** Show one text section, used to show license terms. - @param ltxt License text to show. -*/ -static -void -itadmin_show_license_section(dkChar const * const *ltxt) -{ - dkChar const * const *sptr; - sptr = ltxt; - while(*sptr) { - dk3sf_fputs(*(sptr++), stdout); - dk3sf_fputc(dkT('\n'), stdout); - } -} - - - -/** Show license conditions. - @param job Job structure. -*/ -static -void -itadmin_show_license(void) -{ - itadmin_show_license_section(itadmin_license_overview); - itadmin_show_license_section(itadmin_license_dktools); - itadmin_show_license_section(itadmin_license_mysql); -} - - - -/** Run the tasks. - @param job Job structure. -*/ -static -void -itadmin_run(itadmin_job *job) -{ - int success = 0; - if(itadmin_config_read(job)) { - if(itadmin_data_read(job)) { - /* PROGRESS: Expanding netgroup dependencies. */ - itadmin_tool_log_1(job, DK3_LL_PROGRESS, 77); - if(itadmin_netgroup_expand(job)) { - success = 1; - if(itadmin_job_do_network(job)) { - /* - Hosts - */ - /* PROGRESS: Writing hosts file. */ - itadmin_tool_log_1(job, DK3_LL_PROGRESS, 78); - if(!itadmin_hosts_output(job)) { $? "! hosts output" - success = 0; - } - if(job->ldapb) { - /* PROGRESS: Writing hosts.ldif file. */ - itadmin_tool_log_1(job, DK3_LL_PROGRESS, 79); - if(!itadmin_hosts_ldif_output(job)) { $? "! hosts.ldif output" - success = 0; - } - } - /* - Ethers - */ - /* PROGRESS: Writing ethers file. */ - itadmin_tool_log_1(job, DK3_LL_PROGRESS, 80); - if(!itadmin_ethers_output(job)) { $? "! ethers output" - success = 0; - } - if(job->ldapb) { - /* PROGRESS: Writing ethers.ldif file. */ - itadmin_tool_log_1(job, DK3_LL_PROGRESS, 81); - if(!itadmin_ethers_ldif_output(job)) { $? "! ethers ldif" - success = 0; - } - } - /* - Netgroups - */ - /* PROGRESS: Writing netgroup.ldif file. */ - itadmin_tool_log_1(job, DK3_LL_PROGRESS, 82); - if(!itadmin_netgroup_ldif_output(job)) { $? "! netgroup.ldif" - success = 0; - } - /* - DHCP configuration - */ - if(itadmin_job_do_dhcp(job)) { - /* PROGRESS: Writing dhcpd.conf file. */ - itadmin_tool_log_1(job, DK3_LL_PROGRESS, 83); - if(!itadmin_dhcpd_conf_output(job)) { $? "! dhcpd.conf" - success = 0; - } - } - /* - Network documentation - */ - /* PROGRESS: Writing netdocu.tex file. */ - itadmin_tool_log_1(job, DK3_LL_PROGRESS, 84); - if(!itadmin_netdocu(job)) { $? "! netdocu output" - success = 0; - } - } - if(itadmin_job_do_licenses(job)) { - /* - Write license report. - */ - /* PROGRESS: Writing licenses.tex file. */ - itadmin_tool_log_1(job, DK3_LL_PROGRESS, 85); - if(!itadmin_license_report(job)) { $? "! license report" - success = 0; - } - } - } - /* PROGRESS: Finished writing output. */ - itadmin_tool_log_1(job, DK3_LL_PROGRESS, 86); - } - } - if(success) { - job->exval = 0; - } else { $? "! no success" - } -} - - - -/** Run program or print help/license/version. - @param job Job structure. -*/ -static -void -itadmin_run_or_help(itadmin_job *job) -{ - $? "+ itadmin_run_or_help" - if((job->cmd) & (~(ITADMIN_CMD_CONFIG | ITADMIN_CMD_LICENSES))) { $? ". help" - job->exval = 0; - dk3sf_initialize_stdout(); - if((job->cmd) & ITADMIN_CMD_VERSION) { $? ". version" - itadmin_show_version(); - } - if((job->cmd) & ITADMIN_CMD_LICENSE_TERMS) { $? ". license" - itadmin_show_license(); - } - if((job->cmd) & ITADMIN_CMD_HELP) { $? ". help" - itadmin_show_help(job); - } - } else { $? ". run" - if(!((job->cmd) & (ITADMIN_CMD_CONFIG | ITADMIN_CMD_LICENSES))) { - job->cmd = (ITADMIN_CMD_CONFIG | ITADMIN_CMD_LICENSES); - } - itadmin_run(job); - } $? "- itadmin_run_or_help" -} - - - -/** Entry point of the program. - @param argc Number of command line arguments. - @param argv Command line arguments array. - @return 0 on success, any other value indicates an error. -*/ -DK3_MAIN -{ - itadmin_job job; /* Job structure. */ - dk3_app_t *app; /* Application structure. */ - dkChar const * const *msg; /* Localized message texts. */ - int exval = 1; /* Exit status code. */ - $!trace-init itadmin.deb - $? "+ main" -#if DK3_HAVE_TZSET - tzset(); -#endif - job.exval = 1; - app = dk3app_open_command( - argc, (dkChar const * const *)argv, itadmin_kw_noloc[0] - ); - if(app) { - msg = dk3app_messages(app,itadmin_kw_noloc[1],(dkChar const **)itadmin_kw); - if(msg) { - itadmin_job_init(&job, app, msg, itadmin_kw_noloc); - if(itadmin_job_up(&job)) { - if(itadmin_process_arguments(&job)) { - itadmin_run_or_help(&job); - } - } - itadmin_job_cleanup(&job); - } else { - /* - BUG: Should not happen as dk3app_messages() returns the default - string array if there is any error. - */ - } - dk3app_close(app); - } else { - /* ERROR: Memory */ - fprintf( - stderr, - "ERROR: Not enough memory\n" - ); - fflush(stderr); - } - exval = job.exval; - $? "- main %d", exval - $!trace-end - fflush(stdout); - exit(exval); return exval; -} - - - |