Merge branch 'master' into wip/win32-port2

This commit is contained in:
Love Hornquist Astrand
2009-11-24 21:46:10 -08:00
16 changed files with 153 additions and 15 deletions

View File

@@ -329,7 +329,7 @@ main(int argc, char **argv)
#endif #endif
if(interactive_flag) if(interactive_flag)
mini_inetd (port); mini_inetd(port, NULL);
/* /*
* LOG_NDELAY sets up the logging connection immediately, * LOG_NDELAY sets up the logging connection immediately,

View File

@@ -1252,7 +1252,7 @@ main(int argc, char **argv)
err(1, "error opening %s", lf); err(1, "error opening %s", lf);
} }
mini_inetd(htons(port)); mini_inetd(htons(port), NULL);
fprintf(logfile, "connected\n"); fprintf(logfile, "connected\n");
{ {

View File

@@ -284,7 +284,7 @@ static int
doit (int port, const char *service) doit (int port, const char *service)
{ {
if (do_inetd) if (do_inetd)
mini_inetd(port); mini_inetd(port, NULL);
return proto (STDIN_FILENO, service); return proto (STDIN_FILENO, service);
} }

View File

@@ -772,7 +772,7 @@ main (int argc, char **argv)
} }
if (!inetd_flag) if (!inetd_flag)
mini_inetd (port); mini_inetd (port, NULL);
signal (SIGCHLD, childhandler); signal (SIGCHLD, childhandler);
return doit(STDIN_FILENO, tcp_flag); return doit(STDIN_FILENO, tcp_flag);

View File

@@ -301,7 +301,7 @@ pop_init(POP *p,int argcount,char **argmessage)
portnum = p->kerberosp ? portnum = p->kerberosp ?
pop_getportbyname(p, "kpop", "tcp", 1109) : pop_getportbyname(p, "kpop", "tcp", 1109) :
pop_getportbyname(p, "pop", "tcp", 110); 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 */ /* Get the address and socket of the client to whom I am speaking */

View File

@@ -961,7 +961,7 @@ main(int argc, char **argv)
errx (1, "getaddrinfo: %s", gai_strerror (error)); errx (1, "getaddrinfo: %s", gai_strerror (error));
} }
} }
mini_inetd_addrinfo (ai); mini_inetd_addrinfo (ai, NULL);
freeaddrinfo(ai); freeaddrinfo(ai);
} }

View File

@@ -370,7 +370,7 @@ main(int argc, char **argv)
port = k_getportbyname("telnet", "tcp", htons(23)); port = k_getportbyname("telnet", "tcp", htons(23));
#endif #endif
} }
mini_inetd (port); mini_inetd (port, NULL);
} else if (argc > 0) { } else if (argc > 0) {
usage(1); usage(1);
/* NOT REACHED */ /* NOT REACHED */

View File

@@ -155,7 +155,7 @@ proto (int sock, const char *service)
static int static int
doit (int port, const char *service) doit (int port, const char *service)
{ {
mini_inetd (port); mini_inetd (port, NULL);
return proto (STDIN_FILENO, service); return proto (STDIN_FILENO, service);
} }

View File

@@ -136,7 +136,6 @@ check_directory(krb5_context context,
if((d = opendir(dirname)) == NULL) if((d = opendir(dirname)) == NULL)
return errno; return errno;
#ifdef HAVE_DIRFD
{ {
int fd; int fd;
struct stat st2; struct stat st2;
@@ -151,7 +150,6 @@ check_directory(krb5_context context,
return EACCES; return EACCES;
} }
} }
#endif
while((dent = readdir(d)) != NULL) { while((dent = readdir(d)) != NULL) {
if(strcmp(dent->d_name, ".") == 0 || if(strcmp(dent->d_name, ".") == 0 ||

66
lib/roken/dirent.hin Normal file
View File

@@ -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<sys/types.h>
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

View File

@@ -40,7 +40,11 @@
#include <ifaddrs.h> #include <ifaddrs.h>
<<<<<<< HEAD
void void
=======
static void
>>>>>>> master
print_addr(const char *s, struct sockaddr *sa) print_addr(const char *s, struct sockaddr *sa)
{ {
int i; int i;
@@ -55,7 +59,11 @@ print_addr(const char *s, struct sockaddr *sa)
printf("\n"); printf("\n");
} }
<<<<<<< HEAD
void void
=======
static void
>>>>>>> master
print_ifaddrs(struct ifaddrs *x) print_ifaddrs(struct ifaddrs *x)
{ {
struct ifaddrs *p; struct ifaddrs *p;
@@ -79,7 +87,11 @@ main(int argc, char **argv)
struct ifaddrs *addrs = NULL; struct ifaddrs *addrs = NULL;
int ret; int ret;
<<<<<<< HEAD
if (SOCK_INIT) if (SOCK_INIT)
=======
if (rk_SOCK_INIT())
>>>>>>> master
errx(1, "Couldn't initialize sockets. Err=%d\n", rk_SOCK_ERRNO); errx(1, "Couldn't initialize sockets. Err=%d\n", rk_SOCK_ERRNO);
ret = getifaddrs(&addrs); ret = getifaddrs(&addrs);
@@ -94,7 +106,7 @@ main(int argc, char **argv)
/* Check that freeifaddrs doesn't crash */ /* Check that freeifaddrs doesn't crash */
freeifaddrs(addrs); freeifaddrs(addrs);
if (SOCK_EXIT) if (rk_SOCK_EXIT())
errx(1, "Couldn't uninitialize sockets. Err=%d\n", rk_SOCK_ERRNO); errx(1, "Couldn't uninitialize sockets. Err=%d\n", rk_SOCK_ERRNO);
return 0; return 0;

View File

@@ -63,7 +63,7 @@ accept_it (rk_socket_t s, rk_socket_t *ret_socket)
dup2(fd, STDIN_FILENO); dup2(fd, STDIN_FILENO);
dup2(fd, STDOUT_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); socket_set_ipv6only(fds[i], 1);
if (rk_IS_SOCKET_ERROR(bind (fds[i], a->ai_addr, a->ai_addrlen))) { if (rk_IS_SOCKET_ERROR(bind (fds[i], a->ai_addr, a->ai_addrlen))) {
warn ("bind af = %d", a->ai_family); warn ("bind af = %d", a->ai_family);
<<<<<<< HEAD
closesocket(fds[i]); closesocket(fds[i]);
=======
rk_closesocket(fds[i]);
>>>>>>> master
fds[i] = rk_INVALID_SOCKET; fds[i] = rk_INVALID_SOCKET;
continue; continue;
} }
if (rk_IS_SOCKET_ERROR(listen (fds[i], SOMAXCONN))) { if (rk_IS_SOCKET_ERROR(listen (fds[i], SOMAXCONN))) {
warn ("listen af = %d", a->ai_family); warn ("listen af = %d", a->ai_family);
<<<<<<< HEAD
closesocket(fds[i]); closesocket(fds[i]);
=======
rk_closesocket(fds[i]);
>>>>>>> master
fds[i] = rk_INVALID_SOCKET; fds[i] = rk_INVALID_SOCKET;
continue; continue;
} }
@@ -148,7 +156,11 @@ mini_inetd_addrinfo (struct addrinfo *ai, rk_socket_t *ret_socket)
if (FD_ISSET (fds[i], &read_set)) { if (FD_ISSET (fds[i], &read_set)) {
accept_it (fds[i], ret_socket); accept_it (fds[i], ret_socket);
for (i = 0; i < n; ++i) for (i = 0; i < n; ++i)
<<<<<<< HEAD
closesocket(fds[i]); closesocket(fds[i]);
=======
rk_closesocket(fds[i]);
>>>>>>> master
free(fds); free(fds);
return; return;
} }
@@ -173,7 +185,11 @@ mini_inetd_addrinfo (struct addrinfo *ai, rk_socket_t *ret_socket)
* @see mini_inetd_addrinfo() * @see mini_inetd_addrinfo()
*/ */
ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL 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)
=======
mini_inetd(int port, rk_socket_t * ret_socket)
>>>>>>> master
{ {
int error; int error;
struct addrinfo *ai, hints; struct addrinfo *ai, hints;

View File

@@ -56,6 +56,11 @@
#include<ws2tcpip.h> #include<ws2tcpip.h>
/*
* error codes for inet_ntop/inet_pton
*/
#define EAFNOSUPPORT WSAEAFNOSUPPORT
typedef SOCKET rk_socket_t; typedef SOCKET rk_socket_t;
#define rk_IS_BAD_SOCKET(s) ((s) == INVALID_SOCKET) #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_SOCK_ERRNO errno
#define rk_INVALID_SOCKET (-1) #define rk_INVALID_SOCKET (-1)
<<<<<<< HEAD
#define rk_SOCK_INIT 0 #define rk_SOCK_INIT 0
#define rk_SOCK_EXIT 0 #define rk_SOCK_EXIT 0
=======
#define rk_SOCK_INIT() 0
#define rk_SOCK_EXIT() 0
>>>>>>> master
#endif #endif
@@ -923,7 +933,11 @@ extern const char *__progname;
#endif #endif
ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
<<<<<<< HEAD
mini_inetd_addrinfo (struct addrinfo*, rk_socket *); mini_inetd_addrinfo (struct addrinfo*, rk_socket *);
=======
mini_inetd_addrinfo (struct addrinfo*, rk_socket_t *);
>>>>>>> master
ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
mini_inetd (int, rk_socket_t *); mini_inetd (int, rk_socket_t *);

View File

@@ -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 * While the socket handle in \a sock can be used with WinSock
* functions after calling socket_to_fd(), it should not be closed * 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. * file descriptor is closed.
*/ */
ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL

View File

@@ -218,7 +218,7 @@ openlog( char* ident, int option, int facility )
sa_local.sin_family = AF_INET; sa_local.sin_family = AF_INET;
if( bind( syslog_socket, (SOCKADDR*) &sa_local, sizeof(SOCKADDR_IN) ) == 0 ) if( bind( syslog_socket, (SOCKADDR*) &sa_local, sizeof(SOCKADDR_IN) ) == 0 )
break; break;
closesocket( syslog_socket ); rk_closesocket( syslog_socket );
syslog_socket = INVALID_SOCKET; syslog_socket = INVALID_SOCKET;
if( n == 100 ) if( n == 100 )
goto done; goto done;
@@ -243,7 +243,7 @@ openlog( char* ident, int option, int facility )
done: done:
if( failed ) { if( failed ) {
if( syslog_socket != INVALID_SOCKET ) if( syslog_socket != INVALID_SOCKET )
closesocket( syslog_socket ); rk_closesocket( syslog_socket );
} }
syslog_opened = !failed; syslog_opened = !failed;

View File

@@ -87,7 +87,11 @@ get_connected_socket(rk_socket_t * s_ret)
done: done:
if (!rk_IS_BAD_SOCKET(s)) if (!rk_IS_BAD_SOCKET(s))
<<<<<<< HEAD
closesocket(s); closesocket(s);
=======
rk_closesocket(s);
>>>>>>> master
if (ai) if (ai)
freeaddrinfo(ai); freeaddrinfo(ai);
@@ -125,7 +129,11 @@ test_simple_echo_client(void)
if (rk_IS_SOCKET_ERROR(rv)) { if (rk_IS_SOCKET_ERROR(rv)) {
fprintf(stderr, "[%s] send() failure (%s)\n", fprintf(stderr, "[%s] send() failure (%s)\n",
getprogname(), strerror(rk_SOCK_ERRNO)); getprogname(), strerror(rk_SOCK_ERRNO));
<<<<<<< HEAD
closesocket(s); closesocket(s);
=======
rk_closesocket(s);
>>>>>>> master
return 1; return 1;
} }
@@ -133,25 +141,41 @@ test_simple_echo_client(void)
if (rk_IS_SOCKET_ERROR(rv)) { if (rk_IS_SOCKET_ERROR(rv)) {
fprintf (stderr, "[%s] recv() failure (%s)\n", fprintf (stderr, "[%s] recv() failure (%s)\n",
getprogname(), strerror(rk_SOCK_ERRNO)); getprogname(), strerror(rk_SOCK_ERRNO));
<<<<<<< HEAD
closesocket(s); closesocket(s);
=======
rk_closesocket(s);
>>>>>>> master
return 1; return 1;
} }
if (rv == 0) { if (rv == 0) {
fprintf (stderr, "[%s] No data received\n", prog); fprintf (stderr, "[%s] No data received\n", prog);
<<<<<<< HEAD
closesocket(s); closesocket(s);
=======
rk_closesocket(s);
>>>>>>> master
return 1; return 1;
} }
if (rv != strlen(test_strings[i])) { if (rv != strlen(test_strings[i])) {
fprintf (stderr, "[%s] Data length mismatch %d != %d\n", prog, rv, strlen(test_strings[i])); fprintf (stderr, "[%s] Data length mismatch %d != %d\n", prog, rv, strlen(test_strings[i]));
<<<<<<< HEAD
closesocket(s); closesocket(s);
=======
rk_closesocket(s);
>>>>>>> master
return 1; return 1;
} }
} }
fprintf (stderr, "[%s] Done\n", prog); fprintf (stderr, "[%s] Done\n", prog);
<<<<<<< HEAD
closesocket(s); closesocket(s);
=======
rk_closesocket(s);
>>>>>>> master
return 0; return 0;
} }
@@ -198,7 +222,11 @@ test_simple_echo_socket(void)
if (!strcmp(buf, "exit")) { if (!strcmp(buf, "exit")) {
fprintf(stderr, "[%s] Exiting...\n", prog); fprintf(stderr, "[%s] Exiting...\n", prog);
shutdown(s, SD_SEND); shutdown(s, SD_SEND);
<<<<<<< HEAD
closesocket(s); closesocket(s);
=======
rk_closesocket(s);
>>>>>>> master
return 0; return 0;
} }
} }
@@ -208,7 +236,11 @@ test_simple_echo_socket(void)
strerror(rk_SOCK_ERRNO)); strerror(rk_SOCK_ERRNO));
} }
<<<<<<< HEAD
closesocket(s); closesocket(s);
=======
rk_closesocket(s);
>>>>>>> master
} }
return 1; return 1;