diff options
| author | Jelmer Vernooij <jelmer@samba.org> | 2006-03-24 17:48:16 +0100 | 
|---|---|---|
| committer | Jelmer Vernooij <jelmer@samba.org> | 2006-03-24 17:48:16 +0100 | 
| commit | a15c097fa32028394264cf66ef4fd31f56315eb3 (patch) | |
| tree | 07a6802cb6a707d45ff222510ac2ae9006e57f28 | |
| parent | d5dfc3d7ff2756a5991356bb643630fa7b03f8d9 (diff) | |
More work on LDAP backend; report errors
| -rw-r--r-- | storage_ldap.c | 75 | 
1 files changed, 45 insertions, 30 deletions
| diff --git a/storage_ldap.c b/storage_ldap.c index f6119168..4bc99de5 100644 --- a/storage_ldap.c +++ b/storage_ldap.c @@ -45,7 +45,7 @@ static storage_status_t nick_connect(const char *nick, const char *password, LDA  	*ld = ldap_init(BB_LDAP_HOST, LDAP_PORT);  	if (!ld) { -		/* FIXME: report error */ +		log_message( LOGLVL_WARNING, "Unable to connect to LDAP server at %s", BB_LDAP_HOST );  		return STORAGE_OTHER_ERROR;  	} @@ -57,7 +57,7 @@ static storage_status_t nick_connect(const char *nick, const char *password, LDA  	 case LDAP_SUCCESS: status = STORAGE_OK; break;  	 case LDAP_INVALID_CREDENTIALS: status = STORAGE_INVALID_PASSWORD; break;  	 default:  -		/* FIXME: Log */ +		log_message( LOGLVL_WARNING, "Unable to authenticate %s: %s", mydn, ldap_err2string(ret) );  		status = STORAGE_OTHER_ERROR;  		break;  	} @@ -67,15 +67,11 @@ static storage_status_t nick_connect(const char *nick, const char *password, LDA  	return status;  } -static void sldap_init (void) -{ -} -  static storage_status_t sldap_load ( const char *my_nick, const char* password, irc_t *irc )  { -	LDAPMessage *res; +	LDAPMessage *res, *msg;  	LDAP *ld; -	int ret; +	int ret, i;  	storage_status_t status;  	char *mydn;  @@ -85,32 +81,22 @@ static storage_status_t sldap_load ( const char *my_nick, const char* password,  	mydn = nick_dn(my_nick); -	ret = ldap_search_s(ld, mydn, LDAP_SCOPE_ONELEVEL, "(objectClass=*)", NULL, 0, &res); +	ret = ldap_search_s(ld, mydn, LDAP_SCOPE_BASE, "(objectClass=*)", NULL, 0, &res); + +	if (ret != LDAP_SUCCESS) { +		log_message( LOGLVL_WARNING, "Unable to search for %s: %s", mydn, ldap_err2string(ret) ); +		ldap_unbind_s(ld); +		return STORAGE_OTHER_ERROR; +	}  	g_free(mydn); -	/* FIXME: Check ret */ +	for (msg = ldap_first_entry(ld, res); msg; msg = ldap_next_entry(ld, msg)) { +	}  	/* FIXME: Store in irc_t */ -	 -	return STORAGE_OK; -} - -static storage_status_t sldap_save( irc_t *irc, int overwrite ) -{ -	LDAP *ld; -	char *mydn; -	storage_status_t status; -	status = nick_connect(irc->nick, irc->password, &ld); -	if (status != STORAGE_OK) -		return status; - -	mydn = nick_dn(irc->nick); - -	/* FIXME */ -	 -	g_free(mydn); +	ldap_unbind_s(ld);  	return STORAGE_OK;  } @@ -144,17 +130,46 @@ static storage_status_t sldap_remove( const char *nick, const char *password )  	ret = ldap_delete(ld, mydn);  	if (ret != LDAP_SUCCESS) { -		/* FIXME: report */ +		log_message( LOGLVL_WARNING, "Error removing %s: %s", mydn, ldap_err2string(ret) ); +		ldap_unbind_s(ld);  		return STORAGE_OTHER_ERROR;  	} +	ldap_unbind_s(ld); +  	g_free(mydn);  	return STORAGE_OK;  } +static storage_status_t sldap_save( irc_t *irc, int overwrite ) +{ +	LDAP *ld; +	char *mydn; +	storage_status_t status; +	LDAPMessage *msg; + +	status = nick_connect(irc->nick, irc->password, &ld); +	if (status != STORAGE_OK) +		return status; + +	mydn = nick_dn(irc->nick); + +	/* FIXME: Make this a bit more atomic? What if we crash after  +	 * removing the old account but before adding the new one ? */ +	if (overwrite)  +		sldap_remove(irc->nick, irc->password); + +	g_free(mydn); + +	ldap_unbind_s(ld); +	 +	return STORAGE_OK; +} + + +  storage_t storage_ldap = {  	.name = "ldap", -	.init = sldap_init,  	.check_pass = sldap_check_pass,  	.remove = sldap_remove,  	.load = sldap_load, | 
