static t_account * account_load_new(char const * name, unsigned uid) { t_account *account; t_attrgroup *attrgroup; if (name && account_check_name(name)) return NULL; force_account_add = 1; /* disable the protection */ attrgroup = attrgroup_create_nameuid(name, uid); if (!attrgroup) { force_account_add = 0; return NULL; } if (!(account = account_load(attrgroup))) { eventlog(eventlog_level_error, __FUNCTION__,"could not load account"); attrgroup_destroy(attrgroup); force_account_add = 0; return NULL; } if (!accountlist_add_account(account)) { eventlog(eventlog_level_error, __FUNCTION__,"could not add account to list"); account_destroy(account); force_account_add = 0; return NULL; } force_account_add = 0; return account; }
extern int bits_va_lock_account(const char *name) { t_account * ac; t_packet * p; t_query * q; if (!name) { eventlog(eventlog_level_error,"bits_va_lock_account","got NULL name"); return -1; } if ((ac = accountlist_find_account(name))) { if (account_get_bits_state(ac)!=account_state_unknown) { eventlog(eventlog_level_warn,"bits_va_lock_account","tried to lock an account which is already locked"); return 0; } } else { /* create a dummy account */ ac = create_vaccount(name,0); if (!ac) { eventlog(eventlog_level_error,"bits_va_lock_account","could not create dummy vaccount"); return -1; } } p = packet_create(packet_class_bits); packet_set_size(p, sizeof(t_bits_va_lock)); packet_set_type(p, BITS_VA_LOCK); bits_packet_generic(p, BITS_ADDR_PEER); q = query_create(bits_query_type_bits_va_lock); if (!q) { eventlog(eventlog_level_error,"bits_va_lock_account","bits_query_push failed."); packet_destroy(p); return -1; } /*bits_query_set_processed(q,-1);*/ bn_int_set(&p->u.bits_va_lock.qid,q->qid); packet_append_string(p,name); query_attach_account(q,"account",ac); send_bits_packet_up(p); packet_del_ref(p); account_set_bits_state(ac,account_state_pending); /* request sent */ accountlist_add_account(ac); return 0; }
static int _cb_read_accounts(t_attrgroup *attrgroup, void *data) { unsigned int *count = (unsigned int *)data; t_account *account; if (!(account = account_load(attrgroup))) { eventlog(eventlog_level_error, __FUNCTION__,"could not load account"); attrgroup_destroy(attrgroup); return -1; } if (!accountlist_add_account(account)) { eventlog(eventlog_level_error, __FUNCTION__,"could not add account to list"); account_destroy(account); return -1; } /* might as well free up the memory since we probably won't need it */ account_flush(account,FS_FORCE); /* force unload */ (*count)++; return 0; }