The globals section now shows non-default variables (like the
authorHerb Lewis <herb@samba.org>
Fri, 8 May 1998 01:45:12 +0000 (01:45 +0000)
committerHerb Lewis <herb@samba.org>
Fri, 8 May 1998 01:45:12 +0000 (01:45 +0000)
view config section does) in the basic view. There is also a
reset button to undo all changes you have made (that haven't
been committed). In addition each field now has a "Set Default"
button. Multi-choice fields are now select fields instead of
a set of radio buttons.

On the status screen I added a "restart" option for stopping then
starting smbd and nmbd.
(This used to be commit a6edde4f004d3ba65d938acd3e6e094664a6c468)

source3/web/statuspage.c
source3/web/swat.c

index 5f89eee43a417f6e528bcbdba469582dcb01a1d5..9bcc99a6af1a91581d99a4688304b3a1013eeed7 100644 (file)
@@ -79,6 +79,12 @@ void status_page(void)
        int autorefresh=0;
        int refresh_interval=30;
 
+       if (cgi_variable("smbd_restart")) {
+               if (smbd_running())
+                       stop_smbd();
+               start_smbd();
+       }
+
        if (cgi_variable("smbd_start")) {
                start_smbd();
        }
@@ -87,6 +93,11 @@ void status_page(void)
                stop_smbd();
        }
 
+       if (cgi_variable("nmbd_restart")) {
+               if (nmbd_running())
+                       stop_nmbd();
+               start_nmbd();
+       }
        if (cgi_variable("nmbd_start")) {
                start_nmbd();
        }
@@ -161,16 +172,16 @@ void status_page(void)
 
        fflush(stdout);
        if (smbd_running()) {
-               printf("<tr><td>smbd:</td><td>running</td><td><input type=submit name=\"smbd_stop\" value=\"Stop smbd\"></td></tr>\n");
+               printf("<tr><td>smbd:</td><td>running</td><td><input type=submit name=\"smbd_stop\" value=\"Stop smbd\"></td><td><input type=submit name=\"smbd_restart\" value=\"Restart smbd\"></td></tr>\n");
        } else {
-               printf("<tr><td>smbd:</td><td>not running</td><td><input type=submit name=\"smbd_start\" value=\"Start smbd\"></td></tr>\n");
+               printf("<tr><td>smbd:</td><td>not running</td><td><input type=submit name=\"smbd_start\" value=\"Start smbd\"></td>><td><input type=submit name=\"smbd_restart\" value=\"Restart smbd\"></td></tr>\n");
        }
 
        fflush(stdout);
        if (nmbd_running()) {
-               printf("<tr><td>nmbd:</td><td>running</td><td><input type=submit name=\"nmbd_stop\" value=\"Stop nmbd\"></td></tr>\n");
+               printf("<tr><td>nmbd:</td><td>running</td><td><input type=submit name=\"nmbd_stop\" value=\"Stop nmbd\"></td><td><input type=submit name=\"nmbd_restart\" value=\"Restart nmbd\"></td></tr>\n");
        } else {
-               printf("<tr><td>nmbd:</td><td>not running</td><td><input type=submit name=\"nmbd_start\" value=\"Start nmbd\"></td></tr>\n");
+               printf("<tr><td>nmbd:</td><td>not running</td><td><input type=submit name=\"nmbd_start\" value=\"Start nmbd\"></td><td><input type=submit name=\"nmbd_restart\" value=\"Restart nmbd\"></td></tr>\n");
        }
 
        printf("</table>\n");
index 53131461c9cf9ca9d8e0254da4d2ca5ec14cc359..e95ac5abd45eeb15d0375314eb4c4beadf2f7d94 100644 (file)
@@ -40,6 +40,42 @@ connection_struct Connections[MAX_CONNECTIONS];
 files_struct Files[MAX_OPEN_FILES];
 struct current_user current_user;
 
+static int enum_index(int value, struct enum_list *enumlist)
+{
+int i;
+       for (i=0;enumlist[i].name;i++)
+               if (value == enumlist[i].value) break;
+       return(i);
+}
+
+static char *fix_backslash(char *string)
+{
+static char newstring[1024];
+char *p = newstring;
+
+       *p = '\0';
+        while (*string) {
+                if (*string == '\\') {*p++ = '\\';*p++ = '\\';}
+                else *p++ = *string;
+                ++string;
+                *p = '\0';
+        }
+       return newstring;
+}
+
+static char *make_parm_name(char *label)
+{
+static char parmname[1024];
+char *p = parmname;
+
+       while (*label) {
+               if (*label == ' ') *p++ = '_';
+               else *p++ = *label;
+               ++label;
+               *p = '\0';
+       }
+       return parmname;
+}
 
 /* start the page with standard stuff */
 static void print_header(void)
@@ -97,45 +133,64 @@ static void show_parameter(int snum, struct parm_struct *parm)
        switch (parm->type) {
        case P_CHAR:
                printf("<input type=text size=2 name=\"parm_%s\" value=\"%c\">",
-                      parm->label, *(char *)ptr);
+                      make_parm_name(parm->label), *(char *)ptr);
+               printf("<input type=button value=\"Set Default\" onClick=\"swatform.parm_%s.value=\'%c\'\">",
+                       make_parm_name(parm->label),(char)(parm->def.cvalue));
                break;
 
        case P_STRING:
        case P_USTRING:
                printf("<input type=text size=40 name=\"parm_%s\" value=\"%s\">",
-                      parm->label, *(char **)ptr);
+                      make_parm_name(parm->label), *(char **)ptr);
+               printf("<input type=button value=\"Set Default\" onClick=\"swatform.parm_%s.value=\'%s\'\">",
+                       make_parm_name(parm->label),fix_backslash((char *)(parm->def.svalue)));
                break;
 
        case P_GSTRING:
        case P_UGSTRING:
                printf("<input type=text size=40 name=\"parm_%s\" value=\"%s\">",
-                      parm->label, (char *)ptr);
+                      make_parm_name(parm->label), (char *)ptr);
+               printf("<input type=button value=\"Set Default\" onClick=\"swatform.parm_%s.value=\'%s\'\">",
+                       make_parm_name(parm->label),fix_backslash((char *)(parm->def.svalue)));
                break;
 
        case P_BOOL:
-               printf("<input type=radio name=\"parm_%s\" value=Yes %s>yes&nbsp;&nbsp;", parm->label, (*(BOOL *)ptr)?"CHECKED":"");
-               printf("<input type=radio name=\"parm_%s\" value=No %s>no", parm->label, (*(BOOL *)ptr)?"":"CHECKED");
+               printf("<select name=\"parm_%s\">",make_parm_name(parm->label)); 
+               printf("<option %s>Yes", (*(BOOL *)ptr)?"selected":"");
+               printf("<option %s>No", (*(BOOL *)ptr)?"":"selected");
+               printf("</select>");
+               printf("<input type=button value=\"Set Default\" onClick=\"swatform.parm_%s.selectedIndex=\'%d\'\">",
+                       make_parm_name(parm->label),(BOOL)(parm->def.bvalue)?0:1);
                break;
 
        case P_BOOLREV:
-               printf("<input type=radio name=\"parm_%s\" value=Yes %s>yes&nbsp;&nbsp;", parm->label, (*(BOOL *)ptr)?"":"CHECKED");
-               printf("<input type=radio name=\"parm_%s\" value=No %s>no", parm->label, (*(BOOL *)ptr)?"CHECKED":"");
+               printf("<select name=\"parm_%s\">",make_parm_name(parm->label)); 
+               printf("<option %s>Yes", (*(BOOL *)ptr)?"":"selected");
+               printf("<option %s>No", (*(BOOL *)ptr)?"selected":"");
+               printf("</select>");
+               printf("<input type=button value=\"Set Default\" onClick=\"swatform.parm_%s.selectedIndex=\'%d\'\">",
+                       make_parm_name(parm->label),(BOOL)(parm->def.bvalue)?1:0);
                break;
 
        case P_INTEGER:
-               printf("<input type=text size=8 name=\"parm_%s\" value=%d>", parm->label, *(int *)ptr);
+               printf("<input type=text size=8 name=\"parm_%s\" value=%d>", make_parm_name(parm->label), *(int *)ptr);
+               printf("<input type=button value=\"Set Default\" onClick=\"swatform.parm_%s.value=\'%d\'\">",
+                       make_parm_name(parm->label),(int)(parm->def.ivalue));
                break;
 
        case P_OCTAL:
-               printf("<input type=text size=8 name=\"parm_%s\" value=0%o>", parm->label, *(int *)ptr);
+               printf("<input type=text size=8 name=\"parm_%s\" value=0%o>", make_parm_name(parm->label), *(int *)ptr);
+               printf("<input type=button value=\"Set Default\" onClick=\"swatform.parm_%s.value=\'0%o\'\">",
+                       make_parm_name(parm->label),(int)(parm->def.ivalue));
                break;
 
        case P_ENUM:
+               printf("<select name=\"parm_%s\">",make_parm_name(parm->label)); 
                for (i=0;parm->enum_list[i].name;i++)
-                       printf("<input type=radio name=\"parm_%s\" value=%s %s>%s&nbsp;&nbsp;", 
-                              parm->label, parm->enum_list[i].name, 
-                              (*(int *)ptr)==parm->enum_list[i].value?"CHECKED":"", 
-                              parm->enum_list[i].name);
+                       printf("<option %s>%s",(*(int *)ptr)==parm->enum_list[i].value?"selected":"",parm->enum_list[i].name);
+               printf("</select>");
+               printf("<input type=button value=\"Set Default\" onClick=\"swatform.parm_%s.selectedIndex=\'%d\'\">",
+                       make_parm_name(parm->label),enum_index((int)(parm->def.ivalue),parm->enum_list));
                break;
        case P_SEP:
                break;
@@ -160,7 +215,42 @@ static void show_parameters(int snum, int allparameters, int advanced, int print
                }
                if (parm->flags & FLAG_HIDE) continue;
                if (!advanced) {
-                       if (!printers && !(parm->flags & FLAG_BASIC)) continue;
+                       if (!printers && !(parm->flags & FLAG_BASIC)) {
+                               void *ptr = parm->ptr;
+
+                               switch (parm->type) {
+                               case P_CHAR:
+                                       if (*(char *)ptr == (char)(parm->def.cvalue)) continue;
+                                       break;
+
+                               case P_STRING:
+                               case P_USTRING:
+                                       if (!strcmp(*(char **)ptr,(char *)(parm->def.svalue))) continue;
+                                       break;
+
+                               case P_GSTRING:
+                               case P_UGSTRING:
+                                       if (!strcmp((char *)ptr,(char *)(parm->def.svalue))) continue;
+                                       break;
+
+                               case P_BOOL:
+                               case P_BOOLREV:
+                                       if (*(BOOL *)ptr == (BOOL)(parm->def.bvalue)) continue;
+                                       break;
+
+                               case P_INTEGER:
+                               case P_OCTAL:
+                                       if (*(int *)ptr == (int)(parm->def.ivalue)) continue;
+                                       break;
+
+
+                               case P_ENUM:
+                                       if (*(int *)ptr == (int)(parm->def.ivalue)) continue;
+                                       break;
+                               case P_SEP:
+                                       continue;
+                               }
+                       }
                        if (printers && !(parm->flags & FLAG_PRINT)) continue;
                }
                if (heading && heading != last_heading) {
@@ -239,7 +329,7 @@ static void commit_parameters(int snum)
        char *v;
 
        while ((parm = lp_next_parameter(snum, &i, 1))) {
-               sprintf(label, "parm_%s", parm->label);
+               sprintf(label, "parm_%s", make_parm_name(parm->label));
                if ((v = cgi_variable(label))) {
                        if (parm->flags & FLAG_HIDE) continue;
                        commit_parameter(snum, parm, v); 
@@ -330,9 +420,10 @@ static void globals_page(void)
                save_reload();
        }
 
-       printf("<FORM method=post>\n");
+       printf("<FORM name=\"swatform\" method=post>\n");
 
        printf("<input type=submit name=\"Commit\" value=\"Commit Changes\">\n");
+       printf("<input type=reset name=\"Reset Values\" value=\"Reset Values\">\n");
        if (advanced == 0) {
                printf("<input type=submit name=\"Advanced\" value=\"Advanced View\">\n");
        } else {
@@ -348,7 +439,7 @@ static void globals_page(void)
                printf("<input type=hidden name=\"Advanced\" value=1>\n");
        }
 
-       printf("</form>\n");
+       printf("</FORM>\n");
 }
 
 /* display a shares editing page  */
@@ -386,7 +477,7 @@ static void shares_page(void)
                snum = lp_servicenumber(share);
        }
 
-       printf("<FORM method=post>\n");
+       printf("<FORM name=\"swatform\" method=post>\n");
 
        printf("<table>\n");
        printf("<tr><td><input type=submit name=selectshare value=\"Choose Share\"></td>\n");
@@ -470,7 +561,7 @@ static void printers_page(void)
                snum = lp_servicenumber(share);
        }
 
-       printf("<FORM method=post>\n");
+       printf("<FORM name=\"swatform\" method=post>\n");
 
        printf("<table>\n");
        printf("<tr><td><input type=submit name=selectshare value=\"Choose Printer\"></td>\n");