void LDAPProtocol::put( const KURL &_url, int, bool overwrite, bool ) { kdDebug(7125) << "put(" << _url << ")" << endl; LDAPUrl usrc(_url); changeCheck( usrc ); if ( !mLDAP ) { finished(); return; } LDAPMod **lmod = 0; LDAPControl **serverctrls = 0, **clientctrls = 0; TQByteArray buffer; int result = 0; LDIF::ParseVal ret; LDIF ldif; ret = LDIF::MoreData; int ldaperr; do { if ( ret == LDIF::MoreData ) { dataReq(); // Request for data result = readData( buffer ); ldif.setLDIF( buffer ); } if ( result < 0 ) { //error FREELDAPMEM; return; } if ( result == 0 ) { kdDebug(7125) << "EOF!" << endl; ldif.endLDIF(); } do { ret = ldif.nextItem(); kdDebug(7125) << "nextitem: " << ret << endl; switch ( ret ) { case LDIF::None: case LDIF::NewEntry: case LDIF::MoreData: break; case LDIF::EndEntry: ldaperr = LDAP_SUCCESS; switch ( ldif.entryType() ) { case LDIF::Entry_None: error( ERR_INTERNAL, i18n("The LDIF parser failed.") ); FREELDAPMEM; return; case LDIF::Entry_Del: kdDebug(7125) << "tdeio_ldap_del" << endl; controlsFromMetaData( &serverctrls, &clientctrls ); ldaperr = ldap_delete_ext_s( mLDAP, ldif.dn().utf8(), serverctrls, clientctrls ); FREELDAPMEM; break; case LDIF::Entry_Modrdn: kdDebug(7125) << "tdeio_ldap_modrdn olddn:" << ldif.dn() << " newRdn: " << ldif.newRdn() << " newSuperior: " << ldif.newSuperior() << " deloldrdn: " << ldif.delOldRdn() << endl; controlsFromMetaData( &serverctrls, &clientctrls ); ldaperr = ldap_rename_s( mLDAP, ldif.dn().utf8(), ldif.newRdn().utf8(), ldif.newSuperior().isEmpty() ? TQCString() : ldif.newSuperior().utf8(), ldif.delOldRdn(), serverctrls, clientctrls ); FREELDAPMEM; break; case LDIF::Entry_Mod: kdDebug(7125) << "tdeio_ldap_mod" << endl; if ( lmod ) { controlsFromMetaData( &serverctrls, &clientctrls ); ldaperr = ldap_modify_ext_s( mLDAP, ldif.dn().utf8(), lmod, serverctrls, clientctrls ); FREELDAPMEM; } break; case LDIF::Entry_Add: kdDebug(7125) << "tdeio_ldap_add " << ldif.dn() << endl; if ( lmod ) { controlsFromMetaData( &serverctrls, &clientctrls ); ldaperr = ldap_add_ext_s( mLDAP, ldif.dn().utf8(), lmod, serverctrls, clientctrls ); if ( ldaperr == LDAP_ALREADY_EXISTS && overwrite ) { kdDebug(7125) << ldif.dn() << " already exists, delete first" << endl; ldaperr = ldap_delete_s( mLDAP, ldif.dn().utf8() ); if ( ldaperr == LDAP_SUCCESS ) ldaperr = ldap_add_ext_s( mLDAP, ldif.dn().utf8(), lmod, serverctrls, clientctrls ); } FREELDAPMEM; } break; } if ( ldaperr != LDAP_SUCCESS ) { kdDebug(7125) << "put ldap error: " << ldap_err2string(ldaperr) << endl; LDAPErr( _url ); FREELDAPMEM; return; } break; case LDIF::Item: switch ( ldif.entryType() ) { case LDIF::Entry_Mod: { int modtype = 0; switch ( ldif.modType() ) { case LDIF::Mod_None: modtype = 0; break; case LDIF::Mod_Add: modtype = LDAP_MOD_ADD; break; case LDIF::Mod_Replace: modtype = LDAP_MOD_REPLACE; break; case LDIF::Mod_Del: modtype = LDAP_MOD_DELETE; break; } addModOp( &lmod, modtype, ldif.attr(), ldif.val() ); break; } case LDIF::Entry_Add: if ( ldif.val().size() > 0 ) addModOp( &lmod, 0, ldif.attr(), ldif.val() ); break; default: error( ERR_INTERNAL, i18n("The LDIF parser failed.") ); FREELDAPMEM; return; } break; case LDIF::Control: addControlOp( &serverctrls, ldif.oid(), ldif.val(), ldif.critical() ); break; case LDIF::Err: error( ERR_SLAVE_DEFINED, i18n( "Invalid LDIF file in line %1." ).arg( ldif.lineNo() ) ); FREELDAPMEM; return; } } while ( ret != LDIF::MoreData ); } while ( result > 0 ); FREELDAPMEM; finished(); }
bool LDIFConverter::LDIFToAddressee( const QString &str, AddresseeList &addrList, QDateTime dt ) { if (str.isEmpty()) return true; bool endldif = false, end = false; LDIF ldif; LDIF::ParseVal ret; const char *latinstr = str.latin1(); int latinstrlen = qstrlen( latinstr ); QByteArray data; Addressee a; Address homeAddr, workAddr; data.setRawData( latinstr, latinstrlen ); ldif.setLDIF( data ); if (!dt.isValid()) dt = QDateTime::currentDateTime(); a.setRevision(dt); homeAddr = Address( Address::Home ); workAddr = Address( Address::Work ); do { ret = ldif.nextItem(); switch ( ret ) { case LDIF::Item: { QString fieldname = ldif.attr().lower(); QString value = QString::fromUtf8( ldif.val(), ldif.val().size() ); evaluatePair( a, homeAddr, workAddr, fieldname, value ); break; } case LDIF::EndEntry: // if the new address is not empty, append it if ( !a.formattedName().isEmpty() || !a.name().isEmpty() || !a.familyName().isEmpty() ) { if ( !homeAddr.isEmpty() ) a.insertAddress( homeAddr ); if ( !workAddr.isEmpty() ) a.insertAddress( workAddr ); addrList.append( a ); } a = Addressee(); a.setRevision(dt); homeAddr = Address( Address::Home ); workAddr = Address( Address::Work ); break; case LDIF::MoreData: { if ( endldif ) end = true; else { ldif.endLDIF(); endldif = true; break; } } default: break; } } while ( !end ); data.resetRawData( latinstr, latinstrlen ); return true; }