source: ldm/trunk/fuentes/src/plugin.c @ 516

Last change on this file since 516 was 516, checked in by mabarracus, 5 years ago

Copy trusty code

File size: 3.8 KB
Line 
1#include <libintl.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <string.h>
5#include <unistd.h>
6
7#include "ldminfo.h"
8#include "ldmutils.h"
9#include "ldmgreetercomm.h"
10#include "logging.h"
11#include "plugin.h"
12
13/*
14 * get_userid
15 *  Ask the greeter to check autologin or get username
16 */
17void get_userid(gchar **username) {
18    gchar *cmd;
19
20    cmd = g_strconcat("prompt <b>", _("Username"), "</b>\nuserid\n", NULL);
21    *username = ask_value_greeter(cmd);
22
23    g_free(cmd);
24}
25
26/*
27 * get_passwd
28 */
29void get_passwd(gchar **password) {
30    gchar *cmd;
31
32    cmd = g_strconcat("prompts <b>", _("Password"), "</b>\npasswd\n", NULL);
33    *password = (gchar*) ask_value_greeter(cmd);
34
35    set_message(g_strconcat("<b>", _("Verifying password.  Please wait."), "</b>", NULL));
36    g_free(cmd);
37}
38
39/*
40 * get_host
41 */
42void get_host(gchar **server) {
43    gchar *cmd = "hostname\n";
44    gchar *host;
45
46    host = (gchar*) ask_value_greeter(cmd);
47    if(g_ascii_strncasecmp(host, "None", 4)) {
48        if(*server)
49            g_free(*server);
50        *server = host;
51    }
52}
53
54/*
55 * get_language
56 */
57void get_language(gchar **language) {
58    gchar *cmd = "language\n";
59    gchar *lang;
60
61    lang = (gchar*) ask_value_greeter(cmd);
62
63    if(g_ascii_strncasecmp(lang, "None", 4)) {
64        if(*language)
65            g_free(*language);
66        *language = lang;
67        setenv("LDM_LANGUAGE", lang, 1);
68    }
69}
70
71/*
72 * get_session
73 */
74void get_session(gchar **session) {
75    gchar *cmd = "session\n";
76    gchar *sess;
77
78    sess = (gchar*) ask_value_greeter(cmd);
79
80    if (g_ascii_strncasecmp(sess, "None", 4)) {
81        if (*session)
82            g_free(*session);
83        *session = sess;
84    }
85}
86
87/*
88 * get_Xsession
89 *
90 * Return to variable xsession the LDM_XSESSION info
91 */
92void __attribute__ ((visibility("default"))) get_Xsession(gchar **xsession, gconstpointer server) {
93    ldminfo *curr_host = NULL;
94    gchar *tmp_xsess = NULL;
95    tmp_xsess = g_strdup(getenv("LDM_XSESSION"));
96
97    if (!tmp_xsess || strlen(tmp_xsess) == 0) {
98        curr_host = ldminfo_lookup(server);
99        if(curr_host) {
100            tmp_xsess = curr_host->xsession;
101            if (!tmp_xsess || strlen(tmp_xsess) == 0) {
102                tmp_xsess = g_strdup(getenv("LDM_DEFAULT_XSESSION"));
103                if (!tmp_xsess || strlen(tmp_xsess) == 0)
104                    die("ldm","no Xsession");
105            }
106        }
107    }
108
109    *xsession = tmp_xsess;
110}
111
112/*
113 * set_session_env
114 *
115 * Set LDM_SESSION and LDM_XSESSION env variable with param
116 * Then run xsession script
117 */
118void __attribute__ ((visibility("default"))) set_session_env(gchar *xsession, gchar *session) {
119    if (g_strcmp0(session,"default") != 0 || getenv("LDM_SESSION") == NULL) {
120        log_entry("ldm",7,"Export LDM_SELECTED_SESSION to environment: \"%s\"", session);
121        setenv("LDM_SELECTED_SESSION", session, 1);
122    }
123    else {
124        log_entry("ldm",7,"Using existing LDM_SESSION from environment: \"%s\"", getenv("LDM_SESSION"));
125    }
126
127    setenv("LDM_XSESSION", xsession, 1);
128
129    /* Starting xsession script */
130    rc_files("xsession");
131}
132
133/*
134 * get_ltsp_cfg
135 *  Check for LTSP-Cluster. If true, contact loadbalancer for an IP
136 */
137void __attribute__ ((visibility("default"))) get_ltsp_cfg(gchar **server) {
138    /* Check for LTSP-Cluster, if true, contact the loadbalancer for an IP */
139    if (access(LTSP_CLUSTER_CONFILE, F_OK) == 0) {
140        FILE *fp;
141        fp = popen("getltscfg-cluster -l ldm", "r");
142        if (fp != NULL) {
143            log_entry("ltsp-cluster",6,"IP before load-balancing: %s", *server);
144            if (fgets(*server, PATH_MAX, fp) == NULL)
145                log_entry("ltsp-cluster",4,"failed to get an IP from the load-balancer");
146
147            log_entry("ltsp-cluster",6,"IP after loadbalancing: %s", *server);
148        }
149        if (pclose(fp) == -1)
150            log_entry("ltsp-cluster",3,"load-balancing failed");
151    }
152}
Note: See TracBrowser for help on using the repository browser.