static void lr_fastestmirrorcache_update(LrFastestMirrorCache *cache, gchar *url, gint64 ts, double connecttime) { if (!cache || !cache->keyfile || !url) return; GKeyFile *keyfile = cache->keyfile; g_key_file_set_int64(keyfile, url, CACHE_KEY_TS, ts); g_key_file_set_double(keyfile, url, CACHE_KEY_CONNECTTIME, connecttime); }
static gboolean update_counter (const gchar *counter_path, GHashTable *new_progresses /* (element-type filename gint32) */, GError **error) { g_autoptr(GFile) counter_file = g_file_new_for_path (counter_path); g_autoptr(GFile) parent = g_file_get_parent (counter_file); g_autoptr(GKeyFile) counter_keyfile = g_key_file_new (); GHashTableIter iter; gpointer key, value; g_autoptr(GError) local_error = NULL; /* Ensure that the directory and the key file are created */ if (!g_file_make_directory_with_parents (parent, NULL, &local_error)) { if (!g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_EXISTS)) { g_propagate_error (error, g_steal_pointer (&local_error)); return FALSE; } g_clear_error (&local_error); } if (!g_key_file_load_from_file (counter_keyfile, counter_path, G_KEY_FILE_NONE, &local_error)) { if (!g_error_matches (local_error, G_FILE_ERROR, G_FILE_ERROR_NOENT)) { g_propagate_error (error, g_steal_pointer (&local_error)); return FALSE; } g_clear_error (&local_error); } g_hash_table_iter_init (&iter, new_progresses); while (g_hash_table_iter_next (&iter, &key, &value)) g_key_file_set_int64 (counter_keyfile, key, "Progress", GPOINTER_TO_INT (value)); if (!g_key_file_save_to_file (counter_keyfile, counter_path, error)) return FALSE; return TRUE; }
gboolean lr_yum_repoconf_setopt(LrYumRepoConf *repoconf, GError **err, LrYumRepoConfOption option, ...) { GError *tmp_err = NULL; va_list arg; char *str; char **strv; long lnum; assert(!err || *err == NULL); if (!repoconf) { g_set_error(err, LR_REPOCONF_ERROR, LRE_BADFUNCARG, "No config specified"); return FALSE; } // Shortcuts LrYumRepoFile *repofile = repoconf_repofile(repoconf); GKeyFile *keyfile = repoconf_keyfile(repoconf); gchar *id = repoconf_id(repoconf); // Basic sanity checks if (!keyfile) { g_set_error(err, LR_REPOCONF_ERROR, LRE_BADFUNCARG, "No keyfile available in yumrepoconf"); return FALSE; } va_start(arg, option); switch (option) { case LR_YRC_ID: /*!< 0 (char *) ID (short name) of the repo */ g_set_error(&tmp_err, LR_REPOCONF_ERROR, LRE_BADOPTARG, "ID is read only option"); break; case LR_YRC_NAME: /*!< 1 (char *) Pretty name of the repo */ str = va_arg(arg, char *); lr_key_file_set_string(keyfile, id, "name", str); break; case LR_YRC_ENABLED: /*!< 2 (long 1 or 0) Is repo enabled? */ lnum = va_arg(arg, long); g_key_file_set_boolean(keyfile, id, "enabled", lnum ? TRUE : FALSE); break; case LR_YRC_BASEURL: /*!< 3 (char **) List of base URLs */ strv = va_arg(arg, char **); lr_key_file_set_string_list(keyfile, id, "baseurl", (const gchar **) strv); break; case LR_YRC_MIRRORLIST: /*!< 4 (char *) Mirrorlist URL */ str = va_arg(arg, char *); lr_key_file_set_string(keyfile, id, "mirrorlist", str); break; case LR_YRC_METALINK: /*!< 5 (char *) Metalink URL */ str = va_arg(arg, char *); lr_key_file_set_string(keyfile, id, "metalink", str); break; case LR_YRC_MEDIAID: /*!< 6 (char *) Media ID */ str = va_arg(arg, char *); lr_key_file_set_string(keyfile, id, "mediaid", str); break; case LR_YRC_GPGKEY: /*!< 7 (char **) URL of GPG key */ strv = va_arg(arg, char **); lr_key_file_set_string_list(keyfile, id, "gpgkey", (const gchar **) strv); break; case LR_YRC_GPGCAKEY: /*!< 8 (char **) GPG CA key */ strv = va_arg(arg, char **); lr_key_file_set_string_list(keyfile, id, "gpgcakey", (const gchar **) strv); break; case LR_YRC_EXCLUDE: /*!< 9 (char **) List of exluded packages */ strv = va_arg(arg, char **); lr_key_file_set_string_list(keyfile, id, "exclude", (const gchar **) strv); break; case LR_YRC_INCLUDE: /*!< 10 (char **) List of included packages */ strv = va_arg(arg, char **); lr_key_file_set_string_list(keyfile, id, "include", (const gchar **) strv); break; case LR_YRC_FASTESTMIRROR: /*!< 11 (long 1 or 0) Fastest mirror determination */ lnum = va_arg(arg, long); g_key_file_set_boolean(keyfile, id, "fastestmirror", lnum); break; case LR_YRC_PROXY: /*!< 12 (char *) Proxy addres */ str = va_arg(arg, char *); lr_key_file_set_string(keyfile, id, "proxy", str); break; case LR_YRC_PROXY_USERNAME: /*!< 13 (char *) Proxy username */ str = va_arg(arg, char *); lr_key_file_set_string(keyfile, id, "proxy_username", str); break; case LR_YRC_PROXY_PASSWORD: /*!< 14 (char *) Proxy password */ str = va_arg(arg, char *); lr_key_file_set_string(keyfile, id, "proxy_password", str); break; case LR_YRC_USERNAME: /*!< 15 (char *) Username */ str = va_arg(arg, char *); lr_key_file_set_string(keyfile, id, "username", str); break; case LR_YRC_PASSWORD: /*!< 16 (char *) Password */ str = va_arg(arg, char *); lr_key_file_set_string(keyfile, id, "password", str); break; case LR_YRC_GPGCHECK: /*!< 17 (long 1 or 0) GPG check for packages */ lnum = va_arg(arg, long); g_key_file_set_boolean(keyfile, id, "gpgcheck", (gboolean) lnum); break; case LR_YRC_REPO_GPGCHECK: /*!< 18 (long 1 or 0) GPG check for repodata */ lnum = va_arg(arg, long); g_key_file_set_boolean(keyfile, id, "repo_gpgcheck", (gboolean) lnum); break; case LR_YRC_ENABLEGROUPS: /*!< 19 (long 1 or 0) Use groups */ lnum = va_arg(arg, long); g_key_file_set_boolean(keyfile, id, "enablegroups", (gboolean) lnum); break; case LR_YRC_BANDWIDTH: /*!< 20 (guint64) Bandwidth - Number of bytes */ { guint64 val = va_arg(arg, guint64); g_key_file_set_uint64(keyfile, id, "bandwidth", val); break; } case LR_YRC_THROTTLE: /*!< 21 (char *) Throttle string */ str = va_arg(arg, char *); lr_key_file_set_string(keyfile, id, "throttle", str); break; case LR_YRC_IP_RESOLVE: /*!< 22 (LrIpResolveType) Ip resolve type */ { LrIpResolveType val = va_arg(arg, LrIpResolveType); lr_key_file_set_ip_resolve(keyfile, id, "ip_resolve", val); break; } case LR_YRC_METADATA_EXPIRE: /*!< 23 (gint64) Interval in secs for metadata expiration */ { // TODO: Store value in appropriate units gint64 val = va_arg(arg, gint64); g_key_file_set_int64(keyfile, id, "metadata_expire", val); break; } case LR_YRC_COST: /*!< 24 (gint) Repo cost */ { gint val = va_arg(arg, gint); g_key_file_set_integer(keyfile, id, "cost", val); break; } case LR_YRC_PRIORITY: /*!< 25 (gint) Repo priority */ { guint val = va_arg(arg, gint); g_key_file_set_integer(keyfile, id, "priority", val); break; } case LR_YRC_SSLCACERT: /*!< 26 (gchar *) SSL Certification authority cert */ str = va_arg(arg, char *); lr_key_file_set_string(keyfile, id, "sslcacert", str); break; case LR_YRC_SSLVERIFY: /*!< 27 (long 1 or 0) SSL verification */ lnum = va_arg(arg, long); g_key_file_set_boolean(keyfile, id, "sslverify", (gboolean) lnum); break; case LR_YRC_SSLCLIENTCERT: /*!< 28 (gchar *) SSL Client certificate */ str = va_arg(arg, char *); lr_key_file_set_string(keyfile, id, "sslclientcert", str); break; case LR_YRC_SSLCLIENTKEY: /*!< 29 (gchar *) SSL Client key */ str = va_arg(arg, char *); lr_key_file_set_string(keyfile, id, "sslclientkey", str); break; case LR_YRC_DELTAREPOBASEURL:/*!< 30 (char **) Deltarepo mirror URLs */ strv = va_arg(arg, char **); lr_key_file_set_string_list(keyfile, id, "deltarepobaseurl", (const gchar **) strv); break; case LR_YRC_FAILOVERMETHOD: /*!< 31 (gchar *) Failover method */ str = va_arg(arg, char *); lr_key_file_set_string(keyfile, id, "failovermethod", str); break; case LR_YRC_SKIP_IF_UNAVAILABLE: /*!< 32 (long 1 or 0) Skip if unavailable */ lnum = va_arg(arg, long); g_key_file_set_boolean(keyfile, id, "skip_if_unavailable", (gboolean) lnum); break; } va_end(arg); if (tmp_err) { g_propagate_error(err, tmp_err); return FALSE; } repofile_set_modified(repofile, TRUE); return TRUE; }
static void file_ptr_array_foreach_write_meta_handler (gpointer data, gpointer user_data) { GFile *file = G_FILE (data), *meta_file = NULL; GObject *scgi_task = G_OBJECT (user_data); GObject *request = NULL; GHashTable *req_htb = NULL; gchar *duration = NULL, *one_off = NULL, *rand_pass = NULL; GKeyFile *meta = NULL; GDateTime *crt_time = NULL, *exp_time = NULL; GFileOutputStream *file_ostream = NULL; guint64 dur = 0; g_debug ("%s:%d[%s]", __FILE__, __LINE__, __FUNCTION__); request = hev_scgi_task_get_request (HEV_SCGI_TASK (scgi_task)); req_htb = hev_scgi_request_get_header_hash_table (HEV_SCGI_REQUEST (request)); duration = g_object_get_data (scgi_task, "duration"); one_off = g_object_get_data (scgi_task, "one-off"); rand_pass = g_object_get_data (scgi_task, "rand-pass"); meta_file = g_object_get_data (G_OBJECT (file), "meta"); g_file_delete (meta_file, NULL, NULL); meta = g_key_file_new (); /* set meta contents */ crt_time = g_date_time_new_now_utc (); g_key_file_set_int64 (meta, "Meta", "CrtDate", g_date_time_to_unix (crt_time)); if (duration) { dur = g_ascii_strtoull (duration, NULL, 10); if ((0 >= dur) || (7 < dur)) dur = 1; } else { dur = 1; } exp_time = g_date_time_add_days (crt_time, dur); g_key_file_set_int64 (meta, "Meta", "ExpDate", g_date_time_to_unix (exp_time)); g_date_time_unref (exp_time); g_date_time_unref (crt_time); g_key_file_set_boolean (meta, "Meta", "OneOff", one_off ? TRUE : FALSE); g_key_file_set_string (meta, "Meta", "IP", g_hash_table_lookup (req_htb, "REMOTE_ADDR")); g_key_file_set_string (meta, "Meta", "RandPass", rand_pass); /* create and write to meta file */ file_ostream = g_file_create (meta_file, G_FILE_CREATE_PRIVATE, NULL, NULL); if (file_ostream) { gchar *data = NULL; gsize length = 0; data = g_key_file_to_data (meta, &length, NULL); g_output_stream_write_all (G_OUTPUT_STREAM (file_ostream), data, length, NULL, NULL, NULL); g_free (data); g_object_unref (file_ostream); } g_key_file_unref (meta); }