struct storage_policy_s * storage_policy_init(namespace_info_t *ni, const char *name) { if (_is_any(name)) return _dummy_stgpol(); if (!ni) return NULL; GByteArray *gba = NULL; struct storage_policy_s *sp = g_malloc0(sizeof(struct storage_policy_s)); sp->name = g_strdup(name); gba = g_hash_table_lookup(ni->storage_policy, name); if (gba == NULL) { /* set dirty flag, don't allow any getter */ storage_policy_clean(sp); return NULL; } if (!_load_storage_policy(sp, gba, ni)) { /* set dirty flag, don't allow any getter */ storage_policy_clean(sp); return NULL; } return sp; }
gboolean stg_pol_rainx_get_param(namespace_info_t *ni, const gchar *stgpol, const gchar *param, gint64 *p_val) { const char *val_str = NULL; struct storage_policy_s *sp = storage_policy_init(ni, stgpol); const struct data_security_s *datasec = storage_policy_get_data_security(sp); gboolean ret; if (!datasec) { GRID_INFO("Cannot find datasecurity values for policy [%s]", stgpol); ret = FALSE; } else { if (NULL == (val_str = data_security_get_param(datasec, param))) { GRID_INFO("Cannot get parameter '%s' from data security [%s]", param, data_security_get_name(datasec)); ret = FALSE; } else { *p_val = g_ascii_strtoll(val_str, NULL, 10); ret = TRUE; } } storage_policy_clean(sp); return ret; }
static apr_status_t apr_storage_policy_clean(void *p) { struct storage_policy_s *sp = (struct storage_policy_s *) p; storage_policy_clean(sp); return APR_SUCCESS; }
gboolean stg_pol_is_rainx(namespace_info_t *ni, const gchar *stgpol) { struct storage_policy_s *sp = storage_policy_init(ni, stgpol); const struct data_security_s *datasec = storage_policy_get_data_security(sp); gboolean ret; if (!datasec) { GRID_ERROR("Cannot find datasecurity values for policy [%s]", stgpol); ret = FALSE; } else { ret = data_security_get_type(datasec) == RAIN; } storage_policy_clean(sp); return ret; }
static GError* _check_policy(struct meta2_backend_s *m2, const gchar *polname) { GError *err = NULL; struct storage_policy_s *policy = NULL; if (!*polname) return NEWERROR(CODE_BAD_REQUEST, "Invalid policy: %s", "empty"); g_mutex_lock (&m2->nsinfo_lock); policy = storage_policy_init(m2->nsinfo, polname); g_mutex_unlock (&m2->nsinfo_lock); if (!policy) err = NEWERROR(CODE_POLICY_NOT_SUPPORTED, "Invalid policy: %s", "not found"); else storage_policy_clean(policy); return err; }
void rawx_conf_clean(rawx_conf_t* c) { if(!c) return; if(c->ni) { namespace_info_free(c->ni); c->ni = NULL; } if(c->sp) { storage_policy_clean(c->sp); c->sp = NULL; } if(c->acl) { g_slist_foreach(c->acl, _rawx_acl_clean, NULL); g_slist_free(c->acl); c->acl = NULL; } }
void storage_policy_gclean(gpointer u, gpointer ignored) { (void) ignored; storage_policy_clean((struct storage_policy_s*) u); }