diff options
Diffstat (limited to 'source3/param')
-rw-r--r-- | source3/param/loadparm.c | 154 |
1 files changed, 42 insertions, 112 deletions
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index a798444676..2fe616f709 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -278,7 +278,6 @@ typedef struct BOOL *copymap; BOOL bDeleteReadonly; BOOL bFakeOplocks; - BOOL bOnline; BOOL bDeleteVetoFiles; BOOL bDosFiletimes; char dummy[3]; /* for alignment */ @@ -363,7 +362,6 @@ static service sDefault = NULL, /* copymap */ False, /* bDeleteReadonly */ False, /* bFakeOplocks */ - True, /* bOnline */ False, /* bDeleteVetoFiles */ False, /* bDosFiletimes */ "" /* dummy */ @@ -596,7 +594,6 @@ struct parm_struct {"magic output", P_STRING, P_LOCAL, &sDefault.szMagicOutput, NULL}, {"mangled map", P_STRING, P_LOCAL, &sDefault.szMangledMap, NULL}, {"delete readonly", P_BOOL, P_LOCAL, &sDefault.bDeleteReadonly, NULL}, - {"online", P_BOOL, P_LOCAL, &sDefault.bOnline, NULL}, {"dos filetimes", P_BOOL, P_LOCAL, &sDefault.bDosFiletimes, NULL}, {NULL, P_BOOL, P_NONE, NULL, NULL} @@ -775,108 +772,57 @@ static void init_locals(void) } - -/* chomp() strips off trailing linefeed- and carriage-return-characters */ -char *chomp(char *s) -{ - if(!s || s == NULL) -return(NULL); - - while(strlen(s) > 0) { - int i = strlen(s) - 1; - - if(s [i] == '\n' || s [i] == '\r') - s [i] = '\0'; - else - break; - } - - return(s); -} - - -/* -read_string_external(fname): depending on the first character in fname either -reads the first line of a file or of the output of a command. If the second -character is a '$' execute standard-substitutions on the string to be returned. - -examples: read_string_external("</etc/HOSTNAME"); returns the hostname - read_string_external("|hostname"); returns the hostname too - read_string_external("<$/usr/local/samba/lib/your_hostname"); - returns the client-hostname, if - /.../your_hostname contains "%M" -*/ -char *read_string_external(char *fname) +/******************************************************************* a +convenience routine to grab string parameters into a rotating buffer, +and run standard_sub_basic on them. The buffers can be written to by +callers without affecting the source string. +********************************************************************/ +char *lp_string(char *s) { - char *ret = NULL; - pstring str; - FILE *in = NULL; - int mode = 0, do_subst = 0, offset = 1; - - *str = '\0'; - - switch(*fname) { - case '<': mode = 0; break; - case '|': mode = 1; break; - default: return(NULL); break; - } + static char *bufs[10]; + static int buflen[10]; + static int next = -1; + char *ret; + int i; + int len = s?strlen(s):0; - if(*(fname + 1) == '$') { - do_subst = 1; - offset = 2; - } + if (next == -1) { + /* initialisation */ + for (i=0;i<10;i++) { + bufs[i] = NULL; + buflen[i] = 0; + } + next = 0; + } - switch(mode) { - case 0: in = fopen(fname + offset, "r"); break; - case 1: in = popen(fname + offset, "r"); break; - } + len = MAX(len+100,sizeof(pstring)); /* the +100 is for some + substitution room */ - if(in != NULL) { - if(fgets(str, sizeof(str), in) == NULL) - *str = '\0'; - else - chomp(str); + if (buflen[next] != len) { + buflen[next] = len; + if (bufs[next]) free(bufs[next]); + bufs[next] = (char *)malloc(len); + if (!bufs[next]) { + DEBUG(0,("out of memory in lp_string()")); + exit(1); + } + } - switch(mode) { - case 0: fclose(in); break; - case 1: pclose(in); break; - } - } + ret = &bufs[next][0]; + next = (next+1)%10; - if((ret = string_buffer(strlen(str)))) - { - StrCpy(ret, str); + if (!s) + *ret = 0; + else + StrCpy(ret,s); - if(do_subst) - { - standard_sub_basic(ret); - } - } + trim_string(ret, "\"", "\""); - return(ret); + standard_sub_basic(ret); + return(ret); } -char *lp_string(char *s) -{ - int len = s?strlen(s):0; - char *ret = NULL; - - if (!s) - *ret = 0; - else { - ret = string_buffer(len); - StrCpy(ret,s); - - standard_sub_basic(ret); - - if(*ret == '<' || *ret == '|') - ret = read_string_external(ret); - } - - return(ret); -} - /* In this section all the functions that are used to access the parameters from the rest of the program are defined @@ -1051,7 +997,6 @@ FN_LOCAL_BOOL(lp_syncalways,bSyncAlways) FN_LOCAL_BOOL(lp_map_system,bMap_system) FN_LOCAL_BOOL(lp_delete_readonly,bDeleteReadonly) FN_LOCAL_BOOL(lp_fake_oplocks,bFakeOplocks) -FN_LOCAL_BOOL(lp_online,bOnline) FN_LOCAL_BOOL(lp_recursive_veto_delete,bDeleteVetoFiles) FN_LOCAL_BOOL(lp_dos_filetimes,bDosFiletimes) @@ -2323,24 +2268,9 @@ int lp_servicenumber(char *pszServiceName) ******************************************************************/ char *volume_label(int snum) { - static char lbl [13]; char *ret = lp_volume(snum); - int i = 0, j = 0; - - if (!*ret) - ret = lp_servicename(snum); - - lbl [0] = '\0'; - - while(*(ret + i) && j < sizeof(lbl) - 1) { - if(i == 8) - lbl [j++] = '.'; - - lbl [j++] = *(ret + i++); - lbl [j] = '\0'; - } - - return(lbl); + if (!*ret) return(lp_servicename(snum)); + return(ret); } #if 0 |