|
|
# include <utmp.h> | # include <utmp.h> |
#endif | #endif |
| |
|
#ifdef HAVE_UTEMPTER |
|
# include <utempter.h> |
|
#endif |
|
|
#ifdef HAVE_TERMIOS_H | #ifdef HAVE_TERMIOS_H |
/* for HP-UX (some versions) the extern C is needed, and for other | /* for HP-UX (some versions) the extern C is needed, and for other |
platforms it doesn't hurt */ | platforms it doesn't hurt */ |
|
|
// private functions // | // private functions // |
/////////////////////// | /////////////////////// |
| |
#ifdef HAVE_UTEMPTER |
|
class KProcess_Utmp : public KProcess |
|
{ |
|
public: |
|
int commSetupDoneC() |
|
{ |
|
dup2(cmdFd, 0); |
|
dup2(cmdFd, 1); |
|
dup2(cmdFd, 3); |
|
return 1; |
|
} |
|
int cmdFd; |
|
}; |
|
#endif |
|
|
|
#define BASE_CHOWN "kgrantpty" | #define BASE_CHOWN "kgrantpty" |
| |
| |
|
|
void KPty::login(const char *user, const char *remotehost) | void KPty::login(const char *user, const char *remotehost) |
{ | { |
#ifdef HAVE_UTEMPTER | #ifdef HAVE_UTEMPTER |
KProcess_Utmp utmp; |
addToUtmp(d->ttyName, remotehost, d->masterFd); |
utmp.cmdFd = d->masterFd; |
|
utmp << "/usr/sbin/utempter" << "-a" << d->ttyName << ""; |
|
utmp.start(KProcess::Block); |
|
Q_UNUSED(user); | Q_UNUSED(user); |
Q_UNUSED(remotehost); |
|
#elif defined(USE_LOGIN) | #elif defined(USE_LOGIN) |
const char *str_ptr; | const char *str_ptr; |
struct utmp l_struct; | struct utmp l_struct; |
|
|
void KPty::logout() | void KPty::logout() |
{ | { |
#ifdef HAVE_UTEMPTER | #ifdef HAVE_UTEMPTER |
KProcess_Utmp utmp; |
removeLineFromUtmp(d->ttyName, d->masterFd); |
utmp.cmdFd = d->masterFd; |
|
utmp << "/usr/sbin/utempter" << "-d" << d->ttyName; |
|
utmp.start(KProcess::Block); |
|
#elif defined(USE_LOGIN) | #elif defined(USE_LOGIN) |
const char *str_ptr = d->ttyName.data(); | const char *str_ptr = d->ttyName.data(); |
if (!memcmp(str_ptr, "/dev/", 5)) | if (!memcmp(str_ptr, "/dev/", 5)) |