summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/web/swat.c56
1 files changed, 43 insertions, 13 deletions
diff --git a/source3/web/swat.c b/source3/web/swat.c
index fc33a15a0e..323dfc5adf 100644
--- a/source3/web/swat.c
+++ b/source3/web/swat.c
@@ -26,8 +26,7 @@
#include "includes.h"
#include "smb.h"
-#define GLOBALS_SNUM -2
-#define DEFAULTS_SNUM -1
+#define GLOBALS_SNUM -1
static pstring servicesf = CONFIGFILE;
@@ -84,7 +83,7 @@ static void show_parameter(int snum, struct parm_struct *parm)
int i;
void *ptr = parm->ptr;
- if (parm->class == P_LOCAL) {
+ if (parm->class == P_LOCAL && snum >= 0) {
ptr = lp_local_ptr(snum, ptr);
}
@@ -134,7 +133,8 @@ static void show_parameter(int snum, struct parm_struct *parm)
(*(int *)ptr)==parm->enum_list[i].value?"CHECKED":"",
parm->enum_list[i].name);
break;
-
+ case P_SEP:
+ break;
}
printf("</td></tr>\n");
}
@@ -144,18 +144,27 @@ static void show_parameters(int snum, int allparameters, int advanced, int print
{
int i = 0;
struct parm_struct *parm;
-
- printf("<table>\n");
+ char *heading = NULL;
+ char *last_heading = NULL;
while ((parm = lp_next_parameter(snum, &i, allparameters))) {
+ if (snum < 0 && parm->class == P_LOCAL && !(parm->flags & FLAG_GLOBAL))
+ continue;
+ if (parm->class == P_SEPARATOR) {
+ heading = parm->label;
+ continue;
+ }
if (parm->flags & FLAG_HIDE) continue;
if (!advanced) {
if (!printers && !(parm->flags & FLAG_BASIC)) continue;
if (printers && !(parm->flags & FLAG_PRINT)) continue;
}
+ if (heading && heading != last_heading) {
+ printf("<tr><td></td></tr><tr><td><b><u>%s</u></b></td></tr>\n", heading);
+ last_heading = heading;
+ }
show_parameter(snum, parm);
}
- printf("</table>\n");
}
@@ -171,6 +180,7 @@ static int save_reload(void)
}
fprintf(f, "# Samba config file created using SWAT\n");
+ fprintf(f, "# Date: %s\n\n", timestring());
lp_dump(f);
@@ -178,7 +188,7 @@ static int save_reload(void)
lp_killunused(NULL);
- if (!lp_load(servicesf,False)) {
+ if (!lp_load(servicesf,False,False,False)) {
printf("Can't reload %s\n", servicesf);
return 0;
}
@@ -202,15 +212,13 @@ static void commit_parameters(int snum)
lp_do_parameter(snum, parm->label, v);
}
}
-
- save_reload();
}
/* load the smb.conf file into loadparm. */
static void load_config(void)
{
- if (!lp_load(servicesf,False)) {
+ if (!lp_load(servicesf,False,True,False)) {
printf("<b>Can't load %s - using defaults</b><p>\n",
servicesf);
}
@@ -237,6 +245,7 @@ static void show_main_buttons(void)
image_link("Shares", "shares", "images/shares.gif", 50, 50);
image_link("Printers", "printers", "images/printers.gif", 50, 50);
image_link("Status", "status", "images/status.gif", 50, 50);
+ image_link("View Config", "viewconfig", "images/viewconfig.gif", 50, 50);
printf("<HR>\n");
}
@@ -248,6 +257,16 @@ static void welcome_page(void)
}
+/* display the current smb.conf */
+static void viewconfig_page(void)
+{
+ printf("<H2>Current Config</H2>\n");
+ printf("<pre>");
+ include_html(servicesf);
+ printf("</pre>");
+}
+
+
/* display a globals editing page */
static void globals_page(void)
{
@@ -260,6 +279,7 @@ static void globals_page(void)
if (cgi_variable("Commit")) {
commit_parameters(GLOBALS_SNUM);
+ save_reload();
}
printf("<FORM method=post>\n");
@@ -272,7 +292,9 @@ static void globals_page(void)
}
printf("<p>\n");
+ printf("<table>\n");
show_parameters(GLOBALS_SNUM, 1, advanced, 0);
+ printf("</table>\n");
if (advanced) {
printf("<input type=hidden name=\"Advanced\" value=1>\n");
@@ -300,6 +322,7 @@ static void shares_page(void)
if (cgi_variable("Commit") && snum >= 0) {
commit_parameters(snum);
+ save_reload();
}
if (cgi_variable("Delete") && snum >= 0) {
@@ -310,7 +333,7 @@ static void shares_page(void)
}
if (cgi_variable("createshare") && (share=cgi_variable("newshare"))) {
- lp_copy_service(DEFAULTS_SNUM, share);
+ lp_copy_service(GLOBALS_SNUM, share);
save_reload();
snum = lp_servicenumber(share);
}
@@ -349,7 +372,9 @@ static void shares_page(void)
}
if (snum >= 0) {
+ printf("<table>\n");
show_parameters(snum, 1, advanced, 0);
+ printf("</table>\n");
}
if (advanced) {
@@ -379,6 +404,7 @@ static void printers_page(void)
if (cgi_variable("Commit") && snum >= 0) {
commit_parameters(snum);
+ save_reload();
}
if (cgi_variable("Delete") && snum >= 0) {
@@ -389,7 +415,7 @@ static void printers_page(void)
}
if (cgi_variable("createshare") && (share=cgi_variable("newshare"))) {
- lp_copy_service(DEFAULTS_SNUM, share);
+ lp_copy_service(GLOBALS_SNUM, share);
snum = lp_servicenumber(share);
lp_do_parameter(snum, "print ok", "Yes");
save_reload();
@@ -430,7 +456,9 @@ static void printers_page(void)
}
if (snum >= 0) {
+ printf("<table>\n");
show_parameters(snum, 1, advanced, 1);
+ printf("</table>\n");
}
if (advanced) {
@@ -588,6 +616,8 @@ int main(int argc, char *argv[])
printers_page();
} else if (strcmp(page,"status")==0) {
status_page();
+ } else if (strcmp(page,"viewconfig")==0) {
+ viewconfig_page();
} else {
welcome_page();
}