Author: jelmer
Date: 2007-11-21 14:49:27 +0000 (Wed, 21 Nov 2007)
New Revision: 26095

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=26095

Log:
Add function for import a generic configuration file in a loadparm context.
Modified:
   branches/SAMBA_4_0/
   branches/SAMBA_4_0/source/param/generic.c
   branches/SAMBA_4_0/source/param/loadparm.c
   branches/SAMBA_4_0/source/param/param.h


Changeset:

Property changes on: branches/SAMBA_4_0
___________________________________________________________________
Name: bzr:revision-info
...skipped...
Name: bzr:file-ids
...skipped...
Name: bzr:revision-id:v3-trunk0
...skipped...

Modified: branches/SAMBA_4_0/source/param/generic.c
===================================================================
--- branches/SAMBA_4_0/source/param/generic.c   2007-11-21 13:47:39 UTC (rev 
26094)
+++ branches/SAMBA_4_0/source/param/generic.c   2007-11-21 14:49:27 UTC (rev 
26095)
@@ -64,6 +64,9 @@
        struct param_section *section;
        struct param_opt *p;
 
+       SMB_ASSERT(section_name != NULL);
+       SMB_ASSERT(name != NULL);
+
        section = param_get_section(ctx, section_name);
 
        if (section == NULL) {
@@ -72,7 +75,7 @@
                        return NULL;
 
                section->name = talloc_strdup(section, section_name);
-               DLIST_ADD(ctx->sections, section);
+               DLIST_ADD_END(ctx->sections, section, struct param_section *);
        }
 
        p = param_section_get(section, name);
@@ -82,7 +85,7 @@
                        return NULL;
 
                p->key = talloc_strdup(p, name);
-               DLIST_ADD(section->parameters, p);
+               DLIST_ADD_END(section->parameters, p, struct param_opt *);
        }
        
        return p;
@@ -185,7 +188,7 @@
 
                section->name = talloc_strdup(section, name);
 
-               DLIST_ADD(ctx->sections, section);
+               DLIST_ADD_END(ctx->sections, section, struct param_section *);
        }
 
        /* Make sure this section is on top of the list for param_pfunc */
@@ -235,6 +238,32 @@
        return 0;
 }
 
+int param_use(struct loadparm_context *lp_ctx, struct param_context *ctx)
+{
+       struct param_section *section;
+
+       for (section = ctx->sections; section; section = section->next) {
+               struct param_opt *param;
+               bool isglobal = strcmp(section->name, "global") == 0;
+               for (param = section->parameters; param; param = param->next) {
+                       if (isglobal)
+                               lp_do_global_parameter(lp_ctx, param->key,
+                                                      param->value);
+                       else {
+                               struct loadparm_service *service = 
+                                                       lp_service(lp_ctx, 
section->name);
+                               if (service == NULL)
+                                       service = lp_add_service(lp_ctx, 
&sDefault, section->name);
+                               lp_do_service_parameter(lp_ctx, 
+                                                       service,
+                                                       param->key,
+                                                       param->value);
+                       }
+               }
+       }
+       return 0;
+}
+
 int param_write(struct param_context *ctx, const char *fn)
 {
        int file;

Modified: branches/SAMBA_4_0/source/param/loadparm.c
===================================================================
--- branches/SAMBA_4_0/source/param/loadparm.c  2007-11-21 13:47:39 UTC (rev 
26094)
+++ branches/SAMBA_4_0/source/param/loadparm.c  2007-11-21 14:49:27 UTC (rev 
26095)
@@ -222,7 +222,7 @@
 
 
 /* This is a default service used to prime a services structure */
-static struct loadparm_service sDefault = {
+struct loadparm_service sDefault = {
        .szService = NULL,
        .szPath = NULL,
        .szCopy = NULL,
@@ -1031,7 +1031,7 @@
  service. 
 ***************************************************************************/
 
-static struct loadparm_service *add_a_service(struct loadparm_context *lp_ctx, 
+struct loadparm_service *lp_add_service(struct loadparm_context *lp_ctx, 
                                     const struct loadparm_service *pservice, 
                                     const char *name)
 {
@@ -1073,7 +1073,7 @@
                                num_to_alloc);
                                           
                if (!tsp) {
-                       DEBUG(0,("add_a_service: failed to enlarge 
ServicePtrs!\n"));
+                       DEBUG(0,("lp_add_service: failed to enlarge 
ServicePtrs!\n"));
                        return NULL;
                }
                else {
@@ -1086,7 +1086,7 @@
 
        lp_ctx->ServicePtrs[i] = init_service(talloc_autofree_context());
        if (lp_ctx->ServicePtrs[i] == NULL) {
-               DEBUG(0,("add_a_service: out of memory!\n"));
+               DEBUG(0,("lp_add_service: out of memory!\n"));
                return NULL;
        }
        copy_service(lp_ctx->ServicePtrs[i], &tservice, NULL);
@@ -1107,7 +1107,7 @@
 {
        struct loadparm_service *service;
 
-       service = add_a_service(lp_ctx, default_service, pszHomename);
+       service = lp_add_service(lp_ctx, default_service, pszHomename);
 
        if (service == NULL)
                return false;
@@ -1132,24 +1132,13 @@
 }
 
 /***************************************************************************
- Add a new service, based on an old one.
-***************************************************************************/
-
-struct loadparm_service *lp_add_service(struct loadparm_context *lp_ctx, 
-                              const char *pszService, 
-                              struct loadparm_service *default_service)
-{
-       return add_a_service(lp_ctx, default_service, pszService);
-}
-
-/***************************************************************************
  Add the IPC service.
 ***************************************************************************/
 
 static bool lp_add_hidden(struct loadparm_context *lp_ctx, const char *name, 
                          const char *fstype)
 {
-       struct loadparm_service *service = add_a_service(lp_ctx, &sDefault, 
name);
+       struct loadparm_service *service = lp_add_service(lp_ctx, &sDefault, 
name);
 
        if (service == NULL)
                return false;
@@ -1185,7 +1174,7 @@
 {
        const char *comment = "From Printcap";
        struct loadparm_service *service;
-       service = add_a_service(lp_ctx, default_service, pszPrintername);
+       service = lp_add_service(lp_ctx, default_service, pszPrintername);
 
        if (service == NULL)
                return false;
@@ -2024,7 +2013,7 @@
                /* issued by the post-processing of a previous section. */
                DEBUG(2, ("Processing section \"[%s]\"\n", pszSectionName));
 
-               if ((lp_ctx->currentService = add_a_service(lp_ctx, &sDefault, 
+               if ((lp_ctx->currentService = lp_add_service(lp_ctx, &sDefault, 
                                                             pszSectionName))
                    == NULL) {
                        DEBUG(0, ("Failed to add a new service\n"));

Modified: branches/SAMBA_4_0/source/param/param.h
===================================================================
--- branches/SAMBA_4_0/source/param/param.h     2007-11-21 13:47:39 UTC (rev 
26094)
+++ branches/SAMBA_4_0/source/param/param.h     2007-11-21 14:49:27 UTC (rev 
26095)
@@ -63,5 +63,6 @@
 #include "param/proto.h"
 
 extern struct loadparm_context *global_loadparm;
+extern struct loadparm_service sDefault;
 
 #endif /* _PARAM_H */

Reply via email to