static kadm5_ret_t kadm5_s_init_with_context(krb5_context context, const char *client_name, const char *service_name, kadm5_config_params *realm_params, unsigned long struct_version, unsigned long api_version, void **server_handle) { kadm5_ret_t ret; kadm5_server_context *ctx; ret = _kadm5_s_init_context(&ctx, realm_params, context); if(ret) return ret; assert(ctx->config.dbname != NULL); assert(ctx->config.stash_file != NULL); assert(ctx->config.acl_file != NULL); assert(ctx->log_context.log_file != NULL); #ifndef NO_UNIX_SOCKETS assert(ctx->log_context.socket_name.sun_path[0] != '\0'); #else assert(ctx->log_context.socket_info != NULL); #endif ret = hdb_create(ctx->context, &ctx->db, ctx->config.dbname); if(ret) return ret; ret = hdb_set_master_keyfile (ctx->context, ctx->db, ctx->config.stash_file); if(ret) return ret; ctx->log_context.log_fd = -1; #ifndef NO_UNIX_SOCKETS ctx->log_context.socket_fd = socket (AF_UNIX, SOCK_DGRAM, 0); #else ctx->log_context.socket_fd = socket (ctx->log_context.socket_info->ai_family, ctx->log_context.socket_info->ai_socktype, ctx->log_context.socket_info->ai_protocol); #endif ret = krb5_parse_name(ctx->context, client_name, &ctx->caller); if(ret) return ret; ret = _kadm5_acl_init(ctx); if(ret) return ret; *server_handle = ctx; return 0; }
static kadm5_ret_t kadm5_s_init_with_context(krb5_context context, const char *client_name, const char *service_name, kadm5_config_params *realm_params, unsigned long struct_version, unsigned long api_version, void **server_handle) { kadm5_ret_t ret; kadm5_server_context *ctx; char *dbname; char *stash_file; *server_handle = NULL; ret = _kadm5_s_init_context(&ctx, realm_params, context); if (ret) return ret; if (realm_params->mask & KADM5_CONFIG_DBNAME) dbname = realm_params->dbname; else dbname = ctx->config.dbname; if (realm_params->mask & KADM5_CONFIG_STASH_FILE) stash_file = realm_params->stash_file; else stash_file = ctx->config.stash_file; assert(dbname != NULL); assert(stash_file != NULL); assert(ctx->config.acl_file != NULL); assert(ctx->log_context.log_file != NULL); #ifndef NO_UNIX_SOCKETS assert(ctx->log_context.socket_name.sun_path[0] != '\0'); #else assert(ctx->log_context.socket_info != NULL); #endif ret = hdb_create(ctx->context, &ctx->db, dbname); if (ret == 0) ret = hdb_set_master_keyfile(ctx->context, ctx->db, stash_file); if (ret) { kadm5_s_destroy(ctx); return ret; } ctx->log_context.log_fd = -1; #ifndef NO_UNIX_SOCKETS ctx->log_context.socket_fd = socket(AF_UNIX, SOCK_DGRAM, 0); #else ctx->log_context.socket_fd = socket(ctx->log_context.socket_info->ai_family, ctx->log_context.socket_info->ai_socktype, ctx->log_context.socket_info->ai_protocol); #endif if (ctx->log_context.socket_fd != rk_INVALID_SOCKET) socket_set_nonblocking(ctx->log_context.socket_fd, 1); ret = krb5_parse_name(ctx->context, client_name, &ctx->caller); if (ret == 0) ret = _kadm5_acl_init(ctx); if (ret) kadm5_s_destroy(ctx); else *server_handle = ctx; return ret; }