PERFORCE change 103391 for review
Michael Bushkov
bushman at FreeBSD.org
Mon Aug 7 19:07:20 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=103391
Change 103391 by bushman at bushman_nss_ldap_cached on 2006/08/07 19:06:44
Pretty everything is done. This is the just-in-case commit before the major sources cleanup (gotta remove all the weird debugging printfs).
Affected files ...
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/Makefile#9 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldap_group.c#8 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldap_group.h#8 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldap_passwd.c#9 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldap_passwd.h#9 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldap_serv.c#5 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldap_serv.h#5 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldapconf.c#9 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldapconf.h#9 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldapconn.c#9 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldapconn.h#9 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldapschema.c#9 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldapschema.h#9 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldapsearch.c#8 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldapsearch.h#8 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldaptls.c#7 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldaptls.h#7 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldaputil.c#9 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldaputil.h#9 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/nss_ldap.c#9 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/nss_ldap.h#9 edit
Differences ...
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/Makefile#9 (text+ko) ====
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldap_group.c#8 (text+ko) ====
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldap_group.h#8 (text+ko) ====
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldap_passwd.c#9 (text+ko) ====
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldap_passwd.h#9 (text+ko) ====
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldap_serv.c#5 (text+ko) ====
@@ -187,7 +187,7 @@
nss_ldap_destroy_servent(struct nss_ldap_parse_context *pctx)
{
- printf("here - %s %d\n", __FILE__, __LINE__);
+ printf("SAFDASPIFO UASFIOOASUIFIOAS FUOAISFUI OAUSFIOASUF!!!!!!!!!here - %s %d\n", __FILE__, __LINE__);
assert(pctx != NULL);
free(pctx->mdata_ext);
}
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldap_serv.h#5 (text+ko) ====
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldapconf.c#9 (text+ko) ====
@@ -590,7 +590,14 @@
}
continue;
}
- }
+ } else if (strcmp(fields[0], "use_sasl") == 0) {
+ if ((field_count == 2) &&
+ (get_yesno(fields[1], &value) ==
+ NSS_LDAP_SUCCESS)) {
+ conf->use_sasl = value;
+ continue;
+ }
+ }
break;
default:
break;
@@ -622,7 +629,7 @@
printf("BBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCc %p\n", (void *)conf->sasl_authid);
#ifdef NSS_LDAP_SASL_AUTH_ENABLED
- if (conf->sasl_authid == NULL) {
+ if (conf->use_sasl == 0) {
#endif
switch (conf->ssl_mode) {
case NSS_LDAP_SSL_OFF:
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldapconf.h#9 (text+ko) ====
@@ -105,7 +105,8 @@
char *root_sasl_authid;
char *sasl_secprops;
char *krb5_ccname;
- int root_use_sasl;
+ int root_use_sasl;
+ int use_sasl;
char *tls_cacert;
char *tls_cacertdir;
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldapconn.c#9 (text+ko) ====
@@ -348,6 +348,7 @@
if (ldapuri == NULL) {
snprintf(err->description, NSS_LDAP_MAX_ERR_DESC_SIZE,
"cannot format the ldap URI");
+ printf("911 %s\n", err->description);
free(conn);
return (NULL);
}
@@ -521,8 +522,11 @@
}
/* Check to see if the bind operation completed. */
+ memset(&zerotime, 0, sizeof(zerotime));
while ( !finished ) {
- rc = ldap_result( conn->ld, msgid, 0, &zerotime, &res );
+ printf("FIININISHED %d %d %d %p\n", finished, rc, msgid, (void *)conn->ld);
+ res = NULL;
+ rc = ldap_result( conn->ld, msgid, 1, &zerotime, &res );
switch ( rc ) {
/* If ldap_result() returns -1, error occurred. */
case -1:
@@ -881,7 +885,7 @@
int rv;
/* Falling back to simple authentication if the config says so */
- if (conf->root_use_sasl != NSS_LDAP_OPTION_YES)
+ if ((geteuid() == 0) && (conf->root_use_sasl != NSS_LDAP_OPTION_YES))
return (__nss_ldap_simple_auth(conn, conf, err));
dn = geteuid() == 0 ? conf->root_bind_dn : conf->bind_dn;
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldapconn.h#9 (text+ko) ====
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldapschema.c#9 (text+ko) ====
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldapschema.h#9 (text+ko) ====
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldapsearch.c#8 (text+ko) ====
@@ -121,6 +121,7 @@
printf("%s %d\n", __FILE__, __LINE__);
if (ctx->msgid == -1) {
+ ldap_msgfree(ctx->msg);
ctx->msg = NULL;
return (NSS_LDAP_SUCCESS);
}
@@ -128,6 +129,10 @@
finished = 0;
memset(&zerotime, 0, sizeof(struct timeval));
while (!finished) {
+ if (ctx->msg != NULL) {
+ ldap_msgfree(ctx->msg);
+ ctx->msg = NULL;
+ }
rv = ldap_result( ctx->conn->ld, ctx->msgid, LDAP_MSG_ONE,
&zerotime, &ctx->msg);
@@ -161,10 +166,14 @@
assert(ctx != NULL);
- if (ctx->msg != NULL)
+ if (ctx->msg != NULL) {
ldap_msgfree(ctx->msg);
+ ctx->msg = NULL;
+ }
destroy_request(&ctx->search_request);
free(ctx);
+
+ printf("ENDING SEEEEEEEEEEEEEARCHING\n");
}
static void
@@ -175,7 +184,7 @@
if (pctx->parse_destroy_fn != NULL)
pctx->parse_destroy_fn(pctx);
- free(pctx);
+ free(pctx);
}
struct nss_ldap_search_context *
@@ -256,6 +265,7 @@
assert(pctx != NULL);
+ printf("ENDING PAAAAAAAAAAAARSING\n");
if (pctx->parse_destroy_fn != NULL)
pctx->parse_destroy_fn(pctx);
free(pctx);
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldapsearch.h#8 (text+ko) ====
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldaptls.c#7 (text+ko) ====
@@ -109,17 +109,21 @@
int rv;
rv = nss_ldap_connection_getstate(&st);
- if (rv != NSS_LDAP_SUCCESS)
+ if (rv != NSS_LDAP_SUCCESS) {
+ printf("ABBCBCBCBBCBC %d %s\n", __LINE__, __FILE__);
return (rv);
+ }
st->instance = conn;
st->destroy_fn = destroy_fn;
+ printf("ABBCBCBCBBCBC %d %s\n", __LINE__, __FILE__);
return (NSS_LDAP_SUCCESS);
}
void
tls_return_connection_def(struct nss_ldap_connection *conn)
{
+ printf("ABBCBCBCBBCBC %d %s\n", __LINE__, __FILE__);
/* DO NOTHING */
}
@@ -223,6 +227,7 @@
assert(method != NULL);
+ printf("GET_CONNECTION %d %s\n", __LINE__, __FILE__);
return (method->get_connection_fn(res));
}
@@ -233,7 +238,7 @@
{
assert(method != NULL);
-
+ printf("SET_CONNECTION %d %s\n", __LINE__, __FILE__);
return (method->set_connection_fn(conn, destroy_fn));
}
@@ -243,7 +248,7 @@
{
assert(method != NULL);
-
+ printf("RETURN_CONNECTION %d %s\n", __LINE__, __FILE__);
return (method->return_connection_fn(conn));
}
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldaptls.h#7 (text+ko) ====
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldaputil.c#9 (text+ko) ====
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldaputil.h#9 (text+ko) ====
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/nss_ldap.c#9 (text+ko) ====
@@ -38,6 +38,7 @@
#include <nsswitch.h>
#include <pthread.h>
#include <pwd.h>
+#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include "ldapschema.h"
@@ -139,15 +140,20 @@
isthreaded = __isthreaded;
path = NSS_LDAP_CONF_PATH;
printf("conf- %s %d\n", __FILE__, __LINE__);
- if ((__nss_ldap_conf != NULL) && (stat(path, &statbuf) != 0))
+ memset(&statbuf, 0, sizeof(statbuf));
+ result = stat(path, &statbuf);
+ printf("RV %d\n", result);
+ if ((__nss_ldap_conf != NULL) && (result != 0))
return (0);
printf("conf- %s %d\n", __FILE__, __LINE__);
if ((__nss_ldap_conf != NULL) && (statbuf.st_mtime <= confmod))
return (0);
+ printf("-=-=-=-= %s %ld %ld %p\n",path, statbuf.st_mtime, confmod, (void *)__nss_ldap_conf);
if (isthreaded) {
- result = pthread_mutex_trylock(&conf_lock);
+ result = pthread_mutex_lock(&conf_lock);
if (result != 0)
- return (0);
+ return (NSS_LDAP_GENERIC_ERROR);
+
result = pthread_rwlock_wrlock(&nss_ldap_lock);
if (result != 0)
goto fin2;
@@ -158,17 +164,23 @@
printf("conf %s %d\n", __FILE__, __LINE__);
atexit(nss_ldap_atexit);
}
+
+ printf("-=-=-=-=1 %s %ld %ld %p\n",path, statbuf.st_mtime, confmod, (void *)__nss_ldap_conf);
confmod = statbuf.st_mtime;
+ printf("-=-=-=-=2 %s %ld %ld %p\n",path, statbuf.st_mtime, confmod, (void *)__nss_ldap_conf);
memset(&config_file_error, 0,
sizeof(struct nss_ldap_config_file_error));
__nss_ldap_init_default_config(&nss_ldap_conf);
result = __nss_ldap_load_config_from_file(&nss_ldap_conf, path,
&config_file_error);
+ result = __nss_ldap_load_config_from_file(&nss_ldap_conf, path,
+ &config_file_error);
if (result == NSS_LDAP_SUCCESS)
__nss_ldap_conf = &nss_ldap_conf;
else {
/* TODO: proper error handling */
+ printf("I HATE THIS WORLD!\n");
}
printf("conf %s %d\n", __FILE__, __LINE__);
@@ -313,6 +325,7 @@
rv = __nss_ldap_auth(connection_method, *conn, __nss_ldap_conf,
conn_error);
if (rv != NSS_LDAP_SUCCESS) {
+ printf(">>>>>>>>>>>> %s %d\n", __FILE__, __LINE__);
rv = __nss_ldap_disconnect(connection_method, *conn,
__nss_ldap_conf, conn_error);
if (rv != NSS_LDAP_SUCCESS) {
@@ -536,6 +549,7 @@
if (tls_method == NULL) {
if (pctx != NULL) {
sctx = pctx->sctx;
+ printf("PARSECONTEXTDOOOOOOOOOOOOOONe %p %p\n", (void *)tls_method, (void *)pctx);
__nss_ldap_end_parsing(pctx);
if (sctx != NULL)
@@ -546,10 +560,35 @@
}
static int
+nss_ldap_set_sigpipe_mask(sigset_t *oset)
+{
+ sigset_t new;
+
+ sigemptyset(oset);
+ sigemptyset(&new);
+
+ sigaddset(&new, SIGPIPE);
+ if (__isthreaded != 0)
+ return (pthread_sigmask(SIG_BLOCK, &new, oset));
+ else
+ return (sigprocmask(SIG_BLOCK, &new, oset));
+}
+
+static int
+nss_ldap_unset_sigpipe_mask(sigset_t *oset)
+{
+ if (__isthreaded != 0)
+ return (pthread_sigmask(SIG_SETMASK, oset, NULL));
+ else
+ return (sigprocmask(SIG_SETMASK, oset, NULL));
+}
+
+static int
nss_ldap_get_common(int map_id, char const *filter, void *mdata, char *buffer,
size_t bufsize, nss_ldap_parse_next_fn parse_next_fn,
nss_ldap_parse_destroy_fn parse_destroy_fn, int parse_tls)
{
+ sigset_t signal_mask;
struct nss_ldap_connection_method *connection_method;
struct nss_ldap_search_method *search_method;
struct nss_ldap_tls_method *tls_method;
@@ -557,7 +596,7 @@
struct nss_ldap_connection_error conn_error;
struct nss_ldap_connection *conn;
struct nss_ldap_parse_context *pctx, pctx_model;
- int rv, conn_flag;
+ int rv, conn_flag, signals_rv;
assert(map_id < NSS_LDAP_MAP_MAX);
assert(filter != NULL);
@@ -568,6 +607,12 @@
search_method = &__nss_ldap_conf->search_method;
tls_method = &__nss_ldap_conf->tls_method;
+ signals_rv = nss_ldap_set_sigpipe_mask(&signal_mask);
+ if (signals_rv != 0) {
+ printf("OMG! can't set signal mask!\n");
+ /* TODO: do something really weird */
+ }
+
pctx = NULL;
conn = NULL;
conn_flag = 0;
@@ -642,6 +687,14 @@
parse_tls != 0 ? tls_method : NULL, pctx, map_id);
if (conn != NULL)
nss_ldap_connection_done(tls_method, conn);
+
+ if (signals_rv == 0) {
+ signals_rv = nss_ldap_unset_sigpipe_mask(&signal_mask);
+ if (signals_rv != 0) {
+ printf("OMG!\n");
+ /* TODO: do something */
+ }
+ }
// else
// nss_ldap_connection_reset(tls_method, conn);
@@ -687,6 +740,8 @@
{
int rv, isthreaded;
+ printf("saasas\n");
+
rv = nss_ldap_configure();
if (rv != NSS_LDAP_SUCCESS)
return (NS_UNAVAIL);
@@ -710,10 +765,11 @@
void
__nss_ldap_setent(int map_id)
{
+ sigset_t signal_mask;
struct nss_ldap_search_method *search_method;
struct nss_ldap_tls_method *tls_method;
struct nss_ldap_parse_context *pctx;
- int rv, isthreaded;
+ int rv, isthreaded, signals_rv;
assert(map_id < NSS_LDAP_MAP_MAX);
@@ -738,6 +794,12 @@
return;
}
+ signals_rv = nss_ldap_set_sigpipe_mask(&signal_mask);
+ if (signals_rv != 0) {
+ printf("OMG! can't set signal mask!\n");
+ /* TODO: do something really weird */
+ }
+
if (pctx != NULL)
parse_context_destroy_func(pctx);
@@ -749,6 +811,14 @@
__nss_ldap_tls_return_parse_context(tls_method, map_id, NULL);
+ if (signals_rv == 0) {
+ signals_rv = nss_ldap_unset_sigpipe_mask(&signal_mask);
+ if (signals_rv != 0) {
+ printf("OMG!\n");
+ /* TODO: do something */
+ }
+ }
+
if (isthreaded)
pthread_rwlock_unlock(&nss_ldap_lock);
}
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/nss_ldap.h#9 (text+ko) ====
More information about the p4-projects
mailing list