4 * Copyright (C) Gerald Carter <jerry@samba.org>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22 #include "system/filesys.h"
23 #include "winbindd/winbindd.h"
25 #include "idmap_hash.h"
28 XFILE
*lw_map_file
= NULL
;
30 /*********************************************************************
31 ********************************************************************/
33 static bool mapfile_open(void)
35 const char *mapfile_name
= NULL
;
37 /* If we have an open handle, just reset it */
40 return (x_tseek(lw_map_file
, 0, SEEK_SET
) == 0);
43 mapfile_name
= lp_parm_const_string(-1, "idmap_hash", "name_map", NULL
);
48 lw_map_file
= x_fopen(mapfile_name
, O_RDONLY
, 0);
50 DEBUG(0,("can't open idmap_hash:name_map (%s). Error %s\n",
51 mapfile_name
, strerror(errno
) ));
58 /*********************************************************************
59 ********************************************************************/
61 static bool mapfile_read_line(fstring key
, fstring value
)
70 p
= x_fgets(buffer
, sizeof(buffer
)-1, lw_map_file
);
75 /* Strip newlines and carriage returns */
77 len
= strlen_m(buffer
);
83 while ((buffer
[len
] == '\n') || (buffer
[len
] == '\r')) {
88 if ((p
= strchr_m(buffer
, '=')) == NULL
) {
89 DEBUG(0,("idmap_hash: Bad line in name_map (%s)\n", buffer
));
96 strlcpy(key
, buffer
, sizeof(fstring
));
97 strlcpy(value
, p
, sizeof(fstring
));
101 if (!trim_char(key
, ' ', ' '))
104 if (!trim_char(value
, ' ', ' '))
110 /*********************************************************************
111 ********************************************************************/
113 static bool mapfile_close(void)
117 ret
= x_fclose(lw_map_file
);
125 /*********************************************************************
126 ********************************************************************/
128 NTSTATUS
mapfile_lookup_key(TALLOC_CTX
*ctx
, const char *value
, char **key
)
130 fstring r_key
, r_value
;
131 NTSTATUS ret
= NT_STATUS_NOT_FOUND
;
134 return NT_STATUS_OBJECT_PATH_NOT_FOUND
;
136 while (mapfile_read_line(r_key
, r_value
))
138 if (strequal(r_value
, value
)) {
141 /* We're done once finishing this block */
142 *key
= talloc_strdup(ctx
, r_key
);
144 ret
= NT_STATUS_NO_MEMORY
;
155 /*********************************************************************
156 ********************************************************************/
158 NTSTATUS
mapfile_lookup_value(TALLOC_CTX
*ctx
, const char *key
, char **value
)
160 fstring r_key
, r_value
;
161 NTSTATUS ret
= NT_STATUS_NOT_FOUND
;
164 return NT_STATUS_OBJECT_PATH_NOT_FOUND
;
166 while (mapfile_read_line(r_key
, r_value
))
168 if (strequal(r_key
, key
)) {
171 /* We're done once finishing this block */
172 *value
= talloc_strdup(ctx
, r_value
);
174 ret
= NT_STATUS_NO_MEMORY
;