📄 config.c
字号:
} else if (!strcmp(option,TDS_STR_EMUL_LE)) { config->emul_little_endian = tds_config_boolean(value); } else if (!strcmp(option,TDS_STR_TEXTSZ)) { if (atoi(value)) config->text_size = atoi(value); } else if (!strcmp(option,TDS_STR_CHARSET)) { if (config->char_set) free(config->char_set); config->char_set = strdup(value); } else if (!strcmp(option,TDS_STR_CLCHARSET)) { if (config->client_charset) free(config->client_charset); config->client_charset = strdup(value); } else if (!strcmp(option,TDS_STR_LANGUAGE)) { if (config->language) free(config->language); config->language = strdup(value); } else if (!strcmp(option,TDS_STR_APPENDMODE)) { g_append_mode = tds_config_boolean(value); } else tdsdump_log(TDS_DBG_INFO1, "%L UNRECOGNIZED option '%s'...ignoring.\n", option); } } return found;}#ifdef NCBI_FTDSstatic int get_server_info(char *server, int entry_num, char *ip_addr, char *ip_port, char *tds_ver);#endifstatic void tds_read_interfaces(char *server, TDSCONFIGINFO *config){char ip_addr[255], ip_port[255], tds_ver[255]; /* read $SYBASE/interfaces */ /* This needs to be cleaned up */#ifdef NCBI_FTDS int entry_num; for(entry_num= 0; entry_num < NCBI_NUM_SERVERS; entry_num++) { get_server_info(server, entry_num+1, ip_addr, ip_port, tds_ver); if (strlen(ip_addr) == 0) break; if (config->ip_addr[entry_num]) free(config->ip_addr[entry_num]); /* FIXME check result, use strdup */ config->ip_addr[entry_num] = (char *) malloc(strlen(ip_addr)+1); strcpy(config->ip_addr[entry_num], ip_addr); if (atoi(ip_port)) { config->port[entry_num] = atoi(ip_port); } if (strlen(tds_ver)) { tds_config_verstr(tds_ver, config); /* if it doesn't match a known version do nothing with it */ } } while(entry_num < NCBI_NUM_SERVERS) { if (config->ip_addr[entry_num]) free(config->ip_addr[entry_num]); config->ip_addr[entry_num++]= NULL; }#else get_server_info(server, ip_addr, ip_port, tds_ver); if (strlen(ip_addr)) { if (config->ip_addr) free(config->ip_addr); /* FIXME check result, use strdup */ config->ip_addr = (char *) malloc(strlen(ip_addr)+1); strcpy(config->ip_addr, ip_addr); } if (atoi(ip_port)) { config->port = atoi(ip_port); } if (strlen(tds_ver)) { tds_config_verstr(tds_ver, config); /* if it doesn't match a known version do nothing with it */ } #endif}static void tds_config_login(TDSCONFIGINFO *config, TDSLOGIN *login){ if (login->server_name && strlen(login->server_name)) { if (config->server_name) free(config->server_name); config->server_name = strdup(login->server_name); } if (login->major_version || login->minor_version) { config->major_version = login->major_version; config->minor_version = login->minor_version; } if (login->language && strlen(login->language)) { if (config->language) free(config->language); config->language = strdup(login->language); } if (login->char_set && strlen(login->char_set)) { if (config->char_set) free(config->char_set); config->char_set = strdup(login->char_set); } if (login->host_name && strlen(login->host_name)) { if (config->host_name) free(config->host_name); config->host_name = strdup(login->host_name); /* DBSETLHOST and it's equivilants are commentary fields ** they don't affect config->ip_addr (the server) but they show ** up in an sp_who as the *clients* hostname. (bsb, 11/10) */ /* should work with IP (mlilback, 11/7/01) */ /* if (config->ip_addr) free(config->ip_addr); config->ip_addr = calloc(sizeof(char),18); lookup_host(config->host_name, NULL, config->ip_addr, NULL); */ } if (login->app_name && strlen(login->app_name)) { if (config->app_name) free(config->app_name); config->app_name = strdup(login->app_name); } if (login->user_name && strlen(login->user_name)) { if (config->user_name) free(config->user_name); config->user_name = strdup(login->user_name); } if (login->password && strlen(login->password)) { if (config->password) { /* for security reason clear memory */ memset(config->password,0,strlen(config->password)); free(config->password); } config->password = strdup(login->password); } if (login->library && strlen(login->library)) { if (config->library) free(config->library); config->library = strdup(login->library); } if (login->encrypted) { config->encrypted = 1; } if (login->suppress_language) { config->suppress_language = 1; } if (login->bulk_copy) { config->bulk_copy = 1; } if (login->block_size) { config->block_size = login->block_size; }#ifdef NCBI_FTDS else if(config->major_version >= 7) { config->block_size= 6*1024; }#endif if (login->port) {#ifdef NCBI_FTDS config->port[0] = login->port;#else config->port = login->port;#endif }}static void tds_config_env_dsquery(TDSCONFIGINFO *config){char *s; if ((s=getenv("TDSQUERY"))) { if (s && strlen(s)) { if (config->server_name) free(config->server_name); config->server_name = strdup(s); tdsdump_log(TDS_DBG_INFO1, "%L Setting 'server_name' to '%s' from $TDSQUERY.\n",s); } return; } if ((s=getenv("DSQUERY"))) { if (s && strlen(s)) { if (config->server_name) free(config->server_name); config->server_name = strdup(s); tdsdump_log(TDS_DBG_INFO1, "%L Setting 'server_name' to '%s' from $DSQUERY.\n",s); } }}static void tds_config_env_tdsdump(TDSCONFIGINFO *config){char *s;char path[255];pid_t pid=0; if ((s=getenv("TDSDUMP"))) { if (!strlen(s)) { pid = getpid(); sprintf(path,"/tmp/freetds.log.%d",pid); if (config->dump_file) free(config->dump_file); config->dump_file = strdup(path); } else { if (config->dump_file) free(config->dump_file); config->dump_file = strdup(s); } tdsdump_log(TDS_DBG_INFO1, "%L Setting 'dump_file' to '%s' from $TDSDUMP.\n",config->dump_file); }}static void tds_config_env_tdsport(TDSCONFIGINFO *config){char *s; if ((s=getenv("TDSPORT"))) {#ifdef NCBI_FTDS config->port[0]=atoi(s);#else config->port=atoi(s);#endif tdsdump_log(TDS_DBG_INFO1, "%L Setting 'port' to %s from $TDSPORT.\n",s); } return;}static void tds_config_env_tdsver(TDSCONFIGINFO *config){char *tdsver; if ((tdsver=getenv("TDSVER"))) { tds_config_verstr(tdsver, config); tdsdump_log(TDS_DBG_INFO1, "%L Setting 'tdsver' to %s from $TDSVER.\n",tdsver); } return;}/* TDSHOST env var, pkleef@openlinksw.com 01/21/02 */static void tds_config_env_tdshost(TDSCONFIGINFO *config){char *tdshost;char tmp[256]; if ((tdshost=getenv("TDSHOST"))) { lookup_host (tdshost, NULL, tmp, NULL);#ifdef NCBI_FTDS if (config->ip_addr[0]) free (config->ip_addr[0]); config->ip_addr[0] = strdup (tmp);#else if (config->ip_addr) free (config->ip_addr); config->ip_addr = strdup (tmp);#endif tdsdump_log(TDS_DBG_INFO1, "%L Setting 'ip_addr' to %s (%s) from $TDSHOST.\n",tmp, tdshost); } return;}static void tds_config_verstr(char *tdsver, TDSCONFIGINFO *config){ if (!strcmp(tdsver,"42") || !strcmp(tdsver,"4.2")) { config->major_version=4; config->minor_version=2; return; } else if (!strcmp(tdsver,"46") || !strcmp(tdsver,"4.6")) { config->major_version=4; config->minor_version=6; return; } else if (!strcmp(tdsver,"50") || !strcmp(tdsver,"5.0")) { config->major_version=5; config->minor_version=0; return; } else if (!strcmp(tdsver,"70") || !strcmp(tdsver,"7.0")) { config->major_version=7; config->minor_version=0; return; } else if (!strcmp(tdsver,"80") || !strcmp(tdsver,"8.0")) { config->major_version=8; config->minor_version=0; return; }}int set_interfaces_file_loc(char *interf){ if (strlen(interf)>=MAXPATH) return 0; strcpy(interf_file,interf); return 1; /* SUCCEED */}/* ============================== lookup_host() ============================== * * Def: Given a servername and port name or number, lookup the * hostname and service. The server ip will be stored in the * string 'servername' in dotted-decimal notation. The service port * number will be stored in string form in the 'port' parameter. * * If we can't determine both the IP address and port number then * 'ip' and 'port' will be set to empty strings. * * Ret: void * * =========================================================================== */static void lookup_host( const char *servername, /* (I) name of the server */ const char *portname, /* (I) name or number of the port */ char *ip, /* (O) dotted-decimal ip address of server */ char *port) /* (O) port number of the service */{ struct hostent *host = NULL; struct servent *service = NULL; int num = 0; unsigned int ip_addr=0; /* Storage for reentrant getaddrby* calls */ struct hostent result; char buffer[4096]; int h_errnop; /* Storage for reentrant getservbyname */ struct servent serv_result; /* Only call gethostbyname if servername is not an ip address. This call take a while and is useless for an ip address. mlilback 3/2/02 */ ip_addr = inet_addr(servername); if (ip_addr == INADDR_NONE) host = tds_gethostbyname_r(servername, &result, buffer, sizeof(buffer), &h_errnop); #ifndef NOREVERSELOOKUPS/* froy@singleentry.com 12/21/2000 */ if (host==NULL) { char addr [4]; int a0, a1, a2, a3; sscanf (servername, "%d.%d.%d.%d", &a0, &a1, &a2, &a3); addr [0] = a0; addr [1] = a1; addr [2] = a2; addr [3] = a3; host = tds_gethostbyaddr_r (addr, 4, AF_INET, &result, buffer, sizeof(buffer), &h_errnop); }/* end froy */ #endif if (!host) { /* if servername is ip, copy to ip. */ if (INADDR_NONE != ip_addr) strncpy(ip, servername, 17); else ip[0] = '\0'; } else { struct in_addr *ptr = (struct in_addr *) host->h_addr; strncpy(ip, inet_ntoa(*ptr), 17); } if (portname) {#ifdef NCBI_FTDS char* tail; num= (int)strtol(portname, &tail, 10); if((num == 0) || (tail != NULL && *tail != '\0')) { service = tds_getservbyname_r(portname, "tcp", &serv_result, buffer, sizeof(buffer)); if(service) num= ntohs(service->s_port); }#else service = tds_getservbyname_r(portname, "tcp", &serv_result, buffer, sizeof(buffer)); if (service==NULL) { num = atoi(portname);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -