diff options
author | Andrew Tridgell <tridge@samba.org> | 2005-07-21 13:45:07 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2005-07-21 13:45:07 +0000 |
commit | ba0fe39f11af4cb7ab2b18c6432066a81e1a06ee (patch) | |
tree | b5147f3d87ea392a3401558361fc020582641940 /source/lib/socket_wrapper/socket_wrapper.c | |
parent | 6147abe90b1032565c0779b815c11cebde240ed2 (diff) | |
download | samba-ba0fe39f11af4cb7ab2b18c6432066a81e1a06ee.tar.gz samba-ba0fe39f11af4cb7ab2b18c6432066a81e1a06ee.tar.xz samba-ba0fe39f11af4cb7ab2b18c6432066a81e1a06ee.zip |
r8681: if SOCKET_WRAPPER_DIR starts with ./ then strip it internally. This saves us 2 more chars
in the name, which is enough to get IRIX 6.4 working
Diffstat (limited to 'source/lib/socket_wrapper/socket_wrapper.c')
-rw-r--r-- | source/lib/socket_wrapper/socket_wrapper.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/source/lib/socket_wrapper/socket_wrapper.c b/source/lib/socket_wrapper/socket_wrapper.c index d0d08d22b93..1c3d5c3bfcb 100644 --- a/source/lib/socket_wrapper/socket_wrapper.c +++ b/source/lib/socket_wrapper/socket_wrapper.c @@ -95,6 +95,19 @@ struct socket_info static struct socket_info *sockets = NULL; + +static const char *socket_wrapper_dir(void) +{ + const char *s = getenv("SOCKET_WRAPPER_DIR"); + if (s == NULL) { + return NULL; + } + if (strncmp(s, "./", 2) == 0) { + s += 2; + } + return s; +} + static int convert_un_in(const struct sockaddr_un *un, struct sockaddr_in *in, socklen_t *len) { unsigned int prt; @@ -128,12 +141,12 @@ static int convert_in_un(struct socket_info *si, const struct sockaddr_in *in, s prt = 5000; do { snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT, - getenv("SOCKET_WRAPPER_DIR"), type, ++prt); + socket_wrapper_dir(), type, ++prt); } while (stat(un->sun_path, &st) == 0 && prt < 10000); ((struct sockaddr_in *)si->myname)->sin_port = htons(prt); } snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT, - getenv("SOCKET_WRAPPER_DIR"), type, prt); + socket_wrapper_dir(), type, prt); return 0; } @@ -205,7 +218,7 @@ int swrap_socket(int domain, int type, int protocol) struct socket_info *si; int fd; - if (!getenv("SOCKET_WRAPPER_DIR")) { + if (!socket_wrapper_dir()) { return real_socket(domain, type, protocol); } @@ -280,7 +293,7 @@ static int swrap_auto_bind(struct socket_info *si) for (i=0;i<1000;i++) { snprintf(un_addr.sun_path, sizeof(un_addr.sun_path), - "%s/"SOCKET_FORMAT, getenv("SOCKET_WRAPPER_DIR"), + "%s/"SOCKET_FORMAT, socket_wrapper_dir(), SOCK_DGRAM, i + 10000); if (bind(si->fd, (struct sockaddr *)&un_addr, sizeof(un_addr)) == 0) { |