Instead, open xauth as a pipe and feed commands via its stdin. Signed-off-by: Eygene Ryabinkin <r...@codelabs.ru> --- 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 <r...@codelabs.ru> + + 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 <r...@codelabs.ru> + + 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 debian-bugs-rc-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org