FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > ArchLinux > ArchLinux General Discussion

 
 
LinkBack Thread Tools
 
Old 01-04-2012, 10:33 AM
SanskritFritz
 
Default Seemingly archlinux specific problem with logkeys

I started a topic on the forum, but we didnt reach to any solution:
https://bbs.archlinux.org/viewtopic.php?id=129528

In hope for a more competent audience, I repost my question now here:

It looks like there is an archlinux specific problem with logkeys:
http://code.google.com/p/logkeys/issues/detail?id=60
I also am hit by this, and would like to ask for your help guys. Any
idea what could cause this?
In a nutshell:

strace -f logkeys -s
shows that the logfile could not be written for some reason:
[pid 10516] write(1, "Logging started ...

2011-11-02 "..., 48) = -1
EBADF (Bad file descriptor)

The comments all have in common that they use archlinux, hence I dared
to post here.
 
Old 01-04-2012, 11:03 AM
Scott Lawrence
 
Default Seemingly archlinux specific problem with logkeys

On 01/04/2012 06:33 AM, SanskritFritz wrote:
> I started a topic on the forum, but we didnt reach to any solution:
> https://bbs.archlinux.org/viewtopic.php?id=129528
>
> In hope for a more competent audience, I repost my question now here:
>
> It looks like there is an archlinux specific problem with logkeys:
> http://code.google.com/p/logkeys/issues/detail?id=60
> I also am hit by this, and would like to ask for your help guys. Any
> idea what could cause this?
> In a nutshell:
>
> strace -f logkeys -s
> shows that the logfile could not be written for some reason:
> [pid 10516] write(1, "Logging started ...

2011-11-02 "..., 48) = -1
> EBADF (Bad file descriptor)
>
> The comments all have in common that they use archlinux, hence I dared
> to post here.

Huh. logkeys apparently does some stunny fuff with stdout
(stdout=freopen(fname, "a", stdout) instead of just fopen'ing a new
file) - changing that to be more "normal" fixes the problem for me.
Attached is my patch for this. (I'll also stick it on the issue tracker.)

--
Scott Lawrence
 
Old 01-04-2012, 11:34 AM
Dennis Herbrich
 
Default Seemingly archlinux specific problem with logkeys

On Wed, Jan 04, 2012 at 07:03:56AM -0500, Scott Lawrence wrote:
> On 01/04/2012 06:33 AM, SanskritFritz wrote:
> > I started a topic on the forum, but we didnt reach to any solution:
> > https://bbs.archlinux.org/viewtopic.php?id=129528
> >
> > In hope for a more competent audience, I repost my question now here:
> >
> > It looks like there is an archlinux specific problem with logkeys:
> > http://code.google.com/p/logkeys/issues/detail?id=60
> > I also am hit by this, and would like to ask for your help guys. Any
> > idea what could cause this?
> > In a nutshell:
> >
> > strace -f logkeys -s
> > shows that the logfile could not be written for some reason:
> > [pid 10516] write(1, "Logging started ...

2011-11-02 "..., 48) = -1
> > EBADF (Bad file descriptor)
> >
> > The comments all have in common that they use archlinux, hence I dared
> > to post here.
>
> Huh. logkeys apparently does some stunny fuff with stdout
> (stdout=freopen(fname, "a", stdout) instead of just fopen'ing a new
> file) - changing that to be more "normal" fixes the problem for me.
> Attached is my patch for this. (I'll also stick it on the issue tracker.)

Yeah, I verified the issue and came to the same conclusion. Re-assigning stdout
that way is not supposed to happen, and seemingly unnecessary, too.

To actually add something to the discussion, please find my fixed PKGBUILD and
patch for ABS attached. It's basically the same as Scott's with minor stylistic
differences.

Regards,
Dennis

--
"Den Rechtsstaat macht aus, dass Unschuldige wieder frei kommen."
Dr. Wolfgang Schäuble, Bundesinnenminister (14.10.08, TAZ-Interview)

0D21BE6C - F3DC D064 BB88 5162 56BE 730F 5471 3881 0D21 BE6C
# Maintainer: domanov <_domanov_@_gmail_.com>
pkgname=logkeys
pkgver=0.1.1a
pkgrel=3
pkgdesc="A simple keylogger"
arch=('i686' 'x86_64')
url="http://code.google.com/p/logkeys/"
license=('GPLv3')
source=(http://logkeys.googlecode.com/files/$pkgname-$pkgver.tar.gz logkeys-stdout.patch)
md5sums=('19362a382b65e89c66ea4c5642297589' 'c11258ab13560081c2cdb56ccd31c6cd')
optdepends=('logkeys-keymap: for keymaps other than standard en_US')
build() {
cd $srcdir/$pkgname-$pkgver
patch -p1 < $srcdir/logkeys-stdout.patch
./configure --prefix=/usr
make || return 1
make prefix=$pkgdir/usr install
}

diff -urN logkeys-0.1.1a.org/src/logkeys.cc logkeys-0.1.1a/src/logkeys.cc
--- logkeys-0.1.1a.org/src/logkeys.cc 2010-05-31 07:04:57.000000000 +0200
+++ logkeys-0.1.1a/src/logkeys.cc 2012-01-04 13:18:49.000000000 +0100
@@ -237,8 +237,7 @@
memset(shift_keys, '', sizeof(shift_keys));
memset(altgr_keys, '', sizeof(altgr_keys));

- stdin = freopen(args.keymap, "r", stdin);
- if (stdin == NULL)
+ if (freopen(args.keymap, "r", stdin) == NULL)
error(EXIT_FAILURE, errno, "Error opening input keymap '%s'", args.keymap);

unsigned int i = -1;
@@ -354,7 +353,9 @@


int main(int argc, char **argv)
-{
+{
+ FILE *ofp;
+
on_exit(exit_cleanup, NULL);

if (geteuid()) error(EXIT_FAILURE, errno, "Got r00t?");
@@ -424,10 +425,10 @@
setegid(getgid());
}

- // open log file as stdout (if file doesn't exist, create it with safe 0600 permissions)
+ // open log file (if file doesn't exist, create it with safe 0600 permissions)
umask(0177);
- stdout = freopen(args.logfile, "a", stdout);
- if (stdout == NULL)
+ ofp = fopen(args.logfile, "a");
+ if (ofp == NULL)
error(EXIT_FAILURE, errno, "Error opening output file '%s'", args.logfile);

// now we need those privileges back in order to create system-wide PID_FILE
@@ -457,10 +458,10 @@
strftime(timestamp, sizeof(timestamp), TIME_FORMAT, localtime(&cur_time));

if (args.flags & FLAG_NO_TIMESTAMPS)
- file_size += fprintf(stdout, "Logging started at %s

", timestamp);
+ file_size += fprintf(ofp, "Logging started at %s

", timestamp);
else
- file_size += fprintf(stdout, "Logging started ...

%s", timestamp);
- fflush(stdout);
+ file_size += fprintf(ofp, "Logging started ...

%s", timestamp);
+ fflush(ofp);

// infinite loop: exit gracefully by receiving SIGHUP, SIGINT or SIGTERM (of which handler closes input_fd)
while (read(input_fd, &event, sizeof(struct input_event)) > 0) {
@@ -476,14 +477,14 @@
scan_code = event.code;

if (scan_code >= sizeof(char_or_func)) { // keycode out of range, log error
- inc_size += fprintf(stdout, "<E-%x>", scan_code);
+ inc_size += fprintf(ofp, "<E-%x>", scan_code);
if (inc_size > 0) file_size += inc_size;
continue;
}

// if remote posting is enabled and size treshold is reached
if (args.post_size != 0 && file_size >= args.post_size && stat(UPLOADER_PID_FILE, &st) == -1) {
- fclose(stdout);
+ fclose(ofp);

std::stringstream ss;
for (int i = 1;; ++i) {
@@ -496,8 +497,8 @@
if (rename(args.logfile, ss.str().c_str()) == -1) // move current log file to indexed
error(EXIT_FAILURE, errno, "Error renaming logfile");

- stdout = fopen(args.logfile, "a"); // open empty log file with the same name
- if (stdout == NULL)
+ ofp = fopen(args.logfile, "a"); // open empty log file with the same name
+ if (ofp == NULL)
error(EXIT_FAILURE, errno, "Error opening output file '%s'", args.logfile);

file_size = 0; // new log file is now empty
@@ -521,7 +522,7 @@
prev_code == KEY_LEFTSHIFT || prev_code == KEY_RIGHTCTRL); // if repeated key is modifier, do nothing
else {
if ((args.flags & FLAG_NO_FUNC_KEYS) && is_func_key(prev_code)); // if repeated was function key, and if we don't log function keys, then don't log repeat either
- else inc_size += fprintf(stdout, "<#+%d>", count_repeats);
+ else inc_size += fprintf(ofp, "<#+%d>", count_repeats);
}
count_repeats = 0; // reset count for future use
}
@@ -533,12 +534,12 @@
if (scan_code == KEY_ENTER || scan_code == KEY_KPENTER ||
(ctrl_in_effect && (scan_code == KEY_C || scan_code == KEY_D))) {
if (ctrl_in_effect)
- inc_size += fprintf(stdout, "%lc", char_keys[to_char_keys_index(scan_code)]); // log C or D
+ inc_size += fprintf(ofp, "%lc", char_keys[to_char_keys_index(scan_code)]); // log C or D
if (args.flags & FLAG_NO_TIMESTAMPS)
- inc_size += fprintf(stdout, "
");
+ inc_size += fprintf(ofp, "
");
else {
strftime(timestamp, sizeof(timestamp), "
" TIME_FORMAT, localtime(&event.time.tv_sec));
- inc_size += fprintf(stdout, "%s", timestamp); // then newline and timestamp
+ inc_size += fprintf(ofp, "%s", timestamp); // then newline and timestamp
}
if (inc_size > 0) file_size += inc_size;
continue; // but don't log "<Enter>"
@@ -571,17 +572,17 @@
else // neither altgr nor shift are effective, this is a normal char
wch = char_keys[to_char_keys_index(scan_code)];

- if (wch != L'') inc_size += fprintf(stdout, "%lc", wch); // write character to log file
+ if (wch != L'') inc_size += fprintf(ofp, "%lc", wch); // write character to log file
}
else if (is_func_key(scan_code)) {
if (!(args.flags & FLAG_NO_FUNC_KEYS)) { // only log function keys if --no-func-keys not requested
- inc_size += fprintf(stdout, "%ls", func_keys[to_func_keys_index(scan_code)]);
+ inc_size += fprintf(ofp, "%ls", func_keys[to_func_keys_index(scan_code)]);
}
else if (scan_code == KEY_SPACE || scan_code == KEY_TAB) {
- inc_size += fprintf(stdout, " "); // but always log a single space for Space and Tab keys
+ inc_size += fprintf(ofp, " "); // but always log a single space for Space and Tab keys
}
}
- else inc_size += fprintf(stdout, "<E-%x>", scan_code); // keycode is neither of character nor function, log error
+ else inc_size += fprintf(ofp, "<E-%x>", scan_code); // keycode is neither of character nor function, log error
} // if (EV_MAKE)

// on key release
@@ -595,7 +596,7 @@
}

prev_code = scan_code;
- fflush(stdout);
+ fflush(ofp);
if (inc_size > 0) file_size += inc_size;

} // while (read(input_fd))
@@ -603,9 +604,9 @@
// append final timestamp, close files and exit
time(&cur_time);
strftime(timestamp, sizeof(timestamp), "%F %T%z", localtime(&cur_time));
- fprintf(stdout, "

Logging stopped at %s

", timestamp);
+ fprintf(ofp, "

Logging stopped at %s

", timestamp);

- fclose(stdout);
+ fclose(ofp);

remove(PID_FILE);
 
Old 01-04-2012, 09:39 PM
SanskritFritz
 
Default Seemingly archlinux specific problem with logkeys

On Wed, Jan 4, 2012 at 1:34 PM, Dennis Herbrich <dennis@archlinux.org> wrote:
> On Wed, Jan 04, 2012 at 07:03:56AM -0500, Scott Lawrence wrote:
>> Huh. logkeys apparently does some stunny fuff with stdout
>> (stdout=freopen(fname, "a", stdout) instead of just fopen'ing a new
>> file) - changing that to be more "normal" fixes the problem for me.
>> Attached is my patch for this. (I'll also stick it on the issue tracker.)
>
> Yeah, I verified the issue and came to the same conclusion. Re-assigning stdout
> that way is not supposed to happen, and seemingly unnecessary, too.
>
> To actually add something to the discussion, please find my fixed PKGBUILD and
> patch for ABS attached. It's basically the same as Scott's with minor stylistic
> differences.

Guys, you rock, thank you. The maintainer already applied the patch in
the svn, I recompiled logkeys-svn, and presto logkeys works, finally.
Thanks again.
 

Thread Tools




All times are GMT. The time now is 06:22 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright ©2007 - 2008, www.linux-archive.org