| 117 | } |
| 118 | |
| 119 | int |
| 120 | crmd_remove_node_cache(const char *id) |
| 121 | { |
| 122 | int n = 0; |
| 123 | int rc = -1; |
| 124 | char *name = NULL; |
| 125 | char *admin_uuid = NULL; |
| 126 | crm_ipc_t *conn = crm_ipc_new(CRM_SYSTEM_CRMD, 0); |
| 127 | xmlNode *cmd = NULL; |
| 128 | xmlNode *hello = NULL; |
| 129 | xmlNode *msg_data = NULL; |
| 130 | char *endptr = NULL; |
| 131 | |
| 132 | if (!conn) { |
| 133 | goto rm_node_cleanup; |
| 134 | } |
| 135 | |
| 136 | if (!crm_ipc_connect(conn)) { |
| 137 | goto rm_node_cleanup; |
| 138 | } |
| 139 | |
| 140 | admin_uuid = calloc(1, 11); |
| 141 | snprintf(admin_uuid, 10, "%d", getpid()); |
| 142 | admin_uuid[10] = '\0'; |
| 143 | |
| 144 | hello = create_hello_message(admin_uuid, "crm_node", "0", "1"); |
| 145 | rc = crm_ipc_send(conn, hello, 0, 0, NULL); |
| 146 | if (rc < 0) { |
| 147 | goto rm_node_cleanup; |
| 148 | } |
| 149 | |
| 150 | errno = 0; |
| 151 | n = strtol(id, &endptr, 10); |
| 152 | if(errno != 0 || endptr == id || *endptr != '\0') { |
| 153 | /* Argument was not a nodeid */ |
| 154 | n = 0; |
| 155 | name = strdup(id); |
| 156 | } else { |
| 157 | name = get_node_name(n); |
| 158 | } |
| 159 | |
| 160 | crm_trace("Removing %s aka. %s from the membership cache", name, id); |
| 161 | |
| 162 | msg_data = create_xml_node(NULL, XML_TAG_OPTIONS); |
| 163 | if(n) { |
| 164 | crm_xml_add_int(msg_data, XML_ATTR_ID, n); |
| 165 | } |
| 166 | crm_xml_add(msg_data, XML_ATTR_UNAME, name); |
| 167 | |
| 168 | cmd = create_request(CRM_OP_RM_NODE_CACHE, |
| 169 | msg_data, |
| 170 | NULL, |
| 171 | CRM_SYSTEM_CRMD, |
| 172 | "crm_node", |
| 173 | admin_uuid); |
| 174 | |
| 175 | rc = crm_ipc_send(conn, cmd, 0, 0, NULL); |
| 176 | if(rc > 0) { |
no test coverage detected