s4-witness: implement dcesrv_witness_GetInterfaceList()
authorGünther Deschner <gd@samba.org>
Fri, 4 Sep 2015 10:17:53 +0000 (05:17 -0500)
committerGünther Deschner <gd@samba.org>
Sun, 3 Feb 2019 09:26:18 +0000 (10:26 +0100)
Guenther

Signed-off-by: Günther Deschner <gd@samba.org>
source4/rpc_server/witness/dcesrv_witness.c

index 32f1e338f1b61e71c2ef63f2e9f8ce834b3677b2..0b111309ec73e3bf19ef942dafc7801dabd1b4c0 100644 (file)
@@ -44,7 +44,30 @@ static WERROR dcesrv_witness_GetInterfaceList(struct dcesrv_call_state *dce_call
                                              TALLOC_CTX *mem_ctx,
                                              struct witness_GetInterfaceList *r)
 {
-       DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+       struct witness_interfaceList *list;
+
+       if (dce_call->conn->auth_state.auth_level < DCERPC_AUTH_LEVEL_INTEGRITY) {
+               DCESRV_FAULT(DCERPC_FAULT_ACCESS_DENIED);
+       }
+
+       /* for the sake of providing brand new data from ctdb, repeat the ctdb query every time */
+
+       (void)srv_witness_startup_witness_interfaces_from_ctdb(state);
+
+       list = talloc_zero(mem_ctx, struct witness_interfaceList);
+       if (list == NULL) {
+               return WERR_NOT_ENOUGH_MEMORY;
+       }
+       list->num_interfaces = state->InterfaceList.num_interfaces;
+       list->interfaces = state->InterfaceList.interfaces;
+
+       *r->out.interface_list = list;
+
+       if (list->num_interfaces == 0) {
+               return WERR_NO_MORE_ITEMS;
+       }
+
+       return WERR_OK;
 }