Skip to content

Commit

Permalink
RPCSEC_GSS remove all qop parameters
Browse files Browse the repository at this point in the history
 Not only are the qop parameters that are passed around throughout the gssapi
 unused by any currently implemented mechanism, but there appears to be some
 doubt as to whether they will ever be used.  Let's just kill them off for now.

 Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
 Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
  • Loading branch information
J. Bruce Fields authored and Trond Myklebust committed Oct 19, 2005
1 parent 14ae162 commit 00fd6e1
Show file tree
Hide file tree
Showing 14 changed files with 41 additions and 97 deletions.
13 changes: 2 additions & 11 deletions include/linux/sunrpc/gss_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,23 +40,19 @@ int gss_import_sec_context(
struct gss_ctx **ctx_id);
u32 gss_get_mic(
struct gss_ctx *ctx_id,
u32 qop,
struct xdr_buf *message,
struct xdr_netobj *mic_token);
u32 gss_verify_mic(
struct gss_ctx *ctx_id,
struct xdr_buf *message,
struct xdr_netobj *mic_token,
u32 *qstate);
struct xdr_netobj *mic_token);
u32 gss_wrap(
struct gss_ctx *ctx_id,
u32 qop,
int offset,
struct xdr_buf *outbuf,
struct page **inpages);
u32 gss_unwrap(
struct gss_ctx *ctx_id,
u32 *qop,
int offset,
struct xdr_buf *inbuf);
u32 gss_delete_sec_context(
Expand All @@ -67,7 +63,6 @@ char *gss_service_to_auth_domain_name(struct gss_api_mech *, u32 service);

struct pf_desc {
u32 pseudoflavor;
u32 qop;
u32 service;
char *name;
char *auth_domain_name;
Expand Down Expand Up @@ -96,23 +91,19 @@ struct gss_api_ops {
struct gss_ctx *ctx_id);
u32 (*gss_get_mic)(
struct gss_ctx *ctx_id,
u32 qop,
struct xdr_buf *message,
struct xdr_netobj *mic_token);
u32 (*gss_verify_mic)(
struct gss_ctx *ctx_id,
struct xdr_buf *message,
struct xdr_netobj *mic_token,
u32 *qstate);
struct xdr_netobj *mic_token);
u32 (*gss_wrap)(
struct gss_ctx *ctx_id,
u32 qop,
int offset,
struct xdr_buf *outbuf,
struct page **inpages);
u32 (*gss_unwrap)(
struct gss_ctx *ctx_id,
u32 *qop,
int offset,
struct xdr_buf *buf);
void (*gss_delete_sec_context)(
Expand Down
10 changes: 0 additions & 10 deletions include/linux/sunrpc/gss_err.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,16 +65,6 @@ typedef unsigned int OM_uint32;
#define GSS_C_MECH_CODE 2


/*
* Define the default Quality of Protection for per-message services. Note
* that an implementation that offers multiple levels of QOP may either reserve
* a value (for example zero, as assumed here) to mean "default protection", or
* alternatively may simply equate GSS_C_QOP_DEFAULT to a specific explicit
* QOP value. However a value of 0 should always be interpreted by a GSSAPI
* implementation as a request for the default protection level.
*/
#define GSS_C_QOP_DEFAULT 0

/*
* Expiration time of 2^32-1 seconds means infinite lifetime for a
* credential or security context
Expand Down
8 changes: 4 additions & 4 deletions include/linux/sunrpc/gss_krb5.h
Original file line number Diff line number Diff line change
Expand Up @@ -119,21 +119,21 @@ make_checksum(s32 cksumtype, char *header, int hdrlen, struct xdr_buf *body,
int body_offset, struct xdr_netobj *cksum);

u32
krb5_make_token(struct krb5_ctx *context_handle, int qop_req,
krb5_make_token(struct krb5_ctx *context_handle,
struct xdr_buf *input_message_buffer,
struct xdr_netobj *output_message_buffer);

u32
krb5_read_token(struct krb5_ctx *context_handle,
struct xdr_netobj *input_token_buffer,
struct xdr_buf *message_buffer, int *qop_state);
struct xdr_buf *message_buffer);

u32
gss_wrap_kerberos(struct gss_ctx *ctx_id, u32 qop, int offset,
gss_wrap_kerberos(struct gss_ctx *ctx_id, int offset,
struct xdr_buf *outbuf, struct page **pages);

u32
gss_unwrap_kerberos(struct gss_ctx *ctx_id, u32 *qop, int offset,
gss_unwrap_kerberos(struct gss_ctx *ctx_id, int offset,
struct xdr_buf *buf);


Expand Down
4 changes: 2 additions & 2 deletions include/linux/sunrpc/gss_spkm3.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ struct spkm3_ctx {
#define SPKM_WRAP_TOK 5
#define SPKM_DEL_TOK 6

u32 spkm3_make_token(struct spkm3_ctx *ctx, int qop_req, struct xdr_buf * text, struct xdr_netobj * token, int toktype);
u32 spkm3_make_token(struct spkm3_ctx *ctx, struct xdr_buf * text, struct xdr_netobj * token, int toktype);

u32 spkm3_read_token(struct spkm3_ctx *ctx, struct xdr_netobj *read_token, struct xdr_buf *message_buffer, int *qop_state, int toktype);
u32 spkm3_read_token(struct spkm3_ctx *ctx, struct xdr_netobj *read_token, struct xdr_buf *message_buffer, int toktype);

#define CKSUMTYPE_RSA_MD5 0x0007

Expand Down
20 changes: 7 additions & 13 deletions net/sunrpc/auth_gss/auth_gss.c
Original file line number Diff line number Diff line change
Expand Up @@ -854,9 +854,7 @@ gss_marshal(struct rpc_task *task, u32 *p)
*p++ = htonl(RPC_AUTH_GSS);

mic.data = (u8 *)(p + 1);
maj_stat = gss_get_mic(ctx->gc_gss_ctx,
GSS_C_QOP_DEFAULT,
&verf_buf, &mic);
maj_stat = gss_get_mic(ctx->gc_gss_ctx, &verf_buf, &mic);
if (maj_stat == GSS_S_CONTEXT_EXPIRED) {
cred->cr_flags &= ~RPCAUTH_CRED_UPTODATE;
} else if (maj_stat != 0) {
Expand Down Expand Up @@ -888,7 +886,7 @@ gss_validate(struct rpc_task *task, u32 *p)
{
struct rpc_cred *cred = task->tk_msg.rpc_cred;
struct gss_cl_ctx *ctx = gss_cred_get_ctx(cred);
u32 seq, qop_state;
u32 seq;
struct kvec iov;
struct xdr_buf verf_buf;
struct xdr_netobj mic;
Expand All @@ -909,7 +907,7 @@ gss_validate(struct rpc_task *task, u32 *p)
mic.data = (u8 *)p;
mic.len = len;

maj_stat = gss_verify_mic(ctx->gc_gss_ctx, &verf_buf, &mic, &qop_state);
maj_stat = gss_verify_mic(ctx->gc_gss_ctx, &verf_buf, &mic);
if (maj_stat == GSS_S_CONTEXT_EXPIRED)
cred->cr_flags &= ~RPCAUTH_CRED_UPTODATE;
if (maj_stat)
Expand Down Expand Up @@ -961,8 +959,7 @@ gss_wrap_req_integ(struct rpc_cred *cred, struct gss_cl_ctx *ctx,
p = iov->iov_base + iov->iov_len;
mic.data = (u8 *)(p + 1);

maj_stat = gss_get_mic(ctx->gc_gss_ctx,
GSS_C_QOP_DEFAULT, &integ_buf, &mic);
maj_stat = gss_get_mic(ctx->gc_gss_ctx, &integ_buf, &mic);
status = -EIO; /* XXX? */
if (maj_stat == GSS_S_CONTEXT_EXPIRED)
cred->cr_flags &= ~RPCAUTH_CRED_UPTODATE;
Expand Down Expand Up @@ -1057,8 +1054,7 @@ gss_wrap_req_priv(struct rpc_cred *cred, struct gss_cl_ctx *ctx,
memcpy(tmp, snd_buf->tail[0].iov_base, snd_buf->tail[0].iov_len);
snd_buf->tail[0].iov_base = tmp;
}
maj_stat = gss_wrap(ctx->gc_gss_ctx, GSS_C_QOP_DEFAULT, offset,
snd_buf, inpages);
maj_stat = gss_wrap(ctx->gc_gss_ctx, offset, snd_buf, inpages);
/* RPC_SLACK_SPACE should prevent this ever happening: */
BUG_ON(snd_buf->len > snd_buf->buflen);
status = -EIO;
Expand Down Expand Up @@ -1150,8 +1146,7 @@ gss_unwrap_resp_integ(struct rpc_cred *cred, struct gss_cl_ctx *ctx,
if (xdr_buf_read_netobj(rcv_buf, &mic, mic_offset))
return status;

maj_stat = gss_verify_mic(ctx->gc_gss_ctx, &integ_buf,
&mic, NULL);
maj_stat = gss_verify_mic(ctx->gc_gss_ctx, &integ_buf, &mic);
if (maj_stat == GSS_S_CONTEXT_EXPIRED)
cred->cr_flags &= ~RPCAUTH_CRED_UPTODATE;
if (maj_stat != GSS_S_COMPLETE)
Expand All @@ -1176,8 +1171,7 @@ gss_unwrap_resp_priv(struct rpc_cred *cred, struct gss_cl_ctx *ctx,
/* remove padding: */
rcv_buf->len = offset + opaque_len;

maj_stat = gss_unwrap(ctx->gc_gss_ctx, NULL,
offset, rcv_buf);
maj_stat = gss_unwrap(ctx->gc_gss_ctx, offset, rcv_buf);
if (maj_stat == GSS_S_CONTEXT_EXPIRED)
cred->cr_flags &= ~RPCAUTH_CRED_UPTODATE;
if (maj_stat != GSS_S_COMPLETE)
Expand Down
12 changes: 4 additions & 8 deletions net/sunrpc/auth_gss/gss_krb5_mech.c
Original file line number Diff line number Diff line change
Expand Up @@ -193,29 +193,25 @@ gss_delete_sec_context_kerberos(void *internal_ctx) {
static u32
gss_verify_mic_kerberos(struct gss_ctx *ctx,
struct xdr_buf *message,
struct xdr_netobj *mic_token,
u32 *qstate) {
struct xdr_netobj *mic_token)
{
u32 maj_stat = 0;
int qop_state;
struct krb5_ctx *kctx = ctx->internal_ctx_id;

maj_stat = krb5_read_token(kctx, mic_token, message, &qop_state);
if (!maj_stat && qop_state)
*qstate = qop_state;
maj_stat = krb5_read_token(kctx, mic_token, message);

dprintk("RPC: gss_verify_mic_kerberos returning %d\n", maj_stat);
return maj_stat;
}

static u32
gss_get_mic_kerberos(struct gss_ctx *ctx,
u32 qop,
struct xdr_buf *message,
struct xdr_netobj *mic_token) {
u32 err = 0;
struct krb5_ctx *kctx = ctx->internal_ctx_id;

err = krb5_make_token(kctx, qop, message, mic_token);
err = krb5_make_token(kctx, message, mic_token);

dprintk("RPC: gss_get_mic_kerberos returning %d\n",err);

Expand Down
5 changes: 1 addition & 4 deletions net/sunrpc/auth_gss/gss_krb5_seal.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@
#endif

u32
krb5_make_token(struct krb5_ctx *ctx, int qop_req,
krb5_make_token(struct krb5_ctx *ctx,
struct xdr_buf *text, struct xdr_netobj *token)
{
s32 checksum_type;
Expand All @@ -83,9 +83,6 @@ krb5_make_token(struct krb5_ctx *ctx, int qop_req,

now = get_seconds();

if (qop_req != 0)
goto out_err;

switch (ctx->signalg) {
case SGN_ALG_DES_MAC_MD5:
checksum_type = CKSUMTYPE_RSA_MD5;
Expand Down
5 changes: 1 addition & 4 deletions net/sunrpc/auth_gss/gss_krb5_unseal.c
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@
u32
krb5_read_token(struct krb5_ctx *ctx,
struct xdr_netobj *read_token,
struct xdr_buf *message_buffer, int *qop_state)
struct xdr_buf *message_buffer)
{
int signalg;
int sealalg;
Expand Down Expand Up @@ -157,9 +157,6 @@ krb5_read_token(struct krb5_ctx *ctx,

/* it got through unscathed. Make sure the context is unexpired */

if (qop_state)
*qop_state = GSS_C_QOP_DEFAULT;

now = get_seconds();

ret = GSS_S_CONTEXT_EXPIRED;
Expand Down
11 changes: 2 additions & 9 deletions net/sunrpc/auth_gss/gss_krb5_wrap.c
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ make_confounder(char *p, int blocksize)
/* XXX factor out common code with seal/unseal. */

u32
gss_wrap_kerberos(struct gss_ctx *ctx, u32 qop, int offset,
gss_wrap_kerberos(struct gss_ctx *ctx, int offset,
struct xdr_buf *buf, struct page **pages)
{
struct krb5_ctx *kctx = ctx->internal_ctx_id;
Expand All @@ -132,9 +132,6 @@ gss_wrap_kerberos(struct gss_ctx *ctx, u32 qop, int offset,

now = get_seconds();

if (qop != 0)
goto out_err;

switch (kctx->signalg) {
case SGN_ALG_DES_MAC_MD5:
checksum_type = CKSUMTYPE_RSA_MD5;
Expand Down Expand Up @@ -229,8 +226,7 @@ gss_wrap_kerberos(struct gss_ctx *ctx, u32 qop, int offset,
}

u32
gss_unwrap_kerberos(struct gss_ctx *ctx, u32 *qop, int offset,
struct xdr_buf *buf)
gss_unwrap_kerberos(struct gss_ctx *ctx, int offset, struct xdr_buf *buf)
{
struct krb5_ctx *kctx = ctx->internal_ctx_id;
int signalg;
Expand Down Expand Up @@ -328,9 +324,6 @@ gss_unwrap_kerberos(struct gss_ctx *ctx, u32 *qop, int offset,

/* it got through unscathed. Make sure the context is unexpired */

if (qop)
*qop = GSS_C_QOP_DEFAULT;

now = get_seconds();

ret = GSS_S_CONTEXT_EXPIRED;
Expand Down
14 changes: 4 additions & 10 deletions net/sunrpc/auth_gss/gss_mech_switch.c
Original file line number Diff line number Diff line change
Expand Up @@ -250,13 +250,11 @@ gss_import_sec_context(const void *input_token, size_t bufsize,

u32
gss_get_mic(struct gss_ctx *context_handle,
u32 qop,
struct xdr_buf *message,
struct xdr_netobj *mic_token)
{
return context_handle->mech_type->gm_ops
->gss_get_mic(context_handle,
qop,
message,
mic_token);
}
Expand All @@ -266,35 +264,31 @@ gss_get_mic(struct gss_ctx *context_handle,
u32
gss_verify_mic(struct gss_ctx *context_handle,
struct xdr_buf *message,
struct xdr_netobj *mic_token,
u32 *qstate)
struct xdr_netobj *mic_token)
{
return context_handle->mech_type->gm_ops
->gss_verify_mic(context_handle,
message,
mic_token,
qstate);
mic_token);
}

u32
gss_wrap(struct gss_ctx *ctx_id,
u32 qop,
int offset,
struct xdr_buf *buf,
struct page **inpages)
{
return ctx_id->mech_type->gm_ops
->gss_wrap(ctx_id, qop, offset, buf, inpages);
->gss_wrap(ctx_id, offset, buf, inpages);
}

u32
gss_unwrap(struct gss_ctx *ctx_id,
u32 *qop,
int offset,
struct xdr_buf *buf)
{
return ctx_id->mech_type->gm_ops
->gss_unwrap(ctx_id, qop, offset, buf);
->gss_unwrap(ctx_id, offset, buf);
}


Expand Down
21 changes: 8 additions & 13 deletions net/sunrpc/auth_gss/gss_spkm3_mech.c
Original file line number Diff line number Diff line change
Expand Up @@ -224,34 +224,29 @@ gss_delete_sec_context_spkm3(void *internal_ctx) {
static u32
gss_verify_mic_spkm3(struct gss_ctx *ctx,
struct xdr_buf *signbuf,
struct xdr_netobj *checksum,
u32 *qstate) {
struct xdr_netobj *checksum)
{
u32 maj_stat = 0;
int qop_state = 0;
struct spkm3_ctx *sctx = ctx->internal_ctx_id;

dprintk("RPC: gss_verify_mic_spkm3 calling spkm3_read_token\n");
maj_stat = spkm3_read_token(sctx, checksum, signbuf, &qop_state,
SPKM_MIC_TOK);

if (!maj_stat && qop_state)
*qstate = qop_state;
maj_stat = spkm3_read_token(sctx, checksum, signbuf, SPKM_MIC_TOK);

dprintk("RPC: gss_verify_mic_spkm3 returning %d\n", maj_stat);
return maj_stat;
}

static u32
gss_get_mic_spkm3(struct gss_ctx *ctx,
u32 qop,
struct xdr_buf *message_buffer,
struct xdr_netobj *message_token) {
struct xdr_netobj *message_token)
{
u32 err = 0;
struct spkm3_ctx *sctx = ctx->internal_ctx_id;

dprintk("RPC: gss_get_mic_spkm3\n");

err = spkm3_make_token(sctx, qop, message_buffer,
err = spkm3_make_token(sctx, message_buffer,
message_token, SPKM_MIC_TOK);
return err;
}
Expand All @@ -264,8 +259,8 @@ static struct gss_api_ops gss_spkm3_ops = {
};

static struct pf_desc gss_spkm3_pfs[] = {
{RPC_AUTH_GSS_SPKM, 0, RPC_GSS_SVC_NONE, "spkm3"},
{RPC_AUTH_GSS_SPKMI, 0, RPC_GSS_SVC_INTEGRITY, "spkm3i"},
{RPC_AUTH_GSS_SPKM, RPC_GSS_SVC_NONE, "spkm3"},
{RPC_AUTH_GSS_SPKMI, RPC_GSS_SVC_INTEGRITY, "spkm3i"},
};

static struct gss_api_mech gss_spkm3_mech = {
Expand Down
Loading

0 comments on commit 00fd6e1

Please sign in to comment.