Hello community,

here is the log from the commit of package tcsh for openSUSE:Factory checked in 
at 2017-08-08 11:57:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/tcsh (Old)
 and      /work/SRC/openSUSE:Factory/.tcsh.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "tcsh"

Tue Aug  8 11:57:45 2017 rev:62 rq:511380 version:6.20.00

Changes:
--------
--- /work/SRC/openSUSE:Factory/tcsh/tcsh.changes        2017-05-04 
08:52:50.786151598 +0200
+++ /work/SRC/openSUSE:Factory/.tcsh.new/tcsh.changes   2017-08-08 
11:57:47.124312527 +0200
@@ -1,0 +2,16 @@
+Wed Jul 19 10:25:40 UTC 2017 - wer...@suse.de
+
+- Add patch tcsh-6.20.00-avoid-dotlock-for-fcntl.patch as we are
+  using fcntl's F_SETLKW patches for locking therefore avoid dot
+  file locking without holding a file descriptor as otherwise we
+  migth not be able to open the history file after a crash or if
+  a killall had been used during reboot.
+
+-------------------------------------------------------------------
+Fri Jun 16 07:54:55 UTC 2017 - wer...@suse.de
+
+- Add patch tcsh-closem.patch to fix a long standing misbehaviour
+  of upstram tcsh whic his that it close sockets which do not
+  belong to it (bsc#1028864)
+
+-------------------------------------------------------------------

New:
----
  tcsh-6.20.00-avoid-dotlock-for-fcntl.patch
  tcsh-closem.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ tcsh.spec ++++++
--- /var/tmp/diff_new_pack.X8aT7g/_old  2017-08-08 11:57:48.308145792 +0200
+++ /var/tmp/diff_new_pack.X8aT7g/_new  2017-08-08 11:57:48.328142976 +0200
@@ -43,6 +43,10 @@
 Patch13:        tcsh-6.20-ptr-update.patch
 # PATCH-FIX-SUSE Do not convert current used control bytes into wide characters
 Patch14:        tcsh-6.20.00-8bit-cmdkeys.patch
+# PATCH-FIX-COMMUNITY Slightly less drastic closem() -- bsc#1028864
+Patch15:        tcsh-closem.patch
+# PATCH-FIX-SUSE Aoid dot locking as patch 9 and 11 do the job better
+Patch16:        tcsh-6.20.00-avoid-dotlock-for-fcntl.patch
 BuildRequires:  autoconf
 BuildRequires:  fdupes
 BuildRequires:  ncurses-devel
@@ -74,6 +78,8 @@
 %patch12 -p1 -b .rmstar
 %patch13 -p0 -b .ptrbuf
 %patch14 -p0 -b .8bit
+%patch15 -p0 -b .nss
+%patch16 -p0 -b .nodtlck
 %patch0 -b .0
 
 %build

++++++ tcsh-6.20.00-avoid-dotlock-for-fcntl.patch ++++++
---
 sh.hist.c |    6 ++++++
 1 file changed, 6 insertions(+)

--- sh.hist.c
+++ sh.hist.c   2017-07-19 10:01:20.795354927 +0000
@@ -1278,6 +1278,11 @@ rechist(Char *fname, int ref)
        }
 
        if (merge) {
+#if 0 /* We are using fcntl's F_SETLKW patch for locking
+       * therefore avoid dot file locking without holding
+       * a file descriptor as otherwise we migth not be
+       * able to open the history file after a crash or
+       * if a killall had been used during reboot. */
            if (lock) {
 #ifndef WINNT_NATIVE
                char *lockpath = strsave(short2str(fname));
@@ -1287,6 +1292,7 @@ rechist(Char *fname, int ref)
                    cleanup_push(lockpath, dotlock_cleanup);
 #endif
            }
+#endif
            /* Read .history file, leave it's fd open for writing. */
            fd = loadhist(fname, 
HIST_MERGE|HIST_FILE_WRLCK|HIST_FILE_OPEN|HIST_FILE_LOCK);
            if (fd > 0) {
++++++ tcsh-closem.patch ++++++
[PATCH] Slightly less drastic closem()
Miloslav Trmac mitr at volny.cz
Thu Sep 9 19:17:10 EDT 2004

    Previous message: [PATCH] Slightly less drastic closem()
    Next message: Newlines in command substitution
    Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]

On Wed, Sep 08, 2004 at 08:38:03PM -0400, Christos Zoulas wrote:
(Original mail reordered)
> Finally, I do have an old patch that makes tcsh not use closem at all,
> and adds sh like I/O redirection (plus other fd manipulations) to it,
sh-like I/O redirection could actually make the problem worse if
tcsh is using NSS after performing the redirections --- I haven't checked
whether it does.

Avoiding closem () completely is of course the "correct" fix, but I'm
afraid I won't be able to spend the time needed to do this.


> The same problem has been present for years with NIS. Same as with nss_ldap,
> NIS happily discovers that the fd it was using before is gone, and re-opens
> it.
Are other file types than sockets involved?

> I don't like the socket hack because:
> 
> 1. It makes closem not close all the fds anymore.
I have already argued this should not be a problem: tcsh never
creates sockets.

> 3. the message that nss_ldap produces should be log_debug at best.
I can imagine scenarios where the message is really useful, but
I don't feel strongly about it.

> 2. The fact that nss_ldap uses sockets now is an artifact of the
>    implementation. What if tomorrow it changes to use doors or named pipes?
I have never met doors in practice so I won't comment on them except by
noting that the nss_ldap in question surely won't use them.

If nss_ldap used named pipes, the "it is necessary for performance"
justification would be so weak that I would prefer patching nss_ldap
to close the pipe after each call instead of changing tcsh.

nss_ldap and tcsh are fighting over a gray area in the
system <-> application contract, so it seems reasonable to
solve it by a "compromise", restricting the behavior of both.


AFAICS, solving the general case reliably would require a lot of work
and I have no emprical evidence suggesting that this work is necessary.

To make this lobbying attempt complete :-), I'm attaching a properly
commented socket hack patch.
    Mirek
---
 sh.misc.c |   11 +++++++++++
 1 file changed, 11 insertions(+)

--- sh.misc.c
+++ sh.misc.c   2017-06-16 07:51:59.732399828 +0000
@@ -257,6 +257,7 @@ void
 closem(void)
 {
     int f, num_files;
+    struct stat st;
 
 #ifdef NLS_BUGS
 #ifdef NLS_CATALOGS
@@ -274,6 +275,16 @@ closem(void)
 #ifdef MALLOC_TRACE
            && f != 25
 #endif /* MALLOC_TRACE */
+#ifdef S_ISSOCK
+           /* NSS modules (e.g. Linux nss_ldap) might keep sockets open.
+            * If we close such a socket, both the NSS module and tcsh think
+            * they "own" the descriptor.
+            *
+            * Not closing sockets does not make the cleanup use of closem()
+            * less reliable because tcsh never creates sockets.
+            */
+           && fstat(f, &st) == 0 && !S_ISSOCK(st.st_mode)      
+#endif
            )
          {
            xclose(f);

Reply via email to