s3/rpc_server: add support for mgmt_inq_princ_name
authorDavid Disseldorp <ddiss@samba.org>
Thu, 25 Apr 2013 11:27:47 +0000 (13:27 +0200)
committerDavid Disseldorp <ddiss@samba.org>
Wed, 8 May 2013 10:21:36 +0000 (12:21 +0200)
Return the servers service principle name.

librpc/idl/mgmt.idl
source3/rpc_server/mgmt/srv_mgmt_nt.c

index 17c8cc4bde0de2148fef3b15f7f08c7726742be9..d64e0c026e0a434e7a864f743ca95ba721873bfe 100644 (file)
@@ -9,9 +9,18 @@ import "misc.idl";
   version(1.0),
   pointer_default(unique),
   helpstring("DCE/RPC Remote Management")
-] 
+]
 interface mgmt
 {
+       /* MS-RPCE 2.2.1.1.7 Security Providers */
+       const uint32 MGMT_AUTHN_NONE = 0x00;
+       const uint32 MGMT_AUTHN_GSS_NEG = 0x09;
+       const uint32 MGMT_AUTHN_WINNT = 0x0A;
+       const uint32 MGMT_AUTHN_GSS_SCHANNEL = 0x0E;
+       const uint32 MGMT_AUTHN_GSS_KERBEROS = 0x10;
+       const uint32 MGMT_AUTHN_NETLOGON = 0x44;
+       const uint32 MGMT_AUTHN_DEFAULT = 0xFF;
+
        typedef struct {
                ndr_syntax_id *id;
        } ndr_syntax_id_p;
index c0a4122a6af5b4e96f1702f24d0220e1e4938fa2..cf4563e5942f68b5cc2e234b139f61dd6fc524a7 100644 (file)
@@ -65,6 +65,22 @@ WERROR _mgmt_stop_server_listening(struct pipes_struct *p,
 WERROR _mgmt_inq_princ_name(struct pipes_struct *p,
                            struct mgmt_inq_princ_name *r)
 {
-       p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
-       return WERR_NOT_SUPPORTED;
+       int ret;
+
+       if (r->in.authn_proto != MGMT_AUTHN_GSS_NEG) {
+               DEBUG(0, ("unsupported authn_proto %u\n",
+                         (unsigned)r->in.authn_proto));
+               return WERR_INVALID_PARAM;
+       }
+
+       ret = snprintf(r->out.princ_name, r->in.princ_name_size, "%s$@%s",
+                      lp_netbios_name(), lp_realm());
+       if ((ret < 0) || (ret >= r->in.princ_name_size)) {
+               return WERR_BUFFER_OVERFLOW;
+       }
+
+       DEBUG(6, ("returning principle name: %s\n",
+                 r->out.princ_name));
+
+       return WERR_OK;
 }