]> err.no Git - dpkg/commitdiff
updates from Chip Salzenberg to clean up fd handling
authorWichert Akkerman <wakkerma@debian.org>
Tue, 22 Aug 2000 21:21:58 +0000 (21:21 +0000)
committerWichert Akkerman <wakkerma@debian.org>
Tue, 22 Aug 2000 21:21:58 +0000 (21:21 +0000)
ChangeLog
debian/changelog
dpkg-deb/build.c
dpkg-deb/extract.c
lib/lock.c
main/archives.c
main/configure.c
main/filesdb.c

index 66d408284021df0218e040186b69e79604b98ef0..6c230ed1af7a0a91a1d2bdd295fc7020113bd0d6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Mon Aug 21 12:58:15 CEST 2000 Wichert Akkerman <wakkerma@debian.org>
+
+  * lib/lock.c, main/filesdb.c, main/archives.c, main/configure.c,
+     dpkg-deb/build.c, dpkg-deb/extract.c: updates from Chip Salzenberg
+     to clean up fd handling
+
 Thu Aug 10 21:08:00 CEST 2000 peter karlsson <peterk@debian.org>
 
   * po/sv.po: More corrections and translation updates.
index a6ee003f586e7fd33fb0162454048941739e6af7..cd7b2ab294e39ec262d48b91f0cc01b1b5669e0b 100644 (file)
@@ -19,6 +19,7 @@ dpkg (1.7.0) unstable; urgency=low
   * archtable: add ia64; revert sparc64 so that it turns into sparc. There
     wont be a full binary-sparc64 port.
   * dselect/main.cc: small fixups to get it to compile with gcc-2.96
+  * Clean  up fd handling in some places. Closes: Bug#69359,#69360,#69361
 
  -- Wichert Akkerman <wakkerma@debian.org>  UNRELEASED
 
index 56530a726e545d24389f97fb5941e8a4b368426e..60398f290005f21413bd8a40b3ede37eec17137d 100644 (file)
@@ -334,7 +334,7 @@ void do_build(const char *const *argv) {
   strcat(tfbuf,"/dpkg.XXXXXX");
   /* And run gzip to compress our control archive */
   if (!(c2= m_fork())) {
-    m_dup2(p1[0],0); m_dup2(gzfd,1); close(p1[0]);
+    m_dup2(p1[0],0); m_dup2(gzfd,1); close(p1[0]); close(gzfd);
     execlp(GZIP,"gzip","-9c",(char*)0); ohshite(_("failed to exec gzip -9c"));
   }
   close(p1[0]);
index fb69c1f524d874cb5b17f925c94e8f5088acb699..8bfb9eccc15067a101fc0a12d4467ce56c0045c2 100644 (file)
@@ -267,7 +267,7 @@ void extracthalf(const char *debar, const char *directory,
     execlp(GZIP,"gzip","-dc",(char*)0); ohshite(_("failed to exec gzip -dc"));
   }
   if (readfromfd != fileno(ar)) close(readfromfd);
-  close(p2[1]);
+  if (taroption) close(p2[1]);
 
   if (taroption && directory) {
     if (chdir(directory)) {
@@ -287,6 +287,7 @@ void extracthalf(const char *debar, const char *directory,
       strcpy(buffer, taroption);
       strcat(buffer, "f");
       m_dup2(p2[0],0);
+      close(p2[0]);
       execlp(TAR,"tar",buffer,"-",(char*)0);
       ohshite(_("failed to exec tar"));
     }
index ae95df34f4af7993cbc9cbe3c28b1bccff02da75..6ae29bf578a0dfdf45d7198b89f9c1a6ae954fdb 100644 (file)
@@ -78,5 +78,7 @@ void lockdatabase(const char *admindir) {
       ohshit(_("status database area is locked by another process"));
     ohshite(_("unable to lock dpkg status database"));
   }
+  n= fcntl(dblockfd, F_GETFD);
+  if (n >= 0) fcntl(dblockfd, F_SETFD, n | FD_CLOEXEC);
   push_cleanup(cu_unlockdb,~0, 0,0, 0);
 }
index 0e87865bbde8eed644fc94e386b8c112dbc6dc88..72a2780379867b514c1b9896da6ddb7c397a7b39 100644 (file)
@@ -735,7 +735,7 @@ void archivefiles(const char *const *argv) {
     if (!(fc= m_fork())) {
       const char *const *ap;
       int i;
-      m_dup2(pi[1],1); close(pi[0]);
+      m_dup2(pi[1],1); close(pi[0]); close(pi[1]);
       for (i=0, ap=argv; *ap; ap++, i++);
       arglist= m_malloc(sizeof(char*)*(i+15));
       arglist[0]= FIND;
@@ -760,10 +760,10 @@ void archivefiles(const char *const *argv) {
       execvp(FIND, (char* const*)arglist);
       ohshite(_("failed to exec find for --recursive"));
     }
+    close(pi[1]);
 
     nfiles= 0;
     pf= fdopen(pi[0],"r");  if (!pf) ohshite(_("failed to fdopen find's pipe"));
-    close(pi[1]);
     varbufreset(&findoutput);
     while ((c= fgetc(pf)) != EOF) {
       varbufaddc(&findoutput,c);
index fe69e47514a65d95cd17b17988abbfe529c82e55..f3d407d5ecc74222905783e41637678cdad719a3 100644 (file)
@@ -546,7 +546,7 @@ static void md5hash(struct pkginfo *pkg, char hashbuf[33], const char *fn) {
     m_pipe(p1);
     push_cleanup(cu_closepipe,ehflag_bombout, 0,0, 1,(void*)&p1[0]);
     if (!(c1= m_fork())) {
-      m_dup2(fd,0); m_dup2(p1[1],1); close(p1[0]);
+      m_dup2(fd,0); m_dup2(p1[1],1); close(p1[0]); close(p1[1]);
       execlp(MD5SUM,MD5SUM,(char*)0);
       ohshite(_("failed to exec md5sum"));
     }
index 182e130d4f99d02dd51bba71a3634529bdc61481..1545c3173d431016926c38c2f61a19a4d404e2ec 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <assert.h>
 #include <unistd.h>
+#include <fcntl.h>
 #include <string.h>
 #include <errno.h>
 #include <sys/stat.h>
@@ -479,6 +480,8 @@ void ensure_diversions(void) {
       fclose(file); onerr_abort--; return;
     }
   }
+  l= fcntl(fileno(file), F_GETFD);
+  if (l >= 0) fcntl(fileno(file), F_SETFD, l | FD_CLOEXEC);
   if (diversionsfile) fclose(diversionsfile);
   diversionsfile= file;