+ better error handling
This commit is contained in:
parent
c7a73723dc
commit
e496a72c7b
42
c/ldap.c
42
c/ldap.c
|
@ -44,7 +44,10 @@ s48_value scsh_ldap_init(s48_value host, s48_value port)
|
||||||
S48_GC_PROTECT_2(host, port);
|
S48_GC_PROTECT_2(host, port);
|
||||||
ldap = ldap_init(s48_extract_string(host), s48_extract_integer(port));
|
ldap = ldap_init(s48_extract_string(host), s48_extract_integer(port));
|
||||||
S48_GC_UNPROTECT();
|
S48_GC_UNPROTECT();
|
||||||
return ldap == NULL ? S48_FALSE : scsh_enter_ldap(ldap);
|
if (ldap == NULL)
|
||||||
|
s48_raise_os_error(error());
|
||||||
|
else
|
||||||
|
scsh_enter_ldap(ldap);
|
||||||
}
|
}
|
||||||
|
|
||||||
s48_value scsh_ldap_simple_bind_s(s48_value ldap, s48_value user, s48_value cred)
|
s48_value scsh_ldap_simple_bind_s(s48_value ldap, s48_value user, s48_value cred)
|
||||||
|
@ -122,14 +125,15 @@ s48_value scsh_ldap_search_s(s48_value ldap, s48_value base,
|
||||||
|
|
||||||
a = ffit_extract_list_of_strings(attrs);
|
a = ffit_extract_list_of_strings(attrs);
|
||||||
r = ldap_search_s(scsh_extract_ldap(ldap),
|
r = ldap_search_s(scsh_extract_ldap(ldap),
|
||||||
s48_extract_string(base),
|
S48_FALSE_P(base) ? NULL : s48_extract_string(base),
|
||||||
s48_extract_integer(scope),
|
s48_extract_integer(scope),
|
||||||
s48_extract_string(filter),
|
s48_extract_string(filter),
|
||||||
a,
|
a,
|
||||||
S48_TRUE_P(attrsonly),
|
S48_TRUE_P(attrsonly),
|
||||||
msg);
|
msg);
|
||||||
free(a);
|
free(a);
|
||||||
res = s48_list_2(s48_enter_integer(r), scsh_enter_ldapmessage(*msg));
|
res = s48_list_2(s48_enter_integer(r),
|
||||||
|
r == LDAP_SUCCESS ? scsh_enter_ldapmessage(*msg) : S48_FALSE);
|
||||||
S48_GC_UNPROTECT();
|
S48_GC_UNPROTECT();
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@ -158,7 +162,8 @@ s48_value scsh_ldap_search_st(s48_value ldap, s48_value base,
|
||||||
s48_extract_integer(scope), s48_extract_string(filter),
|
s48_extract_integer(scope), s48_extract_string(filter),
|
||||||
a, S48_TRUE_P(attrsonly), &timeout, msg);
|
a, S48_TRUE_P(attrsonly), &timeout, msg);
|
||||||
free(a);
|
free(a);
|
||||||
res = s48_list_2(s48_enter_integer(r), scsh_enter_ldapmessage(*msg));
|
res = s48_list_2(s48_enter_integer(r),
|
||||||
|
r == LDAP_SUCCESS ? scsh_enter_ldapmessage(*msg) : S48_FALSE);
|
||||||
S48_GC_UNPROTECT();
|
S48_GC_UNPROTECT();
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@ -463,22 +468,25 @@ s48_value scsh_ldap_abandon(s48_value ldap, s48_value msgid)
|
||||||
s48_value scsh_ldap_get_set_option(s48_value ldap, s48_value option,
|
s48_value scsh_ldap_get_set_option(s48_value ldap, s48_value option,
|
||||||
s48_value set, s48_value inval)
|
s48_value set, s48_value inval)
|
||||||
{
|
{
|
||||||
int opt, r;
|
int opt, rc;
|
||||||
LDAP *ld;
|
LDAP *ld;
|
||||||
void *outvalue;
|
void *outvalue;
|
||||||
s48_value res = S48_UNSPECIFIC;
|
s48_value res, res_list;
|
||||||
|
S48_DECLARE_GC_PROTECT(6);
|
||||||
|
|
||||||
|
S48_GC_PROTECT(ldap, option, set, inval, res, res_list);
|
||||||
FFIT_CHECK_RECORD_TYPE(ldap, scsh_ldap_record_type);
|
FFIT_CHECK_RECORD_TYPE(ldap, scsh_ldap_record_type);
|
||||||
FFIT_CHECK_BOOLEAN(set);
|
FFIT_CHECK_BOOLEAN(set);
|
||||||
ld = scsh_extract_ldap(ldap);
|
ld = scsh_extract_ldap(ldap);
|
||||||
|
|
||||||
|
res = S48_UNSPECIFIC;
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
case LDAP_OPT_API_INFO:
|
case LDAP_OPT_API_INFO:
|
||||||
{
|
{
|
||||||
if (S48_TRUE_P(set))
|
if (S48_TRUE_P(set))
|
||||||
raise_ldap_read_only_option();
|
raise_ldap_read_only_option();
|
||||||
r = ldap_get_option(ld, opt, outvalue);
|
rc = ldap_get_option(ld, opt, outvalue);
|
||||||
if (r == LDAP_SUCCESS)
|
if (rc == LDAP_OPT_SUCCESS)
|
||||||
res = scsh_enter_ldapiinfo((LDAPAPIInfo *) outvalue);
|
res = scsh_enter_ldapiinfo((LDAPAPIInfo *) outvalue);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -492,10 +500,10 @@ s48_value scsh_ldap_get_set_option(s48_value ldap, s48_value option,
|
||||||
if (S48_TRUE_P(set)) {
|
if (S48_TRUE_P(set)) {
|
||||||
FFIT_CHECK_INTEGER(inval);
|
FFIT_CHECK_INTEGER(inval);
|
||||||
l = s48_extract_integer(inval);
|
l = s48_extract_integer(inval);
|
||||||
r = ldap_set_option(ld, opt, &l);
|
rc = ldap_set_option(ld, opt, &l);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if ((r = ldap_get_option(ld, opt, outvalue)) == LDAP_SUCCESS)
|
if ((rc = ldap_get_option(ld, opt, outvalue)) == LDAP_SUCCESS)
|
||||||
res = s48_enter_integer(*((int*)outvalue));
|
res = s48_enter_integer(*((int*)outvalue));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -504,10 +512,10 @@ s48_value scsh_ldap_get_set_option(s48_value ldap, s48_value option,
|
||||||
{
|
{
|
||||||
if (S48_TRUE_P(set)) {
|
if (S48_TRUE_P(set)) {
|
||||||
FFIT_CHECK_BOOLEAN(inval);
|
FFIT_CHECK_BOOLEAN(inval);
|
||||||
r = ldap_set_option(ld, opt, S48_TRUE_P(inval) ? LDAP_OPT_ON : LDAP_OPT_OFF);
|
rc = ldap_set_option(ld, opt, S48_TRUE_P(inval) ? LDAP_OPT_ON : LDAP_OPT_OFF);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if ((r = ldap_get_option(ld, opt, outvalue)) == LDAP_SUCCESS)
|
if ((rc = ldap_get_option(ld, opt, outvalue)) == LDAP_SUCCESS)
|
||||||
res = outvalue == 0 ? S48_TRUE : S48_FALSE;
|
res = outvalue == 0 ? S48_TRUE : S48_FALSE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -517,10 +525,10 @@ s48_value scsh_ldap_get_set_option(s48_value ldap, s48_value option,
|
||||||
if (S48_TRUE_P(set)) {
|
if (S48_TRUE_P(set)) {
|
||||||
FFIT_CHECK_INTEGER(inval);
|
FFIT_CHECK_INTEGER(inval);
|
||||||
v = s48_extract_integer(inval);
|
v = s48_extract_integer(inval);
|
||||||
r = ldap_set_option(ld, opt, &v);
|
rc = ldap_set_option(ld, opt, &v);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if ((r = ldap_get_option(ld, opt, outvalue)) == LDAP_SUCCESS)
|
if ((rc = ldap_get_option(ld, opt, outvalue)) == LDAP_SUCCESS)
|
||||||
res = s48_enter_integer(*(int *)outvalue);
|
res = s48_enter_integer(*(int *)outvalue);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -530,6 +538,12 @@ s48_value scsh_ldap_get_set_option(s48_value ldap, s48_value option,
|
||||||
raise_ldap_read_only_option();
|
raise_ldap_read_only_option();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
res_list =
|
||||||
|
s48_list_2(rc == LDAP_OPT_SUCCESS ? S48_TRUE : S48_FALSE,
|
||||||
|
rc == LDAP_OPT_SUCCESS ? res : S48_UNSPECIFIC);
|
||||||
|
S48_GC_UNPROTECT();
|
||||||
|
return res_list;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************ */
|
/* ************************************************************************ */
|
||||||
|
|
|
@ -102,4 +102,3 @@ s48_value scsh_ldap_abandon(s48_value, s48_value);
|
||||||
s48_value scsh_ldap_get_set_option(s48_value, s48_value, s48_value, s48_value);
|
s48_value scsh_ldap_get_set_option(s48_value, s48_value, s48_value, s48_value);
|
||||||
s48_value scsh_ldapmod_create(s48_value, s48_value, s48_value);
|
s48_value scsh_ldapmod_create(s48_value, s48_value, s48_value);
|
||||||
void scsh_init_ldap_bindings(void);
|
void scsh_init_ldap_bindings(void);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue