2 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 * Copyright 2006 The OpenLDAP Foundation.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted only as authorized by the OpenLDAP
11 * A copy of this license is available in the file LICENSE in the
12 * top-level directory of the distribution or, alternatively, at
13 * <http://www.OpenLDAP.org/license.html>.
16 * This program was orignally developed by Kurt D. Zeilenga for inclusion
17 * in OpenLDAP Software.
21 * LDAPv3 Transactions (draft-zeilenga-ldap-txn)
27 #include <ac/stdlib.h>
29 #include <ac/socket.h>
30 #include <ac/string.h>
44 return ldap_extended_operation( ld, LDAP_EXOP_X_TXN_START,
45 NULL, sctrls, cctrls, msgidp );
53 struct berval **txnid )
55 assert( txnid != NULL );
57 return ldap_extended_operation_s( ld, LDAP_EXOP_X_TXN_START,
58 NULL, sctrls, cctrls, NULL, txnid );
71 BerElement *txnber = NULL;
72 struct berval *txnval = NULL;
74 assert( txnid != NULL );
76 txnber = ber_alloc_t( LBER_USE_DER );
77 ber_printf( txnber, "{io}", commit, txnid );
78 ber_flatten( txnber, &txnval );
80 rc = ldap_extended_operation( ld, LDAP_EXOP_X_TXN_END,
81 txnval, sctrls, cctrls, msgidp );
83 ber_free( txnber, 1 );
97 struct berval *retdata = NULL;
100 rc = ldap_txn_end( ld, commit, txnid, sctrls, cctrls, &msgid );
101 if( rc != LDAP_SUCCESS ) return rc;
103 if ( ldap_result( ld, msgid, LDAP_MSG_ALL, (struct timeval *) NULL, &res )
109 rc = ldap_parse_extended_result( ld, res, NULL, &retdata, 0 );
110 if( rc != LDAP_SUCCESS ) {
115 /* don't bother parsing the retdata (yet) */
116 if( retidp != NULL ) {
120 return ldap_result2error( ld, res, 1 );