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

Last change on this file since 855 was 855, checked in by mabarracus, 5 years ago
  • Updated sources to 2.2.18
  • Ported code from patches to apply in 2.2.18
File size: 4.4 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
18get_userid(gchar ** username)
19{
20    gchar *cmd;
21
22    cmd = g_strconcat("prompt <b>", _("Username"), "</b>\nuserid\n", NULL);
23    *username = ask_value_greeter(cmd);
24
25    g_free(cmd);
26}
27
28/*
29 * get_passwd
30 */
31void
32get_passwd(gchar ** password)
33{
34    gchar *cmd;
35
36    cmd =
37        g_strconcat("prompts <b>", _("Password"), "</b>\npasswd\n", NULL);
38    *password = (gchar *) ask_value_greeter(cmd);
39
40    set_message(g_strconcat
41                ("<b>", _("Verifying password.  Please wait."), "</b>",
42                 NULL));
43    g_free(cmd);
44}
45
46/*
47 * get_host
48 */
49void
50get_host(gchar ** server)
51{
52    gchar *cmd = "hostname\n";
53    gchar *host;
54
55    host = (gchar *) ask_value_greeter(cmd);
56    if (g_ascii_strncasecmp(host, "None", 4)) {
57        if (*server)
58            g_free(*server);
59        *server = host;
60    }
61}
62
63/*
64 * get_language
65 */
66void
67get_language(gchar ** language)
68{
69    gchar *cmd = "language\n";
70    gchar *lang;
71
72    lang = (gchar *) ask_value_greeter(cmd);
73
74    if (g_ascii_strncasecmp(lang, "None", 4)) {
75        if (*language)
76            g_free(*language);
77        *language = lang;
78        setenv("LDM_LANGUAGE", lang, 1);
79    }
80}
81
82/*
83 * get_session
84 */
85void
86get_session(gchar ** session)
87{
88    gchar *cmd = "session\n";
89    gchar *sess;
90
91    sess = (gchar *) ask_value_greeter(cmd);
92
93    if (g_ascii_strncasecmp(sess, "None", 4)) {
94        if (*session)
95            g_free(*session);
96        *session = sess;
97    }
98}
99
100/*
101 * get_Xsession
102 *
103 * Return to variable xsession the LDM_XSESSION info
104 */
105void __attribute__ ((visibility("default"))) get_Xsession(gchar **
106                                                          xsession,
107                                                          gconstpointer
108                                                          server)
109{
110    ldminfo *curr_host = NULL;
111    gchar *tmp_xsess = NULL;
112    tmp_xsess = g_strdup(getenv("LDM_XSESSION"));
113
114    if (!tmp_xsess || strlen(tmp_xsess) == 0) {
115        curr_host = ldminfo_lookup(server);
116        if (curr_host) {
117            tmp_xsess = curr_host->xsession;
118            if (!tmp_xsess || strlen(tmp_xsess) == 0) {
119                tmp_xsess = g_strdup(getenv("LDM_DEFAULT_XSESSION"));
120                if (!tmp_xsess || strlen(tmp_xsess) == 0)
121                    die("ldm", "no Xsession");
122            }
123        }
124    }
125
126    *xsession = tmp_xsess;
127}
128
129/*
130 * set_session_env
131 *
132 * Set LDM_SESSION and LDM_XSESSION env variable with param
133 * Then run xsession script
134 */
135void __attribute__ ((visibility("default"))) set_session_env(gchar *
136                                                             xsession,
137                                                             gchar *
138                                                             session)
139{
140    if (g_strcmp0(session, "default") != 0
141        || getenv("LDM_SESSION") == NULL) {
142        log_entry("ldm", 7,
143                  "Export LDM_SELECTED_SESSION to environment: \"%s\"",
144                  session);
145        setenv("LDM_SELECTED_SESSION", session, 1);
146    } else {
147        log_entry("ldm", 7,
148                  "Using existing LDM_SESSION from environment: \"%s\"",
149                  getenv("LDM_SESSION"));
150    }
151
152    setenv("LDM_XSESSION", xsession, 1);
153
154    /* Starting xsession script */
155    rc_files("xsession");
156}
157
158/*
159 * get_ltsp_cfg
160 *  Check for LTSP-Cluster. If true, contact loadbalancer for an IP
161 */
162void __attribute__ ((visibility("default"))) get_ltsp_cfg(gchar ** server)
163{
164    /* Check for LTSP-Cluster, if true, contact the loadbalancer for an IP */
165    if (access(LTSP_CLUSTER_CONFILE, F_OK) == 0) {
166        FILE *fp;
167        fp = popen("getltscfg-cluster -l ldm", "r");
168        if (fp != NULL) {
169            log_entry("ltsp-cluster", 6, "IP before load-balancing: %s",
170                      *server);
171            if (fgets(*server, PATH_MAX, fp) == NULL)
172                log_entry("ltsp-cluster", 4,
173                          "failed to get an IP from the load-balancer");
174
175            log_entry("ltsp-cluster", 6, "IP after loadbalancing: %s",
176                      *server);
177        }
178        if (pclose(fp) == -1)
179            log_entry("ltsp-cluster", 3, "load-balancing failed");
180    }
181}
Note: See TracBrowser for help on using the repository browser.