r14255: Revert r14204 which was horribly broken.
authorJames Peach <jpeach@samba.org>
Sun, 12 Mar 2006 22:27:01 +0000 (22:27 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:15:21 +0000 (11:15 -0500)
(This used to be commit 950ed28f9f3f57dc449bd3bd6e7be7acb1e3d26d)

source3/include/smb.h
source3/param/loadparm.c
source3/web/swat.c

index cc85fa1f76b7084b64071beb4db10f43b5c14363..59948edf40f741e7893fd2fe666ab0d894804559 100644 (file)
@@ -758,7 +758,7 @@ struct connections_data {
 /* the following are used by loadparm for option lists */
 typedef enum {
        P_BOOL,P_BOOLREV,P_CHAR,P_INTEGER,P_OCTAL,P_LIST,
-       P_STRING,P_USTRING,P_ENUM,P_SEP
+       P_STRING,P_USTRING,P_GSTRING,P_UGSTRING,P_ENUM,P_SEP
 } parm_type;
 
 typedef enum {
index e285bd6087117370a0043a9fe568f5cdfbfdc5b3..97e876a54212e4fb52cbf35adf52b0e8c4419097 100644 (file)
@@ -1022,7 +1022,7 @@ static struct parm_struct parm_table[] = {
        {"max open files", P_INTEGER, P_GLOBAL, &Globals.max_open_files, NULL, NULL, FLAG_ADVANCED}, 
        {"min print space", P_INTEGER, P_LOCAL, &sDefault.iMinPrintSpace, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT}, 
 
-       {"socket options", P_STRING, P_GLOBAL, user_socket_options, NULL, NULL, FLAG_ADVANCED}, 
+       {"socket options", P_GSTRING, P_GLOBAL, user_socket_options, NULL, NULL, FLAG_ADVANCED}, 
        {"strict allocate", P_BOOL, P_LOCAL, &sDefault.bStrictAllocate, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
        {"strict sync", P_BOOL, P_LOCAL, &sDefault.bStrictSync, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
        {"sync always", P_BOOL, P_LOCAL, &sDefault.bSyncAlways, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
@@ -2722,8 +2722,8 @@ void show_parameter_list(void)
        BOOL hadFlag;
        const char *section_names[] = { "local", "global", NULL};
        const char *type[] = { "P_BOOL", "P_BOOLREV", "P_CHAR", "P_INTEGER",
-               "P_OCTAL", "P_LIST", "P_STRING", "P_USTRING",
-               "P_ENUM", "P_SEP"};
+               "P_OCTAL", "P_LIST", "P_STRING", "P_USTRING", "P_GSTRING",
+               "P_UGSTRING", "P_ENUM", "P_SEP"};
        unsigned flags[] = { FLAG_BASIC, FLAG_SHARE, FLAG_PRINT, FLAG_GLOBAL,
                FLAG_WIZARD, FLAG_ADVANCED, FLAG_DEVELOPER, FLAG_DEPRECATED,
                FLAG_HIDE, FLAG_DOS_STRING};
@@ -3518,6 +3518,15 @@ BOOL lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue
                        strupper_m(*(char **)parm_ptr);
                        break;
 
+               case P_GSTRING:
+                       pstrcpy((char *)parm_ptr, pszParmValue);
+                       break;
+
+               case P_UGSTRING:
+                       pstrcpy((char *)parm_ptr, pszParmValue);
+                       strupper_m((char *)parm_ptr);
+                       break;
+
                case P_ENUM:
                        lp_set_enum_parm( &parm_table[parmnum], pszParmValue, (int*)parm_ptr );
                        break;
@@ -3596,6 +3605,13 @@ static void print_parameter(struct parm_struct *p, void *ptr, FILE * f)
                        }
                        break;
 
+               case P_GSTRING:
+               case P_UGSTRING:
+                       if ((char *)ptr) {
+                               fprintf(f, "%s", (char *)ptr);
+                       }
+                       break;
+
                case P_STRING:
                case P_USTRING:
                        if (*(char **)ptr) {
@@ -3629,6 +3645,16 @@ static BOOL equal_parameter(parm_type type, void *ptr1, void *ptr2)
                case P_LIST:
                        return str_list_compare(*(char ***)ptr1, *(char ***)ptr2);
 
+               case P_GSTRING:
+               case P_UGSTRING:
+               {
+                       char *p1 = (char *)ptr1, *p2 = (char *)ptr2;
+                       if (p1 && !*p1)
+                               p1 = NULL;
+                       if (p2 && !*p2)
+                               p2 = NULL;
+                       return (p1 == p2 || strequal(p1, p2));
+               }
                case P_STRING:
                case P_USTRING:
                {
@@ -3722,6 +3748,10 @@ static BOOL is_default(int i)
                case P_USTRING:
                        return strequal(parm_table[i].def.svalue,
                                        *(char **)parm_table[i].ptr);
+               case P_GSTRING:
+               case P_UGSTRING:
+                       return strequal(parm_table[i].def.svalue,
+                                       (char *)parm_table[i].ptr);
                case P_BOOL:
                case P_BOOLREV:
                        return parm_table[i].def.bvalue ==
@@ -4084,6 +4114,14 @@ static void lp_save_defaults(void)
                                        parm_table[i].def.svalue = NULL;
                                }
                                break;
+                       case P_GSTRING:
+                       case P_UGSTRING:
+                               if (parm_table[i].ptr) {
+                                       parm_table[i].def.svalue = SMB_STRDUP((char *)parm_table[i].ptr);
+                               } else {
+                                       parm_table[i].def.svalue = NULL;
+                               }
+                               break;
                        case P_BOOL:
                        case P_BOOLREV:
                                parm_table[i].def.bvalue =
index 3800a1db7fd343455d667a0ec9b0bdd0db87c4e6..cbf5ba8989199e1af9c75385d33d5e60d798dba3 100644 (file)
@@ -275,6 +275,16 @@ static void show_parameter(int snum, struct parm_struct *parm)
                        _("Set Default"), make_parm_name(parm->label),fix_backslash((char *)(parm->def.svalue)));
                break;
 
+       case P_GSTRING:
+       case P_UGSTRING:
+               push_utf8_allocate(&utf8_s1, (char *)ptr);
+               printf("<input type=text size=40 name=\"parm_%s\" value=\"%s\">",
+                      make_parm_name(parm->label), fix_quotes(utf8_s1));
+               SAFE_FREE(utf8_s1);
+               printf("<input type=button value=\"%s\" onClick=\"swatform.parm_%s.value=\'%s\'\">",
+                       _("Set Default"), make_parm_name(parm->label),fix_backslash((char *)(parm->def.svalue)));
+               break;
+
        case P_BOOL:
                printf("<select name=\"parm_%s\">",make_parm_name(parm->label)); 
                printf("<option %s>Yes", (*(BOOL *)ptr)?"selected":"");
@@ -368,6 +378,11 @@ static void show_parameters(int snum, int allparameters, unsigned int parm_filte
                                        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;