1/* unbind.c - shell backend unbind function */ 2/* $OpenLDAP$ */ 3/* This work is part of OpenLDAP Software <http://www.openldap.org/>. 4 * 5 * Copyright 1998-2011 The OpenLDAP Foundation. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted only as authorized by the OpenLDAP 10 * Public License. 11 * 12 * A copy of this license is available in the file LICENSE in the 13 * top-level directory of the distribution or, alternatively, at 14 * <http://www.OpenLDAP.org/license.html>. 15 */ 16/* Portions Copyright (c) 1995 Regents of the University of Michigan. 17 * All rights reserved. 18 * 19 * Redistribution and use in source and binary forms are permitted 20 * provided that this notice is preserved and that due credit is given 21 * to the University of Michigan at Ann Arbor. The name of the University 22 * may not be used to endorse or promote products derived from this 23 * software without specific prior written permission. This software 24 * is provided ``as is'' without express or implied warranty. 25 */ 26/* ACKNOWLEDGEMENTS: 27 * This work was originally developed by the University of Michigan 28 * (as part of U-MICH LDAP). 29 */ 30 31#include "portable.h" 32 33#include <stdio.h> 34 35#include <ac/socket.h> 36#include <ac/string.h> 37 38#include "slap.h" 39#include "shell.h" 40 41int 42shell_back_unbind( 43 Operation *op, 44 SlapReply *rs 45) 46{ 47 struct shellinfo *si = (struct shellinfo *) op->o_bd->be_private; 48 FILE *rfp, *wfp; 49 50 if ( si->si_unbind == NULL ) { 51 return 0; 52 } 53 54 if ( forkandexec( si->si_unbind, &rfp, &wfp ) == (pid_t)-1 ) { 55 return 0; 56 } 57 58 /* write out the request to the unbind process */ 59 fprintf( wfp, "UNBIND\n" ); 60 fprintf( wfp, "msgid: %ld\n", (long) op->o_msgid ); 61 print_suffixes( wfp, op->o_bd ); 62 fprintf( wfp, "dn: %s\n", (op->o_conn->c_dn.bv_len ? op->o_conn->c_dn.bv_val : "") ); 63 fclose( wfp ); 64 65 /* no response to unbind */ 66 fclose( rfp ); 67 68 return 0; 69} 70