Fix the mess with ldb includes.
[metze/samba/wip.git] / source4 / ntvfs / ipc / rap_server.c
index 4875592ad69a0a008e19e94113e231af7a8a9d63..2bc07c3e7b31da91bb8b25c99edc981b0793178e 100644 (file)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "includes.h"
-#include "rap.h"
-#include "librpc/gen_ndr/ndr_srvsvc.h"
+#include "param/share.h"
+#include "libcli/rap/rap.h"
+#include "libcli/raw/interfaces.h"
+#include "librpc/gen_ndr/srvsvc.h"
+#include "rpc_server/common/common.h"
+#include "param/param.h"
+#include "ntvfs/ipc/ipc.h"
+#include "ntvfs/ipc/proto.h"
 
 /* At this moment these are just dummy functions, but you might get the
  * idea. */
 
-NTSTATUS rap_netshareenum(struct smbsrv_request *req,
+NTSTATUS rap_netshareenum(TALLOC_CTX *mem_ctx,
+                         struct tevent_context *event_ctx,
+                         struct loadparm_context *lp_ctx,
                          struct rap_NetShareEnum *r)
 {
-       int i;
+       NTSTATUS nterr;
+       const char **snames;
+       struct share_context *sctx;
+       struct share_config *scfg;
+       int i, j, count;
+
        r->out.status = 0;
-       r->out.available = dcesrv_common_get_count_of_shares(req, NULL);
-       r->out.info = talloc_array_p(req,
-                                    union rap_shareenum_info, r->out.available);
+       r->out.available = 0;
+       r->out.info = NULL;
+
+       nterr = share_get_context_by_name(mem_ctx, lp_share_backend(lp_ctx), event_ctx, lp_ctx, &sctx);
+       if (!NT_STATUS_IS_OK(nterr)) {
+               return nterr;
+       }
+
+       nterr = share_list_all(mem_ctx, sctx, &count, &snames);
+       if (!NT_STATUS_IS_OK(nterr)) {
+               return nterr;
+       }
+
+       r->out.available = count;
+       r->out.info = talloc_array(mem_ctx,
+                                  union rap_shareenum_info, r->out.available);
 
-       for (i=0;i<r->out.available;i++) {
-               strncpy(r->out.info[i].info1.name, 
-                       dcesrv_common_get_share_name(req, NULL, i),
+       for (i = 0, j = 0; i < r->out.available; i++) {
+               if (!NT_STATUS_IS_OK(share_get_config(mem_ctx, sctx, snames[i], &scfg))) {
+                       DEBUG(3, ("WARNING: Service [%s] disappeared after enumeration!\n", snames[i]));
+                       continue;
+               }
+               strncpy(r->out.info[j].info1.name,
+                       snames[i],
                        sizeof(r->out.info[0].info1.name));
                r->out.info[i].info1.pad = 0;
-               r->out.info[i].info1.type = dcesrv_common_get_share_type(req, NULL, i);
-               r->out.info[i].info1.comment = talloc_strdup(req, 
-                                                            dcesrv_common_get_share_comment(req, NULL, i));
+               r->out.info[i].info1.type = dcesrv_common_get_share_type(mem_ctx, NULL, scfg);
+               r->out.info[i].info1.comment = talloc_strdup(mem_ctx, share_string_option(scfg, SHARE_COMMENT, ""));
+               talloc_free(scfg);
+               j++;
        }
+       r->out.available = j;
        
        return NT_STATUS_OK;
 }
 
-NTSTATUS rap_netserverenum2(struct smbsrv_request *req,
-                                  struct rap_NetServerEnum2 *r)
+NTSTATUS rap_netserverenum2(TALLOC_CTX *mem_ctx,
+                           struct loadparm_context *lp_ctx,
+                           struct rap_NetServerEnum2 *r)
 {
        r->out.status = 0;
        r->out.available = 0;