2 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 * Copyright 2006-2017 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 );
79 ber_printf( txnber, "{ON}", txnid );
81 ber_printf( txnber, "{bON}", commit, txnid );
84 ber_flatten( txnber, &txnval );
86 rc = ldap_extended_operation( ld, LDAP_EXOP_X_TXN_END,
87 txnval, sctrls, cctrls, msgidp );
89 ber_free( txnber, 1 );
103 BerElement *txnber = NULL;
104 struct berval *txnval = NULL;
105 struct berval *retdata = NULL;
107 if ( retidp != NULL ) *retidp = -1;
109 txnber = ber_alloc_t( LBER_USE_DER );
112 ber_printf( txnber, "{ON}", txnid );
114 ber_printf( txnber, "{bON}", commit, txnid );
117 ber_flatten( txnber, &txnval );
119 rc = ldap_extended_operation_s( ld, LDAP_EXOP_X_TXN_END,
120 txnval, sctrls, cctrls, NULL, &retdata );
122 ber_free( txnber, 1 );
125 if( retdata != NULL ) {
130 if( retidp == NULL ) goto done;
132 ber = ber_init( retdata );
135 rc = ld->ld_errno = LDAP_NO_MEMORY;
139 tag = ber_scanf( ber, "i", &retid );
142 if ( tag != LBER_INTEGER ) {
143 rc = ld->ld_errno = LDAP_DECODING_ERROR;
147 *retidp = (int) retid;
150 ber_bvfree( retdata );