static int receive_urecord_delete(bin_packet_t *packet) { str d, aor; udomain_t *domain; bin_pop_str(packet, &d); bin_pop_str(packet, &aor); if (find_domain(&d, &domain) != 0) { LM_ERR("domain '%.*s' is not local\n", d.len, d.s); goto out_err; } lock_udomain(domain, &aor); if (delete_urecord(domain, &aor, NULL, 1) != 0) { unlock_udomain(domain, &aor); goto out_err; } unlock_udomain(domain, &aor); return 0; out_err: LM_ERR("failed to process replication event. dom: '%.*s', aor: '%.*s'\n", d.len, d.s, aor.len, aor.s); return -1; }
/*! * \brief Delete a address of record including its contacts * \param cmd mi_root containing the parameter * \param param not used * \note expects 2 nodes: the table name and the AOR * \return mi_root with the result */ struct mi_root* mi_usrloc_rm_aor(struct mi_root *cmd, void *param) { struct mi_node *node; udomain_t *dom; str *aor; node = cmd->node.kids; if (node==NULL || node->next==NULL || node->next->next!=NULL) return init_mi_tree( 400, MI_MISSING_PARM_S, MI_MISSING_PARM_LEN); /* look for table */ dom = mi_find_domain( &node->value ); if (dom==NULL) return init_mi_tree( 404, "Table not found", 15); /* process the aor */ aor = &node->next->value; if ( mi_fix_aor(aor)!=0 ) return init_mi_tree( 400, "Domain missing in AOR", 21); lock_udomain( dom, aor); if (delete_urecord( dom, aor, 0) < 0) { unlock_udomain( dom, aor); return init_mi_tree( 500, "Failed to delete AOR", 20); } unlock_udomain( dom, aor); return init_mi_tree( 200, MI_OK_S, MI_OK_LEN); }
static void rpc_delete_uid(rpc_t* rpc, void* c) { udomain_t* d; str uid, t; if (rpc->scan(c, "SS", &t, &uid) < 2) return; rpc_find_domain(&t, &d); if (d) { lock_udomain(d); if (delete_urecord(d, &uid) < 0) { ERR("Error while deleting user %.*s\n", uid.len, uid.s); unlock_udomain(d); rpc->fault(c, 500, "Error While Deleting Record"); return; } unlock_udomain(d); } else { rpc->fault(c, 400, "Table Not Found"); } }
int static ul_rm( FILE *pipe, char *response_file ) { char table[MAX_TABLE]; char user[MAX_USER]; udomain_t* d; str aor, t; char* at; if (!read_line(table, MAX_TABLE, pipe, &t.len) || t.len ==0) { fifo_reply(response_file, "400 ul_rm: table name expected\n"); LOG(L_ERR, "ERROR: ul_rm: table name expected\n"); return 1; } if (!read_line(user, MAX_USER, pipe, &aor.len) || aor.len==0) { fifo_reply(response_file, "400 ul_rm: user name expected\n"); LOG(L_ERR, "ERROR: ul_rm: user name expected\n"); return 1; } at = memchr(user, '@', aor.len); if (use_domain) { if (!at) { fifo_reply(response_file, "400 ul_rm: username@domain expected\n"); LOG(L_ERR, "ERROR: ul_rm: Domain missing\n"); return 1; } } else { if (at) { aor.len = at - user; } } aor.s = user; strlower(&aor); t.s = table; fifo_find_domain(&t, &d); LOG(L_INFO, "INFO: deleting user-loc (%s,%s)\n", table, user ); if (d) { lock_udomain(d); if (delete_urecord(d, &aor) < 0) { LOG(L_ERR, "ul_rm(): Error while deleting user %s\n", user); unlock_udomain(d); fifo_reply(response_file, "500 Error while deleting user %s\n", user); return 1; } unlock_udomain(d); fifo_reply(response_file, "200 user (%s, %s) deleted\n", table, user); return 1; } else { fifo_reply(response_file, "400 table (%s) not found\n", table); return 1; } }