rcyn_t *rcyn;
int rc;
+ /* socket spec */
+ switch(type) {
+ default:
+ case rcyn_Check: socketspec = rcyn_get_socket_check(socketspec); break;
+ case rcyn_Admin: socketspec = rcyn_get_socket_admin(socketspec); break;
+ case rcyn_Agent: socketspec = rcyn_get_socket_agent(socketspec); break;
+ }
+
/* allocate the structure */
- *prcyn = rcyn = malloc(sizeof *rcyn + (socketspec ? strlen(socketspec) : 0));
+ *prcyn = rcyn = malloc(sizeof *rcyn + 1 + strlen(socketspec));
if (rcyn == NULL) {
rc = -ENOMEM;
goto error;
goto error2;
/* socket spec */
- if (socketspec)
- strcpy((char*)(rcyn+1), socketspec);
- else
- switch(rcyn->type) {
- default:
- case rcyn_Check: socketspec = rcyn_default_check_socket_spec; break;
- case rcyn_Admin: socketspec = rcyn_default_admin_socket_spec; break;
- case rcyn_Agent: socketspec = rcyn_default_agent_socket_spec; break;
- }
+ strcpy((char*)(rcyn+1), socketspec);
/* record type and weakly create cache */
cache_create(&rcyn->cache, cache_size < MIN_CACHE_SIZE ? MIN_CACHE_SIZE : cache_size);
int status),
void *closure
);
-
* limitations under the License.
*/
+#include <stdlib.h>
+
#include "rcyn-protocol.h"
const char
rcyn_default_check_socket_spec[] = RCYN_DEFAULT_CHECK_SOCKET_SPEC,
rcyn_default_admin_socket_spec[] = RCYN_DEFAULT_ADMIN_SOCKET_SPEC,
rcyn_default_agent_socket_spec[] = RCYN_DEFAULT_AGENT_SOCKET_SPEC;
+
+const char *
+rcyn_get_socket_check(
+ const char *value
+) {
+ return value
+ ?: secure_getenv("CYNARA_SOCKET_CHECK")
+ ?: rcyn_default_check_socket_spec;
+}
+
+const char *
+rcyn_get_socket_admin(
+ const char *value
+) {
+ return value
+ ?: secure_getenv("CYNARA_SOCKET_ADMIN")
+ ?: rcyn_default_admin_socket_spec;
+}
+
+const char *
+rcyn_get_socket_agent(
+ const char *value
+) {
+ return value
+ ?: secure_getenv("CYNARA_SOCKET_AGENT")
+ ?: rcyn_default_agent_socket_spec;
+}
rcyn_default_check_socket_spec[],
rcyn_default_admin_socket_spec[],
rcyn_default_agent_socket_spec[];
+
+extern
+const char *
+rcyn_get_socket_check(
+ const char *value
+);
+
+extern
+const char *
+rcyn_get_socket_admin(
+ const char *value
+);
+
+extern
+const char *
+rcyn_get_socket_agent(
+ const char *value
+);
key.session = args[2];
key.user = args[3];
key.permission = args[4];
- cyn_test(&key, &value);
- checkcb(cli, &value);
+ cyn_test_async(checkcb, cli, &key);
return;
}
break;
}
/* create the admin server socket */
- admin_socket_spec = admin_socket_spec ?: rcyn_default_admin_socket_spec;
+ admin_socket_spec = rcyn_get_socket_admin(admin_socket_spec);
srv->admin.fd = socket_open(admin_socket_spec, 1);
if (srv->admin.fd < 0) {
rc = -errno;
}
/* create the check server socket */
- check_socket_spec = check_socket_spec ?: rcyn_default_check_socket_spec;
+ check_socket_spec = rcyn_get_socket_check(check_socket_spec);
srv->check.fd = socket_open(check_socket_spec, 1);
if (srv->check.fd < 0) {
rc = -errno;
}
/* create the agent server socket */
- agent_socket_spec = agent_socket_spec ?: rcyn_default_agent_socket_spec;
+ agent_socket_spec = rcyn_get_socket_agent(agent_socket_spec);
srv->agent.fd = socket_open(agent_socket_spec, 1);
if (srv->agent.fd < 0) {
rc = -errno;