+ void *gsslib;
+ char *gsspath;
+ 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 */
+ gsspath = conf_get_filename(conf, CONF_ssh_gss_custom)->path;
+ if (*gsspath && (gsslib = dlopen(gsspath, RTLD_LAZY)) != NULL)
+ gss_init(&list->libraries[list->nlibraries++], gsslib,
+ 3, dupprintf("Using GSSAPI from user-specified"
+ " library '%s'", gsspath));
+
+ return list;