From 40b685b70df4b5692f7380f69ef6377053660986 Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Thu, 10 Oct 2002 20:28:36 +0000 Subject: [PATCH] Patch: Delete the buggy surrogate parent code (ITS#1815) Written by Hallvard B. Furuseth and placed into the public domain. This software is not subject to any license of the University of Oslo. --- configure | 25 ++- configure.in | 1 - include/portable.h.in | 3 - include/portable.nt | 3 - servers/slapd/back-shell/abandon.c | 2 +- servers/slapd/back-shell/add.c | 2 +- servers/slapd/back-shell/bind.c | 2 +- servers/slapd/back-shell/compare.c | 2 +- servers/slapd/back-shell/config.c | 40 +--- servers/slapd/back-shell/delete.c | 2 +- servers/slapd/back-shell/fork.c | 281 +---------------------------- servers/slapd/back-shell/init.c | 34 +--- servers/slapd/back-shell/modify.c | 2 +- servers/slapd/back-shell/modrdn.c | 2 +- servers/slapd/back-shell/search.c | 2 +- servers/slapd/back-shell/shell.h | 45 +---- servers/slapd/back-shell/unbind.c | 2 +- 17 files changed, 42 insertions(+), 408 deletions(-) diff --git a/configure b/configure index 0b9e8f1fe4..5009808f93 100755 --- a/configure +++ b/configure @@ -22111,7 +22111,6 @@ for ac_func in \ read \ recv \ recvfrom \ - recvmsg \ setpwfile \ setgid \ setegid \ @@ -22140,12 +22139,12 @@ for ac_func in \ do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:22144: checking for $ac_func" >&5 +echo "configure:22143: checking for $ac_func" >&5 if eval "test \"\${ac_cv_func_$ac_func+set}\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:22172: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -22197,12 +22196,12 @@ done for ac_func in getopt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:22201: checking for $ac_func" >&5 +echo "configure:22200: checking for $ac_func" >&5 if eval "test \"\${ac_cv_func_$ac_func+set}\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:22229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -22273,13 +22272,13 @@ fi # Check Configuration echo $ac_n "checking declaration of sys_errlist""... $ac_c" 1>&6 -echo "configure:22277: checking declaration of sys_errlist" >&5 +echo "configure:22276: checking declaration of sys_errlist" >&5 if eval "test \"\${ol_cv_dcl_sys_errlist+set}\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -22292,7 +22291,7 @@ int main() { char *c = (char *) *sys_errlist ; return 0; } EOF -if { (eval echo configure:22296: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:22295: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ol_cv_dcl_sys_errlist=yes ol_cv_have_sys_errlist=yes @@ -22315,20 +22314,20 @@ EOF echo $ac_n "checking existence of sys_errlist""... $ac_c" 1>&6 -echo "configure:22319: checking existence of sys_errlist" >&5 +echo "configure:22318: checking existence of sys_errlist" >&5 if eval "test \"\${ol_cv_have_sys_errlist+set}\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { char *c = (char *) *sys_errlist ; return 0; } EOF -if { (eval echo configure:22332: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:22331: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ol_cv_have_sys_errlist=yes else diff --git a/configure.in b/configure.in index e0a9c7c328..7743bebee4 100644 --- a/configure.in +++ b/configure.in @@ -2459,7 +2459,6 @@ AC_CHECK_FUNCS( \ read \ recv \ recvfrom \ - recvmsg \ setpwfile \ setgid \ setegid \ diff --git a/include/portable.h.in b/include/portable.h.in index b4d2b7ee11..53dad20d00 100644 --- a/include/portable.h.in +++ b/include/portable.h.in @@ -227,9 +227,6 @@ /* Define if you have the recvfrom function. */ #undef HAVE_RECVFROM -/* Define if you have the recvmsg function. */ -#undef HAVE_RECVMSG - /* Define if you have the sched_yield function. */ #undef HAVE_SCHED_YIELD diff --git a/include/portable.nt b/include/portable.nt index ae2c2ae107..3c2becf470 100644 --- a/include/portable.nt +++ b/include/portable.nt @@ -246,9 +246,6 @@ /* Define if you have the recvfrom function. */ /* #undef HAVE_RECVFROM */ -/* Define if you have the recvmsg function. */ -/* #undef HAVE_RECVMSG */ - /* Define if you have the sched_yield function. */ /* #undef HAVE_SCHED_YIELD */ diff --git a/servers/slapd/back-shell/abandon.c b/servers/slapd/back-shell/abandon.c index 3f0f6ed28d..bbf84db331 100644 --- a/servers/slapd/back-shell/abandon.c +++ b/servers/slapd/back-shell/abandon.c @@ -29,7 +29,7 @@ shell_back_abandon( Operation *o; /* no abandon command defined - just kill the process handling it */ - if ( IS_NULLCMD( si->si_abandon ) ) { + if ( si->si_abandon == NULL ) { ldap_pvt_thread_mutex_lock( &conn->c_mutex ); pid = -1; LDAP_STAILQ_FOREACH( o, &conn->c_ops, o_next ) { diff --git a/servers/slapd/back-shell/add.c b/servers/slapd/back-shell/add.c index ae65d4cf25..02a5209380 100644 --- a/servers/slapd/back-shell/add.c +++ b/servers/slapd/back-shell/add.c @@ -28,7 +28,7 @@ shell_back_add( FILE *rfp, *wfp; int len; - if ( IS_NULLCMD( si->si_add ) ) { + if ( si->si_add == NULL ) { send_ldap_result( conn, op, LDAP_UNWILLING_TO_PERFORM, NULL, "add not implemented", NULL, NULL ); return( -1 ); diff --git a/servers/slapd/back-shell/bind.c b/servers/slapd/back-shell/bind.c index ad1b9c80c1..cd083b8ea7 100644 --- a/servers/slapd/back-shell/bind.c +++ b/servers/slapd/back-shell/bind.c @@ -33,7 +33,7 @@ shell_back_bind( FILE *rfp, *wfp; int rc; - if ( IS_NULLCMD( si->si_bind ) ) { + if ( si->si_bind == NULL ) { send_ldap_result( conn, op, LDAP_UNWILLING_TO_PERFORM, NULL, "bind not implemented", NULL, NULL ); return( -1 ); diff --git a/servers/slapd/back-shell/compare.c b/servers/slapd/back-shell/compare.c index c70edd530d..8317214d0d 100644 --- a/servers/slapd/back-shell/compare.c +++ b/servers/slapd/back-shell/compare.c @@ -30,7 +30,7 @@ shell_back_compare( Entry e; FILE *rfp, *wfp; - if ( IS_NULLCMD( si->si_compare ) ) { + if ( si->si_compare == NULL ) { send_ldap_result( conn, op, LDAP_UNWILLING_TO_PERFORM, NULL, "compare not implemented", NULL, NULL ); return( -1 ); diff --git a/servers/slapd/back-shell/config.c b/servers/slapd/back-shell/config.c index 7c1e14e7ff..adc21526f8 100644 --- a/servers/slapd/back-shell/config.c +++ b/servers/slapd/back-shell/config.c @@ -15,28 +15,6 @@ #include "slap.h" #include "shell.h" -#ifdef SHELL_SURROGATE_PARENT - -static struct berval make_cmd_info( - char **args -) -{ - struct berval ret = { 0, 0 }; - int i; - ber_len_t offset; - for( i = 0; args[i] != NULL; i++ ) - ret.bv_len += strlen( args[i] ) + 1; - ret.bv_val = ch_malloc( ret.bv_len ); - offset = 0; - for( i = 0; args[i] != NULL; i++ ) { - strcpy( ret.bv_val + offset, args[i] ); - offset += strlen( args[i] ) + 1; - } - return ret; -} - -#endif /* SHELL_SURROGATE_PARENT */ - int shell_back_db_config( BackendDB *be, @@ -62,7 +40,7 @@ shell_back_db_config( fname, lineno ); return( 1 ); } - si->si_bind = MAKE_CMD_INFO( &argv[1] ); + si->si_bind = ldap_charray_dup( &argv[1] ); /* command + args to exec for unbinds */ } else if ( strcasecmp( argv[0], "unbind" ) == 0 ) { @@ -72,7 +50,7 @@ shell_back_db_config( fname, lineno ); return( 1 ); } - si->si_unbind = MAKE_CMD_INFO( &argv[1] ); + si->si_unbind = ldap_charray_dup( &argv[1] ); /* command + args to exec for searches */ } else if ( strcasecmp( argv[0], "search" ) == 0 ) { @@ -82,7 +60,7 @@ shell_back_db_config( fname, lineno ); return( 1 ); } - si->si_search = MAKE_CMD_INFO( &argv[1] ); + si->si_search = ldap_charray_dup( &argv[1] ); /* command + args to exec for compares */ } else if ( strcasecmp( argv[0], "compare" ) == 0 ) { @@ -92,7 +70,7 @@ shell_back_db_config( fname, lineno ); return( 1 ); } - si->si_compare = MAKE_CMD_INFO( &argv[1] ); + si->si_compare = ldap_charray_dup( &argv[1] ); /* command + args to exec for modifies */ } else if ( strcasecmp( argv[0], "modify" ) == 0 ) { @@ -102,7 +80,7 @@ shell_back_db_config( fname, lineno ); return( 1 ); } - si->si_modify = MAKE_CMD_INFO( &argv[1] ); + si->si_modify = ldap_charray_dup( &argv[1] ); /* command + args to exec for modrdn */ } else if ( strcasecmp( argv[0], "modrdn" ) == 0 ) { @@ -112,7 +90,7 @@ shell_back_db_config( fname, lineno ); return( 1 ); } - si->si_modrdn = MAKE_CMD_INFO( &argv[1] ); + si->si_modrdn = ldap_charray_dup( &argv[1] ); /* command + args to exec for add */ } else if ( strcasecmp( argv[0], "add" ) == 0 ) { @@ -122,7 +100,7 @@ shell_back_db_config( fname, lineno ); return( 1 ); } - si->si_add = MAKE_CMD_INFO( &argv[1] ); + si->si_add = ldap_charray_dup( &argv[1] ); /* command + args to exec for delete */ } else if ( strcasecmp( argv[0], "delete" ) == 0 ) { @@ -132,7 +110,7 @@ shell_back_db_config( fname, lineno ); return( 1 ); } - si->si_delete = MAKE_CMD_INFO( &argv[1] ); + si->si_delete = ldap_charray_dup( &argv[1] ); /* command + args to exec for abandon */ } else if ( strcasecmp( argv[0], "abandon" ) == 0 ) { @@ -142,7 +120,7 @@ shell_back_db_config( fname, lineno ); return( 1 ); } - si->si_abandon = MAKE_CMD_INFO( &argv[1] ); + si->si_abandon = ldap_charray_dup( &argv[1] ); /* anything else */ } else { diff --git a/servers/slapd/back-shell/delete.c b/servers/slapd/back-shell/delete.c index eb6c977b98..da6c04a0c4 100644 --- a/servers/slapd/back-shell/delete.c +++ b/servers/slapd/back-shell/delete.c @@ -29,7 +29,7 @@ shell_back_delete( Entry e; FILE *rfp, *wfp; - if ( IS_NULLCMD( si->si_delete ) ) { + if ( si->si_delete == NULL ) { send_ldap_result( conn, op, LDAP_UNWILLING_TO_PERFORM, NULL, "delete not implemented", NULL, NULL ); return( -1 ); diff --git a/servers/slapd/back-shell/fork.c b/servers/slapd/back-shell/fork.c index 195daa8d70..b2b6fdf627 100644 --- a/servers/slapd/back-shell/fork.c +++ b/servers/slapd/back-shell/fork.c @@ -17,222 +17,9 @@ #include "slap.h" #include "shell.h" -#ifdef SHELL_SURROGATE_PARENT - -#include - -/* Use several socketpairs to the surrogate parent, because * - * a single communication channel to it could be a bottleneck */ -ldap_pvt_thread_mutex_t shell_surrogate_fd_mutex[2]; -int shell_surrogate_fd[2] = { -1, -1 }; -/* Index to shell_surrogate_fd, and its mutex */ -ldap_pvt_thread_mutex_t shell_surrogate_index_mutex; -static int shell_surrogate_index = 1; - -pid_t shell_surrogate_pid = -1; - -#define nread( fd, buf, len ) n_rw( 0, fd, buf, len ) -#define nwrite( fd, buf, len ) n_rw( 1, fd, buf, len ) - -static int -n_rw( - int do_write, - int fd, - void *buf, - int len -) -{ - int ret = 0, i; - while( len ) { - for(;;) { - i = (do_write - ? write( fd, buf, len ) - : read( fd, buf, len )); - if( i < 0 ) { - if( errno == EINTR ) - continue; - if( ret == 0 ) - ret = -1; - } - break; - } - if( i <= 0 ) - break; - ret += i; - buf = (char *)buf + i; - len -= i; - } - return ret; -} - -void -make_surrogate_parent( void ) -{ - int pair[2][2], io[2], i, j, p, argc; - ber_len_t len, buflen, offset; - char *buf, **argv; - pid_t pid; - - if( socketpair( AF_LOCAL, SOCK_STREAM, 0, pair[0] ) < 0 || - socketpair( AF_LOCAL, SOCK_STREAM, 0, pair[1] ) < 0 ) { - Debug( LDAP_DEBUG_ANY, "socketpair failed\n", 0, 0, 0 ); - exit( EXIT_FAILURE ); - } - fflush( NULL ); - switch( fork() ) { - case -1: - Debug( LDAP_DEBUG_ANY, "fork failed\n", 0, 0, 0 ); - exit( EXIT_FAILURE ); - case 0: - break; - default: - shell_surrogate_fd[0] = pair[0][0]; - shell_surrogate_fd[1] = pair[1][0]; - close( pair[0][1] ); - close( pair[1][1] ); - return; - } - - /* Close unused file descriptors */ - for( i = 3, j = 32; j && i < 1024; i++ ) - if( i != pair[0][1] && i != pair[1][1] && close( i ) < 0 ) - --j; - else if( j < 32 ) - j = 32; - - /* Surrogate parent running */ - - buflen = 0; - buf = NULL; - argc = 0; - argv = NULL; - p = 0; - - for(;;) { - /* Read file descriptors io[] from socket */ - static char dummy; - static struct iovec iov = { &dummy, 1 }; - struct msghdr msg; -# ifdef CMSG_SPACE - union { - struct cmsghdr cm; - char control[CMSG_SPACE(sizeof(io))]; - } control_un; - struct cmsghdr *cmptr; -# endif - - /* clear msghdr */ - memset( &msg, 0, sizeof msg ); - -# ifdef CMSG_SPACE - msg.msg_control = control_un.control; - msg.msg_controllen = sizeof(control_un.control); -# else - msg.msg_accrights = (caddr_t) io; - msg.msg_accrightslen = sizeof(io); -# endif - - msg.msg_name = NULL; - msg.msg_namelen = 0; - msg.msg_iov = &iov; - msg.msg_iovlen = 1; - - switch( recvmsg( pair[p][1], &msg, MSG_WAITALL ) ) { - case -1: - if( errno == EINTR ) - continue; - _exit( EXIT_FAILURE ); - case 0: - _exit( EXIT_SUCCESS ); - } -# ifdef CMSG_SPACE - if( (cmptr = CMSG_FIRSTHDR(&msg)) == NULL || - cmptr->cmsg_len != CMSG_LEN(sizeof(io)) || - cmptr->cmsg_level != SOL_SOCKET || - cmptr->cmsg_type != SCM_RIGHTS ) { - fputs( "bad descriptor message received\n", stderr ); - exit( EXIT_FAILURE ); - } - memcpy( io, CMSG_DATA( cmptr ), sizeof(io) ); -# else - if( msg.msg_accrightslen != sizeof(io) ) { - fputs( "bad descriptor message received\n", stderr ); - exit( EXIT_FAILURE ); - } -# endif - - /* Read length of arguments and then arguments from socket */ - if( nread( pair[p][1], &len, sizeof(len) ) != sizeof(len) ) { - fputs( "bad descriptor message received\n", stderr ); - exit( EXIT_FAILURE ); - } - if( buflen < len ) { - buf = realloc( buf, buflen = len ); - if( buf == NULL ) { - fputs( "realloc failed\n", stderr ); - exit( EXIT_FAILURE ); - } - } - if( nread( pair[p][1], buf, len ) != len ) { - fputs( "bad descriptor message received\n", stderr ); - exit( EXIT_FAILURE ); - } - i = 0; - offset = 0; - while( offset < len ) { - if( i >= argc-1 ) { - argc += i + 10; - argv = realloc( argv, argc * sizeof(*argv) ); - if( argv == NULL ) { - fputs( "realloc failed\n", stderr ); - exit( EXIT_FAILURE ); - } - } - argv[i++] = buf + offset; - offset += strlen( buf + offset ) + 1; - } - argv[i] = NULL; - - /* Run program */ - pid = fork(); - switch( pid ) - { - case 0: /* child */ - if( dup2( io[0], 0 ) == -1 || dup2( io[1], 1 ) == -1 ) { - fputs( "dup2 failed\n", stderr ); - exit( EXIT_FAILURE ); - } - close( io[0] ); - close( io[1] ); - close( pair[0][1] ); - close( pair[1][1] ); - execv( argv[0], argv ); - - fputs( "execv failed\n", stderr ); - exit( EXIT_FAILURE ); - - case -1: /* trouble */ - fputs( "fork failed\n", stderr ); - break; - - default: /* parent */ - close( io[0] ); - close( io[1] ); - break; - } - if( nwrite( pair[p][1], &pid, - sizeof(pid_t) ) != sizeof(pid_t) ) { - fputs( "could not send pid\n", stderr ); - exit( EXIT_FAILURE ); - } - p ^= 1; - } -} -#endif /* SHELL_SURROGATE_PARENT */ - pid_t forkandexec( - Cmd_info args, + char **args, FILE **rfp, FILE **wfp ) @@ -253,70 +40,6 @@ forkandexec( * parent *rfp <- c2p[0] | c2p[1] <- stdout child */ -#ifdef SHELL_SURROGATE_PARENT - - { - int io[2] = { p2c[0], c2p[1] }, i, c; - static char dummy = '\0'; - static struct iovec iov = { &dummy, 1 }; - struct msghdr msg; -# ifdef CMSG_SPACE - union { - struct cmsghdr cm; - char control[CMSG_SPACE(sizeof(io))]; - } control_un; - struct cmsghdr *cmptr; -# endif - - /* clear msghdr */ - memset( &msg, 0, sizeof msg ); - -# ifdef CMSG_SPACE - msg.msg_control = control_un.control; - msg.msg_controllen = sizeof(control_un.control); - cmptr = CMSG_FIRSTHDR(&msg); - cmptr->cmsg_len = CMSG_LEN(sizeof(io)); - cmptr->cmsg_level = SOL_SOCKET; - cmptr->cmsg_type = SCM_RIGHTS; - memcpy( CMSG_DATA(cmptr), io, sizeof(io) ); -# else - msg.msg_accrights = (caddr_t) io; - msg.msg_accrightslen = sizeof(io); -# endif - - msg.msg_name = NULL; - msg.msg_namelen = 0; - msg.msg_iov = &iov; - msg.msg_iovlen = 1; - - ldap_pvt_thread_mutex_lock( &shell_surrogate_index_mutex ); - i = shell_surrogate_index ^= 1; - ldap_pvt_thread_mutex_unlock( &shell_surrogate_index_mutex ); - ldap_pvt_thread_mutex_lock( &shell_surrogate_fd_mutex[i] ); - c = (sendmsg( shell_surrogate_fd[i], &msg, 0 ) == 1 && - nwrite( shell_surrogate_fd[i], &args.bv_len, - sizeof(args.bv_len) ) == sizeof(args.bv_len) && - nwrite( shell_surrogate_fd[i], args.bv_val, - args.bv_len ) == args.bv_len && - nread( shell_surrogate_fd[i], &pid, - sizeof(pid) ) == sizeof(pid)); - ldap_pvt_thread_mutex_unlock( &shell_surrogate_fd_mutex[i] ); - close( p2c[0] ); - close( c2p[1] ); - if ( !c ) { - Debug( LDAP_DEBUG_ANY, "process creation failed\n", 0, 0, 0 ); - close( p2c[1] ); - close( c2p[0] ); - close( shell_surrogate_fd[0] ); - close( shell_surrogate_fd[1] ); - shell_surrogate_fd[0] = - shell_surrogate_fd[1] = -1; - return( -1 ); - } - } - -#else /* !SHELL_SURROGATE_PARENT */ - fflush( NULL ); # ifdef HAVE_THR pid = fork1(); @@ -353,8 +76,6 @@ forkandexec( return( -1 ); } -#endif /* SHELL_SURROGATE_PARENT */ - /* parent */ if ( (*rfp = fdopen( c2p[0], "r" )) == NULL || (*wfp = fdopen( p2c[1], "w" )) == NULL ) { diff --git a/servers/slapd/back-shell/init.c b/servers/slapd/back-shell/init.c index 03ab2d1801..d7add624f5 100644 --- a/servers/slapd/back-shell/init.c +++ b/servers/slapd/back-shell/init.c @@ -10,7 +10,6 @@ #include #include -#include #include "slap.h" #include "shell.h" @@ -38,7 +37,7 @@ shell_back_initialize( bi->bi_open = 0; bi->bi_config = 0; bi->bi_close = 0; - bi->bi_destroy = shell_back_destroy; + bi->bi_destroy = 0; bi->bi_db_init = shell_back_db_init; bi->bi_db_config = shell_back_db_config; @@ -65,32 +64,6 @@ shell_back_initialize( bi->bi_connection_init = 0; bi->bi_connection_destroy = 0; -#ifdef SHELL_SURROGATE_PARENT - ldap_pvt_thread_mutex_init( &shell_surrogate_index_mutex ); - ldap_pvt_thread_mutex_init( &shell_surrogate_fd_mutex[0] ); - ldap_pvt_thread_mutex_init( &shell_surrogate_fd_mutex[1] ); -#endif - - return 0; -} - -int -shell_back_destroy( - BackendInfo *bi -) -{ -#ifdef SHELL_SURROGATE_PARENT - ldap_pvt_thread_mutex_destroy( &shell_surrogate_index_mutex ); - ldap_pvt_thread_mutex_destroy( &shell_surrogate_fd_mutex[0] ); - ldap_pvt_thread_mutex_destroy( &shell_surrogate_fd_mutex[1] ); - if ( shell_surrogate_fd[0] >= 0 ) { - close( shell_surrogate_fd[0] ); - close( shell_surrogate_fd[1] ); - } - if ( shell_surrogate_pid >= 0 ) - kill( shell_surrogate_pid, SIGTERM ); -#endif - return 0; } @@ -101,11 +74,6 @@ shell_back_db_init( { struct shellinfo *si; -#ifdef SHELL_SURROGATE_PARENT - if ( shell_surrogate_fd[0] < 0 ) - make_surrogate_parent(); -#endif - si = (struct shellinfo *) ch_calloc( 1, sizeof(struct shellinfo) ); be->be_private = si; diff --git a/servers/slapd/back-shell/modify.c b/servers/slapd/back-shell/modify.c index 9b82f70be4..9ea1511a69 100644 --- a/servers/slapd/back-shell/modify.c +++ b/servers/slapd/back-shell/modify.c @@ -32,7 +32,7 @@ shell_back_modify( FILE *rfp, *wfp; int i; - if ( IS_NULLCMD( si->si_modify ) ) { + if ( si->si_modify == NULL ) { send_ldap_result( conn, op, LDAP_UNWILLING_TO_PERFORM, NULL, "modify not implemented", NULL, NULL ); return( -1 ); diff --git a/servers/slapd/back-shell/modrdn.c b/servers/slapd/back-shell/modrdn.c index bfe86a9510..6b54a499dd 100644 --- a/servers/slapd/back-shell/modrdn.c +++ b/servers/slapd/back-shell/modrdn.c @@ -47,7 +47,7 @@ shell_back_modrdn( Entry e; FILE *rfp, *wfp; - if ( IS_NULLCMD( si->si_modrdn ) ) { + if ( si->si_modrdn == NULL ) { send_ldap_result( conn, op, LDAP_UNWILLING_TO_PERFORM, NULL, "modrdn not implemented", NULL, NULL ); return( -1 ); diff --git a/servers/slapd/back-shell/search.c b/servers/slapd/back-shell/search.c index 13ca4cb02e..cc9e4dcca6 100644 --- a/servers/slapd/back-shell/search.c +++ b/servers/slapd/back-shell/search.c @@ -36,7 +36,7 @@ shell_back_search( FILE *rfp, *wfp; AttributeName *an; - if ( IS_NULLCMD( si->si_search ) ) { + if ( si->si_search == NULL ) { send_ldap_result( conn, op, LDAP_UNWILLING_TO_PERFORM, NULL, "search not implemented", NULL, NULL ); return( -1 ); diff --git a/servers/slapd/back-shell/shell.h b/servers/slapd/back-shell/shell.h index 907de602ca..0bfe914926 100644 --- a/servers/slapd/back-shell/shell.h +++ b/servers/slapd/back-shell/shell.h @@ -12,41 +12,16 @@ LDAP_BEGIN_DECL -#if defined(HAVE_RECVMSG) && !defined(NO_THREADS) -# define SHELL_SURROGATE_PARENT -#endif - -#ifdef SHELL_SURROGATE_PARENT - -extern ldap_pvt_thread_mutex_t shell_surrogate_index_mutex; -extern ldap_pvt_thread_mutex_t shell_surrogate_fd_mutex[2]; -extern int shell_surrogate_fd[2]; -extern pid_t shell_surrogate_pid; - -typedef struct berval Cmd_info; -#define MAKE_CMD_INFO(args) make_cmd_info( args ) -#define IS_NULLCMD(cmd) ((cmd).bv_val == NULL) - -extern void make_surrogate_parent LDAP_P(( void )); - -#else /* !SHELL_SURROGATE_PARENT */ - -typedef char **Cmd_info; -#define MAKE_CMD_INFO(args) ldap_charray_dup( args ) -#define IS_NULLCMD(cmd) ((cmd) == NULL) - -#endif /* SHELL_SURROGATE_PARENT */ - struct shellinfo { - Cmd_info si_bind; /* cmd + args to exec for bind */ - Cmd_info si_unbind; /* cmd + args to exec for unbind */ - Cmd_info si_search; /* cmd + args to exec for search */ - Cmd_info si_compare; /* cmd + args to exec for compare */ - Cmd_info si_modify; /* cmd + args to exec for modify */ - Cmd_info si_modrdn; /* cmd + args to exec for modrdn */ - Cmd_info si_add; /* cmd + args to exec for add */ - Cmd_info si_delete; /* cmd + args to exec for delete */ - Cmd_info si_abandon; /* cmd + args to exec for abandon */ + char **si_bind; /* cmd + args to exec for bind */ + char **si_unbind; /* cmd + args to exec for unbind */ + char **si_search; /* cmd + args to exec for search */ + char **si_compare; /* cmd + args to exec for compare */ + char **si_modify; /* cmd + args to exec for modify */ + char **si_modrdn; /* cmd + args to exec for modrdn */ + char **si_add; /* cmd + args to exec for add */ + char **si_delete; /* cmd + args to exec for delete */ + char **si_abandon; /* cmd + args to exec for abandon */ }; struct slap_backend_db; @@ -54,7 +29,7 @@ struct slap_conn; struct slap_op; extern pid_t forkandexec LDAP_P(( - Cmd_info args, + char **args, FILE **rfp, FILE **wfp)); diff --git a/servers/slapd/back-shell/unbind.c b/servers/slapd/back-shell/unbind.c index e54173d7ba..d5d936106e 100644 --- a/servers/slapd/back-shell/unbind.c +++ b/servers/slapd/back-shell/unbind.c @@ -25,7 +25,7 @@ shell_back_unbind( struct shellinfo *si = (struct shellinfo *) be->be_private; FILE *rfp, *wfp; - if ( IS_NULLCMD( si->si_unbind ) ) { + if ( si->si_unbind == NULL ) { return 0; } -- 2.39.5