Wow, nice! I didn't take time yet to investigate, thanks for a lot for providing this patch. I will make a package for stable asap.
Mike 2009/5/20 Eygene Ryabinkin <r...@codelabs.ru>: > 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