bool state_read(const char *statedir, int *keyholder_id, char **keyholder_name, enum state *status, char **message) { char *status_str, *keyholder_id_str; if (keyholder_id) { keyholder_id_str = file_read(statedir, "keyholder-id"); *keyholder_id = safe_atoi(keyholder_id_str); } if (keyholder_name) { *keyholder_name = file_read(statedir, "keyholder-name"); } if (status) { status_str = file_read(statedir, "status"); *status = str2state(status_str); } if (message) { *message = file_read(statedir, "message"); } if ((keyholder_id && !keyholder_id_str) || (keyholder_name && !*keyholder_name) || (status && !status_str) || (message && !*message)) { if (keyholder_id) free(keyholder_id_str); if (keyholder_name) free(*keyholder_name); if (status) free(status_str); if (message) free(*message); return false; } free(keyholder_id_str); free(status_str); return true; }
// extract smartrns.data from DNS entry smartrns_data_t smartrnsvec2smartrnsdata(vector<keyval_t> smartrnsvec) { smartrns_data_t data; smartrns_data_entry_t entry; smartrns_data_entry_phone_t phone; // only used if entry.type = phone smartrns_data_entry_email_t email; // only used if entry.type = email smartrns_data_entry_icq_t icq; // only used if entry.type = icq smartrns_data_entry_jabber_t jabber; // only used if entry.type = jabber uint32_t i; for(i=0;i<smartrnsvec.size();i++){ if("smartrns.data.version" == smartrnsvec[i].key){ data.version = smartrnsvec[i].val; }else if("smartrns.data.comment" == smartrnsvec[i].key){ data.comment = smartrnsvec[i].val; }else if("smartrns.data.name" == smartrnsvec[i].key){ data.name = smartrnsvec[i].val; }else if("smartrns.data.entry.name" == smartrnsvec[i].key){ entry.name = smartrnsvec[i].val; }else if("smartrns.data.entry.comment" == smartrnsvec[i].key){ entry.comment = smartrnsvec[i].val; }else if("smartrns.data.entry.type" == smartrnsvec[i].key){ entry.type = str2entrytype(smartrnsvec[i].val); }else if("smartrns.data.entry.state" == smartrnsvec[i].key){ entry.state = str2state(smartrnsvec[i].val); }else if("smartrns.data.entry.country" == smartrnsvec[i].key){ phone.country = smartrnsvec[i].val; }else if("smartrns.data.entry.prefix" == smartrnsvec[i].key){ phone.prefix = smartrnsvec[i].val; }else if("smartrns.data.entry.number" == smartrnsvec[i].key){ phone.number = smartrnsvec[i].val; }else if("smartrns.data.entry.suffix" == smartrnsvec[i].key){ phone.suffix = smartrnsvec[i].val; }else if("smartrns.data.entry.usage" == smartrnsvec[i].key){ phone.usage = str2usagetype(smartrnsvec[i].val); }else if("smartrns.data.entry.subtype" == smartrnsvec[i].key){ phone.subtype = str2subtype(smartrnsvec[i].val); }else if("smartrns.data.entry.email" == smartrnsvec[i].key){ email.email = smartrnsvec[i].val; }else if("smartrns.data.entry.icq" == smartrnsvec[i].key){ icq.icq = atoll(smartrnsvec[i].val.c_str()); }else if("smartrns.data.entry.jabber" == smartrnsvec[i].key){ jabber.jabber = smartrnsvec[i].val; }else if("smartrns.data.entry.push" == smartrnsvec[i].key){ if("1" == smartrnsvec[i].val){ if(PHONE_NR == entry.type){ entry.entry = (void*) new smartrns_data_entry_phone_t; *((smartrns_data_entry_phone_t*) entry.entry) = phone; }else if(EMAIL == entry.type){ entry.entry = (void*) new smartrns_data_entry_email_t; *((smartrns_data_entry_email_t*) entry.entry) = email; }else if(ICQ == entry.type){ entry.entry = (void*) new smartrns_data_entry_icq_t; *((smartrns_data_entry_icq_t*) entry.entry) = icq; }else if(JABBER == entry.type){ entry.entry = (void*) new smartrns_data_entry_jabber_t; *((smartrns_data_entry_jabber_t*) entry.entry) = jabber; } data.entries.push_back(entry); } } } return data; }