#include <limits.h>
#include "citadel.h"
#include "server.h"
-#include "sysdep_decls.h"
#include "citserver.h"
#include "support.h"
#include "config.h"
-#include "serv_extensions.h"
#include "room_ops.h"
#include "policy.h"
#include "database.h"
#include "vcard.h"
#include "tools.h"
+
+#include "ctdl_module.h"
+
+
+
#ifdef HAVE_LDAP
#include <ldap.h>
i = ldap_add_s(dirserver, config.c_ldap_base_dn, mods);
end_critical_section(S_LDAP);
- if (i != LDAP_SUCCESS) {
+ if (i == LDAP_ALREADY_EXISTS) {
+ lprintf(CTDL_INFO, "Base DN is already present in the directory; no need to add it again.\n");
+ }
+ else if (i != LDAP_SUCCESS) {
lprintf(CTDL_CRIT, "ldap_add_s() failed: %s (%d)\n",
ldap_err2string(i), i);
}
i = ldap_add_s(dirserver, dn, mods);
end_critical_section(S_LDAP);
- /* ignore the error -- it's ok if it already exists
- if (i != LDAP_SUCCESS) {
- lprintf(CTDL_ERR, "ldap_add_s() failed: %s (%d)\n",
+ if (i == LDAP_ALREADY_EXISTS) {
+ lprintf(CTDL_INFO, "Host OU is already present in the directory; no need to add it again.\n");
+ }
+ else if (i != LDAP_SUCCESS) {
+ lprintf(CTDL_CRIT, "ldap_add_s() failed: %s (%d)\n",
ldap_err2string(i), i);
}
- */
}
int have_addr = 0;
int have_cn = 0;
- char givenname[SIZ];
- char sn[SIZ];
- char uid[SIZ];
- char street[SIZ];
- char city[SIZ];
- char state[SIZ];
- char zipcode[SIZ];
- char calFBURL[SIZ];
+ char givenname[128];
+ char sn[128];
+ char uid[256];
+ char street[256];
+ char city[128];
+ char state[3];
+ char zipcode[10];
+ char calFBURL[256];
if (dirserver == NULL) return;
if (msg == NULL) return;
attrs[0]->mod_op = LDAP_MOD_ADD;
attrs[0]->mod_type = "objectclass";
attrs[0]->mod_values = malloc(3 * sizeof(char *));
- attrs[0]->mod_values[0] = strdup("inetOrgPerson");
+ attrs[0]->mod_values[0] = strdup("citadelInetOrgPerson");
attrs[0]->mod_values[1] = NULL;
/* Convert the vCard fields to LDAP properties */
if (v->numprops) for (i=0; i<(v->numprops); ++i) if (striplt(v->prop[i].value), strlen(v->prop[i].value) > 0) {
if (!strcasecmp(v->prop[i].name, "n")) {
- extract_token(sn, v->prop[i].value, 0, ';');
- extract_token(givenname, v->prop[i].value, 1, ';');
+ extract_token(sn, v->prop[i].value, 0, ';', sizeof sn);
+ extract_token(givenname, v->prop[i].value, 1, ';', sizeof givenname);
}
if (!strcasecmp(v->prop[i].name, "fn")) {
have_addr = 1;
strcpy(street, "");
extract_token(&street[strlen(street)],
- v->prop[i].value, 0, ';'); /* po box */
+ v->prop[i].value, 0, ';', (sizeof street - strlen(street))); /* po box */
strcat(street, " ");
extract_token(&street[strlen(street)],
- v->prop[i].value, 1, ';'); /* extend addr */
+ v->prop[i].value, 1, ';', (sizeof street - strlen(street))); /* extend addr */
strcat(street, " ");
extract_token(&street[strlen(street)],
- v->prop[i].value, 2, ';'); /* street */
+ v->prop[i].value, 2, ';', (sizeof street - strlen(street))); /* street */
striplt(street);
- extract_token(city, v->prop[i].value, 3, ';');
- extract_token(state, v->prop[i].value, 4, ';');
- extract_token(zipcode, v->prop[i].value, 5, ';');
+ extract_token(city, v->prop[i].value, 3, ';', sizeof city);
+ extract_token(state, v->prop[i].value, 4, ';', sizeof state);
+ extract_token(zipcode, v->prop[i].value, 5, ';', sizeof zipcode);
attrs = realloc(attrs, (sizeof(LDAPMod *) * ++num_attrs) );
attrs[num_attrs-1] = malloc(sizeof(LDAPMod));
attrs = realloc(attrs, (sizeof(LDAPMod *) * ++num_attrs) );
attrs[num_attrs - 1] = NULL;
- lprintf(CTDL_DEBUG, "Calling ldap_add_s()\n");
+ lprintf(CTDL_DEBUG, "Calling ldap_add_s() for '%s'\n", this_dn);
begin_critical_section(S_LDAP);
i = ldap_add_s(dirserver, this_dn, attrs);
end_critical_section(S_LDAP);
for (j=0; j<(num_attrs-1); ++j) {
attrs[j]->mod_op = LDAP_MOD_REPLACE;
}
- lprintf(CTDL_DEBUG, "Calling ldap_modify_s()\n");
+ lprintf(CTDL_DEBUG, "Calling ldap_modify_s() for '%s'\n", this_dn);
begin_critical_section(S_LDAP);
i = ldap_modify_s(dirserver, this_dn, attrs);
end_critical_section(S_LDAP);
/*
* Initialize the LDAP connector module ... or don't, if we don't have LDAP.
*/
-char *serv_ldap_init(void)
+CTDL_MODULE_INIT(ldap)
{
#ifdef HAVE_LDAP
CtdlRegisterCleanupHook(serv_ldap_cleanup);
}
#endif /* HAVE_LDAP */
+
+ /* return our Subversion id for the Log */
return "$Id$";
}