/* * Create a DSA security context */ isns_security_t * isns_create_dsa_context(void) { isns_security_t *ctx; #if OPENSSL_VERSION_NUMBER < 0x10100000L if (!isns_openssl_init) { ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); OpenSSL_add_all_ciphers(); OpenSSL_add_all_digests(); isns_openssl_init = 1; } #endif ctx = isns_calloc(1, sizeof(*ctx)); ctx->is_name = "DSA"; ctx->is_type = ISNS_AUTH_TYPE_SHA1_DSA; ctx->is_replay_window = isns_config.ic_auth.replay_window; ctx->is_timestamp_jitter = isns_config.ic_auth.timestamp_jitter; ctx->is_verify = isns_dsasig_verify; ctx->is_sign = isns_dsasig_sign; ctx->is_load_private = isns_dsasig_load_private_pem; ctx->is_load_public = isns_dsasig_load_public_pem; isns_debug_auth("Created DSA authentication context\n"); return ctx; }
buf_t * buf_alloc(size_t size) { buf_t *bp; bp = isns_calloc(1, sizeof(*bp)); buf_init_empty(bp, size); return bp; }
isns_keystore_t * isns_create_simple_keystore(const char *dirname) { isns_simple_keystore_t *store; store = isns_calloc(1, sizeof(*store)); store->sc_base.ic_name = "simple key store"; store->sc_base.ic_find = __isns_simple_keystore_find; store->sc_dirpath = isns_strdup(dirname); return (isns_keystore_t *) store; }
/* * Create a server object */ isns_server_t * isns_create_server(isns_source_t *source, isns_db_t *db, struct isns_service_ops *ops) { isns_server_t *srv; if (source == NULL) { isns_error("%s: source name not set\n", __FUNCTION__); return NULL; } srv = isns_calloc(1, sizeof(*srv)); srv->is_source = isns_source_get(source); srv->is_db = db; srv->is_ops = ops; return srv; }
buf_t * buf_open(const char *filename, int flags) { static const unsigned int buflen = 4096; buf_t *bp; int oerr; if (!(bp = isns_calloc(1, sizeof(*bp) + buflen))) return NULL; buf_init(bp, (bp + 1), buflen); switch (flags & O_ACCMODE) { case O_RDONLY: bp->write_mode = 0; break; case O_WRONLY: bp->write_mode = 1; break; default: errno = EINVAL; goto failed; } if (!filename || !strcmp(filename, "-")) { bp->fd = dup(bp->write_mode? 1 : 0); } else { bp->fd = open(filename, flags, 0666); } if (bp->fd < 0) goto failed; return bp; failed: oerr = errno; isns_free(bp); errno = oerr; return NULL; }
isns_keystore_t * isns_create_db_keystore(isns_db_t *db) { isns_db_keystore_t *store; isns_object_t *entity; isns_debug_auth("Creating DB keystore\n"); if (!(entity = isns_db_get_control(db))) { isns_error("Could not create control entity in database\n"); return NULL; } isns_debug_auth("Control entity is 0x%08x\n", entity->ie_index); store = isns_calloc(1, sizeof(*store)); store->sd_base.ic_name = "database key store"; store->sd_base.ic_find = __isns_db_keystore_find; store->sd_base.ic_get_policy = __isns_db_keystore_get_policy; store->sd_control = entity; store->sd_db = db; isns_register_callback(__isns_db_keystore_change_notify, store); return (isns_keystore_t *) store; }