static void erlang_parse_config(DICT_ERLANG *dict_erlang, const char *erlangcf) { CFG_PARSER *p; char *nodes; p = dict_erlang->parser = cfg_parser_alloc(erlangcf); nodes = cfg_get_str(p, "nodes", "", 0, 0); dict_erlang->nodes = argv_split(nodes, " ,\t\r\n"); myfree(nodes); dict_erlang->cookie = cfg_get_str(p, "cookie", "", 1, 0); dict_erlang->mod = cfg_get_str(p, "module", "", 1, 0); dict_erlang->fun = cfg_get_str(p, "function", "", 1, 0); dict_erlang->ctx = NULL; db_common_parse(&dict_erlang->dict, &dict_erlang->ctx, "%s", 1); db_common_parse_domain(p, dict_erlang->ctx); if (db_common_dict_partial(dict_erlang->ctx)) dict_erlang->dict.flags |= DICT_FLAG_PATTERN; else dict_erlang->dict.flags |= DICT_FLAG_FIXED; if (dict_erlang->dict.flags & DICT_FLAG_FOLD_FIX) dict_erlang->dict.fold_buf = vstring_alloc(10); }
void db_common_sql_build_query(VSTRING *query, CFG_PARSER *parser) { const char *myname = "db_common_sql_build_query"; char *table; char *select_field; char *where_field; char *additional_conditions; /* * Build "old style" query: "select %s from %s where %s" */ if ((table = cfg_get_str(parser, "table", NULL, 1, 0)) == 0) msg_fatal("%s: 'table' parameter not defined", myname); if ((select_field = cfg_get_str(parser, "select_field", NULL, 1, 0)) == 0) msg_fatal("%s: 'select_field' parameter not defined", myname); if ((where_field = cfg_get_str(parser, "where_field", NULL, 1, 0)) == 0) msg_fatal("%s: 'where_field' parameter not defined", myname); additional_conditions = cfg_get_str(parser, "additional_conditions", "", 0, 0); vstring_sprintf(query, "SELECT %s FROM %s WHERE %s='%%s' %s", select_field, table, where_field, additional_conditions); myfree(table); myfree(select_field); myfree(where_field); myfree(additional_conditions); }
void influxdb_put(const char *id, double value) { char url[1024]; cfg_root(root); const char *urlprefix = cfg_get_str(root, CFG("influxdb", "url"), NULL); const char *db = cfg_get_str(root, CFG("influxdb", "db"), NULL); const char *username = cfg_get_str(root, CFG("influxdb", "username"), NULL); const char *password = cfg_get_str(root, CFG("influxdb", "password"), NULL); if(urlprefix == NULL || db == NULL || username == NULL || password == NULL) return; snprintf(url, sizeof(url), "%s/db/%s/series?u=%s&p=%s", urlprefix, db, username, password); htsmsg_t *doc = htsmsg_create_list(); htsmsg_t *item = htsmsg_create_map(); htsmsg_add_str(item, "name", id); htsmsg_t *columns = htsmsg_create_list(); htsmsg_add_str(columns, NULL, "value"); htsmsg_add_msg(item, "columns", columns); htsmsg_t *points = htsmsg_create_list(); htsmsg_t *point = htsmsg_create_list(); htsmsg_add_dbl(point, NULL, value); htsmsg_add_msg(points, NULL, point); htsmsg_add_msg(item, "points", points); htsmsg_add_msg(doc, NULL, item); char *data = htsmsg_json_serialize_to_str(doc, 0); htsmsg_destroy(doc); size_t len = strlen(data); FILE *f = fmemopen(data, len, "r"); CURL *curl = curl_easy_init(); curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1L); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &libsvc_curl_waste_output); curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST"); curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L); curl_easy_setopt(curl, CURLOPT_READDATA, (void *)f); curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)len); CURLcode result = curl_easy_perform(curl); curl_easy_cleanup(curl); if(result) trace(LOG_ERR, "CURL Failed %s error %d", url, result); fclose(f); free(data); }
void load_app_locations() { char buff[256]; char *val; int i; for (i=0;i<NUM_APPS;i++) { sprintf(buff, "default_application_location_%s", app_names[i]); if (NULL != (val = cfg_get_str("ApplicationLocations",buff))) { if (val[0] == '/' || !strcmp(val, "not available")) { app_locations[i] = val; if (verbose) printf("%s - \'%s\' loaded\n", buff, val); } else { printf("Config file Error: %s == \'%s\' not allowed\n", buff, val); } } else if (verbose) printf("%s - default \'%s\' loaded\n", buff, app_locations[i]); } }
static int hexchat_pluginpref_get_str_real (hexchat_plugin *pl, const char *var, char *dest, int dest_len) { char *confname, *canon, *cfg, *unescaped_value; char buf[512]; canon = g_strdup (pl->name); canonalize_key (canon); confname = g_strdup_printf ("%s%caddon_%s.conf", get_xdir(), G_DIR_SEPARATOR, canon); g_free (canon); if (!g_file_get_contents (confname, &cfg, NULL, NULL)) { g_free (confname); return 0; } g_free (confname); if (!cfg_get_str (cfg, var, buf, sizeof(buf))) { g_free (cfg); return 0; } unescaped_value = g_strcompress (buf); g_strlcpy (dest, unescaped_value, dest_len); g_free (unescaped_value); g_free (cfg); return 1; }
static int dotdoozer_parse(job_t *j, htsmsg_t *target) { SHA_CTX ctx; uint8_t digest[20]; const char *buildenv = htsmsg_get_str(target, "buildenv"); if(buildenv == NULL) return 0; cfg_root(root); const char *source = cfg_get_str(root, CFG("buildenvs", buildenv, "source"), NULL); if(source == NULL) { snprintf(j->errmsg, sizeof(j->errmsg), "Don't know about buildenv: %s", buildenv); return DOOZER_PERMANENT_FAIL; } // We are going to build in a chroot j->projectdir_internal = "/project"; j->buildenv_source = tstrdup(source); // Compute SHA1 of source URL, this is the source ID SHA1((void *)source, strlen(source), digest); bin2hex(j->buildenv_source_id, sizeof(j->buildenv_source_id), digest, sizeof(digest)); // Compute SHA1 of source URL + all build deps, this is the modified ID SHA1_Init(&ctx); SHA1_Update(&ctx, source, strlen(source)); htsmsg_t *builddeps = htsmsg_get_list(target, "builddeps"); if(builddeps != NULL) { htsmsg_field_t *f; int count = 0; HTSMSG_FOREACH(f, builddeps) { if(f->hmf_type != HMF_STR) { snprintf(j->errmsg, sizeof(j->errmsg), "Not all builddeps are strings"); return DOOZER_PERMANENT_FAIL; } count++; } j->num_builddeps = count; const char **bds = talloc_zalloc(count * sizeof(char *)); count = 0; HTSMSG_FOREACH(f, builddeps) { bds[count++] = tstrdup(f->hmf_str); SHA1_Update(&ctx, f->hmf_str, strlen(f->hmf_str)); }
int cfg_get_int(FIL * fl, const char * section, const char * label, int def) { char buf[16]; if (cfg_get_str(fl, section, label, buf)) return atoi(buf); else return def; }
int cfg_get_int (char *cfg, char *var) { char str[128]; if (!cfg_get_str (cfg, var, str, sizeof (str))) return 0; return atoi (str); }
float cfg_get_float(char *sec, char *ent) { char *val; val = cfg_get_str(sec,ent); if (NULL == val) return -1; return atof(val); }
static void create_heaps(void) { cfg_root(root); const char *d; d = cfg_get_str(root, CFG("projectdir"), NULL); if(d == NULL) { trace(LOG_ERR, "No 'projectdir' configured, giving up"); exit(1); } project_heap_mgr = create_heap(d); d = cfg_get_str(root, CFG("buildenvdir"), NULL); if(d == NULL) { trace(LOG_ERR, "No 'buildenvdir' configured, giving up"); exit(1); } buildenv_heap_mgr = create_heap(d); }
int cfg_get_color (char *cfg, char *var, int *r, int *g, int *b) { char str[128]; if (!cfg_get_str (cfg, var, str, sizeof (str))) return 0; sscanf (str, "%04x %04x %04x", r, g, b); return 1; }
int CfgQueryStringExamples(int verbose, struct cfg *cfg, char *args[]) { unsigned char buf[1024], *row[10]; FILE *in; int ret; if ((in = fopen(args[0], "r")) == NULL) { PMNO(errno); return -1; } while ((ret = csv_row_fread(in, buf, 1024, row, 10, ',', CSV_QUOTES | CSV_TRIM)) > 0) { int success = atoi(row[0]); tcase_printf(verbose, "%s:\n", row[1]); cfg_clear(cfg); if (cfg_load_cgi_query_string(cfg, row[1], row[1] + tcslen(row[1])) == -1) { if (success) { ret = -1; AMSG(""); goto out; } } else if (!success) { ret = -1; AMSG("Supposed to fail"); goto out; } if (verbose) { iter_t iter; const tchar *name; tchar dst[512]; cfg_iterate(cfg, &iter); while ((name = cfg_next(cfg, &iter))) { if (cfg_get_str(cfg, dst, 512, NULL, name) == -1) { errno = ENOENT; PMNO(errno); return -1; } tcase_printf(verbose, "\t%s=%s\n", name, dst); } } } out: fclose(in); return ret; }
static char * ignore_read_next_entry (char *my_cfg, struct ignore *ignore) { char tbuf[1024]; /* Casting to char * done below just to satisfy compiler */ if (my_cfg) { my_cfg = cfg_get_str (my_cfg, "mask", tbuf, sizeof (tbuf)); if (!my_cfg) return NULL; ignore->mask = g_strdup (tbuf); } if (my_cfg) { my_cfg = cfg_get_str (my_cfg, "type", tbuf, sizeof (tbuf)); ignore->type = atoi (tbuf); } return my_cfg; }
static void get_uid_gid(void) { cfg_root(root); const char *user = cfg_get_str(root, CFG("user"), "nobody"); const char *group = cfg_get_str(root, CFG("group"), "nogroup"); const struct passwd *p = getpwnam(user); if(p == NULL) { trace(LOG_ERR, "Unable to find UID for user %s. Exiting", user); exit(1); } build_uid = p->pw_uid; const struct group *g = getgrnam(group); if(g == NULL) { trace(LOG_ERR, "Unable to find GID for group %s. Exiting", group); exit(1); } build_gid = g->gr_gid; }
/* load the common things */ void load_common() { char *val; int i; if (NULL != (val = cfg_get_str("Studio","Encode_Input_file"))) sprintf(enc_inputfile, val); else sprintf(enc_inputfile, "test.avi"); if (NULL != (val = cfg_get_str("Studio","Encode_Output_file"))) sprintf(enc_outputfile, val); else sprintf(enc_outputfile,"%s/output.mpg", getenv("HOME")); if (NULL != (val = cfg_get_str("Studio","Encode_Audio_file"))) sprintf(enc_audiofile, val); else sprintf(enc_audiofile, "/tmp/audio.mp2"); if (NULL != (val = cfg_get_str("Studio","Encode_Video_file"))) sprintf(enc_videofile, val); else sprintf(enc_videofile, "/tmp/video.m1v"); if (NULL != (val = cfg_get_str("Studio","Encode_Player_use"))) sprintf(selected_player, val); else sprintf(selected_player, "no player selected"); if (NULL != (val = cfg_get_str("Studio","Encode_Video_Preview"))) if ( 0 == strcmp(val,"yes")) use_yuvplay_pipe = 1; else use_yuvplay_pipe = 0; if (-1 != (i = cfg_get_int("Studio","Encoding_four_pel_motion_compensation"))) fourpelmotion = i; if (-1 != (i = cfg_get_int("Studio","Encoding_two_pel_motion_compensation"))) twopelmotion = i; if (NULL != (val = cfg_get_str("Studio","Encode_Bicubic_Scaling"))) if ( 0 == strcmp(val,"yes")) use_yuvplay_pipe = 1; else use_yuvplay_pipe = 0; if (-1 != (i = cfg_get_int("Studio","Encoding_save_on_exit"))) saveonexit = i; if (-1 != (i = cfg_get_int("Studio","Encoding_dist_enhanced_settings"))) enhanced_settings = i; }
static void sqlite_parse_config(DICT_SQLITE *dict_sqlite, const char *sqlitecf) { VSTRING *buf; /* * Parse the primary configuration parameters, and emulate the legacy * query interface if necessary. This simplifies migration from one SQL * database type to another. */ dict_sqlite->dbpath = cfg_get_str(dict_sqlite->parser, "dbpath", "", 1, 0); dict_sqlite->query = cfg_get_str(dict_sqlite->parser, "query", NULL, 0, 0); if (dict_sqlite->query == 0) { buf = vstring_alloc(100); db_common_sql_build_query(buf, dict_sqlite->parser); dict_sqlite->query = vstring_export(buf); } dict_sqlite->result_format = cfg_get_str(dict_sqlite->parser, "result_format", "%s", 1, 0); dict_sqlite->expansion_limit = cfg_get_int(dict_sqlite->parser, "expansion_limit", 0, 0, 0); /* * Parse the query / result templates and the optional domain filter. */ dict_sqlite->ctx = 0; (void) db_common_parse(&dict_sqlite->dict, &dict_sqlite->ctx, dict_sqlite->query, 1); (void) db_common_parse(0, &dict_sqlite->ctx, dict_sqlite->result_format, 0); db_common_parse_domain(dict_sqlite->parser, dict_sqlite->ctx); /* * Maps that use substring keys should only be used with the full input * key. */ if (db_common_dict_partial(dict_sqlite->ctx)) dict_sqlite->dict.flags |= DICT_FLAG_PATTERN; else dict_sqlite->dict.flags |= DICT_FLAG_FIXED; }
int hexchat_pluginpref_get_str (hexchat_plugin *pl, const char *var, char *dest) { int fh; int l; char confname[64]; char *canon; char *cfg; struct stat st; canon = g_strdup (pl->name); canonalize_key (canon); sprintf (confname, "addon_%s.conf", canon); g_free (canon); /* partly borrowed from palette.c */ fh = hexchat_open_file (confname, O_RDONLY, 0, 0); if (fh == -1) { return 0; } fstat (fh, &st); cfg = malloc (st.st_size + 1); if (!cfg) { close (fh); return 0; } cfg[0] = '\0'; l = read (fh, cfg, st.st_size); if (l >= 0) { cfg[l] = '\0'; } if (!cfg_get_str (cfg, var, dest, 512)) /* dest_len is the same as buffer size in set */ { free (cfg); close (fh); return 0; } free (cfg); close (fh); return 1; }
int cfg_get_int_with_result (char *cfg, char *var, int *result) { char str[128]; if (!cfg_get_str (cfg, var, str, sizeof (str))) { *result = 0; return 0; } *result = 1; return atoi (str); }
int load_config (void) { char *cfg, *sp; int res, val, i; g_assert(check_config_dir () == 0); if (!g_file_get_contents (default_file (), &cfg, NULL, NULL)) return -1; /* If the config is incomplete we have the default values loaded */ load_default_config(); i = 0; do { switch (vars[i].type) { case TYPE_STR: cfg_get_str (cfg, vars[i].name, (char *) &prefs + vars[i].offset, vars[i].len); break; case TYPE_BOOL: case TYPE_INT: val = cfg_get_int_with_result (cfg, vars[i].name, &res); if (res) *((int *) &prefs + vars[i].offset) = val; break; } i++; } while (vars[i].name); g_free (cfg); if (prefs.hex_gui_win_height < 138) prefs.hex_gui_win_height = 138; if (prefs.hex_gui_win_width < 106) prefs.hex_gui_win_width = 106; sp = strchr (prefs.hex_irc_user_name, ' '); if (sp) sp[0] = 0; /* spaces in username would break the login */ return 0; }
void load_script_data(void) { int i; char *val; if ( NULL != (val = cfg_get_str("Scriptdata","Script_name"))) sprintf(script_name, val); else sprintf(script_name,"script.sh"); if ( -1 != (i = cfg_get_int("Scriptdata","Script_distributed"))) if ( (i == 0) || (i == 1) ) script_use_distributed = i; if ( -1 != (i = cfg_get_int("Scriptdata","Script_MPEG1"))) if ( i >= 0 || i <= 8) script.mpeg1 = i;; if ( -1 != (i = cfg_get_int("Scriptdata","Script_MPEG2"))) if ( i >= 0 || i <= 8) script.mpeg2 = i;; if ( -1 != (i = cfg_get_int("Scriptdata","Script_GENERIC"))) if ( i >= 0 || i <= 8) script.generic = i;; if ( -1 != (i = cfg_get_int("Scriptdata","Script_VCD"))) if ( i >= 0 || i <= 8) script.vcd = i;; if ( -1 != (i = cfg_get_int("Scriptdata","Script_SVCD"))) if ( i >= 0 || i <= 8) script.svcd = i;; if ( -1 != (i = cfg_get_int("Scriptdata","Script_DVD"))) if ( i >= 0 || i <= 8) script.dvd = i;; if ( -1 != (i = cfg_get_int("Scriptdata","Script_YUV2LAV"))) if ( i >= 0 || i <= 8) script.yuv2lav = i;; }
static char * ignore_read_next_entry (char *my_cfg, struct ignore *ignore) { char tbuf[1024]; char mask[256]; /* Casting to char * done below just to satisfy compiler */ if (my_cfg) { my_cfg = cfg_get_str (my_cfg, "mask ", mask); ignore->mask = strdup (mask); } if (my_cfg) { my_cfg = cfg_get_str (my_cfg, "ctcp ", (char *) tbuf); ignore->ctcp = atoi ((char *) tbuf); } if (my_cfg) { my_cfg = cfg_get_str (my_cfg, "private ", (char *) tbuf); ignore->priv = atoi ((char *) tbuf); } if (my_cfg) { my_cfg = cfg_get_str (my_cfg, "channel ", (char *) tbuf); ignore->chan = atoi ((char *) tbuf); } if (my_cfg) { my_cfg = cfg_get_str (my_cfg, "notice ", (char *) tbuf); ignore->noti = atoi ((char *) tbuf); } if (my_cfg) { my_cfg = cfg_get_str (my_cfg, "invite ", (char *) tbuf); ignore->invi = atoi ((char *) tbuf); } if (my_cfg) { my_cfg = cfg_get_str (my_cfg, "unignore ", (char *) tbuf); ignore->unignore = atoi ((char *) tbuf); } return my_cfg; }
/**\brief 将一个section压入section栈*/ static AM_ErrorCode_t cfg_push_sec (AM_CFG_Parser_t *parser) { AM_CFG_SecStack_t *sec; const char *name; AM_TRY(cfg_get_str(parser, 0, &name)); sec = AM_MEM_ALLOC_TYPE0(AM_CFG_SecStack_t); if(!sec) return AM_CFG_ERR_NO_MEM; sec->name = AM_MEM_Strdup(name); if(!sec->name) return AM_CFG_ERR_NO_MEM; sec->bottom = parser->sec_stack; parser->sec_stack = sec; return AM_SUCCESS; }
void db_common_parse_domain(CFG_PARSER *parser, void *ctxPtr) { DB_COMMON_CTX *ctx = (DB_COMMON_CTX *) ctxPtr; char *domainlist; const char *myname = "db_common_parse_domain"; domainlist = cfg_get_str(parser, "domain", "", 0, 0); if (*domainlist) { ctx->domain = string_list_init(MATCH_FLAG_NONE, domainlist); if (ctx->domain == 0) /* * The "domain" optimization skips input keys that may in fact * have unwanted matches in the database, so failure to create * the match list is fatal. */ msg_fatal("%s: %s: domain match list creation using '%s' failed", myname, parser->name, domainlist); } myfree(domainlist); }
/* load the Machine names used for distributed encoding */ void load_machine_names() { char *val; int i; char test[50]; g_list_free (machine_names); machine_names = NULL; machine_names = g_list_append (machine_names, "localhost"); for ( i=1; i < 50 ; i++) { sprintf(test,"Encode_Machine_%i",i); if ( NULL != (val = cfg_get_str("Machinenames",test)) ) machine_names = g_list_append (machine_names, val); else break; } machine_names = g_list_first (machine_names); }
int initpath(char* path) { regex_t f; regmatch_t p[1]; // int i, j; int error; char erbuf[256]; char* regex = "(.*\/)"; char* dirname; char cpath[PATH_MAX]; int returnval = 0; error = regcomp(&f, regex, 0); if (error) { regerror(error, &f, erbuf, 256); error_log(ERROR, "Error in log_regex pattern: %s , error: %s", regex, erbuf); return -1; } error = regexec(&f, path, 1, p, 0); if (error) { return 0; } if (p[0].rm_eo != -1) { int len = p[0].rm_eo - p[0].rm_so; dirname = (char *) malloc((len + 1) * sizeof(char)); strncpy(dirname, path + p[0].rm_so, len); dirname[len] = 0; sprintf(cpath, "%s/%s", cfg_get_str("cache_store"), dirname); if ((returnval = mkpath(cpath, 0755)) != 0) { error_log(ERROR, "failed to create: %s", cpath); } free(dirname); } return 0; }
int check_file_exists(char* file, int size) { struct stat st; char fullpath[PATH_MAX]; char tmppath[PATH_MAX]; sprintf(fullpath, "%s/%s", cfg_get_str("cache_store"), file); sprintf(tmppath, "%s.tmp", fullpath); if (stat(fullpath, &st) == 0) { if (st.st_size < size) { error_log(WARN, "File already exists: %s, but size in db is: %d, and on disk: %d, redownload it.", fullpath, size, st.st_size); return 0; } else { error_log(WARN, "File already exists: %s", fullpath); return 1; } } if (stat(tmppath, &st) == 0) { error_log(WARN, "File download in progress, found tmp: %s", tmppath); return 1; } return 0; }
/* mysqlname_parse - parse mysql configuration file */ static MYSQL_NAME *mysqlname_parse(const char *mysqlcf) { const char *myname = "mysqlname_parse"; int i; char *hosts; MYSQL_NAME *name = (MYSQL_NAME *) mymalloc(sizeof(MYSQL_NAME)); ARGV *hosts_argv; /* parser */ name->parser = cfg_parser_alloc(mysqlcf); /* username */ name->username = cfg_get_str(name->parser, "user", "", 0, 0); /* password */ name->password = cfg_get_str(name->parser, "password", "", 0, 0); /* database name */ name->dbname = cfg_get_str(name->parser, "dbname", "", 1, 0); /* table name */ name->table = cfg_get_str(name->parser, "table", "", 1, 0); /* select field */ name->select_field = cfg_get_str(name->parser, "select_field", "", 1, 0); /* where field */ name->where_field = cfg_get_str(name->parser, "where_field", "", 1, 0); /* additional conditions */ name->additional_conditions = cfg_get_str(name->parser, "additional_conditions", "", 0, 0); /* mysql server hosts */ hosts = cfg_get_str(name->parser, "hosts", "", 0, 0); /* coo argv interface */ hosts_argv = argv_split(hosts, " ,\t\r\n"); if (hosts_argv->argc == 0) { /* no hosts specified, * default to 'localhost' */ if (msg_verbose) msg_info("%s: %s: no hostnames specified, defaulting to 'localhost'", myname, mysqlcf); argv_add(hosts_argv, "localhost", ARGV_END); argv_terminate(hosts_argv); } name->len_hosts = hosts_argv->argc; name->hostnames = (char **) mymalloc((sizeof(char *)) * name->len_hosts); i = 0; for (i = 0; hosts_argv->argv[i] != NULL; i++) { name->hostnames[i] = mystrdup(hosts_argv->argv[i]); if (msg_verbose) msg_info("%s: %s: adding host '%s' to list of mysql server hosts", myname, mysqlcf, name->hostnames[i]); } myfree(hosts); argv_free(hosts_argv); return name; }
int download(char* file) { CURL* curl; CURLcode result; struct data config; FILE* fp; char bufferError[CURL_ERROR_SIZE]; char url[URL_MAX]; char tmp[PATH_MAX]; int returnval = 0; int retries = 0; int success = 0; char fullpath[PATH_MAX]; config.trace_ascii = 1; while (!success && retries < upstream_count) { sprintf(url, "http://%s/%s", getupstream(), file); sprintf(tmp, "%s/%s.tmp", cfg_get_str("cache_store"), file); sprintf(fullpath, "%s/%s", cfg_get_str("cache_store"), file); curl = curl_easy_init(); if (curl) { fp = fopen(tmp, "wb"); curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, bufferError); curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_HEADER, 0); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL); curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, curl_progress_func); curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0); curl_easy_setopt(curl, CURLOPT_TIMEOUT, cfg_get_int("curl_timeout")); curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, cfg_get_int("curl_connect_timeout")); if (cfg_get_int("log_level") >= 3) { curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, curl_trace); curl_easy_setopt(curl, CURLOPT_DEBUGDATA, &config); curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); } result = curl_easy_perform(curl); curl_easy_cleanup(curl); fclose(fp); } if (result == CURLE_OK) { if (rename(tmp, fullpath) == 0) { download_ok(file, cfg_get_int("fe_id")); error_log(WARN, "Successfully downloaded: %s", fullpath); returnval = 0; success = 1; } else { remove(tmp); error_log(ERROR, "Rename failure: %s to %s", tmp, fullpath); returnval = -1; } } else { retries++; remove(tmp); if (curl_handle_error(result, bufferError)) { returnval = -1; error_log(WARN, "Curl error: %s", bufferError); } else { returnval = -1; success = 1; error_log(WARN, "Curl error: %s", bufferError); } } } return returnval; }
void load_config (void) { char *cfg, *sp, *buf; const char *username, *realname; int res, val, i; #ifdef WIN32 char out[256]; #endif check_prefs_dir (); username = g_get_user_name (); if (!username) username = "******"; /* We hid Real name from the Network List, so don't use the user's name unnoticeably */ /* realname = g_get_real_name (); if ((realname && realname[0] == 0) || !realname) realname = username; */ realname = "realname"; username = convert_with_fallback (username, "username"); realname = convert_with_fallback (realname, "realname"); memset (&prefs, 0, sizeof (struct hexchatprefs)); /* put in default values, anything left out is automatically zero */ /* BOOLEANS */ prefs.hex_away_show_once = 1; prefs.hex_away_track = 1; prefs.hex_dcc_auto_resume = 1; #ifndef WIN32 prefs.hex_dcc_fast_send = 1; #endif prefs.hex_gui_autoopen_chat = 1; prefs.hex_gui_autoopen_dialog = 1; prefs.hex_gui_autoopen_recv = 1; prefs.hex_gui_autoopen_send = 1; prefs.hex_gui_input_icon = 1; prefs.hex_gui_input_nick = 1; prefs.hex_gui_input_spell = 1; prefs.hex_gui_input_style = 1; prefs.hex_gui_join_dialog = 1; prefs.hex_gui_quit_dialog = 1; /* prefs.hex_gui_slist_skip = 1; */ prefs.hex_gui_tab_chans = 1; prefs.hex_gui_tab_dialogs = 1; prefs.hex_gui_tab_dots = 1; prefs.hex_gui_tab_icons = 1; prefs.hex_gui_tab_server = 1; prefs.hex_gui_tab_sort = 1; prefs.hex_gui_topicbar = 1; prefs.hex_gui_tray = 1; prefs.hex_gui_tray_blink = 1; prefs.hex_gui_ulist_count = 1; prefs.hex_gui_ulist_icons = 1; prefs.hex_gui_ulist_resizable = 1; prefs.hex_gui_ulist_style = 1; prefs.hex_gui_win_save = 1; prefs.hex_identd = 1; prefs.hex_input_flash_hilight = 1; prefs.hex_input_flash_priv = 1; prefs.hex_input_tray_hilight = 1; prefs.hex_input_tray_priv = 1; /* prefs.hex_irc_who_join = 1; prevent kicks and bans caused by overwhelming who'ing after reconnects */ prefs.hex_irc_whois_front = 1; prefs.hex_net_auto_reconnect = 1; prefs.hex_net_throttle = 1; prefs.hex_stamp_log = 1; prefs.hex_stamp_text = 1; prefs.hex_text_autocopy_text = 1; prefs.hex_text_indent = 1; prefs.hex_text_replay = 1; prefs.hex_text_search_follow = 1; prefs.hex_text_show_marker = 1; prefs.hex_text_show_sep = 1; prefs.hex_text_stripcolor_replay = 1; prefs.hex_text_stripcolor_topic = 1; prefs.hex_text_thin_sep = 1; prefs.hex_text_wordwrap = 1; prefs.hex_url_grabber = 1; /* NUMBERS */ prefs.hex_away_size_max = 300; prefs.hex_away_timeout = 60; prefs.hex_completion_amount = 5; prefs.hex_dcc_auto_recv = 1; /* browse mode */ prefs.hex_dcc_blocksize = 1024; prefs.hex_dcc_permissions = 0600; prefs.hex_dcc_stall_timeout = 60; prefs.hex_dcc_timeout = 180; prefs.hex_flood_ctcp_num = 5; prefs.hex_flood_ctcp_time = 30; prefs.hex_flood_msg_num = 5; /*FIXME*/ prefs.hex_flood_msg_time = 30; prefs.hex_gui_chanlist_maxusers = 9999; prefs.hex_gui_chanlist_minusers = 5; prefs.hex_gui_dialog_height = 256; prefs.hex_gui_dialog_width = 500; prefs.hex_gui_lagometer = 1; prefs.hex_gui_lang = 15; prefs.hex_gui_pane_left_size = 128; /* with treeview icons we need a bit bigger space */ prefs.hex_gui_pane_right_size = 100; prefs.hex_gui_pane_right_size_min = 80; prefs.hex_gui_tab_layout = 2; /* 0=Tabs 1=Reserved 2=Tree */ prefs.hex_gui_tab_newtofront = 2; prefs.hex_gui_tab_pos = 1; prefs.hex_gui_tab_trunc = 20; prefs.hex_gui_throttlemeter = 1; prefs.hex_gui_ulist_pos = 3; prefs.hex_gui_win_height = 400; prefs.hex_gui_win_width = 640; prefs.hex_input_balloon_time = 20; prefs.hex_irc_ban_type = 2; prefs.hex_irc_join_delay = 3; prefs.hex_net_reconnect_delay = 10; prefs.hex_notify_timeout = 15; prefs.hex_text_max_indent = 256; prefs.hex_text_max_lines = 500; prefs.hex_text_tint_blue = 195; prefs.hex_text_tint_green = 195; prefs.hex_text_tint_red = 195; prefs.hex_url_grabber_limit = 100; /* 0 means unlimited */ /* STRINGS */ strcpy (prefs.hex_away_reason, _("I'm busy")); strcpy (prefs.hex_completion_suffix, ","); #ifdef WIN32 if (portable_mode () || !get_reg_str ("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", "Personal", out, sizeof (out))) { snprintf (prefs.hex_dcc_dir, sizeof (prefs.hex_dcc_dir), "%s\\downloads", get_xdir ()); } else { snprintf (prefs.hex_dcc_dir, sizeof (prefs.hex_dcc_dir), "%s\\Downloads", out); } #else if (g_get_user_special_dir(G_USER_DIRECTORY_DOWNLOAD)) strcpy (prefs.hex_dcc_dir, g_get_user_special_dir(G_USER_DIRECTORY_DOWNLOAD)); else strcpy (prefs.hex_dcc_dir, g_build_filename (g_get_home_dir (), "Downloads", NULL)); #endif strcpy (prefs.hex_dnsprogram, "host"); strcpy (prefs.hex_gui_ulist_doubleclick, "QUERY %s"); strcpy (prefs.hex_input_command_char, "/"); strcpy (prefs.hex_irc_logmask, "%n-%c.log"); strcpy (prefs.hex_irc_nick1, username); strcpy (prefs.hex_irc_nick2, username); strcat (prefs.hex_irc_nick2, "_"); strcpy (prefs.hex_irc_nick3, username); strcat (prefs.hex_irc_nick3, "__"); strcpy (prefs.hex_irc_no_hilight, "NickServ,ChanServ,InfoServ,N,Q"); strcpy (prefs.hex_irc_part_reason, _("Leaving")); strcpy (prefs.hex_irc_quit_reason, prefs.hex_irc_part_reason); strcpy (prefs.hex_irc_real_name, realname); strcpy (prefs.hex_irc_user_name, username); snprintf (prefs.hex_sound_dir, sizeof (prefs.hex_sound_dir), "%s" G_DIR_SEPARATOR_S "sounds", get_xdir ()); strcpy (prefs.hex_stamp_log_format, "%b %d %H:%M:%S "); strcpy (prefs.hex_stamp_text_format, "[%H:%M:%S] "); #ifdef WIN32 if (find_font ("Consolas")) { strcpy (prefs.hex_text_font, "Consolas 10"); strcpy (prefs.hex_text_font_main, "Consolas 10"); } else { strcpy (prefs.hex_text_font, DEF_FONT); strcpy (prefs.hex_text_font_main, DEF_FONT); } #else strcpy (prefs.hex_text_font, DEF_FONT); strcpy (prefs.hex_text_font_main, DEF_FONT); #endif strcpy (prefs.hex_text_font_alternative, DEF_FONT_ALTER); strcpy (prefs.hex_text_spell_langs, g_getenv ("LC_ALL") ? g_getenv ("LC_ALL") : "en_US"); /* private variables */ prefs.local_ip = 0xffffffff; g_free ((char *)username); g_free ((char *)realname); if (g_file_get_contents (default_file (), &cfg, NULL, NULL)) { i = 0; do { switch (vars[i].type) { case TYPE_STR: cfg_get_str (cfg, vars[i].name, (char *) &prefs + vars[i].offset, vars[i].len); break; case TYPE_BOOL: case TYPE_INT: val = cfg_get_int_with_result (cfg, vars[i].name, &res); if (res) *((int *) &prefs + vars[i].offset) = val; break; } i++; } while (vars[i].name); g_free (cfg); } else { #ifndef WIN32 #ifndef __EMX__ /* OS/2 uses UID 0 all the time */ if (getuid () == 0) fe_message (_("* Running IRC as root is stupid! You should\n" " create a User Account and use that to login.\n"), FE_MSG_WARN|FE_MSG_WAIT); #endif #endif /* !WIN32 */ g_mkdir (prefs.hex_dcc_dir, 0700); g_mkdir (prefs.hex_dcc_completed_dir, 0700); buf = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "addons", get_xdir ()); g_mkdir (buf, 0700); g_free (buf); } if (prefs.hex_gui_win_height < 138) prefs.hex_gui_win_height = 138; if (prefs.hex_gui_win_width < 106) prefs.hex_gui_win_width = 106; sp = strchr (prefs.hex_irc_user_name, ' '); if (sp) sp[0] = 0; /* spaces in username would break the login */ }
static int http_github(http_connection_t *hc, const char *remain, void *opaque) { const char *pid = http_arg_get(&hc->hc_req_args, "project"); const char *key = http_arg_get(&hc->hc_req_args, "key"); if(pid == NULL) { trace(LOG_WARNING, "github: Missing 'project' in request"); return 400; } if(key == NULL) { trace(LOG_WARNING, "github: Missing 'key' in request"); return 400; } project_cfg(pc, pid); if(pc == NULL) { trace(LOG_DEBUG, "github: Project '%s' not configured", pid); return 404; } const char *mykey = cfg_get_str(pc, CFG("github", "key"), ""); if(strcmp(mykey, key)) { trace(LOG_WARNING, "github: Invalid key received (%s) for project %s", key, pid); return 403; } project_t *p = project_get(pid); const char *json = http_arg_get(&hc->hc_req_args, "payload"); if(json == NULL) { plog(p, "github", "github: Missing payload in request"); return 400; } char errbuf[256]; htsmsg_t *msg = htsmsg_json_deserialize(json, errbuf, sizeof(errbuf)); if(msg == NULL) { plog(p, "github", "github: Malformed JSON in github request -- %s", errbuf); return 400; } const char *ref = htsmsg_get_str(msg, "ref"); if(ref != NULL && !strncmp(ref, "refs/heads/", strlen("refs/heads/"))) ref += strlen("refs/heads/"); htsmsg_t *list = htsmsg_get_list(msg, "commits"); if(ref != NULL && list != NULL) { htsmsg_field_t *f; HTSMSG_FOREACH(f, list) { htsmsg_t *c = htsmsg_get_map_by_field(f); if(c == NULL) continue; const char *url = htsmsg_get_str(c, "url"); const char *msg = htsmsg_get_str(c, "message"); htsmsg_t *a = htsmsg_get_map(c, "author"); const char *author = a ? htsmsg_get_str(a, "name") : NULL; int added = count_list(c, "added"); int removed = count_list(c, "removed"); int modified = count_list(c, "modified"); int len; char buf[512]; char ctx[128]; url = url ? urlshorten(url) : NULL; snprintf(ctx, sizeof(ctx), "changes/%s", ref); len = snprintf(buf, sizeof(buf), "Commit in '"COLOR_BLUE"%s"COLOR_OFF"' by "COLOR_PURPLE"%s"COLOR_OFF" [", ref, author ?: "???"); if(added) len += snprintf(buf + len, sizeof(buf) - len, COLOR_GREEN "%d file%s added", added, added == 1 ? "" : "s"); if(modified) len += snprintf(buf + len, sizeof(buf) - len, COLOR_YELLOW "%s%d file%s modified", added ? ", " : "", modified, modified == 1 ? "" : "s"); if(removed) len += snprintf(buf + len, sizeof(buf) - len, COLOR_RED "%s%d file%s removed", added || modified ? ", " : "", removed, removed == 1 ? "" : "s"); snprintf(buf + len, sizeof(buf) - len, COLOR_OFF"]%s%s", url ? " " : "", url ?: ""); plog(p, ctx, "%s", buf); plog(p, ctx, "%s", msg); }