Bug#332198: [Pkg-shadow-devel] Bug#332198: Status of this bug
Alexander Gattin
xrgtn at yandex.ru
Fri Jan 6 22:24:01 UTC 2006
Hi!
On Fri, Jan 06, 2006 at 06:50:07PM +0100, Christian Perrier wrote:
> I absolutely don't know whether someone is still investigating it. I
> even don't know if it happens with recent releases of shadow.
I suspect it does. Sometimes. Actually I think the bug
is caused by /var/tmp/utmp file being corrupt from time
to time.
> In short, this seems to be a nice piece of nasty nightmare which could
> lie around for a very long time until someone is really annoyed by
> this again.
>
> So, what do we do?
I propose to add syslog debug statements in the code
which will provide more information about tty when bug
_happens_. I think we could enable this debugging code
and just distribute the shadow with it compiled in,
because it will increase shadow's verbosity only a bit.
P.S. I have already patched/modified source
(libmisc/chowntty.c) in my working directory of
Tomasz's CVS. Diff against most recent CVS is attached.
You can see that even when error happens the code uses
LOG_DEBUG level.
If you agree upon this behaviour, I'll generate quilt
patch and enable it.
--
WBR,
xrgtn
-------------- next part --------------
Index: libmisc/chowntty.c
===================================================================
RCS file: /cvsroot/shadow/libmisc/chowntty.c,v
retrieving revision 1.13
diff -u -r1.13 chowntty.c
--- libmisc/chowntty.c 31 Aug 2005 17:24:57 -0000 1.13
+++ libmisc/chowntty.c 6 Jan 2006 22:17:10 -0000
@@ -40,6 +40,7 @@
#include "defines.h"
#include <pwd.h>
#include "getdef.h"
+#include <sys/sysmacros.h>
/*
* is_my_tty -- determine if "tty" is the same as TTY stdin is using
*/
@@ -47,12 +48,31 @@
{
struct stat by_name, by_fd;
- if (stat (tty, &by_name) || fstat (0, &by_fd))
+ if (stat (tty, &by_name)) {
+ SYSLOG ((LOG_DEBUG,
+ "can't stat(`%s') - error #%i\n", tty, errno));
+ closelog ();
return 0;
+ }
- if (by_name.st_rdev != by_fd.st_rdev)
+ if (fstat (0, &by_fd)) {
+ SYSLOG ((LOG_DEBUG,
+ "can't fstat(stdin) - error #%i\n", errno));
+ closelog ();
return 0;
- else
+ }
+
+ if (by_name.st_rdev != by_fd.st_rdev) {
+ SYSLOG ((LOG_DEBUG,
+ "`%s'.st_rdev(%u,%u) != stdin.st_rdev(%u,%u)\n",
+ tty,
+ /* XXX: dev_t is 64bit, gnu_dev_mXXor are used
+ * which are GNU extn */
+ major(by_name.st_rdev), minor(by_name.st_rdev),
+ major(by_fd.st_rdev), minor(by_fd.st_rdev)));
+ closelog ();
+ return 0;
+ } else
return 1;
}
More information about the Pkg-shadow-devel
mailing list