Instead, open xauth as a pipe and feed commands via its stdin.
Signed-off-by: Eygene Ryabinkin <[email protected]>
---
Makefile | 3 ++-
Makefile.freebsd | 3 ++-
Makefile.netbsd | 3 ++-
Makefile.openbsd | 3 ++-
app.cpp | 8 +++++---
switchuser.cpp | 7 ++++---
util.cpp | 32 ++++++++++++++++++++++++++++++++
util.h | 19 +++++++++++++++++++
8 files changed, 68 insertions(+), 10 deletions(-)
create mode 100644 util.cpp
create mode 100644 util.h
diff --git a/Makefile b/Makefile
index f7d3d2d..240669d 100644
--- a/Makefile
+++ b/Makefile
@@ -25,7 +25,8 @@ VERSION=1.3.1
DEFINES=-DPACKAGE=\"$(NAME)\" -DVERSION=\"$(VERSION)\" \
-DPKGDATADIR=\"$(PREFIX)/share/slim\" -DSYSCONFDIR=\"$(CFGDIR)\"
-OBJECTS=jpeg.o png.o main.o image.o numlock.o cfg.o switchuser.o app.o panel.o
+OBJECTS=jpeg.o png.o main.o image.o numlock.o cfg.o switchuser.o app.o \
+ panel.o util.o
ifdef USE_PAM
OBJECTS+=PAM.o
endif
diff --git a/Makefile.freebsd b/Makefile.freebsd
index 3ff326e..c925a39 100644
--- a/Makefile.freebsd
+++ b/Makefile.freebsd
@@ -24,7 +24,8 @@ VERSION=1.3.1
DEFINES=-DPACKAGE=\"$(NAME)\" -DVERSION=\"$(VERSION)\" \
-DPKGDATADIR=\"$(PREFIX)/share/slim\" -DSYSCONFDIR=\"$(CFGDIR)\"
-OBJECTS=jpeg.o png.o main.o image.o numlock.o cfg.o switchuser.o app.o panel.o
+OBJECTS=jpeg.o png.o main.o image.o numlock.o cfg.o switchuser.o app.o \
+ panel.o util.o
.ifdef USE_PAM
OBJECTS+=PAM.o
.endif
diff --git a/Makefile.netbsd b/Makefile.netbsd
index ad8bb8b..45f33e6 100644
--- a/Makefile.netbsd
+++ b/Makefile.netbsd
@@ -24,7 +24,8 @@ VERSION=1.3.1
DEFINES=-DPACKAGE=\"$(NAME)\" -DVERSION=\"$(VERSION)\" \
-DPKGDATADIR=\"$(PREFIX)/share/slim\" -DSYSCONFDIR=\"$(CFGDIR)\"
-OBJECTS=jpeg.o png.o main.o image.o numlock.o cfg.o switchuser.o app.o panel.o
+OBJECTS=jpeg.o png.o main.o image.o numlock.o cfg.o switchuser.o app.o \
+ panel.o util.o
.ifdef USE_PAM
OBJECTS+=PAM.o
.endif
diff --git a/Makefile.openbsd b/Makefile.openbsd
index b1829f8..1205b84 100644
--- a/Makefile.openbsd
+++ b/Makefile.openbsd
@@ -20,7 +20,8 @@ VERSION=1.3.1
DEFINES=-DPACKAGE=\"$(NAME)\" -DVERSION=\"$(VERSION)\" \
-DPKGDATADIR=\"$(PREFIX)/share/slim\" -DSYSCONFDIR=\"$(CFGDIR)\"
-OBJECTS=jpeg.o png.o main.o image.o numlock.o cfg.o switchuser.o app.o panel.o
+OBJECTS=jpeg.o png.o main.o image.o numlock.o cfg.o switchuser.o app.o \
+ util.o panel.o
.SUFFIXES: .c.o .cpp.o
diff --git a/app.cpp b/app.cpp
index 83ae947..2502b0b 100644
--- a/app.cpp
+++ b/app.cpp
@@ -24,6 +24,7 @@
#include <algorithm>
#include "app.h"
#include "numlock.h"
+#include "util.h"
#ifdef HAVE_SHADOW
@@ -1162,7 +1163,8 @@ void App::replaceVariables(string& input,
void App::CreateServerAuth() {
/* create mit cookie */
- int i, r;
+ bool r;
+ int i;
int hexcount = 0;
string authfile;
string cmd;
@@ -1185,8 +1187,8 @@ void App::CreateServerAuth() {
authfile = cfg->getOption("authfile");
remove(authfile.c_str());
putenv(StrConcat("XAUTHORITY=", authfile.c_str()));
- cmd = cfg->getOption("xauth_path") + " -q -f " + authfile + " add :0 . " +
mcookie;
- system(cmd.c_str());
+ r = Util::add_mcookie(mcookie, ":0", cfg->getOption("xauth_path"),
+ authfile);
}
char* App::StrConcat(const char* str1, const char* str2) {
diff --git a/switchuser.cpp b/switchuser.cpp
index e72a8fc..ec298e1 100644
--- a/switchuser.cpp
+++ b/switchuser.cpp
@@ -10,6 +10,7 @@
*/
#include "switchuser.h"
+#include "util.h"
using namespace std;
@@ -53,10 +54,10 @@ void SwitchUser::Execute(const char* cmd) {
}
void SwitchUser::SetClientAuth(const char* mcookie) {
- int r;
+ bool r;
string home = string(Pw->pw_dir);
string authfile = home + "/.Xauthority";
remove(authfile.c_str());
- string cmd = cfg->getOption("xauth_path") + " -q -f " + authfile + " add
:0 . " + mcookie;
- r = system(cmd.c_str());
+ r = Util::add_mcookie(mcookie, ":0", cfg->getOption("xauth_path"),
+ authfile);
}
diff --git a/util.cpp b/util.cpp
new file mode 100644
index 0000000..050d83d
--- /dev/null
+++ b/util.cpp
@@ -0,0 +1,32 @@
+/* SLiM - Simple Login Manager
+ Copyright (C) 2009 Eygene Ryabinkin <[email protected]>
+
+ 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.
+*/
+
+#include <stdio.h>
+#include "util.h"
+
+/*
+ * Adds the given cookie to the specified Xauthority file.
+ * Returns true on success, false on fault.
+ */
+bool Util::add_mcookie(const std::string &mcookie, const char *display,
+ const std::string &xauth_cmd, const std::string &authfile)
+{
+ FILE *fp;
+ std::string cmd = xauth_cmd + " -f " + authfile + " -q";
+
+ fp = popen(cmd.c_str(), "w");
+ if (!fp)
+ return false;
+ fprintf(fp, "remove %s\n", display);
+ fprintf(fp, "add %s %s %s\n", display, ".", mcookie.c_str());
+ fprintf(fp, "quit\n");
+
+ pclose(fp);
+ return true;
+}
diff --git a/util.h b/util.h
new file mode 100644
index 0000000..8bd52be
--- /dev/null
+++ b/util.h
@@ -0,0 +1,19 @@
+/* SLiM - Simple Login Manager
+ Copyright (C) 2009 Eygene Ryabinkin <[email protected]>
+
+ 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.
+*/
+#ifndef __UTIL_H__
+#define __UTIL_H__
+
+#include <string>
+
+namespace Util {
+ bool add_mcookie(const std::string &mcookie, const char *display,
+ const std::string &xauth_cmd, const std::string &authfile);
+};
+
+#endif /* __UTIL_H__ */
--
1.6.3.1
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]