/* * Open HTTPS session to a host, handling redirection as necessary */ static void open_session(char *server, char *username, char *xenhex) { char password[XVP_MAX_XEN_PW + 1], escpassword[256]; curl_global_init(CURL_GLOBAL_ALL); xmlInitParser(); xen_init(); memset(password, 0, sizeof(password)); sprintf(server_url, "https://%s", server); xvp_password_decrypt(xenhex, password, XVP_PASSWORD_XEN); (void)xvp_xmlescape(password, escpassword, sizeof(escpassword)); session = xen_session_login_with_password(call_func, NULL, username, escpassword, xen_api_version_1_5); if (!session->ok && session->error_description_count > 0 && !strcmp(session->error_description[0], "HOST_IS_SLAVE")) { sprintf(server_url, "https://%s", session->error_description[1]); xen_session_logout(session); session = xen_session_login_with_password(call_func, NULL, username, escpassword, xen_api_version_1_5); } memset(password, 0, sizeof(password)); memset(escpassword, 0, sizeof(escpassword)); if (!session->ok) fail_session(); }
/* * Clean up session connection etc */ static void cleanup(void) { curl_global_cleanup(); xmlCleanupParser(); xen_session_logout(session); xen_fini(); }
int main(int argc, char **argv) { if (argc != 4) { fprintf(stderr, "Usage:\n\n%s <url> <username> <password>\n", argv[0]); } url = argv[1]; /* General setup */ xen_init(); curl_global_init(CURL_GLOBAL_ALL); xen_session *session = xen_session_login_with_password(call_func, NULL, argv[2], argv[3]); if(session->ok) { /* Get the host */ xen_host host; xen_session_get_this_host(session, &host, session); /* Get the set of VMs */ struct xen_vm_set * VMs; xen_host_get_resident_vms(session, &VMs, host); /* Print the names */ for(unsigned int i=0 ; i<VMs->size ; i++) { char * name; xen_host_get_name_label(session, &name, host); printf("VM %d: %s\n", i, name); } } else { printf(stderr, "Connection failed\n"); } xen_session_logout(session); curl_global_cleanup(); xen_fini(); return 0; }