diff --git a/greeter/authenticator.cpp b/greeter/authenticator.cpp --- a/greeter/authenticator.cpp +++ b/greeter/authenticator.cpp @@ -241,6 +241,18 @@ emit error(QString::fromLocal8Bit(arr)); ::free( arr ); return; + case ConvPutAuthSucceeded: + emit succeeded(); + return; + case ConvPutAuthFailed: + emit failed(); + return; + case ConvPutAuthError: + cantCheck(); + return; + case ConvPutAuthAbort: + // what to do here? + return; } } reapVerify(); @@ -258,18 +270,6 @@ cantCheck(); return; } - if (WIFEXITED(status)) - switch (WEXITSTATUS(status)) { - case AuthOk: - emit succeeded(); - return; - case AuthBad: - emit failed(); - return; - case AuthAbort: - return; - } - cantCheck(); } void KCheckPass::cantCheck() diff --git a/greeter/autotests/fakekcheckpass.c b/greeter/autotests/fakekcheckpass.c --- a/greeter/autotests/fakekcheckpass.c +++ b/greeter/autotests/fakekcheckpass.c @@ -251,16 +251,17 @@ /* Now do the fandango */ const char *password = conv_server(ConvGetHidden, 0); if (strcmp(password, "testpassword") == 0) { - return AuthOk; + conv_server(ConvPutAuthSucceeded, 0); } else if (strcmp(password, "info") == 0) { conv_server(ConvPutInfo, "You wanted some info, here you have it"); - return AuthOk; + conv_server(ConvPutAuthSucceeded, 0); } else if (strcmp(password, "error") == 0) { conv_server(ConvPutError, "The world is going to explode"); - return AuthError; + conv_server(ConvPutAuthFailed, 0); } else if (strcmp(password, "") == 0) { conv_server(ConvPutError, "Hey, don't give me an empty password"); - return AuthError; + } else { + conv_server(ConvPutAuthFailed, 0); } - return AuthBad; + return 0; } diff --git a/kcheckpass/kcheckpass-enums.h b/kcheckpass/kcheckpass-enums.h --- a/kcheckpass/kcheckpass-enums.h +++ b/kcheckpass/kcheckpass-enums.h @@ -54,7 +54,11 @@ ConvGetNormal, ConvGetHidden, ConvPutInfo, - ConvPutError + ConvPutError, + ConvPutAuthSucceeded, + ConvPutAuthFailed, + ConvPutAuthError, + ConvPutAuthAbort } ConvRequest; /* these must match the defs in kgreeterplugin.h */ diff --git a/kcheckpass/kcheckpass.c b/kcheckpass/kcheckpass.c --- a/kcheckpass/kcheckpass.c +++ b/kcheckpass/kcheckpass.c @@ -206,6 +206,11 @@ nullpass = 1; return msg; } + case ConvPutAuthSucceeded: + case ConvPutAuthFailed: + case ConvPutAuthError: + case ConvPutAuthAbort: + return 0; case ConvPutInfo: case ConvPutError: default: @@ -328,8 +333,23 @@ syslog(LOG_NOTICE, "Authentication failure for %s (invoked by uid %d)", username, uid); } } + switch (ret) { + case AuthOk: + conv_server(ConvPutAuthSucceeded, 0); + break; + case AuthBad: + conv_server(ConvPutAuthFailed, 0); + break; + case AuthError: + conv_server(ConvPutAuthError, 0); + break; + case AuthAbort: + conv_server(ConvPutAuthAbort, 0); + default: + break; + } - return ret; + return 0; } void