From 763b290f0123855a1d9e8fde0583297e0ce5941b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sl=C3=A1vek=20Banko?= Date: Mon, 22 Jul 2013 01:21:51 +0200 Subject: Rename kdepasswd -> tdepasswd --- tdepasswd/kcm/chfnprocess.cpp | 100 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 tdepasswd/kcm/chfnprocess.cpp (limited to 'tdepasswd/kcm/chfnprocess.cpp') diff --git a/tdepasswd/kcm/chfnprocess.cpp b/tdepasswd/kcm/chfnprocess.cpp new file mode 100644 index 000000000..72c1599fc --- /dev/null +++ b/tdepasswd/kcm/chfnprocess.cpp @@ -0,0 +1,100 @@ +/*************************************************************************** + * Copyright 2003 Braden MacDonald * + * Copyright 2003 Ravikiran Rajagopal * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License (version 2) as * + * published by the Free Software Foundation. * + * * + ***************************************************************************/ + +/** + * @file Change a user's 'finger' information, specifically their full name. + * derived from tdepasswd. + */ + +#include +#include + +#include + +#include +#include +#include +#include "chfnprocess.h" + + +int ChfnProcess::exec(const char *pass, const char *name) +{ + // Try to set the default locale to make the parsing of the output + // of `chfn' easier. + putenv((char*)"LC_ALL=C"); + + QCStringList args; + args += "-f"; + args += name; + int ret = PtyProcess::exec("chfn", args); + if (ret < 0) + return ChfnNotFound; + + ret = ConverseChfn(pass); + + waitForChild(); + return ret; +} + + +/* + * The actual work. + * Return values: -1 = unknown error, 0 = ok, >0 = error code. + */ +int ChfnProcess::ConverseChfn(const char *pass) +{ + int status=-1; + + TQCString line; + while(1) + { + line = readLine(); + + if ( line.isEmpty() ) + continue;// discard line + + if ( line.contains( "Password: " )/*isPrompt( line, "password" )*/ ) + { + WaitSlave(); + write(m_Fd, pass, strlen(pass)); + write(m_Fd, "\n", 1); + } + + line = readLine(); // Let's see what the outcome was + + if ( line.contains( "Changing finger info" ) ) + { + // do nothing + } + else if ( line.contains( "information changed" ) ) + { + status=0; + break; + } + else if ( line.isEmpty() ) + { + status=0; + break; + } + else if ( line.contains( "Password error" ) || line.contains("Incorrect password") ) + { + status=PasswordError; + break; + } + else + { + status=MiscError; + m_Error=line; + break; + } + } + return status; +} + -- cgit v1.2.1