+#if HAVE_XSLT
+ xmlNodePtr ptr = m_cp->find_target_node(name, 0);
+ if (!ptr)
+ return ;
+
+ for (ptr = ptr->children; ptr; ptr = ptr->next)
+ if (ptr->type == XML_ELEMENT_NODE &&
+ !strcmp((const char *) ptr->name, "target-authentication"))
+ {
+ struct _xmlAttr *attr;
+ const char *type = "open";
+ for (attr = ptr->properties; attr; attr = attr->next)
+ {
+ if (!strcmp((const char *) attr->name, "type") &&
+ attr->children && attr->children->type == XML_TEXT_NODE)
+ type = (const char *) attr->children->content;
+ }
+ const char *t = m_cp->get_text(ptr);
+ if (!t || !strcmp(type, "none"))
+ req->idAuthentication = 0;
+ else if (!strcmp(type, "anonymous"))
+ {
+ req->idAuthentication =
+ (Z_IdAuthentication *)
+ odr_malloc (odr, sizeof(*req->idAuthentication));
+ req->idAuthentication->which =
+ Z_IdAuthentication_anonymous;
+ req->idAuthentication->u.anonymous = odr_nullval();
+ }
+ else if (!strcmp(type, "open"))
+ {
+ req->idAuthentication =
+ (Z_IdAuthentication *)
+ odr_malloc (odr, sizeof(*req->idAuthentication));
+ req->idAuthentication->which =
+ Z_IdAuthentication_open;
+ req->idAuthentication->u.open = odr_strdup (odr, t);
+ }
+ else if (!strcmp(type, "idPass"))
+ {
+ char user[64], group[64], password[64];
+ *group = '\0';
+ *password = '\0';
+ *user = '\0';
+ sscanf(t, "%63[^:]:%63[^:]:%63s", user, group, password);
+
+ req->idAuthentication =
+ (Z_IdAuthentication *)
+ odr_malloc (odr, sizeof(*req->idAuthentication));
+ req->idAuthentication->which =
+ Z_IdAuthentication_idPass;
+ req->idAuthentication->u.idPass =
+ (Z_IdPass*) odr_malloc(odr, sizeof(Z_IdPass));
+ req->idAuthentication->u.idPass->userId =
+ *user ? odr_strdup(odr, user) : 0;
+ req->idAuthentication->u.idPass->groupId =
+ *group ? odr_strdup(odr, group) : 0;
+ req->idAuthentication->u.idPass->password =
+ *password ? odr_strdup(odr, password) : 0;
+ }
+ }
+#endif
+}