/* * This file is part of GetHT * * See COPYING file for copyright, license and warranty details. * */ #include #include #include #include "getht.h" #include int loadconfig(char * getht_path, struct config * options) /* Loads variables from config file to extern and passed * variables. */ { FILE * config_file; char filepath[STR_MAX]; snprintf(filepath, STR_MAX, "%s/config.ini", getht_path); if((config_file = fopen(filepath,"r")) == NULL) { fprintf(stderr,"Cannot open file %s for reading.\n",filepath); return 1; } char parameter[80], option[80]; while(!feof(config_file)) { fscanf(config_file, "%s = %s", option, parameter); if(option[0] == '#'); /* ignore lines beginning with a hash */ else if(!strcmp(option, "savepath")) strncpy(options->save_path, parameter, STR_MAX); else if(!strcmp(option, "startup_check")) options->startup_check = atoi(parameter); else if(!strcmp(option, "toc_uri")) strncpy(options->issue_uri, parameter, STR_MAX); else if(!strcmp(option, "proxy_type")) { if(!strcmp(parameter, "http")) options->proxy.type = CURLPROXY_HTTP; else if(!strcmp(parameter, "socks4")) options->proxy.type = CURLPROXY_SOCKS4; else if(!strcmp(parameter, "socks5")) options->proxy.type = CURLPROXY_SOCKS5; else fprintf(stderr, "Proxy type %s not known, please use either http, socks4 or socks5\n", parameter); } else if(!strcmp(option, "proxy_address")) strncpy(options->proxy.address, parameter, STR_MAX); else if(!strcmp(option, "proxy_port")) options->proxy.port = (long) atoi(parameter); else if(!strcmp(option, "proxy_auth")) { if(!strcmp(parameter, "basic")) options->proxy.auth = CURLAUTH_BASIC; else if(!strcmp(parameter, "digest")) options->proxy.auth = CURLAUTH_DIGEST; else if(!strcmp(parameter, "ntlm")) options->proxy.auth = CURLAUTH_NTLM; else fprintf(stderr, "config.ini: Proxy authentication method %s not known, please use basic, digest or ntlm", parameter); } else if(!strcmp(option, "proxy_user")) strncpy(options->proxy.user, parameter, STR_MAX); else if(!strcmp(option, "proxy_pass")) strncpy(options->proxy.pass, parameter, STR_MAX); else fprintf(stderr, "config.ini: Option '%s' not recognised, ignoring\n", option); } fclose(config_file); return 0; } int writefreshconfig(char * getht_path, struct config * options) /* Write a new config file according to extern and passed variables. */ { FILE * config_file; char filepath[STR_MAX]; snprintf(filepath, STR_MAX, "%s/config.ini", getht_path); if((config_file = fopen(filepath,"w")) == NULL) { fprintf(stderr,"Cannot open file %s for writing.\n",filepath); return 1; } else fprintf(stdout,"Writing a fresh config file to %s.\n",filepath); if(options->save_path[0]) fprintf(config_file, "%s = %s\n", "savepath", options->save_path); if(options->startup_check) fprintf(config_file, "%s = %i\n", "startup_check", options->startup_check); if(options->issue_uri[0]) fprintf(config_file, "%s = %s\n", "toc_uri", options->issue_uri); if(options->proxy.type) { if(options->proxy.type == CURLPROXY_HTTP) fprintf(config_file, "%s = %s\n", "proxy_type", "http"); else if(options->proxy.type == CURLPROXY_SOCKS4) fprintf(config_file, "%s = %s\n", "proxy_type", "socks4"); else if(options->proxy.type == CURLPROXY_SOCKS5) fprintf(config_file, "%s = %s\n", "proxy_type", "socks5"); } if(options->proxy.address[0]) fprintf(config_file, "%s = %s\n", "proxy_address", options->proxy.address); if(options->proxy.port) fprintf(config_file, "%s = %li\n", "proxy_port", options->proxy.port); if(options->proxy.auth) { if(options->proxy.auth == CURLAUTH_BASIC) fprintf(config_file, "%s = %s\n", "proxy_auth", "basic"); else if(options->proxy.auth == CURLAUTH_DIGEST) fprintf(config_file, "%s = %s\n", "proxy_auth", "digest"); else if(options->proxy.auth == CURLAUTH_NTLM) fprintf(config_file, "%s = %s\n", "proxy_auth", "ntlm"); } if(options->proxy.user[0]) fprintf(config_file, "%s = %s\n", "proxy_user", options->proxy.user); if(options->proxy.pass[0]) fprintf(config_file, "%s = %s\n", "proxy_pass", options->proxy.pass); fclose(config_file); return 0; } int updateconfig(char * getht_path, struct config * options) /* Read existing config file, and rewrite any variables which differ * in memory. */ { FILE * config_file; char filepath[STR_MAX]; snprintf(filepath, STR_MAX, "%s/config.ini", getht_path); if((config_file = fopen(filepath,"rw")) == NULL) { fprintf(stderr,"Cannot open file %s for reading/writing.\n",filepath); return 1; } /* Not yet implemented */ fclose(config_file); return 1; }