From: Bedo Sandor Date: 2003-12-19T18:37:26+09:00 Subject: libnet-ldap binary transfers Hi, I think there's a bug in libldap-ruby. I want to copy my CA CRL entry from one a master ldap server to a slave, but ";binary" attributes fails to add at the first "\000" characters. This entry was read from the master ldap server: (converted to hash) entry = { "authorityRevocationList;binary"=>[""], "cn"=>["Wallalat Hitelesito Kozpont (CA)"], "cACertificate;binary"=>["0\202\004+0\202\003\023\240\003\002\001\002\002\001\0010\r\006\t*\206H\206\367\r\001\001\004\005\0000\201\2341\v0\t\006\003U\004\006\023\002HU1\0210\017\006\003U\004\010\023\010Budapest1\0210\017\006\003U\004\a\023\010Budapest1\0220\020\006\003U\004\n\023\tWallalat Rt.1+0)\006\003U\004\v\023\"Biztonsagi Szolgaltato Igazgatosag1&0$\006\003U\004\003\023\035Wallalat Hitelesito Kozpont (CA)0\036\027\r030605230000Z\027\r130606225959Z0\201\2341\v0\t\006\003U\004\006\023\002HU1\0210\017\006\003U\004\010\023\010Budapest1\0210\017\006\003U\004\a\023\010Budapest1\0220\020\006\003U\004\n\023\tWallalat Rt.1+0)\006\003U\004\v\023\"Biztonsagi Szolgaltato Igazgatosag1&0$\006\003U\004\003\023\035Wallalat Hitelesito Kozpont (CA)0\202\001\"0\r\006\t*\206H\206\367\r\001\001\001\005\000\003\202\001\017\0000\202\001\n\002\202\001\001\000\266x\034\264\271\v\3447\365\336\002'\234\270Wq\223\324\351tw\210~\354NjD\210?)f\323\030\237\025\343\370\305\271\201\302'\241\274\034f\e\212z\024\036\323\a\213\240a\311\207\203o\247$\035;\221\312p\0003\310\037\006\030\t\235\177\337\200ZP["Wallalat Hitelesito Kozpont (CA)"], "objectClass"=>["top", "person", "organizationalPerson", "inetOrgPerson", "certificationAuthority"], "certificateRevocationList;binary"=>["0\202\003G0\202\002/0\r\006\t*\206H\206\367\r\001\001\005\005\0000\201\2341\v0\t\006\003U\004\006\023\002HU1\0210\017\006\003U\004\010\023\010Budapest1\0210\017\006\003U\004\a\023\010Budapest1\0220\020\006\003U\004\n\023\tWallalat Rt.1+0)\006\003U\004\v\023\"Biztonsagi Szolgaltato Igazgatosag1&0$\006\003U\004\003\023\035Wallalat Hitelesito Kozpont (CA)\027\r031217132400Z\027\r031224132400Z0\202\001_0\022\002\001,\027\r031127133549Z0\022\002\001+\027\r031127133549Z0\023\002\002\000\340\027\r031110121009Z0\023\002\002\000\256\027\r030704091518Z0\023\002\002\000\362\027\r031216110128Z0\023\002\002\000\255\027\r030704091550Z0\023\002\002\000\361\027\r031216110128Z0\023\002\002\0014\027\r031216110229Z0\023\002\002\0013\027\r031216110229Z0\023\002\002\002\272\027\r031213140726Z0\023\002\002\000\222\027\r030703084632Z0\023\002\002\003q\027\r031217132359Z0\022\002\001a\027\r030710092644Z0\023\002\002\001]\027\r031110120643Z0\022\002\001`\027\r030710092630Z0\022\002\001\030\027\r030903115136Z0\022\002\001\027\027\r030610135654Z0\r\006\t*\206H\206\367\r\001\001\005\005\000\003\202\001\001\000J\a\343g6\006-\354:Fr\037\023of3yg\272\363\361\027\002m>\2356*j\0363\221',\e\232=:\006\035(O\3613\350\263I2\340\2337\300qn#\nR\324\205[\263nI0t\204\255\242>\273q\017\346Te\362\262|x \340[\373]\354k\316\260IZ\265\200\231\321\276\240\230\3667\010tic\036\211\354\256\265t2\251/\a=\325\010\207=\027\255z71*\020O\225v5\212\343|\360+\223\216'\351m\272'\t*\226\314\220\206?*\346[\217\320\213\245\202"] } The method I added the enry is derived from libnet-ldap examples: class LDAP_connector def []=(dn, entry) entry = entry.to_hash @ldap = LDAP::Conn.new(@host, @port) @ldap.set_option(LDAP::LDAP_OPT_PROTOCOL_VERSION, @proto) @ldap.bind(@binddn, @passwd) entry.delete('dn') @ldap.add(dn, entry) @ldap.unbind end end xxx = LDAP_connector.new("host", 389, "user_dn", "password", ...) xxx["cn=Wallalat Hitelesito Kozpont (CA),o=Wallalat"] = entry After the above ldap-add, this can be read from the slave ldap server: slave_entry = { "cn"=>["Wallalat Hitelesito Kozpont (CA)"], "authorityRevocationList;binary"=>[""], "cACertificate;binary"=>["0\202\004+0\202\003\023\240\003\002\001\002\002\001\0010\r\006\t*\206H\206\367\r\001\001\004\005"], "sn"=>["Wallalat Hitelesito Kozpont (CA)"], "objectClass"=>["top", "person", "organizationalPerson", "inetOrgPerson", "certificationAuthority"], "certificateRevocationList;binary"=>["0\202\003G0\202\002/0\r\006\t*\206H\206\367\r\001\001\005\005"], "dn"=>["cn=Wallalat Hitelesito Kozpont (CA),o=Wallalat"] } It is clear, that the "\000" cuts the string: cACertificate;binary slave: "0\202\004+0\202\003\023\240\003\002\001\002\002\001\0010\r\006\t*\206H\206\367\r\001\001\004\005" master: "0\202\004+0\202\003\023\240\003\002\001\002\002\001\0010\r\006\t*\206H\206\367\r\001\001\004\005\0000\201\2341\v0\t\006\003U\004\006\023\002HU1\0210\017\006\003U\004\010\023\010Budapest1\0210\017\006\003U\004\a\023\010Budapest1\0220\020\006\003U\004\n\023\tWallalat Rt.1+0)\006\003U\004\v\023\"Biztonsagi Szolgaltato Igazgatosag1&0$\006\003U\004\003\023\035Wallalat Hitelesito Kozpont (CA)0\036\027\r030605230000Z\027\r130606225959Z0\201\2341\v0\t\006\003U\004\006\023\002HU1\0210\017\006\003U\004\010\023\010Budapest1\0210\017\006\003U\004\a\023\010Budapest1\0220\020\006\003U\004\n\023\tWallalat Rt.1+0)\006\003U\004\v\023\"Biztonsagi Szolgaltato Igazgatosag1&0$\006\003U\004\003\023\035Wallalat Hitelesito Kozpont (CA)0\202\001\"0\r\006\t*\206H\206\367\r\001\001\001\005\000\003\202\001\017\0000\202\001\n\002\202\001\001\000\266x\034\264\271\v\3447\365\336\002'\234\270Wq\223\324\351tw\210~\354NjD\210?)f\323\030\237\025\343\370\305\271\201\302'\241\274\034f\e\212z\024\036\323\a\213\240a\311\207\203o\247$\035;\221\312p\0003\310\037\006\030\t\235\177\337\200ZP\2356*j\0363\221',\e\232=:\006\035(O\3613\350\263I2\340\2337\300qn#\nR\324\205[\263nI0t\204\255\242>\273q\017\346Te\362\262|x \340[\373]\354k\316\260IZ\265\200\231\321\276\240\230\3667\010tic\036\211\354\256\265t2\251/\a=\325\010\207=\027\255z71*\020O\225v5\212\343|\360+\223\216'\351m\272'\t*\226\314\220\206?*\346[\217\320\213\245\202" What can I do? Is it a bug or is there any other method to ldap-add binary entries? $ ruby -v ruby 1.8.0 (2003-10-05) [i386-linux] $ uname -a Linux newage 2.4.22 #5 Sat Oct 18 07:00:13 UTC 2003 i686 GNU/Linux $ dpkg -l libldap-ruby1.8 libldap2 ii libldap-ruby1.8 0.8.0+20030912-1 OpenLDAP library binding for Ruby 1.8 ii libldap2 2.1.22-1 OpenLDAP libraries $ _ -- bSanyI