summaryrefslogtreecommitdiffstats
path: root/sesman/env.c
diff options
context:
space:
mode:
Diffstat (limited to 'sesman/env.c')
-rw-r--r--sesman/env.c197
1 files changed, 103 insertions, 94 deletions
diff --git a/sesman/env.c b/sesman/env.c
index f7abe120..9f35f368 100644
--- a/sesman/env.c
+++ b/sesman/env.c
@@ -1,28 +1,27 @@
-/*
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- xrdp: A Remote Desktop Protocol server.
- Copyright (C) Jay Sorg 2005-2010
-*/
+/**
+ * xrdp: A Remote Desktop Protocol server.
+ *
+ * Copyright (C) Jay Sorg 2004-2012
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
/**
*
* @file env.c
* @brief User environment handling code
* @author Jay Sorg
- *
+ *
*/
#include "sesman.h"
@@ -31,95 +30,105 @@
#include "grp.h"
extern unsigned char g_fixedkey[8]; /* in sesman.c */
-extern struct config_sesman* g_cfg; /* in sesman.c */
+extern struct config_sesman *g_cfg; /* in sesman.c */
/******************************************************************************/
int DEFAULT_CC
-env_check_password_file(char* filename, char* password)
+env_check_password_file(char *filename, char *password)
{
- char encryptedPasswd[16];
- int fd;
-
- g_memset(encryptedPasswd, 0, 16);
- g_strncpy(encryptedPasswd, password, 8);
- rfbDesKey(g_fixedkey, 0);
- rfbDes((unsigned char*)encryptedPasswd, (unsigned char*)encryptedPasswd);
- fd = g_file_open(filename);
- if (fd == -1)
- {
- log_message(LOG_LEVEL_WARNING,
- "can't read vnc password file - %s",
- filename);
- return 1;
- }
- g_file_write(fd, encryptedPasswd, 8);
- g_file_close(fd);
- return 0;
+ char encryptedPasswd[16];
+ int fd;
+
+ g_memset(encryptedPasswd, 0, 16);
+ g_strncpy(encryptedPasswd, password, 8);
+ rfbDesKey(g_fixedkey, 0);
+ rfbDes((unsigned char *)encryptedPasswd, (unsigned char *)encryptedPasswd);
+ fd = g_file_open(filename);
+
+ if (fd == -1)
+ {
+ log_message(LOG_LEVEL_WARNING,
+ "can't read vnc password file - %s",
+ filename);
+ return 1;
+ }
+
+ g_file_write(fd, encryptedPasswd, 8);
+ g_file_close(fd);
+ return 0;
}
/******************************************************************************/
int DEFAULT_CC
-env_set_user(char* username, char* passwd_file, int display)
+env_set_user(char *username, char *passwd_file, int display)
{
- int error;
- int pw_uid;
- int pw_gid;
- int uid;
- char pw_shell[256];
- char pw_dir[256];
- char pw_gecos[256];
- char text[256];
-
- error = g_getuser_info(username, &pw_gid, &pw_uid, pw_shell, pw_dir,
- pw_gecos);
- if (error == 0)
- {
- g_rm_temp_dir();
- error = g_setgid(pw_gid);
- if (error == 0)
- {
- error = g_initgroups(username, pw_gid);
- }
- if (error == 0)
- {
- uid = pw_uid;
- error = g_setuid(uid);
- }
- g_mk_temp_dir(0);
+ int error;
+ int pw_uid;
+ int pw_gid;
+ int uid;
+ char pw_shell[256];
+ char pw_dir[256];
+ char pw_gecos[256];
+ char text[256];
+
+ error = g_getuser_info(username, &pw_gid, &pw_uid, pw_shell, pw_dir,
+ pw_gecos);
+
if (error == 0)
{
- g_clearenv();
- g_setenv("SHELL", pw_shell, 1);
- g_setenv("PATH", "/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin", 1);
- g_setenv("USER", username, 1);
- g_sprintf(text, "%d", uid);
- g_setenv("UID", text, 1);
- g_setenv("HOME", pw_dir, 1);
- g_set_current_dir(pw_dir);
- g_sprintf(text, ":%d.0", display);
- g_setenv("DISPLAY", text, 1);
- if (passwd_file != 0)
- {
- if (0 == g_cfg->auth_file_path)
+ g_rm_temp_dir();
+ error = g_setgid(pw_gid);
+
+ if (error == 0)
{
- /* if no auth_file_path is set, then we go for
- $HOME/.vnc/sesman_username_passwd */
- g_mkdir(".vnc");
- g_sprintf(passwd_file, "%s/.vnc/sesman_%s_passwd", pw_dir, username);
+ error = g_initgroups(username, pw_gid);
}
- else
+
+ if (error == 0)
{
- /* we use auth_file_path as requested */
- g_sprintf(passwd_file, g_cfg->auth_file_path, username);
+ uid = pw_uid;
+ error = g_setuid(uid);
}
- LOG_DBG("pass file: %s", passwd_file);
- }
+
+ g_mk_temp_dir(0);
+
+ if (error == 0)
+ {
+ g_clearenv();
+ g_setenv("SHELL", pw_shell, 1);
+ g_setenv("PATH", "/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin", 1);
+ g_setenv("USER", username, 1);
+ g_sprintf(text, "%d", uid);
+ g_setenv("UID", text, 1);
+ g_setenv("HOME", pw_dir, 1);
+ g_set_current_dir(pw_dir);
+ g_sprintf(text, ":%d.0", display);
+ g_setenv("DISPLAY", text, 1);
+
+ if (passwd_file != 0)
+ {
+ if (0 == g_cfg->auth_file_path)
+ {
+ /* if no auth_file_path is set, then we go for
+ $HOME/.vnc/sesman_username_passwd */
+ g_mkdir(".vnc");
+ g_sprintf(passwd_file, "%s/.vnc/sesman_%s_passwd", pw_dir, username);
+ }
+ else
+ {
+ /* we use auth_file_path as requested */
+ g_sprintf(passwd_file, g_cfg->auth_file_path, username);
+ }
+
+ LOG_DBG("pass file: %s", passwd_file);
+ }
+ }
+ }
+ else
+ {
+ log_message(LOG_LEVEL_ERROR,
+ "error getting user info for user %s", username);
}
- }
- else
- {
- log_message(LOG_LEVEL_ERROR,
- "error getting user info for user %s", username);
- }
- return error;
+
+ return error;
}