Date: Thu, 18 Aug 2005 13:50:44 GMT From: soc-bushman <soc-bushman@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 82195 for review Message-ID: <200508181350.j7IDoiS3035814@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=82195 Change 82195 by soc-bushman@soc-bushman_stinger on 2005/08/18 13:50:00 cached almost integrated into the nsdsiaptch architecture Affected files ... .. //depot/projects/soc2005/nsswitch_cached/cached/Makefile#4 edit .. //depot/projects/soc2005/nsswitch_cached/cached/cached.c#4 edit .. //depot/projects/soc2005/nsswitch_cached/cached/cached.conf#2 edit .. //depot/projects/soc2005/nsswitch_cached/cached/config.c#4 edit .. //depot/projects/soc2005/nsswitch_cached/cached/config.h#4 edit .. //depot/projects/soc2005/nsswitch_cached/cached/debug.c#4 edit .. //depot/projects/soc2005/nsswitch_cached/cached/debug.h#4 edit .. //depot/projects/soc2005/nsswitch_cached/cached/log.c#4 edit .. //depot/projects/soc2005/nsswitch_cached/cached/log.h#4 edit .. //depot/projects/soc2005/nsswitch_cached/cached/parser.c#2 edit .. //depot/projects/soc2005/nsswitch_cached/cached/parser.h#2 edit .. //depot/projects/soc2005/nsswitch_cached/cached/protocol.c#3 edit .. //depot/projects/soc2005/nsswitch_cached/cached/protocol.h#3 edit .. //depot/projects/soc2005/nsswitch_cached/cached/query.c#4 edit .. //depot/projects/soc2005/nsswitch_cached/cached/query.h#4 edit .. //depot/projects/soc2005/nsswitch_cached/cached/singletons.c#4 edit .. //depot/projects/soc2005/nsswitch_cached/cached/singletons.h#4 edit .. //depot/projects/soc2005/nsswitch_cached/cachelib/Makefile#2 edit .. //depot/projects/soc2005/nsswitch_cached/cachelib/cachelib.c#2 edit .. //depot/projects/soc2005/nsswitch_cached/cachelib/hashfuncs.c#2 edit .. //depot/projects/soc2005/nsswitch_cached/cachelib/hashfuncs.h#2 edit .. //depot/projects/soc2005/nsswitch_cached/cachelib/hashtable.c#2 edit .. //depot/projects/soc2005/nsswitch_cached/cachelib/hashtable.h#2 edit .. //depot/projects/soc2005/nsswitch_cached/cachelib/include/cachelib.h#2 edit .. //depot/projects/soc2005/nsswitch_cached/cachelib/policies.c#2 edit .. //depot/projects/soc2005/nsswitch_cached/cachelib/policies.h#2 edit .. //depot/projects/soc2005/nsswitch_cached/src/include/nsswitch.h#5 edit .. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/gen/getpwent.c#2 edit .. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/Makefile.inc#2 edit .. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/nsdispatch.c#2 edit .. //depot/projects/soc2005/nsswitch_cached/tests/cached_client_test/Makefile#2 edit .. //depot/projects/soc2005/nsswitch_cached/tests/cached_client_test/cached_client.c#2 edit .. //depot/projects/soc2005/nsswitch_cached/tests/cached_client_test/cached_client.h#2 edit .. //depot/projects/soc2005/nsswitch_cached/tests/cached_client_test/cached_client_test.c#2 edit .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/Makefile#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/cached_client.c#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/cached_client.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/getservent.c#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/getservent.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/group_marshal.c#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/group_marshal.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/host_marshal.c#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/host_marshal.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/libc_private.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/namespace.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/netgroup_marshal.c#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/netgroup_marshal.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/networks_marshal.c#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/networks_marshal.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/nscache.c#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/nscache.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/nscachedcli.c#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/nscachedcli.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/nsdispatch.c#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/nsdispatch_test.c#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/nsdispatch_test.core#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/nss_backends.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/nss_tls.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/nsswitch.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/passwd_marshal.c#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/passwd_marshal.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/protocols_marshal.c#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/protocols_marshal.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/reentrant.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/rpc_marshal.c#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/rpc_marshal.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/services_marshal.c#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/services_marshal.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/shells_marshal.c#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/shells_marshal.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/un-namespace.h#1 add Differences ... ==== //depot/projects/soc2005/nsswitch_cached/cached/Makefile#4 (text+ko) ==== @@ -4,7 +4,7 @@ PROGNAME=cached MAN= -SRCS=cached.c debug.c log.c config.c query.c singletons.c protocol.c parser.c +SRCS=cached.c debug.c log.c config.c query.c mp_ws_query.c mp_rs_query.c singletons.c protocol.c parser.c CFLAGS+= -I${.CURDIR}/../ WARNS?=2 LDADD+=${.CURDIR}/../cachelib/libcachelib.a -lm ==== //depot/projects/soc2005/nsswitch_cached/cached/cached.c#4 (text+ko) ==== @@ -16,6 +16,12 @@ #include "query.h" #include "singletons.h" +void +get_time_func(struct timeval *time) +{ + gettimeofday(time, NULL); +} + static void print_version_info(void) { @@ -36,7 +42,8 @@ TRACE_IN(init_cache_); memset(¶ms, 0, sizeof(struct cache_params)); - params.num_levels = 2; + params.get_time_func = get_time_func; +// params.num_levels = 2; retval = init_cache(¶ms); /* memset(&entry_params, 0, sizeof(struct common_cache_entry_params)); @@ -149,7 +156,7 @@ EV_SET(&eventlist[0], fd, EVFILT_READ, EV_ADD | EV_ONESHOT, NOTE_LOWAT, qstate->kevent_watermark, qstate); EV_SET(&eventlist[1], fd, EVFILT_TIMER, EV_ADD | EV_ONESHOT, - 0, config->query_timeout, qstate); + 0, qstate->timeout.tv_sec * 1000, qstate); res = kevent(env->queue, eventlist, 2, NULL, 0, &timeout); TRACE_INT(res); TRACE_INT(fd); @@ -162,17 +169,20 @@ struct configuration *config) { struct kevent eventlist[2]; - struct timespec timeout; + struct timeval query_timeout; + struct timespec kevent_timeout; int nevents; - int res; + int eof_res, res; struct query_state *qstate; TRACE_IN(process_socket_event); - memset(&timeout, 0, sizeof(struct timespec)); + eof_res = event_data->flags & EV_EOF ? 1 : 0; + + memset(&kevent_timeout, 0, sizeof(struct timespec)); TRACE_INT(event_data->ident); EV_SET(&eventlist[0], event_data->ident, EVFILT_TIMER, EV_DELETE, 0, 0, NULL); - nevents = kevent(env->queue, eventlist, 1, NULL, 0, &timeout); + nevents = kevent(env->queue, eventlist, 1, NULL, 0, &kevent_timeout); if (nevents == -1) { if (errno == ENOENT) { /* the timer is already handling this event */ @@ -186,28 +196,57 @@ return; } } + TRACE_POINT(); + qstate = (struct query_state *)event_data->udata; +/* if ((qstate->process_func == NULL) || (res != 0)) { + TRACE_INT(res); + destroy_query_state(qstate); + //shutdown(event_data->ident, SHUT_RDWR); + close(event_data->ident); + TRACE_POINT(); + TRACE_OUT(process_socket_event); + return; + } */ - qstate = (struct query_state *)event_data->udata; - do { - res = qstate->process_func(qstate); - } while ((qstate->kevent_watermark == 0) && - (qstate->process_func != NULL) && - (res == 0)); + TRACE_POINT(); + if (qstate->kevent_watermark <= event_data->data) { + do { + res = qstate->process_func(qstate); + } while ((qstate->kevent_watermark == 0) && + (qstate->process_func != NULL) && + (res == 0)); + + if (res != 0) + qstate->process_func = NULL; + } else { + /* assuming that socket was closed */ + qstate->process_func = NULL; + } TRACE_INT(qstate->kevent_watermark); TRACE_PTR(qstate->process_func); - if ((qstate->process_func == NULL) || (res != 0)) { + if ((qstate->process_func == NULL) || (eof_res != 0) || (res != 0)) { destroy_query_state(qstate); + //shutdown(event_data->ident, SHUT_RDWR); + close(event_data->ident); TRACE_POINT(); TRACE_OUT(process_socket_event); return; } + + get_time_func(&query_timeout); + query_timeout.tv_usec = 0; + query_timeout.tv_sec -= qstate->creation_time.tv_sec; + if (query_timeout.tv_sec > qstate->timeout.tv_sec) + query_timeout.tv_sec = 0; + else + query_timeout.tv_sec = qstate->timeout.tv_sec - query_timeout.tv_sec; EV_SET(&eventlist[0], event_data->ident, qstate->kevent_filter, EV_ADD | EV_ONESHOT, NOTE_LOWAT, qstate->kevent_watermark, qstate); EV_SET(&eventlist[1], event_data->ident, EVFILT_TIMER, EV_ADD | EV_ONESHOT, - 0, config->query_timeout, qstate); - kevent(env->queue, eventlist, 2, NULL, 0, &timeout); + 0, query_timeout.tv_sec * 1000, qstate); + kevent(env->queue, eventlist, 2, NULL, 0, &kevent_timeout); TRACE_OUT(process_socket_event); } @@ -221,7 +260,9 @@ TRACE_IN(process_timer_event); qstate = (struct query_state *)event_data->udata; destroy_query_state(qstate); - TRACE_OUT(process_timer_event); + //shutdown(event_data->ident, SHUT_RDWR); + close(event_data->ident); + TRACE_OUT(process_timer_event); } static void @@ -295,7 +336,9 @@ /* runtime environment initialization */ s_runtime_env = init_runtime_env(s_configuration); + //TRACE_OFF(); processing_loop(s_cache, s_runtime_env, s_configuration); + //TRACE_ON(); /* runtime environment destruction */ destroy_runtime_env(s_runtime_env); ==== //depot/projects/soc2005/nsswitch_cached/cached/cached.conf#2 (text+ko) ==== @@ -1,17 +1,45 @@ socket_path = "/tmp/cached" +entry "services" { + type = common + policy = fifo + max_lifetime = 200 + max_elemsize = 20 +} + +entry "services_mp" { + type = multipart + max_lifetime = 200 + timeout = 60 +} + entry "users" { type = common policy = fifo max_lifetime = 60 max_elemsize = 1000 + euid = 0 } +entry "users" { + type = common + policy = fifo + max_lifetime = 60 + max_elemsize = 1000 +} + entry "groups" { type = common policy = fifo max_lifetime = 60 max_elemsize = 1000 + euid = 0 } +entry "users_mp" { + type = multipart + max_lifetime = 60 + max_elemsize = 1000 + euid = 1002 +} ==== //depot/projects/soc2005/nsswitch_cached/cached/config.c#4 (text+ko) ==== @@ -12,7 +12,7 @@ static int configuration_entry_cmp(const void *, const void *); static struct configuration_entry *create_configuration_entry(const char *, - uid_t, int, struct cache_entry_params const *); + uid_t, int, struct timeval const *, struct cache_entry_params const *); static void destroy_configuration_entry(struct configuration_entry *); static int add_configuration_entry(struct configuration *, struct configuration_entry *); @@ -29,27 +29,34 @@ struct configuration_entry *entry2; int res; - entry1 = (struct configuration_entry *)e1; - entry2 = (struct configuration_entry *)e2; + entry1 = *((struct configuration_entry **)e1); + entry2 = *((struct configuration_entry **)e2); + //TRACE_STR(entry1->name); + //TRACE_INT(entry1->use_desired_euid); + //TRACE_INT(entry1->desired_euid); + //TRACE_STR(entry2->name); + //TRACE_INT(entry2->use_desired_euid); + //TRACE_INT(entry2->desired_euid); res = strcmp(entry1->name, entry2->name); - if (res == 0) { + if (res == 0) { if ((entry1->use_desired_euid == 0) && (entry2->use_desired_euid != 0)) - return (-1); + res = -1; else if ((entry1->use_desired_euid != 0) && (entry2->use_desired_euid == 0)) - return (1); + res = 1; else if ((entry1->use_desired_euid != 0) && (entry2->use_desired_euid != 0)) - return (entry1->desired_euid - entry2->desired_euid); + res = entry1->desired_euid - entry2->desired_euid; else - return (0); + res = 0; } + //TRACE_INT(res); return (res); } static struct configuration_entry * create_configuration_entry(const char *name, uid_t desired_euid, int use_desired_euid, - struct cache_entry_params const *params) + struct timeval const *timeout, struct cache_entry_params const *params) { struct configuration_entry *retval; size_t size; @@ -58,10 +65,10 @@ assert(name != NULL); switch (params->entry_type) { - case CEL_COMMON: + case CET_COMMON: size = sizeof(struct common_cache_entry_params); break; - case CEL_MULTIPART: + case CET_MULTIPART: size = sizeof(struct mp_cache_entry_params); break; default: @@ -87,15 +94,15 @@ if (use_desired_euid == 0) retval->c_params->entry_name = retval->name; else { - size = strlen(name) + floor(log(desired_euid)) + 1; - retval->c_params->entry_name = (char *)malloc(size + 1); + asprintf(&retval->c_params->entry_name, "%s_%d", name, desired_euid); assert(retval->c_params->entry_name != NULL); - memset(retval->c_params->entry_name, 0, size + 1); - snprintf(retval->c_params->entry_name, size, "%s_%d", name, desired_euid); + TRACE_STR(name); + TRACE_STR(retval->c_params->entry_name); } retval->desired_euid = desired_euid; retval->use_desired_euid = use_desired_euid; + memcpy(&retval->query_timeout, timeout, sizeof(struct timeval)); TRACE_OUT(create_configuration_entry); return (retval); @@ -237,12 +244,46 @@ process_parser_mp_group_pair(struct mp_cache_entry_params *params, struct parser_pair_ *pair, char const **error_str, int *error_line) { - int res; - + char *endp; + long l; + int res; + TRACE_IN(process_parser_mp_group_pair); - res = -1; - TRACE_OUT(process_parser_mp_group_pair); - + res = 0; + if (strcmp(pair->key, "max_sessions") == 0) { + l = strtol(pair->value, &endp, 10); + if ((*endp == '\0') && (l >= 0)) { + params->max_sessions = l; + } else { + *error_str = "max_sessions must be a positive integer"; + *error_line = pair->fline; + res = -1; + } + } else if (strcmp(pair->key, "max_lifetime") == 0) { + l = strtol(pair->value, &endp, 10); + if ((*endp == '\0') && (l >= 0)) { + params->max_lifetime.tv_sec = l; + } else { + *error_str = "max_lifetime must be a positive integer"; + *error_line = pair->fline; + res = -1; + } + } else if (strcmp(pair->key, "max_elemsize") == 0) { + l = strtol(pair->value, &endp, 10); + if ((*endp == '\0') && (l >= 0)) { + params->max_elemsize = l; + } else { + *error_str = "max_elemsize must be a positive integer"; + *error_line = pair->fline; + res = -1; + } + } else { + *error_str = "unexpected parameter"; + *error_line = pair->fline; + res = -1; + } + + TRACE_OUT(process_parser_mp_group_pair); return (res); } @@ -257,6 +298,7 @@ struct cache_entry_params *params; uid_t desired_euid; int use_desired_euid; + struct timeval timeout; struct parser_pair_ *pair; size_t size, i; @@ -270,6 +312,7 @@ params = NULL; desired_euid = -1; use_desired_euid = 0; + memset(&timeout, 0, sizeof(struct timeval)); size = parser_group_get_pairs_size(group); if (size > 1) { pair = parser_group_get_pair(group, 0); @@ -281,14 +324,14 @@ assert(params != NULL); memset(params, 0, sizeof(struct common_cache_entry_params)); - params->entry_type = CEL_COMMON; + params->entry_type = CET_COMMON; } else if (strcmp(pair->value, "multipart") == 0) { params = (struct cache_entry_params *)malloc(sizeof( struct mp_cache_entry_params)); assert(params != NULL); memset(params, 0, sizeof(struct mp_cache_entry_params)); - params->entry_type = CEL_MULTIPART; + params->entry_type = CET_MULTIPART; } else { *error_str = "entry type must be one of 'common' and 'multipart' values"; *error_line = pair->fline; @@ -304,7 +347,7 @@ for (i = 1; i < size; ++i) { pair = parser_group_get_pair(group, i); - if (params->entry_type == CEL_COMMON) { + if (params->entry_type == CET_COMMON) { res = process_parser_common_group_pair((struct common_cache_entry_params *)params, pair, error_str, error_line); } else { @@ -315,21 +358,34 @@ if (res != 0) { if (strcmp(pair->key, "euid") == 0) { l = strtol(pair->value, &endp, 10); - if ((*endp != '\0') && (l >= 0)) { + if ((*endp == '\0') && (l >= 0)) { desired_euid = l; use_desired_euid = 1; } else { + TRACE_STR(pair->value); *error_str = "euid parameter must be a positive integer"; *error_line = pair->fline; res = -1; goto fin; } + } else if (strcmp(pair->key, "timeout") == 0) { + l = strtol(pair->value, &endp, 10); + if ((*endp == '\0') && (l >= 0)) { + timeout.tv_sec = l; + timeout.tv_usec = 0; + } else { + *error_str = "timeout must be a positive integer"; + *error_line = pair->fline; + res = -1; + goto fin; + } } else goto fin; } } - config_entry = create_configuration_entry(group->name, desired_euid, use_desired_euid, params); + config_entry = create_configuration_entry(group->name, desired_euid, + use_desired_euid, &timeout, params); res = add_configuration_entry(config, config_entry); if (res != 0) { *error_str = "duplicate entry"; @@ -373,7 +429,7 @@ struct configuration_entry **retval; TRACE_IN(configuration_find_entry); - retval = bsearch(model, config->entries, config->entries_size, + retval = bsearch(&model, config->entries, config->entries_size, sizeof(struct configuration_entry *), configuration_entry_cmp); TRACE_OUT(configuration_find_entry); @@ -421,7 +477,7 @@ S_IROTH | S_IWOTH; config->force_unlink = 1; - config->query_timeout = 8000; + config->query_timeout = 8; for (i = 0; i < config->entries_size; ++i) destroy_configuration_entry(config->entries[i]); ==== //depot/projects/soc2005/nsswitch_cached/cached/config.h#4 (text+ko) ==== @@ -9,8 +9,10 @@ struct configuration_entry { char *name; + uid_t desired_euid; int use_desired_euid; + struct timeval query_timeout; struct cache_entry_params *c_params; }; ==== //depot/projects/soc2005/nsswitch_cached/cached/debug.c#4 (text+ko) ==== ==== //depot/projects/soc2005/nsswitch_cached/cached/debug.h#4 (text+ko) ==== @@ -5,7 +5,7 @@ #define TRACE_IN(x) __trace_in(#x, __FILE__, __LINE__) #define TRACE_POINT() __trace_point(__FILE__, __LINE__) -#define TRACE_MSG(x) __trage_msg(x, __FILE__, __LINE__) +#define TRACE_MSG(x) __trace_msg(x, __FILE__, __LINE__) #define TRACE_PTR(p) __trace_ptr(#p, p, __FILE__, __LINE__) #define TRACE_INT(i) __trace_int(#i, i, __FILE__, __LINE__) #define TRACE_STR(s) __trace_str(#s, s, __FILE__, __LINE__) ==== //depot/projects/soc2005/nsswitch_cached/cached/log.c#4 (text+ko) ==== ==== //depot/projects/soc2005/nsswitch_cached/cached/log.h#4 (text+ko) ==== ==== //depot/projects/soc2005/nsswitch_cached/cached/parser.c#2 (text+ko) ==== @@ -229,6 +229,7 @@ if (pair != NULL) add_parser_group_pair(*group, pair); + parser_skip_spaces(the_parser); res = parser_expect_char(the_parser, '}'); if (res == PARSER_SUCCESS) break; ==== //depot/projects/soc2005/nsswitch_cached/cached/parser.h#2 (text+ko) ==== ==== //depot/projects/soc2005/nsswitch_cached/cached/protocol.c#3 (text+ko) ==== @@ -31,6 +31,27 @@ case CET_TRANSFORM_RESPONSE: init_cache_transform_response(&element->c_transform_response); break; + case CET_MP_WRITE_SESSION_REQUEST: + init_cache_mp_write_session_request(&element->c_mp_ws_request); + break; + case CET_MP_WRITE_SESSION_RESPONSE: + init_cache_mp_write_session_response(&element->c_mp_ws_response); + break; + case CET_MP_WRITE_SESSION_WRITE_REQUEST: + init_cache_mp_write_session_write_request(&element->c_mp_ws_write_request); + break; + case CET_MP_WRITE_SESSION_WRITE_RESPONSE: + init_cache_mp_write_session_write_response(&element->c_mp_ws_write_response); + break; + case CET_MP_READ_SESSION_REQUEST: + init_cache_mp_read_session_request(&element->c_mp_rs_request); + break; + case CET_MP_READ_SESSION_RESPONSE: + init_cache_mp_read_session_response(&element->c_mp_rs_response); + break; + case CET_MP_READ_SESSION_READ_RESPONSE: + init_cache_mp_read_session_read_response(&element->c_mp_rs_read_response); + break; default: TRACE_OUT(init_comm_element); return; @@ -63,9 +84,32 @@ case CET_TRANSFORM_RESPONSE: finalize_cache_transform_response(&element->c_transform_response); break; + case CET_MP_WRITE_SESSION_REQUEST: + finalize_cache_mp_write_session_request(&element->c_mp_ws_request); + break; + case CET_MP_WRITE_SESSION_RESPONSE: + finalize_cache_mp_write_session_response(&element->c_mp_ws_response); + break; + case CET_MP_WRITE_SESSION_WRITE_REQUEST: + finalize_cache_mp_write_session_write_request(&element->c_mp_ws_write_request); + break; + case CET_MP_WRITE_SESSION_WRITE_RESPONSE: + finalize_cache_mp_write_session_write_response(&element->c_mp_ws_write_response); + break; + case CET_MP_READ_SESSION_REQUEST: + finalize_cache_mp_read_session_request(&element->c_mp_rs_request); + break; + case CET_MP_READ_SESSION_RESPONSE: + finalize_cache_mp_read_session_response(&element->c_mp_rs_response); + break; + case CET_MP_READ_SESSION_READ_RESPONSE: + finalize_cache_mp_read_session_read_response(&element->c_mp_rs_read_response); + break; default: break; } + + element->type = CET_UNDEFINED; TRACE_OUT(finalize_comm_element); } @@ -219,3 +263,176 @@ TRACE_OUT(get_cache_transform_response); return (&element->c_transform_response); } + + +void +init_cache_mp_write_session_request(struct cache_mp_write_session_request *mp_ws_request) +{ + TRACE_IN(init_cache_mp_write_session_request); + memset(mp_ws_request, 0, sizeof(struct cache_mp_write_session_request)); + TRACE_OUT(init_cache_mp_write_session_request); +} + +void +finalize_cache_mp_write_session_request(struct cache_mp_write_session_request *mp_ws_request) +{ + TRACE_IN(finalize_cache_mp_write_session_request); + free(mp_ws_request->entry); + TRACE_OUT(finalize_cache_mp_write_session_request); +} + +struct cache_mp_write_session_request * +get_cache_mp_write_session_request(struct comm_element *element) +{ + TRACE_IN(get_cache_mp_write_session_request); + assert(element->type == CET_MP_WRITE_SESSION_REQUEST); + TRACE_OUT(get_cache_mp_write_session_request); + return (&element->c_mp_ws_request); +} + +void +init_cache_mp_write_session_response(struct cache_mp_write_session_response *mp_ws_response) +{ + TRACE_IN(init_cache_mp_write_session_response); + memset(mp_ws_response, 0, sizeof(struct cache_mp_write_session_response)); + TRACE_OUT(init_cache_mp_write_session_response); +} + +void +finalize_cache_mp_write_session_response(struct cache_mp_write_session_response *mp_ws_response) +{ + TRACE_IN(finalize_cache_mp_write_session_response); + TRACE_OUT(finalize_cache_mp_write_session_response); +} + +struct cache_mp_write_session_response * +get_cache_mp_write_session_response(struct comm_element *element) +{ + TRACE_IN(get_cache_mp_write_session_response); + assert(element->type == CET_MP_WRITE_SESSION_RESPONSE); + TRACE_OUT(get_cache_mp_write_session_response); + return (&element->c_mp_ws_response); +} + +void +init_cache_mp_write_session_write_request(struct cache_mp_write_session_write_request *mp_ws_write_request) +{ + TRACE_IN(init_cache_mp_write_session_write_request); + memset(mp_ws_write_request, 0, sizeof(struct cache_mp_write_session_write_request)); + TRACE_OUT(init_cache_mp_write_session_write_response); +} + +void +finalize_cache_mp_write_session_write_request(struct cache_mp_write_session_write_request *mp_ws_write_request) +{ + TRACE_IN(finalize_cache_mp_write_session_write_request); + free(mp_ws_write_request->data); + TRACE_OUT(finalize_cache_mp_write_session_write_request); +} + +struct cache_mp_write_session_write_request * +get_cache_mp_write_session_write_request(struct comm_element *element) +{ + TRACE_IN(get_cache_mp_write_session_write_request); + assert(element->type == CET_MP_WRITE_SESSION_WRITE_REQUEST); + TRACE_OUT(get_cache_mp_write_session_write_request); + return (&element->c_mp_ws_write_request); +} + +void +init_cache_mp_write_session_write_response(struct cache_mp_write_session_write_response *mp_ws_write_response) +{ + TRACE_IN(init_cache_mp_write_session_write_response); + memset(mp_ws_write_response, 0, sizeof(struct cache_mp_write_session_write_response)); + TRACE_OUT(init_cache_mp_write_session_write_response); +} + +void +finalize_cache_mp_write_session_write_response(struct cache_mp_write_session_write_response *mp_ws_write_response) +{ + TRACE_IN(finalize_cache_mp_write_session_write_response); + TRACE_OUT(finalize_cache_mp_write_session_write_response); +} + +struct cache_mp_write_session_write_response * +get_cache_mp_write_session_write_response(struct comm_element *element) +{ + TRACE_IN(get_cache_mp_write_session_write_response); + assert(element->type == CET_MP_WRITE_SESSION_WRITE_RESPONSE); + TRACE_OUT(get_cache_mp_write_session_write_response); + return (&element->c_mp_ws_write_response); +} + +void +init_cache_mp_read_session_request(struct cache_mp_read_session_request *mp_rs_request) +{ + TRACE_IN(init_cache_mp_read_session_request); + memset(mp_rs_request, 0, sizeof(struct cache_mp_read_session_request)); + TRACE_OUT(init_cache_mp_read_session_request); +} + +void +finalize_cache_mp_read_session_request(struct cache_mp_read_session_request *mp_rs_request) +{ + TRACE_IN(finalize_cache_mp_read_session_request); + free(mp_rs_request->entry); + TRACE_OUT(finalize_cache_mp_read_session_request); +} + +struct cache_mp_read_session_request * +get_cache_mp_read_session_request(struct comm_element *element) +{ + TRACE_IN(get_cache_mp_read_session_request); + assert(element->type == CET_MP_READ_SESSION_REQUEST); + TRACE_OUT(get_cache_mp_read_session_request); + return (&element->c_mp_rs_request); +} + +void +init_cache_mp_read_session_response(struct cache_mp_read_session_response *mp_rs_response) +{ + TRACE_IN(init_cache_mp_read_session_response); + memset(mp_rs_response, 0, sizeof(struct cache_mp_read_session_response)); + TRACE_OUT(init_cache_mp_read_session_response); +} + +void +finalize_cache_mp_read_session_response(struct cache_mp_read_session_response *mp_rs_response) +{ + TRACE_IN(finalize_cache_mp_read_session_response); + TRACE_OUT(finalize_cache_mp_read_session_response); +} + +struct cache_mp_read_session_response * +get_cache_mp_read_session_response(struct comm_element *element) +{ + TRACE_IN(get_cache_mp_read_session_response); + assert(element->type == CET_MP_READ_SESSION_RESPONSE); + TRACE_OUT(get_cache_mp_read_session_response); + return (&element->c_mp_rs_response); +} + +void +init_cache_mp_read_session_read_response(struct cache_mp_read_session_read_response *mp_ws_read_response) +{ + TRACE_IN(init_cache_mp_read_session_read_response); + memset(mp_ws_read_response, 0, sizeof(struct cache_mp_read_session_read_response)); + TRACE_OUT(init_cache_mp_read_session_read_response); +} + +void +finalize_cache_mp_read_session_read_response(struct cache_mp_read_session_read_response *mp_rs_read_response) +{ + TRACE_IN(finalize_cache_mp_read_session_read_response); + free(mp_rs_read_response->data); + TRACE_OUT(finalize_cache_mp_read_session_read_response); +} + +struct cache_mp_read_session_read_response * +get_cache_mp_read_session_read_response(struct comm_element *element) +{ + TRACE_IN(get_cache_mp_read_session_read_response); + assert(element->type == CET_MP_READ_SESSION_READ_RESPONSE); + TRACE_OUT(get_cache_mp_read_session_read_response); + return (&element->c_mp_rs_read_response); +} ==== //depot/projects/soc2005/nsswitch_cached/cached/protocol.h#3 (text+ko) ==== @@ -34,7 +34,7 @@ int error_code; size_t data_size; // ignored if error_code is not 0 - void *data; // ignored if error_code is not 0 + char *data; // ignored if error_code is not 0 }; struct cache_transform_request @@ -50,6 +50,41 @@ int error_code; }; +struct cache_mp_write_session_request { + size_t entry_length; + char *entry; +}; + +struct cache_mp_write_session_response { + int error_code; +}; + +struct cache_mp_write_session_write_request { + size_t data_size; + char *data; +}; + +struct cache_mp_write_session_write_response { + int error_code; +}; + +struct cache_mp_read_session_request { + size_t entry_length; + char *entry; +}; + +struct cache_mp_read_session_response { + int error_code; +}; + +struct cache_mp_read_session_read_response { + int error_code; + + size_t data_size; + char *data; +}; + + enum comm_element_t { CET_UNDEFINED = 0, CET_WRITE_REQUEST = 1, @@ -57,7 +92,18 @@ CET_READ_REQUEST = 3, CET_READ_RESPONSE = 4, CET_TRANSFORM_REQUEST = 5, - CET_TRANSFORM_RESPONSE = 6 + CET_TRANSFORM_RESPONSE = 6, + CET_MP_WRITE_SESSION_REQUEST = 7, + CET_MP_WRITE_SESSION_RESPONSE = 8, + CET_MP_WRITE_SESSION_WRITE_REQUEST = 9, + CET_MP_WRITE_SESSION_WRITE_RESPONSE = 10, + CET_MP_WRITE_SESSION_CLOSE_NOTIFICATION = 11, + CET_MP_WRITE_SESSION_ABANDON_NOTIFICATION = 12, + CET_MP_READ_SESSION_REQUEST = 13, + CET_MP_READ_SESSION_RESPONSE = 14, + CET_MP_READ_SESSION_READ_REQUEST = 15, + CET_MP_READ_SESSION_READ_RESPONSE = 16, + CET_MP_READ_SESSION_CLOSE_NOTIFICATION = 17 }; struct comm_element @@ -69,6 +115,15 @@ struct cache_read_response c_read_response; struct cache_transform_request c_transform_request; struct cache_transform_response c_transform_response; + + struct cache_mp_write_session_request c_mp_ws_request; + struct cache_mp_write_session_response c_mp_ws_response; + struct cache_mp_write_session_write_request c_mp_ws_write_request; + struct cache_mp_write_session_write_response c_mp_ws_write_response; + + struct cache_mp_read_session_request c_mp_rs_request; + struct cache_mp_read_session_response c_mp_rs_response; + struct cache_mp_read_session_read_response c_mp_rs_read_response; }; enum comm_element_t type; }; @@ -99,5 +154,33 @@ void init_cache_transform_response(struct cache_transform_response *); void finalize_cache_transform_response(struct cache_transform_response *); struct cache_transform_response *get_cache_transform_response(struct comm_element *); + +void init_cache_mp_write_session_request(struct cache_mp_write_session_request *); +void finalize_cache_mp_write_session_request(struct cache_mp_write_session_request *); +struct cache_mp_write_session_request *get_cache_mp_write_session_request(struct comm_element *); + +void init_cache_mp_write_session_response(struct cache_mp_write_session_response *); +void finalize_cache_mp_write_session_response(struct cache_mp_write_session_response *); +struct cache_mp_write_session_response *get_cache_mp_write_session_response(struct comm_element *); + +void init_cache_mp_write_session_write_request(struct cache_mp_write_session_write_request *); +void finalize_cache_mp_write_session_write_request(struct cache_mp_write_session_write_request *); +struct cache_mp_write_session_write_request *get_cache_mp_write_session_write_request(struct comm_element *); + +void init_cache_mp_write_session_write_response(struct cache_mp_write_session_write_response *); +void finalize_cache_mp_write_session_write_response(struct cache_mp_write_session_write_response *); +struct cache_mp_write_session_write_response *get_cache_mp_write_session_write_response(struct comm_element *); + +void init_cache_mp_read_session_request(struct cache_mp_read_session_request *); +void finalize_cache_mp_read_session_request(struct cache_mp_read_session_request *); +struct cache_mp_read_session_request *get_cache_mp_read_session_request(struct comm_element *); + +void init_cache_mp_read_session_response(struct cache_mp_read_session_response *); +void finalize_cache_mp_read_session_response(struct cache_mp_read_session_response *); +struct cache_mp_read_session_response *get_cache_mp_read_session_response(struct comm_element *); + +void init_cache_mp_read_session_read_response(struct cache_mp_read_session_read_response *); +void finalize_cache_mp_read_session_read_response(struct cache_mp_read_session_read_response *); +struct cache_mp_read_session_read_response *get_cache_mp_read_session_read_response(struct comm_element *); #endif ==== //depot/projects/soc2005/nsswitch_cached/cached/query.c#4 (text+ko) ==== @@ -1,18 +1,25 @@ #include "query.h" -#include <cachelib/include/cachelib.h> #include <sys/socket.h> #include <sys/time.h> #include <sys/types.h> #include <sys/event.h> #include <assert.h> +#include <errno.h> +#include <stdio.h> #include <stdlib.h> #include <string.h> +#include "config.h" #include "debug.h" #include "log.h" #include "singletons.h" +#include "mp_ws_query.h" +#include "mp_rs_query.h" +extern void get_time_func(struct timeval *); + static int on_query_startup(struct query_state *); static void on_query_destroy(struct query_state *); +static int on_rw_mapper(struct query_state *); static int on_write_request_read1(struct query_state *); static int on_write_request_read2(struct query_state *); @@ -26,8 +33,42 @@ static int on_read_response_write2(struct query_state *); static int on_transform_request_read1(struct query_state *); -//static int on_transform_request_process(struct query_state *); -//static int on_transform_response_write(struct query_state *); +/*static int on_transform_request_read2(struct query_state *); +static int on_transform_request_process(struct query_state *); +static int on_transform_response_write1(struct query_state *);*/ + +struct configuration_entry * +find_config_entry_by_name_and_euid(struct configuration *config, char *name, uid_t euid) +{ + struct configuration_entry config_entry_model; + struct configuration_entry *config_lookup_result; + + TRACE_IN(finc_config_entry_by_name_and_euid); + memset(&config_entry_model, 0, sizeof(struct configuration_entry)); + config_entry_model.name = name; + config_entry_model.desired_euid = euid; + config_entry_model.use_desired_euid = 1; + + config_lookup_result = configuration_find_entry(config, &config_entry_model); + if (config_lookup_result == NULL) { + config_entry_model.desired_euid = -1; + config_entry_model.use_desired_euid = 0; + config_lookup_result = configuration_find_entry(config, &config_entry_model); + } + + TRACE_OUT(find_config_entry_by_name_and_euid); + return (config_lookup_result); >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200508181350.j7IDoiS3035814>