PERFORCE change 82195 for review
soc-bushman
soc-bushman at FreeBSD.org
Thu Aug 18 13:50:46 GMT 2005
http://perforce.freebsd.org/chv.cgi?CH=82195
Change 82195 by soc-bushman at 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) <<<
More information about the p4-projects
mailing list