1 /* $NetBSD: test_plugin.c,v 1.1.1.2 2014/04/24 12:45:51 pettai Exp $ */
2
3 /*
4 * Copyright (c) 2006 Kungliga Tekniska Högskolan
5 * (Royal Institute of Technology, Stockholm, Sweden).
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 *
19 * 3. Neither the name of the Institute nor the names of its contributors
20 * may be used to endorse or promote products derived from this software
21 * without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 */
35
36 #include <krb5_locl.h>
37 #include "locate_plugin.h"
38
39 static krb5_error_code
resolve_init(krb5_context context,void ** ctx)40 resolve_init(krb5_context context, void **ctx)
41 {
42 *ctx = NULL;
43 return 0;
44 }
45
46 static void
resolve_fini(void * ctx)47 resolve_fini(void *ctx)
48 {
49 }
50
51 static krb5_error_code
resolve_lookup(void * ctx,enum locate_service_type service,const char * realm,int domain,int type,int (* add)(void *,int,struct sockaddr *),void * addctx)52 resolve_lookup(void *ctx,
53 enum locate_service_type service,
54 const char *realm,
55 int domain,
56 int type,
57 int (*add)(void *,int,struct sockaddr *),
58 void *addctx)
59 {
60 struct sockaddr_in s;
61
62 memset(&s, 0, sizeof(s));
63
64 #ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
65 s.sin_len = sizeof(s);
66 #endif
67 s.sin_family = AF_INET;
68 s.sin_port = htons(88);
69 s.sin_addr.s_addr = htonl(0x7f000002);
70
71 if (strcmp(realm, "NOTHERE.H5L.SE") == 0)
72 (*add)(addctx, type, (struct sockaddr *)&s);
73
74 return 0;
75 }
76
77
78 krb5plugin_service_locate_ftable resolve = {
79 0,
80 resolve_init,
81 resolve_fini,
82 resolve_lookup
83 };
84
85
86 int
main(int argc,char ** argv)87 main(int argc, char **argv)
88 {
89 krb5_error_code ret;
90 krb5_context context;
91 krb5_krbhst_handle handle;
92 char host[MAXHOSTNAMELEN];
93 int found = 0;
94
95 setprogname(argv[0]);
96
97 ret = krb5_init_context(&context);
98 if (ret)
99 errx(1, "krb5_init_contex");
100
101 ret = krb5_plugin_register(context, PLUGIN_TYPE_DATA,
102 KRB5_PLUGIN_LOCATE, &resolve);
103 if (ret)
104 krb5_err(context, 1, ret, "krb5_plugin_register");
105
106
107 ret = krb5_krbhst_init_flags(context,
108 "NOTHERE.H5L.SE",
109 KRB5_KRBHST_KDC,
110 0,
111 &handle);
112 if (ret)
113 krb5_err(context, 1, ret, "krb5_krbhst_init_flags");
114
115
116 while(krb5_krbhst_next_as_string(context, handle, host, sizeof(host)) == 0){
117 found++;
118 if (strcmp(host, "127.0.0.2") != 0)
119 krb5_errx(context, 1, "wrong address: %s", host);
120 }
121 if (!found)
122 krb5_errx(context, 1, "failed to find host");
123
124 krb5_krbhst_free(context, handle);
125
126 krb5_free_context(context);
127 return 0;
128 }
129