s4-param finish services hooks for s4->s3 loadparm context
authorAndrew Bartlett <abartlet@samba.org>
Tue, 12 Jul 2011 06:03:11 +0000 (16:03 +1000)
committerAndrew Bartlett <abartlet@samba.org>
Thu, 14 Jul 2011 05:06:45 +0000 (15:06 +1000)
source3/include/proto.h
source3/param/loadparm.c
source3/param/loadparm_ctx.c
source4/param/loadparm.c
source4/script/mks3param.pl

index 5d15e4e77ae6d11128cfc60c88743df12ec3bb41..c3e680d8b6b8ee7eff9639b3bd85025e8ca3bbd5 100644 (file)
@@ -1577,6 +1577,8 @@ const char *lp_ldap_idmap_suffix(void);
 struct parm_struct;
 /* Return a pointer to a service by name.  */
 struct loadparm_service *lp_service(const char *pszServiceName);
+struct loadparm_service *lp_servicebynum(int snum);
+struct loadparm_service *lp_default_loadparm_service(void);
 void *lp_parm_ptr(struct loadparm_service *service, struct parm_struct *parm);
 void *lp_local_ptr_by_snum(int snum, struct parm_struct *parm);
 bool lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue);
index 79f1b236cadc7ea85e9508fef0d79d170af24f07..1258709856d648d7d63fd9d93a0f08261a523042 100644 (file)
@@ -6419,6 +6419,19 @@ struct loadparm_service *lp_service(const char *pszServiceName)
        return ServicePtrs[iService];
 }
 
+struct loadparm_service *lp_servicebynum(int snum)
+{
+       if (snum = -1 || !LP_SNUM_OK(snum)) {
+               return NULL;
+       }
+       return ServicePtrs[snum];
+}
+
+struct loadparm_service *lp_default_loadparm_service()
+{
+       return &sDefault;
+}
+
 
 /***************************************************************************
  Copy a service structure to another.
index 7362279f9b42cd12d7dbcad2e31b5ffd8daec97e..7c59ca709a3b6d9a376953dee233a14c231a4a33 100644 (file)
@@ -30,6 +30,10 @@ static const struct loadparm_s3_context s3_fns =
        .get_parm_struct = lp_get_parameter,
        .get_parm_ptr = lp_parm_ptr,
        .get_service = lp_service,
+       .get_servicebynum = lp_servicebynum,
+       .get_default_loadparm_service = lp_default_loadparm_service,
+       .get_numservices = lp_numservices,
+       .set_cmdline = lp_set_cmdline,
 
        .server_role = lp_server_role,
 
index 18e2df1c70c43afa1cbe5ce960b196bfc91616e7..b18f8fc4298beb2a2538bf559f9568cb8cb4df80 100644 (file)
@@ -1311,6 +1311,9 @@ struct loadparm_context {
 
 struct loadparm_service *lpcfg_default_service(struct loadparm_context *lp_ctx)
 {
+       if (lp_ctx->s3_fns) {
+               return lp_ctx->s3_fns->get_default_loadparm_service();
+       }
        return lp_ctx->sDefault;
 }
 
@@ -1428,6 +1431,9 @@ static struct loadparm_context *global_loadparm_context;
         return lp_ctx->globals->var_name;                              \
  }
 
+/* Local parameters don't need the ->s3_fns because the struct
+ * loadparm_service is shared and lpcfg_service() checks the ->s3_fns
+ * hook */
 #define FN_LOCAL_STRING(fn_name,val) \
  _PUBLIC_ const char *lpcfg_ ## fn_name(struct loadparm_service *service, \
                                        struct loadparm_service *sDefault) { \
@@ -2079,6 +2085,10 @@ static struct loadparm_service *getservicebyname(struct loadparm_context *lp_ctx
 {
        int iService;
 
+       if (lp_ctx->s3_fns) {
+               return lp_ctx->s3_fns->get_service(pszServiceName);
+       }
+
        for (iService = lp_ctx->iNumServices - 1; iService >= 0; iService--)
                if (lp_ctx->services[iService] != NULL &&
                    strwicmp(lp_ctx->services[iService]->szService, pszServiceName) == 0) {
@@ -2724,9 +2734,15 @@ bool lpcfg_do_global_parameter_var(struct loadparm_context *lp_ctx,
 bool lpcfg_set_cmdline(struct loadparm_context *lp_ctx, const char *pszParmName,
                       const char *pszParmValue)
 {
-       int parmnum = map_parameter(pszParmName);
+       int parmnum;
        int i;
 
+       if (lp_ctx->s3_fns) {
+               return lp_ctx->s3_fns->set_cmdline(pszParmName, pszParmValue);
+       }
+
+       parmnum = map_parameter(pszParmName);
+
        while (isspace((unsigned char)*pszParmValue)) pszParmValue++;
 
 
@@ -3544,6 +3560,10 @@ bool lpcfg_load(struct loadparm_context *lp_ctx, const char *filename)
 
 int lpcfg_numservices(struct loadparm_context *lp_ctx)
 {
+       if (lp_ctx->s3_fns) {
+               return lp_ctx->s3_fns->get_numservices();
+       }
+
        return lp_ctx->iNumServices;
 }
 
@@ -3579,8 +3599,12 @@ void lpcfg_dump_one(FILE *f, bool show_defaults, struct loadparm_service *servic
 }
 
 struct loadparm_service *lpcfg_servicebynum(struct loadparm_context *lp_ctx,
-                                        int snum)
+                                           int snum)
 {
+       if (lp_ctx->s3_fns) {
+               return lp_ctx->s3_fns->get_servicebynum(snum);
+       }
+
        return lp_ctx->services[snum];
 }
 
index dee3da192f0514682052759a0d0d1d3fe81ac6a1..761cd6980f20add8b17bd2aa8aab7e39f30c6eaa 100644 (file)
@@ -89,6 +89,10 @@ sub print_header($$)
        $file->("\tstruct parm_struct * (*get_parm_struct)(const char *param_name);\n");
        $file->("\tvoid * (*get_parm_ptr)(struct loadparm_service *service, struct parm_struct *parm);\n");
        $file->("\tstruct loadparm_service * (*get_service)(const char *service_name);\n");
+       $file->("\tstruct loadparm_service * (*get_default_loadparm_service)(void);\n");
+       $file->("\tstruct loadparm_service * (*get_servicebynum)(int snum);\n");
+       $file->("\tint (*get_numservices)(void);\n");
+       $file->("\tbool (*set_cmdline)(const char *pszParmName, const char *pszParmValue);\n");
 }
 
 sub print_footer($$)