From 435ed5a820819188578df4a8a730a6b084a9f29f Mon Sep 17 00:00:00 2001
From: Dustin J. Mitchell <dustin@zmanda.com>
Date: Fri, 4 Sep 2009 17:49:08 -0400
Subject: [PATCH] test patch

---
 amandad-src/amandad.c   |   79 ++++++++++++++++++++++++-----------------------
 client-src/sendbackup.c |   26 ++++++++--------
 common-src/file.c       |    4 +-
 common-src/util.c       |   50 +++++++++++++++++++++++++++++
 common-src/util.h       |    5 +++
 5 files changed, 110 insertions(+), 54 deletions(-)

diff --git a/amandad-src/amandad.c b/amandad-src/amandad.c
index 64226fb..6f3d9ef 100644
--- a/amandad-src/amandad.c
+++ b/amandad-src/amandad.c
@@ -486,8 +486,8 @@ main(
      */
     event_loop(0);
 
-    close(in);
-    close(out);
+    dbg_close(in);
+    dbg_close(out);
     dbclose();
     return(0);
 }
@@ -668,7 +668,7 @@ protocol_accept(
 	    service, errmsg);
 	goto send_pkt_out;
     }
-    aclose(as->reqfd);
+    dbg_close(as->reqfd);
 
     amfree(pktbody);
     amfree(service);
@@ -986,7 +986,7 @@ s_repwait(
     as->ev_reptimeout = NULL;
 
     as->state = s_processrep;
-    aclose(as->repfd);
+    dbg_close(as->repfd);
     return (A_CONTINUE);
 }
 
@@ -1441,7 +1441,7 @@ process_writenetfd(
 	security_stream_read(dh->netfd, process_writenetfd, dh);
     }
     else {
-	aclose(dh->fd_write);
+	dbg_close(dh->fd_write);
     }
 }
 
@@ -1519,20 +1519,21 @@ service_new(
      * data_write[4]               : stderr
      */
     for (i = 0; i < DATA_FD_COUNT + 1; i++) {
-	if (pipe(data_read[i]) < 0) {
+	if (dbg_pipe(data_read[i]) < 0) {
 	    error(_("pipe: %s\n"), strerror(errno));
 	    /*NOTREACHED*/
 	}
-	if (pipe(data_write[i]) < 0) {
+	if (dbg_pipe(data_write[i]) < 0) {
 	    error(_("pipe: %s\n"), strerror(errno));
 	    /*NOTREACHED*/
 	}
     }
-    if (pipe(data_write[STDERR_PIPE]) < 0) {
+    if (dbg_pipe(data_write[STDERR_PIPE]) < 0) {
 	error(_("pipe: %s\n"), strerror(errno));
 	/*NOTREACHED*/
     }
 
+    g_debug("forking for service %s", cmd);
     switch(pid = fork()) {
     case -1:
 	error(_("could not fork service %s: %s\n"), cmd, strerror(errno));
@@ -1569,14 +1570,14 @@ service_new(
 	}
 
 	/* write to the request pipe */
-	aclose(data_read[0][0]);
+	dbg_close(data_read[0][0]);
 	as->reqfd = data_read[0][1];
 
 	/*
 	 * read from the reply pipe
 	 */
 	as->repfd = data_write[0][0];
-	aclose(data_write[0][1]);
+	dbg_close(data_write[0][1]);
 	as->ev_repfd = NULL;
 	as->repbuf = NULL;
 	as->repbufsize = 0;
@@ -1588,7 +1589,7 @@ service_new(
 	 * read from the stderr pipe
 	 */
 	as->errfd = data_write[STDERR_PIPE][0];
-	aclose(data_write[STDERR_PIPE][1]);
+	dbg_close(data_write[STDERR_PIPE][1]);
 	as->ev_errfd = NULL;
 	as->errbuf = NULL;
 
@@ -1597,8 +1598,8 @@ service_new(
 	 * (netfds are opened as the client requests them)
 	 */
 	for (i = 0; i < DATA_FD_COUNT; i++) {
-	    aclose(data_read[i + 1][1]);
-	    aclose(data_write[i + 1][0]);
+	    dbg_close(data_read[i + 1][1]);
+	    dbg_close(data_write[i + 1][0]);
 	    as->data[i].fd_read = data_read[i + 1][0];
 	    as->data[i].fd_write = data_write[i + 1][1];
 	    as->data[i].ev_read = NULL;
@@ -1621,27 +1622,27 @@ service_new(
 	/*
 	 * The data stream is stdin in the new process
 	 */
-        if (dup2(data_read[0][0], 0) < 0) {
+        if (dbg_dup2(data_read[0][0], 0) < 0) {
 	    error(_("dup %d to %d failed: %s\n"), data_read[0][0], 0,
 		strerror(errno));
 	    /*NOTREACHED*/
 	}
-	aclose(data_read[0][0]);
-	aclose(data_read[0][1]);
+	dbg_close(data_read[0][0]);
+	dbg_close(data_read[0][1]);
 
 	/*
 	 * The reply stream is stdout
 	 */
-        if (dup2(data_write[0][1], 1) < 0) {
+        if (dbg_dup2(data_write[0][1], 1) < 0) {
 	    error(_("dup %d to %d failed: %s\n"), data_write[0][1], 1,
 		strerror(errno));
 	}
-        aclose(data_write[0][0]);
-        aclose(data_write[0][1]);
+        dbg_close(data_write[0][0]);
+        dbg_close(data_write[0][1]);
 
 	for (i = 0; i < DATA_FD_COUNT; i++) {
-	    aclose(data_read[i + 1][0]);
-	    aclose(data_write[i + 1][1]);
+	    dbg_close(data_read[i + 1][0]);
+	    dbg_close(data_write[i + 1][1]);
 	}
 
 	/*
@@ -1651,14 +1652,14 @@ service_new(
 	for (i = 0; i < DATA_FD_COUNT; i++) {
 	    while(data_read[i + 1][1] >= DATA_FD_OFFSET &&
 		  data_read[i + 1][1] <= DATA_FD_OFFSET + DATA_FD_COUNT*2 - 1) {
-		newfd = dup(data_read[i + 1][1]);
+		newfd = dbg_dup(data_read[i + 1][1]);
 		if(newfd == -1)
 		    error(_("Can't dup out off DATA_FD range"));
 		data_read[i + 1][1] = newfd;
 	    }
 	    while(data_write[i + 1][0] >= DATA_FD_OFFSET &&
 		  data_write[i + 1][0] <= DATA_FD_OFFSET + DATA_FD_COUNT*2 - 1) {
-		newfd = dup(data_write[i + 1][0]);
+		newfd = dbg_dup(data_write[i + 1][0]);
 		if(newfd == -1)
 		    error(_("Can't dup out off DATA_FD range"));
 		data_write[i + 1][0] = newfd;
@@ -1666,45 +1667,45 @@ service_new(
 	}
 	while(data_write[4][0] >= DATA_FD_OFFSET &&
 	      data_write[4][0] <= DATA_FD_OFFSET + DATA_FD_COUNT*2 - 1) {
-	    newfd = dup(data_write[4][0]);
+	    newfd = dbg_dup(data_write[4][0]);
 	    if (newfd == -1)
 		error(_("Can't dup out off DATA_FD range"));
 	    data_write[4][0] = newfd;
 	}
 	while(data_write[4][1] >= DATA_FD_OFFSET &&
 	      data_write[4][1] <= DATA_FD_OFFSET + DATA_FD_COUNT*2 - 1) {
-	    newfd = dup(data_write[4][1]);
+	    newfd = dbg_dup(data_write[4][1]);
 	    if (newfd == -1)
 		error(_("Can't dup out off DATA_FD range"));
 	    data_write[4][1] = newfd;
 	}
 
 	for (i = 0; i < DATA_FD_COUNT*2; i++)
-	    close(DATA_FD_OFFSET + i);
+	    dbg_close(DATA_FD_OFFSET + i);
 
 	/*
 	 * The rest start at the offset defined in amandad.h, and continue
 	 * through the internal defined.
 	 */
 	for (i = 0; i < DATA_FD_COUNT; i++) {
-	    if (dup2(data_read[i + 1][1], i*2 + DATA_FD_OFFSET) < 0) {
+	    if (dbg_dup2(data_read[i + 1][1], i*2 + DATA_FD_OFFSET) < 0) {
 		error(_("dup %d to %d failed: %s\n"), data_read[i + 1][1],
 		    i + DATA_FD_OFFSET, strerror(errno));
 	    }
-	    aclose(data_read[i + 1][1]);
+	    dbg_close(data_read[i + 1][1]);
 
-	    if (dup2(data_write[i + 1][0], i*2 + 1 + DATA_FD_OFFSET) < 0) {
+	    if (dbg_dup2(data_write[i + 1][0], i*2 + 1 + DATA_FD_OFFSET) < 0) {
 		error(_("dup %d to %d failed: %s\n"), data_write[i + 1][0],
 		    i + DATA_FD_OFFSET, strerror(errno));
 	    }
-	    aclose(data_write[i + 1][0]);
+	    dbg_close(data_write[i + 1][0]);
 	}
 
 	/* close all unneeded fd */
-	close(STDERR_FILENO);
-	dup2(data_write[STDERR_PIPE][1], 2);
-        aclose(data_write[STDERR_PIPE][0]);
-        aclose(data_write[STDERR_PIPE][1]);
+	dbg_close(STDERR_FILENO);
+	dbg_dup2(data_write[STDERR_PIPE][1], 2);
+        dbg_close(data_write[STDERR_PIPE][0]);
+        dbg_close(data_write[STDERR_PIPE][1]);
 	safe_fd(DATA_FD_OFFSET, DATA_FD_COUNT*2);
 
 	execle(cmd, cmd, "amandad", auth, (char *)NULL, safe_env());
@@ -1736,9 +1737,9 @@ service_delete(
     amfree(as->arguments);
 
     if (as->reqfd != -1)
-	aclose(as->reqfd);
+	dbg_close(as->reqfd);
     if (as->repfd != -1)
-	aclose(as->repfd);
+	dbg_close(as->repfd);
 
     if (as->ev_repfd != NULL)
 	event_release(as->ev_repfd);
@@ -1748,8 +1749,8 @@ service_delete(
     for (i = 0; i < DATA_FD_COUNT; i++) {
 	dh = &as->data[i];
 
-	aclose(dh->fd_read);
-	aclose(dh->fd_write);
+	dbg_close(dh->fd_read);
+	dbg_close(dh->fd_write);
 
 	if (dh->netfd != NULL)
 	    security_stream_close(dh->netfd);
@@ -1803,7 +1804,7 @@ writebuf(
 	return 0;			/* this is the parent */
 
     case 0: 				/* this is the child */
-	close(as->repfd);
+	dbg_close(as->repfd);
 	writesize = full_write(as->reqfd, bufp, size);
 	exit(writesize != size);
 	/* NOTREACHED */
diff --git a/client-src/sendbackup.c b/client-src/sendbackup.c
index fca1f98..9d87eb5 100644
--- a/client-src/sendbackup.c
+++ b/client-src/sendbackup.c
@@ -559,7 +559,7 @@ main(
 	    return 0;
 	}
 
-	if (pipe(errfd) < 0) {
+	if (dbg_pipe(errfd) < 0) {
 	    char  *errmsg;
 	    char  *qerrmsg;
 	    errmsg = vstrallocf(_("Application '%s': can't create pipe"),
@@ -640,7 +640,7 @@ main(
 		    error(_("Can't dup2: %s"),strerror(errno));
 		    /*NOTREACHED*/
 		}
-		fcntl(indexfd, F_SETFD, 0);
+		dbg_fcntl(indexfd, F_SETFD, 0);
 	    }
 	    application_api_info_tapeheader(mesgfd, dle->program, dle);
 	    if (indexfd != 0) {
@@ -658,7 +658,7 @@ main(
 	    error(_("%s: fork returned: %s"), get_pname(), strerror(errno));
 	}
 
-	close(errfd[1]);
+	dbg_close(errfd[1]);
 	dumperr = fdopen(errfd[0],"r");
 	if (!dumperr) {
 	    error(_("Can't fdopen: %s"), strerror(errno));
@@ -707,7 +707,7 @@ main(
 	    }
 	}
  
-	if(pipe(mesgpipe) == -1) {
+	if(dbg_pipe(mesgpipe) == -1) {
 	    s = strerror(errno);
 	    dbprintf(_("error [opening mesg pipe: %s]\n"), s);
 	    error(_("error [opening mesg pipe: %s]"), s);
@@ -987,7 +987,7 @@ pipefork(
 
     dbprintf(_("Forking function %s in pipeline\n"), fname);
 
-    if(pipe(inpipe) == -1) {
+    if(dbg_pipe(inpipe) == -1) {
 	error(_("error [open pipe to %s: %s]"), fname, strerror(errno));
 	/*NOTREACHED*/
     }
@@ -997,11 +997,11 @@ pipefork(
 	error(_("error [fork %s: %s]"), fname, strerror(errno));
 	/*NOTREACHED*/
     default:	/* parent process */
-	aclose(inpipe[0]);	/* close input side of pipe */
+	dbg_close(inpipe[0]);	/* close input side of pipe */
 	*stdinfd = inpipe[1];
 	break;
     case 0:		/* child process */
-	aclose(inpipe[1]);	/* close output side of pipe */
+	dbg_close(inpipe[1]);	/* close output side of pipe */
 
 	if(dup2(inpipe[0], 0) == -1) {
 	    error(_("error [fork %s: dup2(%d, in): %s]"),
@@ -1195,7 +1195,7 @@ save_fd(
   int origfd = *fd;
 
   while (*fd >= 0 && *fd < min) {
-    int newfd = dup(*fd);
+    int newfd = dbg_dup(*fd);
     if (newfd == -1)
       dbprintf(_("Unable to save file descriptor [%s]\n"), strerror(errno));
     *fd = newfd;
@@ -1219,7 +1219,7 @@ start_index(
   if (!createindex)
     return;
 
-  if (pipe(pipefd) != 0) {
+  if (dbg_pipe(pipefd) != 0) {
     error(_("creating index pipe: %s"), strerror(errno));
     /*NOTREACHED*/
   }
@@ -1230,12 +1230,12 @@ start_index(
     /*NOTREACHED*/
 
   default:
-    aclose(pipefd[0]);
+    dbg_close(pipefd[0]);
     if (dup2(pipefd[1], input) == -1) {
       error(_("dup'ping index tee output: %s"), strerror(errno));
       /*NOTREACHED*/
     }
-    aclose(pipefd[1]);
+    dbg_close(pipefd[1]);
     return;
 
   case 0:
@@ -1253,7 +1253,7 @@ start_index(
   dup2(input, 3);
   for(index = 4; index < (int)FD_SETSIZE; index++) {
     if (index != dbfd()) {
-      close(index);
+      dbg_close(index);
     }
   }
 
@@ -1312,7 +1312,7 @@ start_index(
     }
   }
 
-  aclose(pipefd[1]);
+  dbg_close(pipefd[1]);
 
   /* finished */
   /* check the exit code of the pipe and moan if not 0 */
diff --git a/common-src/file.c b/common-src/file.c
index e8de92c..4ccf5a0 100644
--- a/common-src/file.c
+++ b/common-src/file.c
@@ -270,7 +270,7 @@ safe_fd(
 	     * sent to stderr do not accidentally get written to the
 	     * wrong file.
 	     */
-	    if (fcntl(fd, F_GETFD) == -1) {
+	    if (fcntl(fd, F_GETFD, 0) == -1) {
 		if (open("/dev/null", O_RDWR) == -1) {
 		   g_fprintf(stderr, _("/dev/null is inaccessable: %s\n"),
 		           strerror(errno));
@@ -741,7 +741,7 @@ int robust_open(const char * pathname, int flags, mode_t mode) {
 
 #ifdef F_SETFD
     if (result >= 0) {
-        fcntl(result, F_SETFD, 1); /* Throw away result. */
+        dbg_fcntl(result, F_SETFD, 1); /* Throw away result. */
     }
 #endif
 
diff --git a/common-src/util.c b/common-src/util.c
index 2a056bb..08ec540 100644
--- a/common-src/util.c
+++ b/common-src/util.c
@@ -1275,3 +1275,53 @@ get_pcontext(void)
     return pcontext;
 }
 
+
+int dbg_fcntl(int fd, int cmd, int arg)
+{
+    int saved_errno;
+    int rv = fcntl(fd, cmd, arg);
+    saved_errno = errno;
+    g_debug("%d: fcntl(%d, %d, %d) => %d (errno: %s)", getpid(), fd, cmd, arg, rv, strerror(errno));
+    errno = saved_errno;
+    return rv;
+}
+
+int dbg_dup(int oldfd)
+{
+    int saved_errno;
+    int rv = dup(oldfd);
+    saved_errno = errno;
+    g_debug("%d: dup(%d) => %d (errno: %s)", getpid(), oldfd, rv, strerror(errno));
+    errno = saved_errno;
+    return rv;
+}
+
+int dbg_dup2(int oldfd, int newfd)
+{
+    int saved_errno;
+    int rv = dup2(oldfd, newfd);
+    saved_errno = errno;
+    g_debug("%d: dup2(%d, %d) => %d (errno: %s)", getpid(), oldfd, newfd, rv, strerror(errno));
+    errno = saved_errno;
+    return rv;
+}
+
+int dbg_close(int fd)
+{
+    int saved_errno;
+    int rv = close(fd);
+    saved_errno = errno;
+    g_debug("%d: close(%d) => %d (errno: %s)", getpid(), fd, rv, strerror(errno));
+    errno = saved_errno;
+    return rv;
+}
+
+int dbg_pipe(int pipefd[2])
+{
+    int saved_errno;
+    int rv = pipe(pipefd);
+    saved_errno = errno;
+    g_debug("%d: pipe(..) => [%d, %d], %d (errno: %s)", getpid(), pipefd[0], pipefd[1], rv, strerror(errno));
+    errno = saved_errno;
+    return rv;
+}
diff --git a/common-src/util.h b/common-src/util.h
index d8d29cf..2441ecd 100644
--- a/common-src/util.h
+++ b/common-src/util.h
@@ -347,5 +347,10 @@ void proplist_add_to_argv(gpointer key_p,
 			  gpointer value_p,
 			  gpointer user_data_p);
 
+int dbg_fcntl(int fd, int cmd, int arg);
+int dbg_dup(int oldfd);
+int dbg_dup2(int oldfd, int newfd);
+int dbg_close(int fd);
+int dbg_pipe(int pipefd[2]);
 
 #endif	/* UTIL_H */
-- 
1.5.5.1

