%% options copyright owner = Dirk Krause copyright year = 2012-2014 license = bsd %% module #include "dk3all.h" #include "itadmin.h" #if DK3_HAVE_MYSQL_MYSQL_H #include #endif $!trace-include #if DK3_HAVE_MYSQL_MYSQL_H /** Keywords used by this module. */ static char const *itadmin_mysql_c8_kw[] = { $!string-table # # 0: SQL instruction "select * from users" # select * from users # # 1: SQL instruction "select * from buildings" # select * from buildings # # 2: SQL instruction "select * from vlans" # select * from vlans # # 3: SQL instruction "select * from patches" # select * from patches # # 4: SQL instruction "select * from ddspeed" # select * from ddspeed # # 5: SQL instruction "select * from networks" # select * from networks # # 6: SQL instruction "select * from netgroups" # select * from netgroups # # 7: SQL instruction "select * from ngdeps" # select * from ngdeps # # 8: SQL instruction "select * from dhcpclasses" # select * from dhcpclasses # # 9: SQL instruction "select * from dhcpgroups" # select * from dhcpgroups # # 10: SQL instruction "select * from dhcppools" # select * from dhcppools # # 11: SQL instruction "select * from computers" # select * from computers # # 12: SQL instruction "select * from aliases" # select * from aliases # # 13: SQL instruction "select * from dhcpoptions" # select * from dhcpoptions # # 14: SQL instruction "select * from swmanufacturers" # select * from swmanufacturers # # 15: SQL instruction "select * from swproducts" # select * from swproducts # # 16: SQL instruction "select * from licensetypes" # select * from licensetypes # # 17: SQL instruction "select * from licenses" # select * from licenses $!end }; /** Configuration section name "itadmin". */ static char itadmin_mysql_arg_0[] = { 'i', 't', 'a', 'd', 'm', 'i', 'n', '\0' }; /** Configuration section name "client". */ static char itadmin_mysql_gr_client[] = { 'c', 'l', 'i', 'e', 'n', 't', '\0' }; /** Argv array to initialize the library. */ static char *itadmin_mysql_argv[] = { itadmin_mysql_arg_0, NULL }; /** Groups (configuration file section) names. */ static char *itadmin_mysql_groups[] = { itadmin_mysql_gr_client, itadmin_mysql_arg_0, NULL }; /** Elements from users table. */ static char const * const itadmin_mysql_cn_users[] = { $!string-table us_s us_t us_sn us_fn us_em us_ko us_se $!end }; /** Number of elements in itadmin_mysql_cn_users. */ static size_t const itadmin_mysql_sz_cn_users = sizeof(itadmin_mysql_cn_users)/sizeof(DK3_PCCHAR) - 1; /** Elements from buildings table. */ static char const * const itadmin_mysql_cn_buildings[] = { $!string-table gb_s gb_l gb_a1 gb_a2 gb_a3 gb_a4 gb_plz gb_ort $!end }; /** Number of elements in itadmin_mysql_cn_buildings. */ static size_t const itadmin_mysql_sz_cn_buildings = sizeof(itadmin_mysql_cn_buildings)/sizeof(DK3_PCCHAR) - 1; /** Elements from speed table. */ static char const * const itadmin_mysql_cn_speed[] = { $!string-table sp_s sp_l $!end }; /** Number of elements in itadmin_mysql_cn_speed. */ static size_t const itadmin_mysql_sz_cn_speed = sizeof(itadmin_mysql_cn_speed)/sizeof(DK3_PCCHAR) - 1; /** Elements from vlan table. */ static char const * const itadmin_mysql_cn_vlan[] = { $!string-table vl_s vl_l $!end }; /** Number of elements in itadmin_mysql_cn_vlan. */ static size_t const itadmin_mysql_sz_cn_vlan = sizeof(itadmin_mysql_cn_vlan)/sizeof(DK3_PCCHAR) - 1; /** Elements from patch table. */ static char const * const itadmin_mysql_cn_patch[] = { $!string-table dd_n sp_s vl_s dd_p gb_s dd_r $!end }; /** Number of elements in itadmin_mysql_cn_patch. */ static size_t const itadmin_mysql_sz_cn_patch = sizeof(itadmin_mysql_cn_patch)/sizeof(DK3_PCCHAR) - 1; /** Elements from netgroup table. */ static char const * const itadmin_mysql_cn_netgroup[] = { $!string-table ng_s ng_l $!end }; /** Number of elements in itadmin_mysql_cn_netgroup. */ static size_t const itadmin_mysql_sz_cn_netgroup = sizeof(itadmin_mysql_cn_netgroup)/sizeof(DK3_PCCHAR) - 1; /** Elements from dhcp_option table. */ static char const * const itadmin_mysql_cn_dhcp_option[] = { $!string-table do_pk do_sc do_sn do_n do_v $!end }; /** Number of elements in itadmin_mysql_cn_dhcp_option. */ static size_t const itadmin_mysql_sz_cn_dhcp_option = sizeof(itadmin_mysql_cn_dhcp_option)/sizeof(DK3_PCCHAR) - 1; /** Elements from swman table. */ static char const * const itadmin_mysql_cn_swman[] = { $!string-table sm_s sm_l $!end }; /** Number of elements in itadmin_mysql_cn_swman. */ static size_t const itadmin_mysql_sz_cn_swman = sizeof(itadmin_mysql_cn_swman)/sizeof(DK3_PCCHAR) - 1; /** Elements from swprod table. */ static char const * const itadmin_mysql_cn_swprod[] = { $!string-table sw_s sw_l sm_s $!end }; /** Number of elements in itadmin_mysql_cn_swprod. */ static size_t const itadmin_mysql_sz_cn_swprod = sizeof(itadmin_mysql_cn_swprod)/sizeof(DK3_PCCHAR) - 1; /** Elements from lictype table. */ static char const * const itadmin_mysql_cn_lictype[] = { $!string-table lt_s lt_l lt_i $!end }; /** Number of elements in itadmin_mysql_cn_lictype. */ static size_t const itadmin_mysql_sz_cn_lictype = sizeof(itadmin_mysql_cn_lictype)/sizeof(DK3_PCCHAR) - 1; /** Elements from license table. */ static char const * const itadmin_mysql_cn_license[] = { $!string-table # 0 li_pk # 1 li_on # 2 sw_s # 3 us_s # 4 co_s # 5 lt_s # 6 li_no # 7 sr_s # 8 li_dd # 9 li_nd # 10 li_di # 11 li_ni # 12 $!end }; /** Number of elements in itadmin_mysql_cn_license. */ static size_t const itadmin_mysql_sz_cn_license = sizeof(itadmin_mysql_cn_license)/sizeof(DK3_PCCHAR) - 1; /** Elements from ngdep table. */ static char const * const itadmin_mysql_cn_ngdep[] = { $!string-table nd_p nd_c $!end }; /** Number of elements in itadmin_mysql_cn_ngdep. */ static size_t const itadmin_mysql_sz_cn_ngdep = sizeof(itadmin_mysql_cn_ngdep)/sizeof(DK3_PCCHAR) - 1; /** Elements from hosts table. */ static char const * const itadmin_mysql_cn_hosts[] = { $!string-table co_s us_s co_ip co_mc ng_s co_co dc_s dg_s dd_n gb_s co_r co_in co_sn co_dd co_ff co_gu co_hi co_ex co_nn co_na $!end }; /** Number of elements in itadmin_mysql_cn_hosts. */ static size_t const itadmin_mysql_sz_cn_hosts = sizeof(itadmin_mysql_cn_hosts)/sizeof(DK3_PCCHAR) - 1; /** Elements from network table. */ static char const * const itadmin_mysql_cn_network[] = { $!string-table nw_ip nw_ma nw_gw nw_bc vl_s $!end }; /** Number of elements in itadmin_mysql_cn_network. */ static size_t const itadmin_mysql_sz_cn_network = sizeof(itadmin_mysql_cn_network)/sizeof(DK3_PCCHAR) - 1; /** Elements from dhcp_class table. */ static char const * const itadmin_mysql_cn_dhcp_class[] = { $!string-table dc_s dc_d $!end }; /** Number of elements in itadmin_mysql_cn_dhcp_class. */ static size_t const itadmin_mysql_sz_cn_dhcp_class = sizeof(itadmin_mysql_cn_dhcp_class)/sizeof(DK3_PCCHAR) - 1; /** Elements from dhcp_group table. */ static char const * const itadmin_mysql_cn_dhcp_group[] = { $!string-table dg_s dg_l $!end }; /** Number of elements in itadmin_mysql_cn_dhcp_group. */ static size_t const itadmin_mysql_sz_cn_dhcp_group = sizeof(itadmin_mysql_cn_dhcp_group)/sizeof(DK3_PCCHAR) - 1; /** Elements from dhcp_pool table. */ static char const * const itadmin_mysql_cn_dhcp_pool[] = { $!string-table dp_st dp_en nw_ip dp_al dp_dn dc_s $!end }; /** Number of elements in itadmin_mysql_cn_dhcp_pool. */ static size_t const itadmin_mysql_sz_cn_dhcp_pool = sizeof(itadmin_mysql_cn_dhcp_pool)/sizeof(DK3_PCCHAR) - 1; /** Elements from alias table. */ static char const * const itadmin_mysql_cn_alias[] = { $!string-table al_s co_s $!end }; /** Number of elements in itadmin_mysql_cn_alias. */ static size_t const itadmin_mysql_sz_cn_alias = sizeof(itadmin_mysql_cn_alias)/sizeof(DK3_PCCHAR) - 1; #if VERSION_BEFORE_20120208 /** Obtain int value from string. @param job Job structure. @param ptr String to convert. @param lgt Length of string. @param def Default value to use if conversion fails. @return The value or the default value. */ static int itadmin_mysql_read_int(itadmin_job *job, char const *ptr, size_t lgt, int def) { int back; int i; $? "+ itadmin_mysql_read_int \"%s\"", TR_STR(ptr) back = def; if(ptr) { if(lgt) { if(sscanf(ptr, "%d", &i) == 1) { back = i; $? ". success" } } } $? "- itadmin_mysql_read_int %d", back return back; } #else /** Obtain int value from string. @param job Job structure. @param ptr String to convert. @param lgts Lengths of strings. @param cnind Column name indices. @param ind Current index to use. @param def Default value to use if conversion fails. @return The value or the default value. */ static int itadmin_mysql_read_int( itadmin_job *job, char const *ptr, unsigned long *lgts, size_t *cnind, size_t ind, int def ) { int back; int i; $? "+ itadmin_mysql_read_int \"%s\"", TR_STR(ptr) back = def; if(ptr) { if(cnind[ind] != 0xFFFFU) { if(lgts[cnind[ind]]) { if(sscanf(ptr, "%d", &i) == 1) { back = i; } } } } $? "- itadmin_mysql_read_int %d", back return back; } #endif /** Find column name indices. For column names not found the program sets the index to 0xFFFFU. @param job Job structure. @param cnind Destination array for indices. @param sz_cnind Size of @a cnind. @param nf Number of fields in query result. @param mr Query result. @param colnames Column names. */ static void itadmin_data_mysql_find_indices( itadmin_job *job, size_t *cnind, size_t sz_cnind, size_t nf, MYSQL_RES *mr, char const * const *colnames ) { MYSQL_FIELD *field; size_t i; int ai; for(i = 0; i < sz_cnind; i++) { cnind[i] = 0xFFFFU; } for(i = 0; i < nf; i++) { field = mysql_fetch_field_direct(mr, i); if(field) { if(field->name) { ai = dk3str_c8_array_index(colnames, field->name, 0); if(ai >= 0) { if(((size_t)ai) < sz_cnind) { cnind[(size_t)ai] = i; } } } } } } /** Set value pointers. @param job Job structure. @param val Value pointers array. @param cnind Index array. @param sz_cnind Size of @a val and @a cnind. @param nf Number of fields in @a mrow. @param mrow One result row. @param lgts Array of string lengths for row. */ static void itadmin_data_mysql_set_pointers( itadmin_job *job, char const * *val, size_t *cnind, size_t sz_cnind, size_t nf, MYSQL_ROW mrow, unsigned long *lgts ) { size_t i; size_t j; for(i = 0; i < sz_cnind; i++) { val[i] = NULL; if(cnind[i] != 0xFFFFU) { j = cnind[i]; if(j < nf) { if(lgts[j]) { if(mrow[j]) { val[i] = mrow[j]; } } } } } } /** Read aliases table. @param job Job structure. @return 1 on success, 0 on error. */ static int itadmin_data_mysql_alias(itadmin_job *job) { MYSQL_RES *mr; /* Results set. */ MYSQL_ROW mrow; /* One result row. */ char const *val[sizeof(itadmin_mysql_cn_alias)/sizeof(DK3_PCCHAR) - 1]; size_t cnind[sizeof(itadmin_mysql_cn_alias)/sizeof(DK3_PCCHAR) - 1]; unsigned long *lgts; /* Field lengths. */ unsigned int nf; /* Number of fields in result. */ int res; /* Query result. */ int back = 0; $? "+ itadmin_data_mysql_alias" res = mysql_query((MYSQL *)(job->dbptr), itadmin_mysql_c8_kw[12]); if(0 == res) { mr = mysql_use_result((MYSQL *)(job->dbptr)); if(mr) { nf = mysql_num_fields(mr); itadmin_data_mysql_find_indices( job, cnind, itadmin_mysql_sz_cn_alias, nf, mr, itadmin_mysql_cn_alias ); back = 1; do { mrow = mysql_fetch_row(mr); if(mrow) { lgts = mysql_fetch_lengths(mr); if(lgts) { itadmin_data_mysql_set_pointers( job, val, cnind, itadmin_mysql_sz_cn_alias, nf, mrow, lgts ); res = itadmin_register_alias( job, val[0], val[1] ); if(!(res)) { back = 0; } } else { back = 0; } } } while(mrow); mysql_free_result(mr); } else { /* ERROR: Failed to obtain results list */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 141); } } else { /* ERROR: Query failed! */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 142); } $? "- itadmin_data_mysql_alias %d", back return back; } /** Read DHCP pool table. @param job Job structure. @return 1 on success, 0 on error. */ static int itadmin_data_mysql_dhcp_pool(itadmin_job *job) { MYSQL_RES *mr; /* Results set. */ MYSQL_ROW mrow; /* One result row. */ char const *val[sizeof(itadmin_mysql_cn_dhcp_pool)/sizeof(DK3_PCCHAR) - 1]; size_t cnind[sizeof(itadmin_mysql_cn_dhcp_pool)/sizeof(DK3_PCCHAR) - 1]; unsigned long *lgts; /* Field lengths. */ unsigned int nf; /* Number of fields in result. */ int res; /* Query result. */ int back = 0; $? "+ itadmin_data_mysql_dhcp_pool" res = mysql_query((MYSQL *)(job->dbptr), itadmin_mysql_c8_kw[10]); if(0 == res) { mr = mysql_use_result((MYSQL *)(job->dbptr)); if(mr) { nf = mysql_num_fields(mr); itadmin_data_mysql_find_indices( job, cnind, itadmin_mysql_sz_cn_dhcp_pool, nf, mr, itadmin_mysql_cn_dhcp_pool ); back = 1; do { mrow = mysql_fetch_row(mr); if(mrow) { lgts = mysql_fetch_lengths(mr); if(lgts) { itadmin_data_mysql_set_pointers( job, val, cnind, itadmin_mysql_sz_cn_dhcp_pool, nf, mrow, lgts ); res = itadmin_register_dhcp_pool( job, val[0], val[1], val[2], #if VERSION_BEFORE_20120208 itadmin_mysql_read_int(job, val[3], lgts[cnind[3]], 0), itadmin_mysql_read_int(job, val[4], lgts[cnind[4]], 0), #else itadmin_mysql_read_int(job, val[3], lgts, cnind, 3, 0), itadmin_mysql_read_int(job, val[4], lgts, cnind, 4, 0), #endif val[5] ); if(!(res)) { back = 0; } } else { back = 0; } } } while(mrow); mysql_free_result(mr); } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 141); } } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 142); } $? "- itadmin_data_mysql_dhcp_pool %d", back return back; } /** Read DHCP group table. @param job Job structure. @return 1 on success, 0 on error. */ static int itadmin_data_mysql_dhcp_group(itadmin_job *job) { MYSQL_RES *mr; /* Results set. */ MYSQL_ROW mrow; /* One result row. */ char const *val[sizeof(itadmin_mysql_cn_dhcp_group)/sizeof(DK3_PCCHAR) - 1]; size_t cnind[sizeof(itadmin_mysql_cn_dhcp_group)/sizeof(DK3_PCCHAR) - 1]; unsigned long *lgts; /* Field lengths. */ unsigned int nf; /* Number of fields in result. */ int res; /* Query result. */ int back = 0; $? "+ itadmin_data_mysql_dhcp_group" res = mysql_query((MYSQL *)(job->dbptr), itadmin_mysql_c8_kw[9]); if(0 == res) { mr = mysql_use_result((MYSQL *)(job->dbptr)); if(mr) { nf = mysql_num_fields(mr); itadmin_data_mysql_find_indices( job, cnind, itadmin_mysql_sz_cn_dhcp_group, nf, mr, itadmin_mysql_cn_dhcp_group ); back = 1; do { mrow = mysql_fetch_row(mr); if(mrow) { lgts = mysql_fetch_lengths(mr); if(lgts) { itadmin_data_mysql_set_pointers( job, val, cnind, itadmin_mysql_sz_cn_dhcp_group, nf, mrow, lgts ); res = itadmin_register_dhcp_group(job, val[0], val[1]); if(!(res)) { back = 0; } } else { back = 0; } } } while(mrow); mysql_free_result(mr); } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 141); } } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 142); } $? "- itadmin_data_mysql_dhcp_group %d", back return back; } /** Read DHCP class table. @param job Job structure. @return 1 on success, 0 on error. */ static int itadmin_data_mysql_dhcp_class(itadmin_job *job) { MYSQL_RES *mr; /* Results set. */ MYSQL_ROW mrow; /* One result row. */ char const *val[sizeof(itadmin_mysql_cn_dhcp_class)/sizeof(DK3_PCCHAR) - 1]; size_t cnind[sizeof(itadmin_mysql_cn_dhcp_class)/sizeof(DK3_PCCHAR) - 1]; unsigned long *lgts; /* Field lengths. */ unsigned int nf; /* Number of fields in result. */ int res; /* Query result. */ int back = 0; $? "+ itadmin_data_mysql_dhcp_class" res = mysql_query((MYSQL *)(job->dbptr), itadmin_mysql_c8_kw[8]); if(0 == res) { mr = mysql_use_result((MYSQL *)(job->dbptr)); if(mr) { nf = mysql_num_fields(mr); itadmin_data_mysql_find_indices( job, cnind, itadmin_mysql_sz_cn_dhcp_class, nf, mr, itadmin_mysql_cn_dhcp_class ); back = 1; do { mrow = mysql_fetch_row(mr); if(mrow) { lgts = mysql_fetch_lengths(mr); if(lgts) { itadmin_data_mysql_set_pointers( job, val, cnind, itadmin_mysql_sz_cn_dhcp_class, nf, mrow, lgts ); res = itadmin_register_dhcp_class(job, val[0], val[1]); if(!(res)) { back = 0; } } else { back = 0; } } } while(mrow); mysql_free_result(mr); } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 141); } } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 142); } $? "- itadmin_data_mysql_dhcp_class %d", back return back; } /** Read networks table. @param job Job structure. @return 1 on success, 0 on error. */ static int itadmin_data_mysql_network(itadmin_job *job) { MYSQL_RES *mr; /* Results set. */ MYSQL_ROW mrow; /* One result row. */ char const *val[sizeof(itadmin_mysql_cn_network)/sizeof(DK3_PCCHAR) - 1]; size_t cnind[sizeof(itadmin_mysql_cn_network)/sizeof(DK3_PCCHAR) - 1]; unsigned long *lgts; /* Field lengths. */ unsigned int nf; /* Number of fields in result. */ int res; /* Query result. */ int back = 0; $? "+ itadmin_data_mysql_network" res = mysql_query((MYSQL *)(job->dbptr), itadmin_mysql_c8_kw[5]); if(0 == res) { mr = mysql_use_result((MYSQL *)(job->dbptr)); if(mr) { nf = mysql_num_fields(mr); itadmin_data_mysql_find_indices( job, cnind, itadmin_mysql_sz_cn_network, nf, mr, itadmin_mysql_cn_network ); back = 1; do { mrow = mysql_fetch_row(mr); if(mrow) { lgts = mysql_fetch_lengths(mr); if(lgts) { itadmin_data_mysql_set_pointers( job, val, cnind, itadmin_mysql_sz_cn_network, nf, mrow, lgts ); res = itadmin_register_network( job, val[0], val[1], val[2], val[3], val[4] ); if(!(res)) { back = 0; } } else { back = 0; } } } while(mrow); mysql_free_result(mr); } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 141); } } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 142); } $? "- itadmin_data_mysql_network %d", back return back; } /** Read hosts table. @param job Job structure. @return 1 on success, 0 on error. */ static int itadmin_data_mysql_hosts(itadmin_job *job) { itadmin_date expi; /* Expiration date for host entry. */ MYSQL_RES *mr; /* Results set. */ MYSQL_ROW mrow; /* One result row. */ char const *val[sizeof(itadmin_mysql_cn_hosts)/sizeof(DK3_PCCHAR) - 1]; size_t cnind[sizeof(itadmin_mysql_cn_hosts)/sizeof(DK3_PCCHAR) - 1]; unsigned long *lgts; /* Field lengths. */ unsigned int nf; /* Number of fields in result. */ int res; /* Query result. */ int hexpi; /* Flag: Have expiration date. */ int flag_first; /* Flag: Write FQDN to /etc/hosts first. */ int flag_guest; /* Flag: Guest computer. */ int flag_no_net_docu; /* Flag: Skip host in docu. */ int flag_no_arpwatch; /* Flag: Skip host for arpwatch. */ int back = 0; $? "+ itadmin_data_mysql_hosts" res = mysql_query((MYSQL *)(job->dbptr), itadmin_mysql_c8_kw[11]); if(0 == res) { mr = mysql_use_result((MYSQL *)(job->dbptr)); if(mr) { nf = mysql_num_fields(mr); itadmin_data_mysql_find_indices( job, cnind, itadmin_mysql_sz_cn_hosts, nf, mr, itadmin_mysql_cn_hosts ); back = 1; do { mrow = mysql_fetch_row(mr); if(mrow) { $? ". host to handle" lgts = mysql_fetch_lengths(mr); if(lgts) { $? ". lgts" itadmin_data_mysql_set_pointers( job, val, cnind, itadmin_mysql_sz_cn_hosts, nf, mrow, lgts ); flag_first = itadmin_mysql_read_int(job, val[14], lgts, cnind, 14, 0); flag_guest = itadmin_mysql_read_int(job, val[15], lgts, cnind, 15, 0); flag_no_net_docu = itadmin_mysql_read_int(job, val[18], lgts, cnind, 18, 0); flag_no_arpwatch = itadmin_mysql_read_int(job, val[19], lgts, cnind, 19, 0); itadmin_mem_date_init(&expi); hexpi = 0; if(val[17]) { $? ". date string set" if(cnind[17] != 0xFFFFU) { $? ". index found" if(lgts[cnind[17]]) { $? ". length ok" if(itadmin_tool_convert_date(job, &expi, val[17])) { hexpi = 1; $? ". date conversion ok" } else { $? "! date conversion failed" } } else { $? "! length" } } else { $? "! no index found" } } else { $? ". no date string" } $? ". going to register hosts" res = itadmin_register_host( job, val[0], val[1], val[2], val[3], val[4], val[5], val[6], val[7], val[8], val[9], val[10], val[11], val[12], val[13], flag_first, flag_guest, val[16], ((hexpi) ? &expi : NULL), flag_no_net_docu, flag_no_arpwatch ); $? ". host registration done" if(!(res)) { back = 0; } } else { $? "! lgts" back = 0; } $? ". host finished" } } while(mrow); mysql_free_result(mr); } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 141); } } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 142); } $? "- itadmin_data_mysql_hosts %d", back return back; } /** Read ngdep table. @param job Job structure. @return 1 on success, 0 on error. */ static int itadmin_data_mysql_ngdep(itadmin_job *job) { MYSQL_RES *mr; /* Results set. */ MYSQL_ROW mrow; /* One result row. */ char const *val[sizeof(itadmin_mysql_cn_ngdep)/sizeof(DK3_PCCHAR) - 1]; size_t cnind[sizeof(itadmin_mysql_cn_ngdep)/sizeof(DK3_PCCHAR) - 1]; unsigned long *lgts; /* Field lengths. */ unsigned int nf; /* Number of fields in result. */ int res; /* Query result. */ int back = 0; $? "+ itadmin_data_mysql_ngdep" res = mysql_query((MYSQL *)(job->dbptr), itadmin_mysql_c8_kw[7]); if(0 == res) { mr = mysql_use_result((MYSQL *)(job->dbptr)); if(mr) { nf = mysql_num_fields(mr); itadmin_data_mysql_find_indices( job, cnind, itadmin_mysql_sz_cn_ngdep, nf, mr, itadmin_mysql_cn_ngdep ); back = 1; do { mrow = mysql_fetch_row(mr); if(mrow) { lgts = mysql_fetch_lengths(mr); if(lgts) { itadmin_data_mysql_set_pointers( job, val, cnind, itadmin_mysql_sz_cn_ngdep, nf, mrow, lgts ); res = itadmin_register_ngdep(job, val[0], val[1]); if(!(res)) { back = 0; } } else { back = 0; } } } while(mrow); mysql_free_result(mr); } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 141); } } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 142); } $? "- itadmin_data_mysql_ngdep %d", back return back; } /** Read license types table. @param job Job structure. @return 1 on success, 0 on error. */ static int itadmin_data_mysql_license(itadmin_job *job) { char lnbuffer[128]; /* Line number buffer. */ MYSQL_RES *mr; /* Results set. */ MYSQL_ROW mrow; /* One result row. */ itadmin_date dd; /* Delivery date. */ itadmin_date di; /* Invoice date. */ char const *val[sizeof(itadmin_mysql_cn_license)/sizeof(DK3_PCCHAR) - 1]; size_t cnind[sizeof(itadmin_mysql_cn_license)/sizeof(DK3_PCCHAR) - 1]; unsigned long *lgts; /* Field lengths. */ unsigned long pk; /* Primary key. */ unsigned long lineno; /* Record number. */ unsigned int nf; /* Number of fields in result. */ int res; /* Query result. */ int hdd; /* Flag: Have delivery date. */ int hdi; /* Flag: Have invoice date. */ int back = 0; $? "+ itadmin_data_mysql_license" res = mysql_query((MYSQL *)(job->dbptr), itadmin_mysql_c8_kw[17]); if(0 == res) { mr = mysql_use_result((MYSQL *)(job->dbptr)); if(mr) { nf = mysql_num_fields(mr); itadmin_data_mysql_find_indices( job, cnind, itadmin_mysql_sz_cn_license, nf, mr, itadmin_mysql_cn_license ); back = 1; lineno = 0UL; do { mrow = mysql_fetch_row(mr); if(mrow) { lgts = mysql_fetch_lengths(mr); if(lgts) { itadmin_data_mysql_set_pointers( job, val, cnind, itadmin_mysql_sz_cn_license, nf, mrow, lgts ); /* res = itadmin_register_license( job, val[0], val[1], licno ); if(!(res)) { back = 0; } */ if(val[0]) { if(sscanf(val[0], "%lu", &pk) == 1) { hdd = hdi = 0; if(val[8]) { if(cnind[8] != 0xFFFFU) { if(lgts[cnind[8]]) { if(itadmin_tool_convert_date(job, &dd, val[8])) { hdd = 1; } } } } if(val[10]) { if(cnind[10] != 0xFFFFU) { if(lgts[cnind[10]]) { if(itadmin_tool_convert_date(job, &di, val[10])) { hdi = 1; } } } } res = itadmin_register_license( job, pk, val[1], /* li_on */ val[2], /* sw_s */ val[3], /* us_s */ val[4], /* co_s */ val[5], /* lt_s */ val[6], /* li_no */ val[7], /* sr_s */ ((hdd) ? &dd : NULL), val[9], /* li_nd */ ((hdi) ? &di : NULL), val[11] /* li_ni */ ); if(!(res)) { back = 0; } } else { /* ERROR: Primary key not numeric! */ sprintf(lnbuffer, "%lu", lineno); itadmin_tool_log_utf8_3(job, DK3_LL_ERROR, 143, 144, lnbuffer); } } else { /* ERROR: No primary key */ sprintf(lnbuffer, "%lu", lineno); itadmin_tool_log_utf8_3(job, DK3_LL_ERROR, 143, 145, lnbuffer); } } else { back = 0; } } lineno++; } while(mrow); mysql_free_result(mr); } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 141); } } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 142); } $? "- itadmin_data_mysql_license %d", back return back; } /** Read license types table. @param job Job structure. @return 1 on success, 0 on error. */ static int itadmin_data_mysql_lictype(itadmin_job *job) { MYSQL_RES *mr; /* Results set. */ MYSQL_ROW mrow; /* One result row. */ char const *val[sizeof(itadmin_mysql_cn_lictype)/sizeof(DK3_PCCHAR) - 1]; size_t cnind[sizeof(itadmin_mysql_cn_lictype)/sizeof(DK3_PCCHAR) - 1]; unsigned long *lgts; /* Field lengths. */ unsigned int nf; /* Number of fields in result. */ int res; /* Query result. */ int licno; /* Number of licenses. */ int back = 0; $? "+ itadmin_data_mysql_lictype" res = mysql_query((MYSQL *)(job->dbptr), itadmin_mysql_c8_kw[16]); if(0 == res) { mr = mysql_use_result((MYSQL *)(job->dbptr)); if(mr) { nf = mysql_num_fields(mr); itadmin_data_mysql_find_indices( job, cnind, itadmin_mysql_sz_cn_lictype, nf, mr, itadmin_mysql_cn_lictype ); back = 1; do { mrow = mysql_fetch_row(mr); if(mrow) { lgts = mysql_fetch_lengths(mr); if(lgts) { itadmin_data_mysql_set_pointers( job, val, cnind, itadmin_mysql_sz_cn_lictype, nf, mrow, lgts ); licno = 1; if(val[2]) { char const *s; int i; s = dk3str_c8_start(val[2], NULL); if(s) { if(sscanf(s, "%d", &i) == 1) { licno = i; } else { /* ERROR: Not a number! */ itadmin_tool_log_utf8_5( job, DK3_LL_ERROR, 146, 147, 148, val[0], s ); } } } res = itadmin_register_lictype( job, val[0], val[1], licno ); if(!(res)) { back = 0; } } else { back = 0; } } } while(mrow); mysql_free_result(mr); } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 141); } } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 142); } $? "- itadmin_data_mysql_lictype %d", back return back; } /** Read software products table. @param job Job structure. @return 1 on success, 0 on error. */ static int itadmin_data_mysql_swprod(itadmin_job *job) { MYSQL_RES *mr; /* Results set. */ MYSQL_ROW mrow; /* One result row. */ char const *val[sizeof(itadmin_mysql_cn_swprod)/sizeof(DK3_PCCHAR) - 1]; size_t cnind[sizeof(itadmin_mysql_cn_swprod)/sizeof(DK3_PCCHAR) - 1]; unsigned long *lgts; /* Field lengths. */ unsigned int nf; /* Number of fields in result. */ int res; /* Query result. */ int back = 0; $? "+ itadmin_data_mysql_swprod" res = mysql_query((MYSQL *)(job->dbptr), itadmin_mysql_c8_kw[15]); if(0 == res) { mr = mysql_use_result((MYSQL *)(job->dbptr)); if(mr) { nf = mysql_num_fields(mr); itadmin_data_mysql_find_indices( job, cnind, itadmin_mysql_sz_cn_swprod, nf, mr, itadmin_mysql_cn_swprod ); back = 1; do { mrow = mysql_fetch_row(mr); if(mrow) { lgts = mysql_fetch_lengths(mr); if(lgts) { itadmin_data_mysql_set_pointers( job, val, cnind, itadmin_mysql_sz_cn_swprod, nf, mrow, lgts ); res = itadmin_register_swprod( job, val[0], val[1], val[2] ); if(!(res)) { back = 0; } } else { back = 0; } } } while(mrow); mysql_free_result(mr); } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 141); } } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 142); } $? "- itadmin_data_mysql_swprod %d", back return back; } /** Read swman table. @param job Job structure. @return 1 on success, 0 on error. */ static int itadmin_data_mysql_swman(itadmin_job *job) { char lnbuffer[128]; /* Buffer for record number. */ unsigned long lineno; /* Record number. */ MYSQL_RES *mr; /* Results set. */ MYSQL_ROW mrow; /* One result row. */ char const *val[sizeof(itadmin_mysql_cn_swman)/sizeof(DK3_PCCHAR) - 1]; size_t cnind[sizeof(itadmin_mysql_cn_swman)/sizeof(DK3_PCCHAR) - 1]; unsigned long *lgts; /* Field lengths. */ #if 0 long pk; #endif unsigned int nf; /* Number of fields in result. */ int res; /* Query result. */ int back = 0; $? "+ itadmin_data_mysql_swman" res = mysql_query((MYSQL *)(job->dbptr), itadmin_mysql_c8_kw[14]); if(0 == res) { mr = mysql_use_result((MYSQL *)(job->dbptr)); if(mr) { nf = mysql_num_fields(mr); itadmin_data_mysql_find_indices( job, cnind, itadmin_mysql_sz_cn_swman, nf, mr, itadmin_mysql_cn_swman ); back = 1; lineno = 0UL; do { mrow = mysql_fetch_row(mr); if(mrow) { lgts = mysql_fetch_lengths(mr); if(lgts) { itadmin_data_mysql_set_pointers( job, val, cnind, itadmin_mysql_sz_cn_swman, nf, mrow, lgts ); res = 0; if(val[0]) { res = itadmin_register_swman( job, val[0], val[1] ); } else { /* ERROR: No pk pointer! */ sprintf(lnbuffer, "%lu", lineno); itadmin_tool_log_utf8_3(job, DK3_LL_ERROR, 149, 150, lnbuffer); } if(!(res)) { back = 0; } } else { back = 0; } } lineno++; } while(mrow); mysql_free_result(mr); } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 141); } } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 142); } $? "- itadmin_data_mysql_swman %d", back return back; } /** Read dhcp_option table. @param job Job structure. @return 1 on success, 0 on error. */ static int itadmin_data_mysql_dhcp_option(itadmin_job *job) { char lnbuffer[128]; /* Record number buffer. */ unsigned long lineno; /* Record number. */ MYSQL_RES *mr; /* Results set. */ MYSQL_ROW mrow; /* One result row. */ char const *val[sizeof(itadmin_mysql_cn_dhcp_option)/sizeof(DK3_PCCHAR) - 1]; size_t cnind[sizeof(itadmin_mysql_cn_dhcp_option)/sizeof(DK3_PCCHAR) - 1]; unsigned long *lgts; /* Field lengths. */ long pk; unsigned int nf; /* Number of fields in result. */ int res; /* Query result. */ int back = 0; $? "+ itadmin_data_mysql_dhcp_option" res = mysql_query((MYSQL *)(job->dbptr), itadmin_mysql_c8_kw[13]); if(0 == res) { mr = mysql_use_result((MYSQL *)(job->dbptr)); if(mr) { nf = mysql_num_fields(mr); itadmin_data_mysql_find_indices( job, cnind, itadmin_mysql_sz_cn_dhcp_option, nf, mr, itadmin_mysql_cn_dhcp_option ); back = 1; lineno = 0UL; do { mrow = mysql_fetch_row(mr); if(mrow) { lgts = mysql_fetch_lengths(mr); if(lgts) { itadmin_data_mysql_set_pointers( job, val, cnind, itadmin_mysql_sz_cn_dhcp_option, nf, mrow, lgts ); res = 0; if(val[0]) { if(sscanf(val[0], "%ld", &pk) == 1) { res = itadmin_register_dhcp_option( job, val[1], val[2], val[3], val[4], pk ); } else { /* ERROR: pk not a number! */ sprintf(lnbuffer, "%lu", lineno); itadmin_tool_log_utf8_3(job, DK3_LL_ERROR, 151, 152, lnbuffer); } } else { /* ERROR: No pk pointer! */ sprintf(lnbuffer, "%lu", lineno); itadmin_tool_log_utf8_3(job, DK3_LL_ERROR, 151, 153, lnbuffer); } if(!(res)) { back = 0; } } else { back = 0; } } lineno++; } while(mrow); mysql_free_result(mr); } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 141); } } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 142); } $? "- itadmin_data_mysql_dhcp_option %d", back return back; } /** Read netgroup table. @param job Job structure. @return 1 on success, 0 on error. */ static int itadmin_data_mysql_netgroup(itadmin_job *job) { MYSQL_RES *mr; /* Results set. */ MYSQL_ROW mrow; /* One result row. */ char const *val[sizeof(itadmin_mysql_cn_netgroup)/sizeof(DK3_PCCHAR) - 1]; size_t cnind[sizeof(itadmin_mysql_cn_netgroup)/sizeof(DK3_PCCHAR) - 1]; unsigned long *lgts; /* Field lengths. */ unsigned int nf; /* Number of fields in result. */ int res; /* Query result. */ int back = 0; $? "+ itadmin_data_mysql_netgroup" res = mysql_query((MYSQL *)(job->dbptr), itadmin_mysql_c8_kw[6]); if(0 == res) { mr = mysql_use_result((MYSQL *)(job->dbptr)); if(mr) { nf = mysql_num_fields(mr); itadmin_data_mysql_find_indices( job, cnind, itadmin_mysql_sz_cn_netgroup, nf, mr, itadmin_mysql_cn_netgroup ); back = 1; do { mrow = mysql_fetch_row(mr); if(mrow) { lgts = mysql_fetch_lengths(mr); if(lgts) { itadmin_data_mysql_set_pointers( job, val, cnind, itadmin_mysql_sz_cn_netgroup, nf, mrow, lgts ); res = itadmin_register_netgroup(job, val[0], val[1]); if(!(res)) { back = 0; } } else { back = 0; } } } while(mrow); mysql_free_result(mr); } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 141); } } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 142); } $? "- itadmin_data_mysql_netgroup %d", back return back; } /** Read patches table. @param job Job structure. @return 1 on success, 0 on error. */ static int itadmin_data_mysql_patch(itadmin_job *job) { MYSQL_RES *mr; /* Results set. */ MYSQL_ROW mrow; /* One result row. */ char const *val[sizeof(itadmin_mysql_cn_patch)/sizeof(DK3_PCCHAR) - 1]; size_t cnind[sizeof(itadmin_mysql_cn_patch)/sizeof(DK3_PCCHAR) - 1]; unsigned long *lgts; /* Field lengths. */ unsigned int nf; /* Number of fields in result. */ int res; /* Query result. */ int back = 0; $? "+ itadmin_data_mysql_patch" res = mysql_query((MYSQL *)(job->dbptr), itadmin_mysql_c8_kw[3]); if(0 == res) { mr = mysql_use_result((MYSQL *)(job->dbptr)); if(mr) { nf = mysql_num_fields(mr); itadmin_data_mysql_find_indices( job, cnind, itadmin_mysql_sz_cn_patch, nf, mr, itadmin_mysql_cn_patch ); back = 1; do { mrow = mysql_fetch_row(mr); if(mrow) { lgts = mysql_fetch_lengths(mr); if(lgts) { itadmin_data_mysql_set_pointers( job, val, cnind, itadmin_mysql_sz_cn_patch, nf, mrow, lgts ); res = itadmin_register_patch( job, val[0], val[1], val[2], val[3], val[4], val[5] ); if(!(res)) { back = 0; } } else { back = 0; } } } while(mrow); mysql_free_result(mr); } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 141); } } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 142); } $? "- itadmin_data_mysql_patch %d", back return back; } /** Read VLAN table. @param job Job structure. @return 1 on success, 0 on error. */ static int itadmin_data_mysql_vlan(itadmin_job *job) { MYSQL_RES *mr; /* Results set. */ MYSQL_ROW mrow; /* One result row. */ char const *val[sizeof(itadmin_mysql_cn_vlan)/sizeof(DK3_PCCHAR) - 1]; size_t cnind[sizeof(itadmin_mysql_cn_vlan)/sizeof(DK3_PCCHAR) - 1]; unsigned long *lgts; /* Field lengths. */ unsigned int nf; /* Number of fields in result. */ int res; /* Query result. */ int back = 0; $? "+ itadmin_data_mysql_vlan" res = mysql_query((MYSQL *)(job->dbptr), itadmin_mysql_c8_kw[2]); if(0 == res) { mr = mysql_use_result((MYSQL *)(job->dbptr)); if(mr) { nf = mysql_num_fields(mr); itadmin_data_mysql_find_indices( job, cnind, itadmin_mysql_sz_cn_vlan, nf, mr, itadmin_mysql_cn_vlan ); back = 1; do { mrow = mysql_fetch_row(mr); if(mrow) { lgts = mysql_fetch_lengths(mr); if(lgts) { itadmin_data_mysql_set_pointers( job, val, cnind, itadmin_mysql_sz_cn_vlan, nf, mrow, lgts ); res = itadmin_register_vlan(job, val[0], val[1]); if(!(res)) { back = 0; } } else { back = 0; } } } while(mrow); mysql_free_result(mr); } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 141); } } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 142); } $? "- itadmin_data_mysql_vlan %d", back return back; } /** Read speed table. @param job Job structure. @return 1 on success, 0 on error. */ static int itadmin_data_mysql_speed(itadmin_job *job) { MYSQL_RES *mr; /* Results set. */ MYSQL_ROW mrow; /* One result row. */ char const *val[sizeof(itadmin_mysql_cn_speed)/sizeof(DK3_PCCHAR) - 1]; size_t cnind[sizeof(itadmin_mysql_cn_speed)/sizeof(DK3_PCCHAR) - 1]; unsigned long *lgts; /* Field lengths. */ unsigned int nf; /* Number of fields in result. */ int res; /* Query result. */ int back = 0; $? "+ itadmin_data_mysql_speed" res = mysql_query((MYSQL *)(job->dbptr), itadmin_mysql_c8_kw[4]); if(0 == res) { mr = mysql_use_result((MYSQL *)(job->dbptr)); if(mr) { nf = mysql_num_fields(mr); itadmin_data_mysql_find_indices( job, cnind, itadmin_mysql_sz_cn_speed, nf, mr, itadmin_mysql_cn_speed ); back = 1; do { mrow = mysql_fetch_row(mr); if(mrow) { lgts = mysql_fetch_lengths(mr); if(lgts) { itadmin_data_mysql_set_pointers( job, val, cnind, itadmin_mysql_sz_cn_speed, nf, mrow, lgts ); res = itadmin_register_speed(job, val[0], val[1]); if(!(res)) { back = 0; } } else { back = 0; } } } while(mrow); mysql_free_result(mr); } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 141); } } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 142); } $? "- itadmin_data_mysql_speed %d", back return back; } /** Read buildings table. @param job Job structure. @return 1 on success, 0 on error. */ static int itadmin_data_mysql_buildings(itadmin_job *job) { MYSQL_RES *mr; /* Results set. */ MYSQL_ROW mrow; /* One result row. */ char const *val[sizeof(itadmin_mysql_cn_buildings)/sizeof(DK3_PCCHAR) - 1]; size_t cnind[sizeof(itadmin_mysql_cn_buildings)/sizeof(DK3_PCCHAR) - 1]; unsigned long *lgts; /* Field lengths. */ unsigned int nf; /* Number of fields in result. */ int res; /* Query result. */ int back = 0; $? "+ itadmin_data_mysql_buildings" res = mysql_query((MYSQL *)(job->dbptr), itadmin_mysql_c8_kw[1]); if(0 == res) { mr = mysql_use_result((MYSQL *)(job->dbptr)); if(mr) { nf = mysql_num_fields(mr); itadmin_data_mysql_find_indices( job, cnind, itadmin_mysql_sz_cn_buildings, nf, mr, itadmin_mysql_cn_buildings ); back = 1; do { mrow = mysql_fetch_row(mr); if(mrow) { lgts = mysql_fetch_lengths(mr); if(lgts) { itadmin_data_mysql_set_pointers( job, val, cnind, itadmin_mysql_sz_cn_buildings, nf, mrow, lgts ); $? ". building \"%s\"", TR_STR(val[0]) res = itadmin_register_building( job, val[0], val[1], val[2], val[3], val[4], val[5], val[6], val[7] ); if(!(res)) { back = 0; } } else { back = 0; $? "! lengths" } } } while(mrow); mysql_free_result(mr); } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 141); } } else { dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 142); } $? "- itadmin_data_mysql_buildings %d", back return back; } /** Read users table. @param job Job structure. @return 1 on success, 0 on error. */ static int itadmin_data_mysql_users(itadmin_job *job) { MYSQL_RES *mr; /* Results set. */ MYSQL_ROW mrow; /* One result row. */ char const *val[sizeof(itadmin_mysql_cn_users)/sizeof(DK3_PCCHAR) - 1]; size_t cnind[sizeof(itadmin_mysql_cn_users)/sizeof(DK3_PCCHAR) - 1]; unsigned long *lgts; /* Field lengths array. */ unsigned int nf; /* Number of fields in result. */ int res; /* Query result. */ int back = 0; $? "+ itadmin_data_mysql_users %s", TR_PTR(job->dbptr) res = mysql_query((MYSQL *)(job->dbptr), itadmin_mysql_c8_kw[0]); $? ". res = %d", res if(0 == res) { $? ". query ok" mr = mysql_use_result((MYSQL *)(job->dbptr)); if(mr) { $? ". have result" nf = mysql_num_fields(mr); $? ". nf = %lu", (unsigned long)nf itadmin_data_mysql_find_indices( job, cnind, itadmin_mysql_sz_cn_users, nf, mr, itadmin_mysql_cn_users ); back = 1; do { $? ". start of loop" mrow = mysql_fetch_row(mr); if(mrow) { $? ". found result row" lgts = mysql_fetch_lengths(mr); if(lgts) { $? ". lengths ok" itadmin_data_mysql_set_pointers( job, val, cnind, itadmin_mysql_sz_cn_users, nf, mrow, lgts ); res = itadmin_register_user( job, val[0], val[1], val[2], val[3], val[4], val[5], val[6] ); if(!(res)) { back = 0; } } else { $? "! lengths" back = 0; } } $? ". end of loop" } while(mrow); $? ". after loop" mysql_free_result(mr); } else { $? "! no result" dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 141); } } else { $? "! query failed %d", res dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 142); } $? "- itadmin_data_mysql_users %d", back return back; } /** Retrieve data from a MySQL database. @param job Job structure. @return 1 on success, 0 on error. */ static int itadmin_data_mysql_retrieve(itadmin_job *job) { int back = 1; $? "+ itadmin_data_mysql_retrieve" /* PROGRESS: Reading users table. */ itadmin_tool_log_1(job, DK3_LL_PROGRESS, 87); if(!itadmin_data_mysql_users(job)) { back = 0; } /* PROGRESS: Reading buildings table. */ itadmin_tool_log_1(job, DK3_LL_PROGRESS, 88); if(!itadmin_data_mysql_buildings(job)) { back = 0; } if(itadmin_job_do_network(job)) { /* PROGRESS: Reading connection speed type table. */ itadmin_tool_log_1(job, DK3_LL_PROGRESS, 89); if(!itadmin_data_mysql_speed(job)) { back = 0; } /* PROGRESS: Reading VLANS table. */ itadmin_tool_log_1(job, DK3_LL_PROGRESS, 90); if(!itadmin_data_mysql_vlan(job)) { back = 0; } /* PROGRESS: Reading ethernet connections table. */ itadmin_tool_log_1(job, DK3_LL_PROGRESS, 91); if(!itadmin_data_mysql_patch(job)) { back = 0; } /* PROGRESS: Reading netgroups table. */ itadmin_tool_log_1(job, DK3_LL_PROGRESS, 92); if(!itadmin_data_mysql_netgroup(job)) { back = 0; } /* PROGRESS: Reading netgroup dependencies. */ itadmin_tool_log_1(job, DK3_LL_PROGRESS, 93); if(!itadmin_data_mysql_ngdep(job)) { back = 0; } } if((itadmin_job_do_dhcp(job)) || (itadmin_job_do_licenses(job))) { /* PROGRESS: Reading networks. */ itadmin_tool_log_1(job, DK3_LL_PROGRESS, 94); if(!itadmin_data_mysql_network(job)) { back = 0; } } if(itadmin_job_do_network(job)) { if(itadmin_job_do_dhcp(job)) { /* PROGRESS: Reading DHCP classes. */ itadmin_tool_log_1(job, DK3_LL_PROGRESS, 95); if(!itadmin_data_mysql_dhcp_class(job)) { back = 0; } /* PROGRESS: Reading DHCP groups. */ itadmin_tool_log_1(job, DK3_LL_PROGRESS, 96); if(!itadmin_data_mysql_dhcp_group(job)) { back = 0; } } } if((itadmin_job_do_dhcp(job)) || (itadmin_job_do_licenses(job))) { /* PROGRESS: Reading DHCP pools. */ itadmin_tool_log_1(job, DK3_LL_PROGRESS, 97); if(!itadmin_data_mysql_dhcp_pool(job)) { back = 0; } } /* PROGRESS: Reading hosts. */ itadmin_tool_log_1(job, DK3_LL_PROGRESS, 98); if(!itadmin_data_mysql_hosts(job)) { back = 0; } /* PROGRESS: Reading host name aliases. */ itadmin_tool_log_1(job, DK3_LL_PROGRESS, 99); if(!itadmin_data_mysql_alias(job)) { back = 0; } if(itadmin_job_do_dhcp(job)) { /* PROGRESS: Reading DHCP options. */ itadmin_tool_log_1(job, DK3_LL_PROGRESS, 100); if(!itadmin_data_mysql_dhcp_option(job)) { back = 0; } } if(itadmin_job_do_licenses(job)) { /* PROGRESS: Reading software manufacturers. */ itadmin_tool_log_1(job, DK3_LL_PROGRESS, 101); if(!itadmin_data_mysql_swman(job)) { back = 0; } /* PROGRESS: Reading software products. */ itadmin_tool_log_1(job, DK3_LL_PROGRESS, 102); if(!itadmin_data_mysql_swprod(job)) { back = 0; } /* PROGRESS: Reading license types. */ itadmin_tool_log_1(job, DK3_LL_PROGRESS, 103); if(!itadmin_data_mysql_lictype(job)) { back = 0; } /* PROGRESS: Reading licenses. */ itadmin_tool_log_1(job, DK3_LL_PROGRESS, 104); if(!itadmin_data_mysql_license(job)) { back = 0; } } /* PROGRESS: Finished reading input. */ itadmin_tool_log_1(job, DK3_LL_PROGRESS, 105); $? "- itadmin_data_mysql_retrieve %d", back return back; } #endif int itadmin_data_mysql_read(itadmin_job *job) { #if DK3_HAVE_MYSQL_MYSQL_H char dbh[ITADMIN_CONFIG_LINE_SIZE]; /* Host name. */ char dbu[ITADMIN_CONFIG_LINE_SIZE]; /* User name. */ char dbp[ITADMIN_CONFIG_LINE_SIZE]; /* Password. */ char dbn[ITADMIN_CONFIG_LINE_SIZE]; /* DB name. */ MYSQL *re1; MYSQL *res; /* Same connection. */ int ie; /* INput encoding. */ int back = 0; $? "+ itadmin_data_mysql_read" ie = dk3app_get_encoding(job->app); if(0 == mysql_library_init(-1, itadmin_mysql_argv, itadmin_mysql_groups)) { re1 = mysql_init(NULL); if(re1) { if(dk3str_to_c8u_app(dbh,sizeof(dbh),job->dbhn,ie,job->app)) { if(dk3str_to_c8u_app(dbu,sizeof(dbu),job->dbus,ie,job->app)) { if(dk3str_to_c8u_app(dbp,sizeof(dbp),job->dbpw,ie,job->app)) { if(dk3str_to_c8u_app(dbn,sizeof(dbn),job->dbn,ie,job->app)) { $? ". h=\"%s\" u=\"%s\" p=\"%s\" n=\"%s\"", dbh, dbu, dbp, dbn res = mysql_real_connect(re1, dbh, dbu, dbp, dbn, 0, NULL, 0); if(res) { $? ". connected" job->dbptr = (void *)res; if(mysql_set_character_set(res, "utf8")) { $? "! utf8" /* WARNING: Failed to set encoding! */ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 154); } back = itadmin_data_mysql_retrieve(job); } else { $? "! failed to connect" /* ERROR: Failed to connect to database! */ itadmin_tool_log_utf8_5(job,DK3_LL_ERROR,155,156,157,dbn,dbh); } } else { $? "! database name" /* ERROR: Failed to convert database name! */ dk3app_log_3(job->app,DK3_LL_ERROR,job->msg,158,159,job->dbn); } } else { $? "! user password" /* ERROR: Failed to convert database user password! */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 160); } } else { $? "! user name" /* ERROR: Failed to convert database user name! */ dk3app_log_3(job->app, DK3_LL_ERROR, job->msg, 161, 162, job->dbus); } } else { $? "! db host name" /* ERROR: Failed to convert database host name! */ dk3app_log_3(job->app, DK3_LL_ERROR, job->msg, 163, 164, job->dbhn); } mysql_close(re1); } else { /* ERROR: Failed to initialize MySQL client object! */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 165); } mysql_library_end(); } else { /* ERROR: Failed to initialize MySQL library! */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 166); } $? "- itadmin_data_mysql_read %d", back #else int back = 0; /* ERROR: No MySQL support available! */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 167); #endif return back; }