Fix $or
[factor/jcg.git] / unmaintained / ldap / ldap.factor
blob2ada976f78b378801db3885fdd0207b08bce0b9b
1 ! Copyright (C) 2007 Elie CHAFTARI
2 ! See http://factorcode.org/license.txt for BSD license.
4 ! Tested with OpenLDAP 2.2.7.0.21 on Mac OS X 10.4.9 PowerPC
6 USING: alien alien.c-types assocs continuations hashtables io kernel
7 ldap.libldap math namespaces sequences ;
9 IN: ldap
11 SYMBOL: message
12 SYMBOL: ldp
14 ! =========================================================
15 ! Error interpretation routines
16 ! =========================================================
18 : result-to-error ( ld res freeit -- num )
19     ldap_result2error ;
21 : err-to-string ( err -- str )
22     ldap_err2string ;
24 : check-result ( result -- )
25     dup zero? [ drop ] [
26         err-to-string throw
27     ] if ;
29 : result-type ( result -- )
30     result-types >hashtable at print ;
32 ! =========================================================
33 ! Initialization routines
34 ! =========================================================
36 ! deprecated in favor of ldap_initialize
37 : open ( host port -- ld )
38     ldap_open ;
40 ! deprecated in favor of ldap_initialize
41 : init ( host port -- ld )
42     ldap_init ;
44 : initialize ( ld url -- )
45     dupd ldap_initialize swap *void* ldp set check-result ;
47 : get-option ( ld option outvalue -- )
48     ldap_get_option check-result ;
50 : set-option ( ld option invalue -- )
51     ldap_set_option check-result ;
53 ! =========================================================
54 ! Bind operations
55 ! =========================================================
57 : simple-bind ( ld who passwd -- id )
58     ldap_simple_bind ;
60 : simple-bind-s ( ld who passwd -- )
61     ldap_simple_bind_s check-result ;
63 : unbind-s ( ld -- )
64     ldap_unbind_s check-result ;
66 : with-bind ( ld who passwd quot -- )
67     -roll [ simple-bind-s [ ldp get unbind-s ] [ ] cleanup ] with-scope ; inline
69 ! =========================================================
70 ! Search operations
71 ! =========================================================
73 : search ( ld base scope filter attrs attrsonly -- id )
74     ldap_search ;
76 : search-s ( ld base scope filter attrs attrsonly res -- )
77     ldap_search_s check-result ;
79 ! =========================================================
80 ! Return results of asynchronous operation routines
81 ! =========================================================
83 : result ( ld msgid all timeout result -- )
84     [ ldap_result ] keep *void* message set result-type ;
86 : parse-result ( ld result errcodep matcheddnp errmsgp referralsp serverctrlsp freeit -- )
87     ldap_parse_result check-result ;
89 : count-messages ( ld result -- count )
90     ldap_count_messages ;
92 : first-message ( ld result -- message )
93     ldap_first_message ;
95 : next-message ( ld message -- message )
96     ldap_next_message ;
98 : msgtype ( msg -- num )
99     ldap_msgtype ;
101 : msgid ( msg -- num )
102     ldap_msgid ;
104 : count-entries ( ld result -- count )
105     ldap_count_entries ;
107 : first-entry ( ld result -- entry )
108     ldap_first_entry ;
110 : next-entry ( ld entry -- entry )
111     ldap_next_entry ;
113 : first-attribute ( ld entry berptr -- str )
114     ldap_first_attribute ;
116 : next-attribute ( ld entry ber -- str )
117     ldap_next_attribute ;
119 : get-values ( ld entry attr -- values )
120     ldap_get_values ;
122 : get-dn ( ld entry -- str )
123     ldap_get_dn ;
125 ! =========================================================
126 ! Public routines
127 ! =========================================================
129 : get-message ( -- message )
130     message get ;
132 : get-ldp ( -- ldp )
133     ldp get ;