* c/ldap.c (scsh_ldap_next_attribute): don't confuse test for NULL

(scsh_ldap_search_s): fixed pointer type
(scsh_ldap_search_st): ditto
(scsh_ldap_next_attribute): fixed test for NULL
(scsh_ldap_get_set_option): dispatch by value type, added string
types

* c/ldap.c (scsh_ldap_search_st): arguments base and filter may be
NULL, fixed bug in pointer handling

* c/ldap.c (scsh_ldap_unbind_s): got rid of superfluos type check
(scsh_ldap_abandon): ditto
(scsh_ldap_add): ditto
(scsh_ldap_compare_s): ditto
(scsh_ldap_count_entries): ditto
(scsh_ldap_count_messages): ditto
(scsh_ldap_count_references): ditto
(scsh_ldap_delete): ditto
(scsh_ldap_first_entry): ditto
(scsh_ldap_first_message): ditto
(scsh_ldap_first_reference): ditto
(scsh_ldap_get_dn): ditto
(scsh_ldap_get_values): ditto
(scsh_ldap_memfree): ditto
(scsh_ldap_modify): ditto
(scsh_ldap_msgfree): ditto
(scsh_ldap_msgid): ditto
(scsh_ldap_msgtype): ditto
(scsh_ldap_next_entry): ditto
(scsh_ldap_next_message): ditto
(scsh_ldap_next_reference): ditto
(scsh_ldap_search_s): ditto, and filter may be NULL
(scsh_ldap_search_st): ditto
This commit is contained in:
eknauel 2004-02-12 12:45:29 +00:00
parent 4fa34d0dda
commit 5d8f3512f3
1 changed files with 32 additions and 36 deletions

View File

@ -130,23 +130,20 @@ s48_value scsh_ldap_search_s(s48_value ldap, s48_value base,
{ {
int r; int r;
char** a; char** a;
LDAPMessage **msg; LDAPMessage *msg;
s48_value res; s48_value res;
S48_DECLARE_GC_PROTECT(7); S48_DECLARE_GC_PROTECT(7);
S48_GC_PROTECT_7(ldap, base, scope, filter, attrs, attrsonly, res); S48_GC_PROTECT_7(ldap, base, scope, filter, attrs, attrsonly, res);
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_FALSE_P(base) ? NULL : s48_extract_string(base), S48_FALSE_P(base) ? NULL : s48_extract_string(base),
s48_extract_integer(scope), s48_extract_integer(scope),
S48_FALSE_P(filter) ? NULL : s48_extract_string(filter), S48_FALSE_P(filter) ? NULL : s48_extract_string(filter),
a, a, S48_TRUE_P(attrsonly), &msg);
S48_TRUE_P(attrsonly),
msg);
free(a); free(a);
res = s48_list_2(s48_enter_integer(r), res = s48_list_2(s48_enter_integer(r),
r == LDAP_SUCCESS ? scsh_enter_ldapmessage(*msg) : S48_FALSE); r == LDAP_SUCCESS ? scsh_enter_ldapmessage(msg) : S48_FALSE);
S48_GC_UNPROTECT(); S48_GC_UNPROTECT();
return res; return res;
} }
@ -158,9 +155,9 @@ s48_value scsh_ldap_search_st(s48_value ldap, s48_value base,
{ {
int r; int r;
char** a; char** a;
LDAPMessage **msg; LDAPMessage *msg;
struct timeval timeout; struct timeval timeout;
s48_value res = S48_FALSE; s48_value res;
S48_DECLARE_GC_PROTECT(9); S48_DECLARE_GC_PROTECT(9);
S48_GC_PROTECT_9(ldap, base, scope, filter, attrs, attrsonly, res, S48_GC_PROTECT_9(ldap, base, scope, filter, attrs, attrsonly, res,
@ -169,13 +166,14 @@ s48_value scsh_ldap_search_st(s48_value ldap, s48_value base,
timeout.tv_sec = s48_extract_integer(timeout_sec); timeout.tv_sec = s48_extract_integer(timeout_sec);
timeout.tv_usec = s48_extract_integer(timeout_usec); timeout.tv_usec = s48_extract_integer(timeout_usec);
a = ffit_extract_list_of_strings(attrs); a = ffit_extract_list_of_strings(attrs);
r = ldap_search_st(scsh_extract_ldap(ldap),
r = ldap_search_st(scsh_extract_ldap(ldap), s48_extract_string(base), S48_FALSE_P(base) ? NULL : s48_extract_string(base),
s48_extract_integer(scope), s48_extract_string(filter), s48_extract_integer(scope),
a, S48_TRUE_P(attrsonly), &timeout, msg); S48_FALSE_P(filter) ? NULL : s48_extract_string(filter),
a, S48_TRUE_P(attrsonly), &timeout, &msg);
free(a); free(a);
res = s48_list_2(s48_enter_integer(r), res = s48_list_2(s48_enter_integer(r),
r == LDAP_SUCCESS ? scsh_enter_ldapmessage(*msg) : S48_FALSE); r == LDAP_SUCCESS ? scsh_enter_ldapmessage(msg) : S48_FALSE);
S48_GC_UNPROTECT(); S48_GC_UNPROTECT();
return res; return res;
} }
@ -342,7 +340,7 @@ s48_value scsh_ldap_next_attribute(s48_value ldap, s48_value entry, s48_value be
name = ldap_next_attribute(scsh_extract_ldap(ldap), name = ldap_next_attribute(scsh_extract_ldap(ldap),
scsh_extract_ldapmessage(entry), scsh_extract_ldapmessage(entry),
scsh_extract_berelement(ber)); scsh_extract_berelement(ber));
res = (name == NULL) ? s48_enter_string(name) : S48_FALSE; res = (name != NULL) ? s48_enter_string(name) : S48_FALSE;
S48_GC_UNPROTECT(); S48_GC_UNPROTECT();
return res; return res;
} }
@ -495,7 +493,6 @@ s48_value scsh_ldap_get_set_option(s48_value ldap, s48_value option,
{ {
int opt, rc; int opt, rc;
LDAP *ld; LDAP *ld;
void *outvalue;
s48_value res, res_list; s48_value res, res_list;
S48_DECLARE_GC_PROTECT(6); S48_DECLARE_GC_PROTECT(6);
@ -508,18 +505,20 @@ s48_value scsh_ldap_get_set_option(s48_value ldap, s48_value option,
switch (opt) { switch (opt) {
case LDAP_OPT_API_INFO: case LDAP_OPT_API_INFO:
{ {
LDAPAPIInfo *inf;
if (S48_TRUE_P(set)) if (S48_TRUE_P(set))
raise_ldap_read_only_option(); raise_ldap_read_only_option();
rc = ldap_get_option(ld, opt, outvalue);
rc = ldap_get_option(ld, opt, &inf);
if (rc == LDAP_OPT_SUCCESS) if (rc == LDAP_OPT_SUCCESS)
res = scsh_enter_ldapiinfo((LDAPAPIInfo *) outvalue); res = scsh_enter_ldapiinfo(inf);
break; break;
} }
case LDAP_OPT_DEREF: case LDAP_OPT_DEREF:
{
}
case LDAP_OPT_SIZELIMIT: case LDAP_OPT_SIZELIMIT:
case LDAP_OPT_TIMELIMIT: case LDAP_OPT_TIMELIMIT:
case LDAP_OPT_PROTOCOL_VERSION:
case LDAP_OPT_ERROR_NUMBER:
{ {
int l; int l;
int ov; int ov;
@ -546,27 +545,24 @@ s48_value scsh_ldap_get_set_option(s48_value ldap, s48_value option,
res = ov == 0 ? S48_TRUE : S48_FALSE; res = ov == 0 ? S48_TRUE : S48_FALSE;
break; break;
} }
case LDAP_OPT_PROTOCOL_VERSION:
{
int v, ov;
if (S48_TRUE_P(set)) {
FFIT_CHECK_INTEGER(inval);
v = s48_extract_integer(inval);
rc = ldap_set_option(ld, opt, &v);
}
else
if ((rc = ldap_get_option(ld, opt, &ov)) == LDAP_SUCCESS)
res = s48_enter_integer(ov);
break;
}
case LDAP_OPT_SERVER_CONTROLS: case LDAP_OPT_SERVER_CONTROLS:
case LDAP_OPT_CLIENT_CONTROLS: case LDAP_OPT_CLIENT_CONTROLS:
{ {
raise_ldap_read_only_option(); raise_ldap_read_only_option();
} }
case LDAP_OPT_ERROR_STRING:
{
char *ov;
if (S48_TRUE_P(set))
raise_ldap_read_only_option();
if ((rc = ldap_get_option(ld, opt, &ov)) == LDAP_SUCCESS)
res = s48_enter_string(ov);
break;
}
default: default:
{ {
printf("Alles ficken!\n"); raise_ldap_feature_not_supported();
} }
} }