version 1.1, 2001/05/18 14:13:28 |
version 1.1.4.3, 2002/06/02 22:56:09 |
|
|
#include "xmalloc.h" |
#include "xmalloc.h" |
#include "auth.h" |
#include "auth.h" |
#include "log.h" |
#include "log.h" |
|
#include "monitor_wrap.h" |
|
|
static void * |
static void * |
bsdauth_init_ctx(Authctxt *authctxt) |
bsdauth_init_ctx(Authctxt *authctxt) |
|
|
return authctxt; |
return authctxt; |
} |
} |
|
|
static int |
int |
bsdauth_query(void *ctx, char **name, char **infotxt, |
bsdauth_query(void *ctx, char **name, char **infotxt, |
u_int *numprompts, char ***prompts, u_int **echo_on) |
u_int *numprompts, char ***prompts, u_int **echo_on) |
{ |
{ |
Authctxt *authctxt = ctx; |
Authctxt *authctxt = ctx; |
char *challenge = NULL; |
char *challenge = NULL; |
|
|
if (authctxt->as != NULL) { |
if (authctxt->as != NULL) { |
debug2("bsdauth_query: try reuse session"); |
debug2("bsdauth_query: try reuse session"); |
challenge = auth_getitem(authctxt->as, AUTHV_CHALLENGE); |
challenge = auth_getitem(authctxt->as, AUTHV_CHALLENGE); |
if (challenge == NULL) { |
if (challenge == NULL) { |
auth_close(authctxt->as); |
auth_close(authctxt->as); |
authctxt->as = NULL; |
authctxt->as = NULL; |
} |
} |
} |
} |
|
|
if (challenge == NULL) { |
if (challenge == NULL) { |
debug2("bsdauth_query: new bsd auth session"); |
debug2("bsdauth_query: new bsd auth session"); |
debug3("bsdauth_query: style %s", |
debug3("bsdauth_query: style %s", |
authctxt->style ? authctxt->style : "<default>"); |
authctxt->style ? authctxt->style : "<default>"); |
authctxt->as = auth_userchallenge(authctxt->user, |
authctxt->as = auth_userchallenge(authctxt->user, |
authctxt->style, "auth-ssh", &challenge); |
authctxt->style, "auth-ssh", &challenge); |
if (authctxt->as == NULL) |
if (authctxt->as == NULL) |
challenge = NULL; |
challenge = NULL; |
debug2("bsdauth_query: <%s>", challenge ? challenge : "empty"); |
debug2("bsdauth_query: <%s>", challenge ? challenge : "empty"); |
} |
} |
|
|
if (challenge == NULL) |
|
return -1; |
|
|
|
*name = xstrdup(""); |
if (challenge == NULL) |
*infotxt = xstrdup(""); |
return -1; |
*numprompts = 1; |
|
*prompts = xmalloc(*numprompts * sizeof(char*)); |
|
*echo_on = xmalloc(*numprompts * sizeof(u_int)); |
|
(*echo_on)[0] = 0; |
|
(*prompts)[0] = xstrdup(challenge); |
|
|
|
return 0; |
*name = xstrdup(""); |
|
*infotxt = xstrdup(""); |
|
*numprompts = 1; |
|
*prompts = xmalloc(*numprompts * sizeof(char*)); |
|
*echo_on = xmalloc(*numprompts * sizeof(u_int)); |
|
(*echo_on)[0] = 0; |
|
(*prompts)[0] = xstrdup(challenge); |
|
|
|
return 0; |
} |
} |
|
|
static int |
int |
bsdauth_respond(void *ctx, u_int numresponses, char **responses) |
bsdauth_respond(void *ctx, u_int numresponses, char **responses) |
{ |
{ |
Authctxt *authctxt = ctx; |
Authctxt *authctxt = ctx; |
int authok; |
int authok; |
|
|
if (authctxt->as == 0) |
|
error("bsdauth_respond: no bsd auth session"); |
|
|
|
if (numresponses != 1) |
if (authctxt->as == 0) |
return -1; |
error("bsdauth_respond: no bsd auth session"); |
|
|
authok = auth_userresponse(authctxt->as, responses[0], 0); |
if (numresponses != 1) |
authctxt->as = NULL; |
return -1; |
debug3("bsdauth_respond: <%s> = <%d>", responses[0], authok); |
|
|
|
return (authok == 0) ? -1 : 0; |
authok = auth_userresponse(authctxt->as, responses[0], 0); |
|
authctxt->as = NULL; |
|
debug3("bsdauth_respond: <%s> = <%d>", responses[0], authok); |
|
|
|
return (authok == 0) ? -1 : 0; |
} |
} |
|
|
static void |
static void |
bsdauth_free_ctx(void *ctx) |
bsdauth_free_ctx(void *ctx) |
{ |
{ |
Authctxt *authctxt = ctx; |
Authctxt *authctxt = ctx; |
|
|
if (authctxt && authctxt->as) { |
if (authctxt && authctxt->as) { |
auth_close(authctxt->as); |
auth_close(authctxt->as); |
authctxt->as = NULL; |
authctxt->as = NULL; |
} |
} |
} |
} |
|
|
KbdintDevice bsdauth_device = { |
KbdintDevice bsdauth_device = { |
|
|
bsdauth_init_ctx, |
bsdauth_init_ctx, |
bsdauth_query, |
bsdauth_query, |
bsdauth_respond, |
bsdauth_respond, |
|
bsdauth_free_ctx |
|
}; |
|
|
|
KbdintDevice mm_bsdauth_device = { |
|
"bsdauth", |
|
bsdauth_init_ctx, |
|
mm_bsdauth_query, |
|
mm_bsdauth_respond, |
bsdauth_free_ctx |
bsdauth_free_ctx |
}; |
}; |
#endif |
#endif |