auth/gensec: add gensec_security_by_auth_type()
authorStefan Metzmacher <metze@samba.org>
Sat, 3 Aug 2013 09:43:58 +0000 (11:43 +0200)
committerStefan Metzmacher <metze@samba.org>
Sat, 10 Aug 2013 07:18:56 +0000 (09:18 +0200)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
auth/gensec/gensec.h
auth/gensec/gensec_start.c

index 396a16dc247b92df45ffde9ee9cfad7168b82de3..c080861664d244b7a253d574a6dd74f805f149a1 100644 (file)
@@ -268,6 +268,9 @@ const struct gensec_security_ops *gensec_security_by_oid(struct gensec_security
                                                         const char *oid_string);
 const struct gensec_security_ops *gensec_security_by_sasl_name(struct gensec_security *gensec_security,
                                                               const char *sasl_name);
+const struct gensec_security_ops *gensec_security_by_auth_type(
+                               struct gensec_security *gensec_security,
+                               uint32_t auth_type);
 struct gensec_security_ops **gensec_security_mechs(struct gensec_security *gensec_security,
                                                   TALLOC_CTX *mem_ctx);
 const struct gensec_security_ops_wrapper *gensec_security_by_oid_list(
index e46f0ee85107f51ab80fa29c509e7c9a1d3d84b0..c2cfa1c3759fe90eb45c65a391966dbb5ff75a79 100644 (file)
@@ -246,6 +246,32 @@ _PUBLIC_ const struct gensec_security_ops *gensec_security_by_sasl_name(
        return NULL;
 }
 
+_PUBLIC_ const struct gensec_security_ops *gensec_security_by_auth_type(
+                               struct gensec_security *gensec_security,
+                               uint32_t auth_type)
+{
+       int i;
+       struct gensec_security_ops **backends;
+       const struct gensec_security_ops *backend;
+       TALLOC_CTX *mem_ctx = talloc_new(gensec_security);
+       if (!mem_ctx) {
+               return NULL;
+       }
+       backends = gensec_security_mechs(gensec_security, mem_ctx);
+       for (i=0; backends && backends[i]; i++) {
+               if (!gensec_security_ops_enabled(backends[i], gensec_security))
+                   continue;
+               if (backends[i]->auth_type == auth_type) {
+                       backend = backends[i];
+                       talloc_free(mem_ctx);
+                       return backend;
+               }
+       }
+       talloc_free(mem_ctx);
+
+       return NULL;
+}
+
 static const struct gensec_security_ops *gensec_security_by_name(struct gensec_security *gensec_security,
                                                                 const char *name)
 {