Dolda2000 GitWeb
/
ashd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of git.dolda2000.com:/srv/git/r/ashd
[ashd.git]
/
lib
/
proc.c
diff --git
a/lib/proc.c
b/lib/proc.c
index
8646434
..
ac777d4
100644
(file)
--- a/
lib/proc.c
+++ b/
lib/proc.c
@@
-22,6
+22,7
@@
#include <sys/socket.h>
#include <errno.h>
#include <ctype.h>
#include <sys/socket.h>
#include <errno.h>
#include <ctype.h>
+#include <fcntl.h>
#ifdef HAVE_CONFIG_H
#include <config.h>
#ifdef HAVE_CONFIG_H
#include <config.h>
@@
-33,7
+34,6
@@
int stdmkchild(char **argv, void (*chinit)(void *), void *idata)
{
int stdmkchild(char **argv, void (*chinit)(void *), void *idata)
{
- int i;
pid_t pid;
int fd[2];
pid_t pid;
int fd[2];
@@
-44,21
+44,19
@@
int stdmkchild(char **argv, void (*chinit)(void *), void *idata)
if(pid == 0) {
if(chinit != NULL)
chinit(idata);
if(pid == 0) {
if(chinit != NULL)
chinit(idata);
- for(i = 3; i < FD_SETSIZE; i++) {
- if(i != fd[0])
- close(i);
- }
dup2(fd[0], 0);
close(fd[0]);
dup2(fd[0], 0);
close(fd[0]);
+ close(fd[1]);
execvp(argv[0], argv);
flog(LOG_WARNING, "could not exec child program %s: %s", argv[0], strerror(errno));
exit(127);
}
close(fd[0]);
execvp(argv[0], argv);
flog(LOG_WARNING, "could not exec child program %s: %s", argv[0], strerror(errno));
exit(127);
}
close(fd[0]);
+ fcntl(fd[1], F_SETFD, FD_CLOEXEC);
return(fd[1]);
}
return(fd[1]);
}
-int sendfd
(int sock, int fd, char *data, size_t datalen
)
+int sendfd
2(int sock, int fd, char *data, size_t datalen, int flags
)
{
struct msghdr msg;
struct cmsghdr *cmsg;
{
struct msghdr msg;
struct cmsghdr *cmsg;
@@
-80,7
+78,12
@@
int sendfd(int sock, int fd, char *data, size_t datalen)
*((int *)CMSG_DATA(cmsg)) = fd;
msg.msg_controllen = cmsg->cmsg_len;
*((int *)CMSG_DATA(cmsg)) = fd;
msg.msg_controllen = cmsg->cmsg_len;
- return(sendmsg(sock, &msg, MSG_NOSIGNAL | MSG_DONTWAIT));
+ return(sendmsg(sock, &msg, flags));
+}
+
+int sendfd(int sock, int fd, char *data, size_t datalen)
+{
+ return(sendfd2(sock, fd, data, datalen, MSG_NOSIGNAL));
}
int recvfd(int sock, char **data, size_t *datalen)
}
int recvfd(int sock, char **data, size_t *datalen)
@@
-141,8
+144,7
@@
pid_t stdforkserve(char **argv, struct hthead *req, int fd, void (*chinit)(void
dup2(fd, 0);
dup2(fd, 1);
dup2(fd, 0);
dup2(fd, 1);
- for(i = 3; i < FD_SETSIZE; i++)
- close(i);
+ close(fd);
bufinit(args);
for(i = 0; argv[i]; i++)
bufinit(args);
for(i = 0; argv[i]; i++)