mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
converted a couple more functions to use a fd instead of a FILE*
added a new utility fn file_lines_slashcont() which is used to handle
files that treat a \ followed by a newline as a blank
(This used to be commit 384ecd9d66
)
This commit is contained in:
parent
19f946ba6f
commit
8d7e498db1
@ -383,6 +383,7 @@ char *file_load(char *fname, size_t *size);
|
||||
char **file_lines_load(char *fname, int *numlines);
|
||||
char **file_lines_pload(char *syscmd, int *numlines);
|
||||
void file_lines_free(char **lines);
|
||||
void file_lines_slashcont(char **lines);
|
||||
|
||||
/*The following definitions come from lib/util_sec.c */
|
||||
|
||||
|
@ -473,3 +473,26 @@ void file_lines_free(char **lines)
|
||||
free(lines);
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
take a lislist of lines and modify them to produce a list where \ continues
|
||||
a line
|
||||
****************************************************************************/
|
||||
void file_lines_slashcont(char **lines)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
for (i=0; lines[i];) {
|
||||
int len = strlen(lines[i]);
|
||||
if (lines[i][len-1] == '\\') {
|
||||
lines[i][len-1] = ' ';
|
||||
if (lines[i+1]) {
|
||||
char *p = &lines[i][len];
|
||||
while (p < lines[i+1]) *p++ = ' ';
|
||||
for (j = i+1; lines[j]; j++) lines[j] = lines[j+1];
|
||||
}
|
||||
} else {
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -71,9 +71,8 @@ void load_groupname_map(void)
|
||||
static BOOL initialized = False;
|
||||
char *groupname_map_file = lp_groupname_map();
|
||||
SMB_STRUCT_STAT st;
|
||||
FILE *fp;
|
||||
char *s;
|
||||
pstring buf;
|
||||
char **lines;
|
||||
int i;
|
||||
groupname_map_entry *new_ep;
|
||||
|
||||
if(!initialized) {
|
||||
@ -102,12 +101,13 @@ void load_groupname_map(void)
|
||||
* Load the file.
|
||||
*/
|
||||
|
||||
fp = sys_fopen(groupname_map_file,"r");
|
||||
if (!fp) {
|
||||
lines = file_lines_load(groupname_map_file,NULL);
|
||||
if (!lines) {
|
||||
DEBUG(0,("load_groupname_map: can't open groupname map %s. Error was %s\n",
|
||||
groupname_map_file, strerror(errno)));
|
||||
return;
|
||||
}
|
||||
file_lines_slashcont(lines);
|
||||
|
||||
/*
|
||||
* Throw away any previous list.
|
||||
@ -116,11 +116,12 @@ void load_groupname_map(void)
|
||||
|
||||
DEBUG(4,("load_groupname_map: Scanning groupname map %s\n",groupname_map_file));
|
||||
|
||||
while((s=fgets_slash(buf,sizeof(buf),fp))!=NULL) {
|
||||
for (i=0; lines[i]; i++) {
|
||||
pstring unixname;
|
||||
pstring windows_name;
|
||||
struct group *gptr;
|
||||
DOM_SID tmp_sid;
|
||||
char *s = lines[i];
|
||||
|
||||
DEBUG(10,("load_groupname_map: Read line |%s|\n", s));
|
||||
|
||||
@ -202,7 +203,7 @@ Error was %s.\n", unixname, strerror(errno) ));
|
||||
DEBUG(10,("load_groupname_map: Added %ld entries to groupname map.\n",
|
||||
ubi_slCount(&groupname_map_list)));
|
||||
|
||||
fclose(fp);
|
||||
file_lines_free(lines);
|
||||
}
|
||||
|
||||
/***********************************************************
|
||||
|
@ -828,15 +828,16 @@ allows this user from this machine
|
||||
****************************************************************************/
|
||||
static BOOL check_user_equiv(char *user, char *remote, char *equiv_file)
|
||||
{
|
||||
pstring buf;
|
||||
int plus_allowed = 1;
|
||||
char *file_host;
|
||||
char *file_user;
|
||||
FILE *fp = sys_fopen(equiv_file, "r");
|
||||
char **lines = file_lines_load(equiv_file, NULL);
|
||||
int i;
|
||||
|
||||
DEBUG(5, ("check_user_equiv %s %s %s\n", user, remote, equiv_file));
|
||||
if (! fp) return False;
|
||||
while(fgets(buf, sizeof(buf), fp))
|
||||
{
|
||||
if (! lines) return False;
|
||||
for (i=0; lines[i]; i++) {
|
||||
char *buf = lines[i];
|
||||
trim_string(buf," "," ");
|
||||
|
||||
if (buf[0] != '#' && buf[0] != '\n')
|
||||
@ -857,7 +858,7 @@ static BOOL check_user_equiv(char *user, char *remote, char *equiv_file)
|
||||
{
|
||||
/* a bare plus means everbody allowed */
|
||||
DEBUG(6, ("check_user_equiv everybody allowed\n"));
|
||||
fclose(fp);
|
||||
file_lines_free(lines);
|
||||
return True;
|
||||
}
|
||||
}
|
||||
@ -912,17 +913,17 @@ static BOOL check_user_equiv(char *user, char *remote, char *equiv_file)
|
||||
/* is it this user */
|
||||
if (file_user == 0 || strequal(user, file_user))
|
||||
{
|
||||
fclose(fp);
|
||||
DEBUG(5, ("check_user_equiv matched %s%s %s\n",
|
||||
(plus ? "+" : "-"), file_host,
|
||||
(file_user ? file_user : "")));
|
||||
file_lines_free(lines);
|
||||
return (plus ? True : False);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
file_lines_free(lines);
|
||||
return False;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user