librpc/rpc: add dcerpc_binding_get_auth_info()
authorStefan Metzmacher <metze@samba.org>
Fri, 24 Jan 2014 15:38:01 +0000 (16:38 +0100)
committerGünther Deschner <gd@samba.org>
Thu, 13 Feb 2014 10:54:14 +0000 (11:54 +0100)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
librpc/rpc/binding.c
librpc/rpc/rpc_common.h

index c2798e6c1ffc1113c58aa1c14334e3e17903d30b..588738645ea89fc5ccf9a41eea4630a2e20a0cbe 100644 (file)
@@ -428,6 +428,46 @@ _PUBLIC_ NTSTATUS dcerpc_parse_binding(TALLOC_CTX *mem_ctx, const char *_s, stru
        return NT_STATUS_OK;
 }
 
+_PUBLIC_ void dcerpc_binding_get_auth_info(const struct dcerpc_binding *b,
+                                          enum dcerpc_AuthType *_auth_type,
+                                          enum dcerpc_AuthLevel *_auth_level)
+{
+       enum dcerpc_AuthType auth_type;
+       enum dcerpc_AuthLevel auth_level;
+
+       if (b->flags & DCERPC_AUTH_SPNEGO) {
+               auth_type = DCERPC_AUTH_TYPE_SPNEGO;
+       } else if (b->flags & DCERPC_AUTH_KRB5) {
+               auth_type = DCERPC_AUTH_TYPE_KRB5;
+       } else if (b->flags & DCERPC_SCHANNEL) {
+               auth_type = DCERPC_AUTH_TYPE_SCHANNEL;
+       } else if (b->flags & DCERPC_AUTH_NTLM) {
+               auth_type = DCERPC_AUTH_TYPE_NTLMSSP;
+       } else {
+               auth_type = DCERPC_AUTH_TYPE_NONE;
+       }
+
+       if (b->flags & DCERPC_SEAL) {
+               auth_level = DCERPC_AUTH_LEVEL_PRIVACY;
+       } else if (b->flags & DCERPC_SIGN) {
+               auth_level = DCERPC_AUTH_LEVEL_INTEGRITY;
+       } else if (b->flags & DCERPC_CONNECT) {
+               auth_level = DCERPC_AUTH_LEVEL_CONNECT;
+       } else if (auth_type != DCERPC_AUTH_TYPE_NONE) {
+               auth_level = DCERPC_AUTH_LEVEL_CONNECT;
+       } else {
+               auth_level = DCERPC_AUTH_LEVEL_NONE;
+       }
+
+       if (_auth_type == NULL) {
+               *_auth_type = auth_type;
+       }
+
+       if (_auth_level == NULL) {
+               *_auth_level = auth_level;
+       }
+}
+
 _PUBLIC_ const char *dcerpc_binding_get_string_option(const struct dcerpc_binding *b,
                                                      const char *name)
 {
index a7a081c1b1ccd93ae746a6a594c08497dfd96cd0..7cab8a6792bb09ff645093402214292e5ffc988e 100644 (file)
@@ -133,6 +133,9 @@ NTSTATUS dcerpc_binding_from_tower(TALLOC_CTX *mem_ctx,
                                   struct dcerpc_binding **b_out);
 NTSTATUS dcerpc_parse_binding(TALLOC_CTX *mem_ctx, const char *s, struct dcerpc_binding **b_out);
 char *dcerpc_binding_string(TALLOC_CTX *mem_ctx, const struct dcerpc_binding *b);
+void dcerpc_binding_get_auth_info(const struct dcerpc_binding *b,
+                                 enum dcerpc_AuthType *_auth_type,
+                                 enum dcerpc_AuthLevel *_auth_level);
 const char *dcerpc_binding_get_string_option(const struct dcerpc_binding *b,
                                             const char *name);
 char *dcerpc_binding_copy_string_option(TALLOC_CTX *mem_ctx,