- uxSsh_gss_ctx *uxctx = snew(uxSsh_gss_ctx);
-
- uxctx->maj_stat = uxctx->min_stat = GSS_S_COMPLETE;
- uxctx->ctx = GSS_C_NO_CONTEXT;
- *ctx = (Ssh_gss_ctx) uxctx;
-
- return SSH_GSS_OK;
+ void *gsslib;
+ struct ssh_gss_liblist *list = snew(struct ssh_gss_liblist);
+
+ list->libraries = snewn(4, struct ssh_gss_library);
+ list->nlibraries = 0;
+
+ /* Heimdal's GSSAPI Library */
+ if ((gsslib = dlopen("libgssapi.so.2", RTLD_LAZY)) != NULL)
+ gss_init(&list->libraries[list->nlibraries++], gsslib,
+ 0, "Using GSSAPI from libgssapi.so.2");
+
+ /* MIT Kerberos's GSSAPI Library */
+ if ((gsslib = dlopen("libgssapi_krb5.so.2", RTLD_LAZY)) != NULL)
+ gss_init(&list->libraries[list->nlibraries++], gsslib,
+ 1, "Using GSSAPI from libgssapi_krb5.so.2");
+
+ /* Sun's GSSAPI Library */
+ if ((gsslib = dlopen("libgss.so.1", RTLD_LAZY)) != NULL)
+ gss_init(&list->libraries[list->nlibraries++], gsslib,
+ 2, "Using GSSAPI from libgss.so.1");
+
+ /* User-specified GSSAPI library */
+ if (cfg->ssh_gss_custom.path[0] &&
+ (gsslib = dlopen(cfg->ssh_gss_custom.path, RTLD_LAZY)) != NULL)
+ gss_init(&list->libraries[list->nlibraries++], gsslib,
+ 3, dupprintf("Using GSSAPI from user-specified"
+ " library '%s'", cfg->ssh_gss_custom.path));
+
+ return list;