diff --git a/appl/ftp/ftpd/ftpd.c b/appl/ftp/ftpd/ftpd.c index 138f9b55e..e97bb1d79 100644 --- a/appl/ftp/ftpd/ftpd.c +++ b/appl/ftp/ftpd/ftpd.c @@ -329,7 +329,7 @@ main(int argc, char **argv) #endif if(interactive_flag) - mini_inetd (port); + mini_inetd(port, NULL); /* * LOG_NDELAY sets up the logging connection immediately, diff --git a/appl/gssmask/gssmask.c b/appl/gssmask/gssmask.c index 8cee0695b..46c3fc03e 100644 --- a/appl/gssmask/gssmask.c +++ b/appl/gssmask/gssmask.c @@ -1252,7 +1252,7 @@ main(int argc, char **argv) err(1, "error opening %s", lf); } - mini_inetd(htons(port)); + mini_inetd(htons(port), NULL); fprintf(logfile, "connected\n"); { diff --git a/appl/kf/kfd.c b/appl/kf/kfd.c index 10f8ef3df..71f48c935 100644 --- a/appl/kf/kfd.c +++ b/appl/kf/kfd.c @@ -284,7 +284,7 @@ static int doit (int port, const char *service) { if (do_inetd) - mini_inetd(port); + mini_inetd(port, NULL); return proto (STDIN_FILENO, service); } diff --git a/appl/kx/kxd.c b/appl/kx/kxd.c index 65bd1a18f..be36cd4f2 100644 --- a/appl/kx/kxd.c +++ b/appl/kx/kxd.c @@ -772,7 +772,7 @@ main (int argc, char **argv) } if (!inetd_flag) - mini_inetd (port); + mini_inetd (port, NULL); signal (SIGCHLD, childhandler); return doit(STDIN_FILENO, tcp_flag); diff --git a/appl/popper/pop_init.c b/appl/popper/pop_init.c index a2924877d..fd7987bb9 100644 --- a/appl/popper/pop_init.c +++ b/appl/popper/pop_init.c @@ -301,7 +301,7 @@ pop_init(POP *p,int argcount,char **argmessage) portnum = p->kerberosp ? pop_getportbyname(p, "kpop", "tcp", 1109) : pop_getportbyname(p, "pop", "tcp", 110); - mini_inetd (portnum); + mini_inetd (portnum, NULL); } /* Get the address and socket of the client to whom I am speaking */ diff --git a/appl/rsh/rshd.c b/appl/rsh/rshd.c index b22918b40..93ca33969 100644 --- a/appl/rsh/rshd.c +++ b/appl/rsh/rshd.c @@ -961,7 +961,7 @@ main(int argc, char **argv) errx (1, "getaddrinfo: %s", gai_strerror (error)); } } - mini_inetd_addrinfo (ai); + mini_inetd_addrinfo (ai, NULL); freeaddrinfo(ai); } diff --git a/appl/telnet/telnetd/telnetd.c b/appl/telnet/telnetd/telnetd.c index 2d0bb24ce..bce2e1d76 100644 --- a/appl/telnet/telnetd/telnetd.c +++ b/appl/telnet/telnetd/telnetd.c @@ -370,7 +370,7 @@ main(int argc, char **argv) port = k_getportbyname("telnet", "tcp", htons(23)); #endif } - mini_inetd (port); + mini_inetd (port, NULL); } else if (argc > 0) { usage(1); /* NOT REACHED */ diff --git a/appl/test/tcp_server.c b/appl/test/tcp_server.c index f8df34fc9..7da97e6aa 100644 --- a/appl/test/tcp_server.c +++ b/appl/test/tcp_server.c @@ -155,7 +155,7 @@ proto (int sock, const char *service) static int doit (int port, const char *service) { - mini_inetd (port); + mini_inetd (port, NULL); return proto (STDIN_FILENO, service); } diff --git a/lib/krb5/kuserok.c b/lib/krb5/kuserok.c index 774e9ee35..9fc87bfd6 100644 --- a/lib/krb5/kuserok.c +++ b/lib/krb5/kuserok.c @@ -136,7 +136,6 @@ check_directory(krb5_context context, if((d = opendir(dirname)) == NULL) return errno; -#ifdef HAVE_DIRFD { int fd; struct stat st2; @@ -151,7 +150,6 @@ check_directory(krb5_context context, return EACCES; } } -#endif while((dent = readdir(d)) != NULL) { if(strcmp(dent->d_name, ".") == 0 || diff --git a/lib/roken/dirent.hin b/lib/roken/dirent.hin new file mode 100644 index 000000000..c9a86c63f --- /dev/null +++ b/lib/roken/dirent.hin @@ -0,0 +1,66 @@ +/*********************************************************************** + * Copyright (c) 2009, Secure Endpoints Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + **********************************************************************/ + +#ifndef __DIRENT_H__ +#define __DIRENT_H__ + +#ifndef ROKEN_LIB_FUNCTION +#ifdef _WIN32 +#define ROKEN_LIB_FUNCTION +#define ROKEN_LIB_CALL __cdecl +#else +#define ROKEN_LIB_FUNCTION +#define ROKEN_LIB_CALL +#endif +#endif + +#include + +struct dirent { + ino_t d_ino; + char d_name[1]; +}; + +typedef struct _dirent_dirinfo DIR; + +ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL closedir(DIR *); + +ROKEN_LIB_FUNCTION DIR * ROKEN_LIB_CALL opendir(const char *); + +ROKEN_LIB_FUNCTION struct dirent * ROKEN_LIB_CALL readdir(DIR *); + +ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL rewinddir(DIR *); + +ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL seekdir(DIR *, long); + +ROKEN_LIB_FUNCTION long ROKEN_LIB_CALL telldir(DIR *); + +#endif diff --git a/lib/roken/getifaddrs-test.c b/lib/roken/getifaddrs-test.c index 34141a2d3..f637852c2 100644 --- a/lib/roken/getifaddrs-test.c +++ b/lib/roken/getifaddrs-test.c @@ -40,7 +40,11 @@ #include +<<<<<<< HEAD void +======= +static void +>>>>>>> master print_addr(const char *s, struct sockaddr *sa) { int i; @@ -55,7 +59,11 @@ print_addr(const char *s, struct sockaddr *sa) printf("\n"); } +<<<<<<< HEAD void +======= +static void +>>>>>>> master print_ifaddrs(struct ifaddrs *x) { struct ifaddrs *p; @@ -79,7 +87,11 @@ main(int argc, char **argv) struct ifaddrs *addrs = NULL; int ret; +<<<<<<< HEAD if (SOCK_INIT) +======= + if (rk_SOCK_INIT()) +>>>>>>> master errx(1, "Couldn't initialize sockets. Err=%d\n", rk_SOCK_ERRNO); ret = getifaddrs(&addrs); @@ -94,7 +106,7 @@ main(int argc, char **argv) /* Check that freeifaddrs doesn't crash */ freeifaddrs(addrs); - if (SOCK_EXIT) + if (rk_SOCK_EXIT()) errx(1, "Couldn't uninitialize sockets. Err=%d\n", rk_SOCK_ERRNO); return 0; diff --git a/lib/roken/mini_inetd.c b/lib/roken/mini_inetd.c index 1cf3815d1..af2c6f2ed 100644 --- a/lib/roken/mini_inetd.c +++ b/lib/roken/mini_inetd.c @@ -63,7 +63,7 @@ accept_it (rk_socket_t s, rk_socket_t *ret_socket) dup2(fd, STDIN_FILENO); dup2(fd, STDOUT_FILENO); - closesocket(fd); + rk_closesocket(as); } } @@ -114,13 +114,21 @@ mini_inetd_addrinfo (struct addrinfo *ai, rk_socket_t *ret_socket) socket_set_ipv6only(fds[i], 1); if (rk_IS_SOCKET_ERROR(bind (fds[i], a->ai_addr, a->ai_addrlen))) { warn ("bind af = %d", a->ai_family); +<<<<<<< HEAD closesocket(fds[i]); +======= + rk_closesocket(fds[i]); +>>>>>>> master fds[i] = rk_INVALID_SOCKET; continue; } if (rk_IS_SOCKET_ERROR(listen (fds[i], SOMAXCONN))) { warn ("listen af = %d", a->ai_family); +<<<<<<< HEAD closesocket(fds[i]); +======= + rk_closesocket(fds[i]); +>>>>>>> master fds[i] = rk_INVALID_SOCKET; continue; } @@ -148,7 +156,11 @@ mini_inetd_addrinfo (struct addrinfo *ai, rk_socket_t *ret_socket) if (FD_ISSET (fds[i], &read_set)) { accept_it (fds[i], ret_socket); for (i = 0; i < n; ++i) +<<<<<<< HEAD closesocket(fds[i]); +======= + rk_closesocket(fds[i]); +>>>>>>> master free(fds); return; } @@ -173,7 +185,11 @@ mini_inetd_addrinfo (struct addrinfo *ai, rk_socket_t *ret_socket) * @see mini_inetd_addrinfo() */ ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL +<<<<<<< HEAD mini_inetd (int port, rk_socket_t * ret_socket) +======= +mini_inetd(int port, rk_socket_t * ret_socket) +>>>>>>> master { int error; struct addrinfo *ai, hints; diff --git a/lib/roken/roken.h.in b/lib/roken/roken.h.in index 9b7773b3f..f6d704066 100644 --- a/lib/roken/roken.h.in +++ b/lib/roken/roken.h.in @@ -56,6 +56,11 @@ #include +/* + * error codes for inet_ntop/inet_pton + */ +#define EAFNOSUPPORT WSAEAFNOSUPPORT + typedef SOCKET rk_socket_t; #define rk_IS_BAD_SOCKET(s) ((s) == INVALID_SOCKET) @@ -84,8 +89,13 @@ typedef int rk_socket_t; #define rk_SOCK_ERRNO errno #define rk_INVALID_SOCKET (-1) +<<<<<<< HEAD #define rk_SOCK_INIT 0 #define rk_SOCK_EXIT 0 +======= +#define rk_SOCK_INIT() 0 +#define rk_SOCK_EXIT() 0 +>>>>>>> master #endif @@ -923,7 +933,11 @@ extern const char *__progname; #endif ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL +<<<<<<< HEAD mini_inetd_addrinfo (struct addrinfo*, rk_socket *); +======= +mini_inetd_addrinfo (struct addrinfo*, rk_socket_t *); +>>>>>>> master ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL mini_inetd (int, rk_socket_t *); diff --git a/lib/roken/socket.c b/lib/roken/socket.c index 24b5242ba..fdf090d52 100644 --- a/lib/roken/socket.c +++ b/lib/roken/socket.c @@ -303,7 +303,7 @@ socket_set_ipv6only (rk_socket_t sock, int val) * * While the socket handle in \a sock can be used with WinSock * functions after calling socket_to_fd(), it should not be closed - * with closesocket(). The socket will be closed when the associated + * with rk_closesocket(). The socket will be closed when the associated * file descriptor is closed. */ ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL diff --git a/lib/roken/syslogc.c b/lib/roken/syslogc.c index bf013a155..b5b3901ca 100644 --- a/lib/roken/syslogc.c +++ b/lib/roken/syslogc.c @@ -218,7 +218,7 @@ openlog( char* ident, int option, int facility ) sa_local.sin_family = AF_INET; if( bind( syslog_socket, (SOCKADDR*) &sa_local, sizeof(SOCKADDR_IN) ) == 0 ) break; - closesocket( syslog_socket ); + rk_closesocket( syslog_socket ); syslog_socket = INVALID_SOCKET; if( n == 100 ) goto done; @@ -243,7 +243,7 @@ openlog( char* ident, int option, int facility ) done: if( failed ) { if( syslog_socket != INVALID_SOCKET ) - closesocket( syslog_socket ); + rk_closesocket( syslog_socket ); } syslog_opened = !failed; diff --git a/lib/roken/test-mini_inetd.c b/lib/roken/test-mini_inetd.c index fa486834b..6d3eedaf0 100644 --- a/lib/roken/test-mini_inetd.c +++ b/lib/roken/test-mini_inetd.c @@ -87,7 +87,11 @@ get_connected_socket(rk_socket_t * s_ret) done: if (!rk_IS_BAD_SOCKET(s)) +<<<<<<< HEAD closesocket(s); +======= + rk_closesocket(s); +>>>>>>> master if (ai) freeaddrinfo(ai); @@ -125,7 +129,11 @@ test_simple_echo_client(void) if (rk_IS_SOCKET_ERROR(rv)) { fprintf(stderr, "[%s] send() failure (%s)\n", getprogname(), strerror(rk_SOCK_ERRNO)); +<<<<<<< HEAD closesocket(s); +======= + rk_closesocket(s); +>>>>>>> master return 1; } @@ -133,25 +141,41 @@ test_simple_echo_client(void) if (rk_IS_SOCKET_ERROR(rv)) { fprintf (stderr, "[%s] recv() failure (%s)\n", getprogname(), strerror(rk_SOCK_ERRNO)); +<<<<<<< HEAD closesocket(s); +======= + rk_closesocket(s); +>>>>>>> master return 1; } if (rv == 0) { fprintf (stderr, "[%s] No data received\n", prog); +<<<<<<< HEAD closesocket(s); +======= + rk_closesocket(s); +>>>>>>> master return 1; } if (rv != strlen(test_strings[i])) { fprintf (stderr, "[%s] Data length mismatch %d != %d\n", prog, rv, strlen(test_strings[i])); +<<<<<<< HEAD closesocket(s); +======= + rk_closesocket(s); +>>>>>>> master return 1; } } fprintf (stderr, "[%s] Done\n", prog); +<<<<<<< HEAD closesocket(s); +======= + rk_closesocket(s); +>>>>>>> master return 0; } @@ -198,7 +222,11 @@ test_simple_echo_socket(void) if (!strcmp(buf, "exit")) { fprintf(stderr, "[%s] Exiting...\n", prog); shutdown(s, SD_SEND); +<<<<<<< HEAD closesocket(s); +======= + rk_closesocket(s); +>>>>>>> master return 0; } } @@ -208,7 +236,11 @@ test_simple_echo_socket(void) strerror(rk_SOCK_ERRNO)); } +<<<<<<< HEAD closesocket(s); +======= + rk_closesocket(s); +>>>>>>> master } return 1;