mirror of
https://gitlab.com/openconnect/ocserv.git
synced 2026-02-10 00:37:00 +08:00
Use a static buffer to read the password file entries from.
That allows easier overwrite of the parameters read.
This commit is contained in:
15
src/common.h
15
src/common.h
@@ -59,5 +59,20 @@ int recv_socket_msg(void *pool, int fd, uint8_t cmd,
|
||||
|
||||
const char* cmd_request_to_str(unsigned cmd);
|
||||
|
||||
inline static
|
||||
void safe_memset(void *data, int c, size_t size)
|
||||
{
|
||||
volatile unsigned volatile_zero = 0;
|
||||
volatile char *vdata = (volatile char*)data;
|
||||
|
||||
/* This is based on a nice trick for safe memset,
|
||||
* sent by David Jacobson in the openssl-dev mailing list.
|
||||
*/
|
||||
|
||||
do {
|
||||
memset(data, c, size);
|
||||
} while(vdata[volatile_zero] != c);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
10
src/plain.c
10
src/plain.c
@@ -47,8 +47,7 @@ static int read_auth_pass(struct plain_ctx_st *pctx)
|
||||
{
|
||||
unsigned groupname_size;
|
||||
FILE *fp;
|
||||
char *line = NULL;
|
||||
size_t len;
|
||||
char line[512];
|
||||
ssize_t ll;
|
||||
char *p, *sp;
|
||||
int ret;
|
||||
@@ -61,7 +60,10 @@ static int read_auth_pass(struct plain_ctx_st *pctx)
|
||||
return -1;
|
||||
}
|
||||
|
||||
while ((ll = getline(&line, &len, fp)) > 0) {
|
||||
line[sizeof(line)-1] = 0;
|
||||
while ((p=fgets(line, sizeof(line)-1, fp)) != NULL) {
|
||||
ll = strlen(p);
|
||||
|
||||
if (ll <= 4)
|
||||
continue;
|
||||
|
||||
@@ -100,8 +102,8 @@ static int read_auth_pass(struct plain_ctx_st *pctx)
|
||||
/* always succeed */
|
||||
ret = 0;
|
||||
exit:
|
||||
safe_memset(line, 0, sizeof(line));
|
||||
fclose(fp);
|
||||
free(line); /* no talloc_free, as it is provided by getline */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user