12b65585e720714b31036daaa2b30eb76014048eGordon Ross/*
12b65585e720714b31036daaa2b30eb76014048eGordon Ross * This file and its contents are supplied under the terms of the
12b65585e720714b31036daaa2b30eb76014048eGordon Ross * Common Development and Distribution License ("CDDL"), version 1.0.
12b65585e720714b31036daaa2b30eb76014048eGordon Ross * You may only use this file in accordance with the terms of version
12b65585e720714b31036daaa2b30eb76014048eGordon Ross * 1.0 of the CDDL.
12b65585e720714b31036daaa2b30eb76014048eGordon Ross *
12b65585e720714b31036daaa2b30eb76014048eGordon Ross * A full copy of the text of the CDDL should have accompanied this
12b65585e720714b31036daaa2b30eb76014048eGordon Ross * source. A copy of the CDDL is also available via the Internet at
12b65585e720714b31036daaa2b30eb76014048eGordon Ross * http://www.illumos.org/license/CDDL.
12b65585e720714b31036daaa2b30eb76014048eGordon Ross */
12b65585e720714b31036daaa2b30eb76014048eGordon Ross
12b65585e720714b31036daaa2b30eb76014048eGordon Ross/*
12b65585e720714b31036daaa2b30eb76014048eGordon Ross * Copyright 2014 Nexenta Systems, Inc. All rights reserved.
12b65585e720714b31036daaa2b30eb76014048eGordon Ross */
12b65585e720714b31036daaa2b30eb76014048eGordon Ross
12b65585e720714b31036daaa2b30eb76014048eGordon Ross#ifndef _SMBD_AUTHSVC_H
12b65585e720714b31036daaa2b30eb76014048eGordon Ross#define _SMBD_AUTHSVC_H
12b65585e720714b31036daaa2b30eb76014048eGordon Ross
12b65585e720714b31036daaa2b30eb76014048eGordon Ross/*
12b65585e720714b31036daaa2b30eb76014048eGordon Ross * Declarations shared with authsvc modules.
12b65585e720714b31036daaa2b30eb76014048eGordon Ross */
12b65585e720714b31036daaa2b30eb76014048eGordon Ross
12b65585e720714b31036daaa2b30eb76014048eGordon Ross#include <sys/types.h>
12b65585e720714b31036daaa2b30eb76014048eGordon Ross#include <smbsrv/libsmb.h>
12b65585e720714b31036daaa2b30eb76014048eGordon Ross
12b65585e720714b31036daaa2b30eb76014048eGordon Ross/*
12b65585e720714b31036daaa2b30eb76014048eGordon Ross * This is the common authsvc_context shared by all back-ends.
12b65585e720714b31036daaa2b30eb76014048eGordon Ross * Note that ctx_mech_oid is really SPNEGO_MECH_OID, and the
12b65585e720714b31036daaa2b30eb76014048eGordon Ross * ctx_itoken, ctx_otoken members are SPNEGO_TOKEN_HANDLE,
12b65585e720714b31036daaa2b30eb76014048eGordon Ross * but this is using the underlying types so as to avoid
12b65585e720714b31036daaa2b30eb76014048eGordon Ross * dragging in spnego.h here.
12b65585e720714b31036daaa2b30eb76014048eGordon Ross */
12b65585e720714b31036daaa2b30eb76014048eGordon Rosstypedef struct authsvc_context {
12b65585e720714b31036daaa2b30eb76014048eGordon Ross int ctx_socket;
12b65585e720714b31036daaa2b30eb76014048eGordon Ross int ctx_mech_oid;
12b65585e720714b31036daaa2b30eb76014048eGordon Ross int (*ctx_mh_work)(struct authsvc_context *);
12b65585e720714b31036daaa2b30eb76014048eGordon Ross void (*ctx_mh_fini)(struct authsvc_context *);
12b65585e720714b31036daaa2b30eb76014048eGordon Ross int ctx_itoktype;
12b65585e720714b31036daaa2b30eb76014048eGordon Ross int ctx_negresult;
12b65585e720714b31036daaa2b30eb76014048eGordon Ross
12b65585e720714b31036daaa2b30eb76014048eGordon Ross /* (in,out) SPNEGO token handles */
12b65585e720714b31036daaa2b30eb76014048eGordon Ross void *ctx_itoken;
12b65585e720714b31036daaa2b30eb76014048eGordon Ross void *ctx_otoken;
12b65585e720714b31036daaa2b30eb76014048eGordon Ross
12b65585e720714b31036daaa2b30eb76014048eGordon Ross /* (in,out) raw (buf,len,type) */
12b65585e720714b31036daaa2b30eb76014048eGordon Ross void *ctx_irawbuf;
12b65585e720714b31036daaa2b30eb76014048eGordon Ross uint_t ctx_irawlen;
12b65585e720714b31036daaa2b30eb76014048eGordon Ross int ctx_irawtype;
12b65585e720714b31036daaa2b30eb76014048eGordon Ross void *ctx_orawbuf;
12b65585e720714b31036daaa2b30eb76014048eGordon Ross uint_t ctx_orawlen;
12b65585e720714b31036daaa2b30eb76014048eGordon Ross int ctx_orawtype;
12b65585e720714b31036daaa2b30eb76014048eGordon Ross
12b65585e720714b31036daaa2b30eb76014048eGordon Ross /* (in,out) body (buf,len) */
12b65585e720714b31036daaa2b30eb76014048eGordon Ross void *ctx_ibodybuf;
12b65585e720714b31036daaa2b30eb76014048eGordon Ross uint_t ctx_ibodylen;
12b65585e720714b31036daaa2b30eb76014048eGordon Ross void *ctx_obodybuf;
12b65585e720714b31036daaa2b30eb76014048eGordon Ross uint_t ctx_obodylen;
12b65585e720714b31036daaa2b30eb76014048eGordon Ross
12b65585e720714b31036daaa2b30eb76014048eGordon Ross /* who is the client */
12b65585e720714b31036daaa2b30eb76014048eGordon Ross smb_lsa_clinfo_t ctx_clinfo;
12b65585e720714b31036daaa2b30eb76014048eGordon Ross
12b65585e720714b31036daaa2b30eb76014048eGordon Ross /* final authentication token */
12b65585e720714b31036daaa2b30eb76014048eGordon Ross struct smb_token *ctx_token;
12b65585e720714b31036daaa2b30eb76014048eGordon Ross
12b65585e720714b31036daaa2b30eb76014048eGordon Ross /* private data for the back-end */
12b65585e720714b31036daaa2b30eb76014048eGordon Ross void *ctx_backend;
12b65585e720714b31036daaa2b30eb76014048eGordon Ross} authsvc_context_t;
12b65585e720714b31036daaa2b30eb76014048eGordon Ross
12b65585e720714b31036daaa2b30eb76014048eGordon Rossint smbd_krb5ssp_init(authsvc_context_t *);
12b65585e720714b31036daaa2b30eb76014048eGordon Rossint smbd_krb5ssp_work(authsvc_context_t *);
12b65585e720714b31036daaa2b30eb76014048eGordon Rossvoid smbd_krb5ssp_fini(authsvc_context_t *);
12b65585e720714b31036daaa2b30eb76014048eGordon Ross
12b65585e720714b31036daaa2b30eb76014048eGordon Rossint smbd_ntlmssp_init(authsvc_context_t *);
12b65585e720714b31036daaa2b30eb76014048eGordon Rossint smbd_ntlmssp_work(authsvc_context_t *);
12b65585e720714b31036daaa2b30eb76014048eGordon Rossvoid smbd_ntlmssp_fini(authsvc_context_t *);
12b65585e720714b31036daaa2b30eb76014048eGordon Ross
12b65585e720714b31036daaa2b30eb76014048eGordon Ross/* Exposed for unit tests. */
12b65585e720714b31036daaa2b30eb76014048eGordon Rossint smbd_authsvc_dispatch(authsvc_context_t *);
12b65585e720714b31036daaa2b30eb76014048eGordon Rossauthsvc_context_t *smbd_authctx_create(void);
12b65585e720714b31036daaa2b30eb76014048eGordon Rossvoid smbd_authctx_destroy(authsvc_context_t *);
12b65585e720714b31036daaa2b30eb76014048eGordon Ross
12b65585e720714b31036daaa2b30eb76014048eGordon Ross#endif /* _SMBD_AUTHSVC_H */