#include #include #include #include #include #include "ldminfo.h" #include "ldmutils.h" #include "ldmgreetercomm.h" #include "logging.h" #include "plugin.h" /* * get_userid * Ask the greeter to check autologin or get username */ void get_userid(gchar ** username) { gchar *cmd; cmd = g_strconcat("prompt ", _("Username"), "\nuserid\n", NULL); *username = ask_value_greeter(cmd); g_free(cmd); } /* * get_passwd */ void get_passwd(gchar ** password) { gchar *cmd; cmd = g_strconcat("prompts ", _("Password"), "\npasswd\n", NULL); *password = (gchar *) ask_value_greeter(cmd); set_message(g_strconcat ("", _("Verifying password. Please wait."), "", NULL)); g_free(cmd); } /* * get_host */ void get_host(gchar ** server) { gchar *cmd = "hostname\n"; gchar *host; host = (gchar *) ask_value_greeter(cmd); if (g_ascii_strncasecmp(host, "None", 4)) { if (*server) g_free(*server); *server = host; } } /* * get_language */ void get_language(gchar ** language) { gchar *cmd = "language\n"; gchar *lang; lang = (gchar *) ask_value_greeter(cmd); if (g_ascii_strncasecmp(lang, "None", 4)) { if (*language) g_free(*language); *language = lang; setenv("LDM_LANGUAGE", lang, 1); } } /* * get_session */ void get_session(gchar ** session) { gchar *cmd = "session\n"; gchar *sess; sess = (gchar *) ask_value_greeter(cmd); if (g_ascii_strncasecmp(sess, "None", 4)) { if (*session) g_free(*session); *session = sess; } } /* * get_Xsession * * Return to variable xsession the LDM_XSESSION info */ void __attribute__ ((visibility("default"))) get_Xsession(gchar ** xsession, gconstpointer server) { ldminfo *curr_host = NULL; gchar *tmp_xsess = NULL; tmp_xsess = g_strdup(getenv("LDM_XSESSION")); if (!tmp_xsess || strlen(tmp_xsess) == 0) { curr_host = ldminfo_lookup(server); if (curr_host) { tmp_xsess = curr_host->xsession; if (!tmp_xsess || strlen(tmp_xsess) == 0) { tmp_xsess = g_strdup(getenv("LDM_DEFAULT_XSESSION")); if (!tmp_xsess || strlen(tmp_xsess) == 0) die("ldm", "no Xsession"); } } } *xsession = tmp_xsess; } /* * set_session_env * * Set LDM_SESSION and LDM_XSESSION env variable with param * Then run xsession script */ void __attribute__ ((visibility("default"))) set_session_env(gchar * xsession, gchar * session) { if (g_strcmp0(session, "default") != 0 || getenv("LDM_SESSION") == NULL) { log_entry("ldm", 7, "Export LDM_SELECTED_SESSION to environment: \"%s\"", session); setenv("LDM_SELECTED_SESSION", session, 1); } else { log_entry("ldm", 7, "Using existing LDM_SESSION from environment: \"%s\"", getenv("LDM_SESSION")); } setenv("LDM_XSESSION", xsession, 1); /* Starting xsession script */ rc_files("xsession"); } /* * get_ltsp_cfg * Check for LTSP-Cluster. If true, contact loadbalancer for an IP */ void __attribute__ ((visibility("default"))) get_ltsp_cfg(gchar ** server) { /* Check for LTSP-Cluster, if true, contact the loadbalancer for an IP */ if (access(LTSP_CLUSTER_CONFILE, F_OK) == 0) { FILE *fp; fp = popen("getltscfg-cluster -l ldm", "r"); if (fp != NULL) { log_entry("ltsp-cluster", 6, "IP before load-balancing: %s", *server); if (fgets(*server, PATH_MAX, fp) == NULL) log_entry("ltsp-cluster", 4, "failed to get an IP from the load-balancer"); log_entry("ltsp-cluster", 6, "IP after loadbalancing: %s", *server); } if (pclose(fp) == -1) log_entry("ltsp-cluster", 3, "load-balancing failed"); } }