Verify the existence of the keytab for tcp_server, gssapi_server
appl/test/tcp_server and gssapi_server try to open the keytab file only when processing a connection. This patch verifies the existence of the keytab file on program startup, so that troubleshooting is easier. In addition it adds some comments. Signed-off-by: Love Hornquist Astrand <lha@h5l.org>
This commit is contained in:

committed by
Love Hornquist Astrand

parent
dd267e8fc3
commit
e242c40746
@@ -115,12 +115,18 @@ server_setup(krb5_context *context, int argc, char **argv)
|
|||||||
|
|
||||||
if(argv[argc] != NULL)
|
if(argv[argc] != NULL)
|
||||||
server_usage(1, args, num_args);
|
server_usage(1, args, num_args);
|
||||||
if (keytab_str != NULL)
|
if (keytab_str != NULL) {
|
||||||
ret = krb5_kt_resolve (*context, keytab_str, &keytab);
|
ret = krb5_kt_resolve (*context, keytab_str, &keytab);
|
||||||
else
|
if (ret)
|
||||||
ret = krb5_kt_default (*context, &keytab);
|
krb5_err (*context, 1, ret, "krb5_kt_resolve");
|
||||||
|
} else {
|
||||||
|
ret = krb5_kt_default (*context, &keytab);
|
||||||
|
if (ret)
|
||||||
|
krb5_err (*context, 1, ret, "krb5_kt_default");
|
||||||
|
}
|
||||||
|
ret = krb5_kt_have_content(*context, keytab);
|
||||||
if (ret)
|
if (ret)
|
||||||
krb5_err (*context, 1, ret, "krb5_kt_resolve/default");
|
krb5_err (*context, 1, ret, "krb5_kt_have_content");
|
||||||
return port;
|
return port;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -31,6 +31,10 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A sample server that uses the GSSAPI.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "test_locl.h"
|
#include "test_locl.h"
|
||||||
#include <gssapi/gssapi.h>
|
#include <gssapi/gssapi.h>
|
||||||
#include <gssapi/gssapi_krb5.h>
|
#include <gssapi/gssapi_krb5.h>
|
||||||
@@ -331,13 +335,12 @@ proto (int sock, const char *service)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static void
|
||||||
doit (int port, const char *service)
|
loop (int port, const char *service)
|
||||||
{
|
{
|
||||||
int sock, sock2;
|
int sock, sock2;
|
||||||
struct sockaddr_in my_addr;
|
struct sockaddr_in my_addr;
|
||||||
int one = 1;
|
int one = 1;
|
||||||
int ret;
|
|
||||||
|
|
||||||
if (keytab_str)
|
if (keytab_str)
|
||||||
gsskrb5_register_acceptor_identity(keytab_str);
|
gsskrb5_register_acceptor_identity(keytab_str);
|
||||||
@@ -366,16 +369,19 @@ doit (int port, const char *service)
|
|||||||
if (sock2 < 0)
|
if (sock2 < 0)
|
||||||
err (1, "accept");
|
err (1, "accept");
|
||||||
|
|
||||||
ret = proto (sock2, service);
|
proto (sock2, service);
|
||||||
}
|
}
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Iterative server; process one connection at a time.
|
||||||
|
*/
|
||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
krb5_context context = NULL; /* XXX */
|
krb5_context context = NULL; /* XXX */
|
||||||
int port = server_setup(&context, argc, argv);
|
int port = server_setup(&context, argc, argv);
|
||||||
return doit (port, service);
|
loop (port, service);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -31,6 +31,10 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A sample server that uses the Kerberos V5 API.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "test_locl.h"
|
#include "test_locl.h"
|
||||||
RCSID("$Id$");
|
RCSID("$Id$");
|
||||||
|
|
||||||
@@ -160,6 +164,9 @@ doit (int port, const char *service)
|
|||||||
return proto (STDIN_FILENO, service);
|
return proto (STDIN_FILENO, service);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Process only one connection and then exit.
|
||||||
|
*/
|
||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user